Compare commits
29 Commits
Author | SHA1 | Date | |
---|---|---|---|
6ed21e1ce0 | |||
9c51c87d8c | |||
db2245d60b | |||
f26cc3ac23 | |||
02c5b4b947 | |||
df57829ea1 | |||
da96408098 | |||
4b2e0247af | |||
2c617e5a3a | |||
4ff7e84c51 | |||
9f76b6e4a2 | |||
0ac0f7e85b | |||
73b00ff1a7 | |||
a52597ac5b | |||
9a2597f80b | |||
e1ed4b25e1 | |||
c70b18764b | |||
4398516520 | |||
220514d10e | |||
18312d9ccd | |||
234b1441e4 | |||
e909db5848 | |||
702338bc7d | |||
7c9dbc66d9 | |||
0d031dc20f | |||
b476e851b7 | |||
a27be6a540 | |||
4b6a57fabe | |||
92758890bb |
30
NEWS
30
NEWS
@ -1,16 +1,30 @@
|
||||
3.29.1
|
||||
3.28.3
|
||||
======
|
||||
* Support icons in app-menu [Florian; #760985]
|
||||
* Misc. bug fixes [Marco, Florian, Lubomir; #792687, #221, !63]
|
||||
* 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:
|
||||
Piotr Drąg, Takao Fujiwara, Christian Kellner, Florian Müllner,
|
||||
Mario Sanchez Prada, Lubomir Rintel, Didier Roche, Marco Trevisan (Treviño),
|
||||
verdre
|
||||
Carlos Garnacho, Florian Müllner, Mario Sanchez Prada, Joe Rabinoff,
|
||||
Didier Roche, Marco Trevisan (Treviño), Daniel van Vugt
|
||||
|
||||
Translators:
|
||||
gogo [hr], Stas Solovey [ru], Matej Urbančič [sl], Daniel Șerbănescu [ro],
|
||||
Fabio Tomat [fur], Marek Cernocky [cs], Daniel Mustieles [es]
|
||||
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
|
||||
======
|
||||
|
@ -1788,19 +1788,20 @@ StScrollBar {
|
||||
.login-dialog-user-list-view { -st-vfade-offset: 1em; }
|
||||
.login-dialog-user-list {
|
||||
spacing: 12px;
|
||||
padding: .2em;
|
||||
width: 23em;
|
||||
&:expanded .login-dialog-user-list-item:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
|
||||
&:expanded .login-dialog-user-list-item:logged-in { border-right: 2px solid $selected_bg_color; }
|
||||
}
|
||||
.login-dialog-user-list-item {
|
||||
border-radius: 5px;
|
||||
padding: 6px;
|
||||
padding: .2em;
|
||||
color: darken($osd_fg_color,30%);
|
||||
&:ltr .user-widget { padding-right: 1em; }
|
||||
&:rtl .user-widget { padding-left: 1em; }
|
||||
&:ltr { padding-right: 1em; }
|
||||
&:rtl { padding-left: 1em; }
|
||||
.login-dialog-timed-login-indicator {
|
||||
height: 2px;
|
||||
margin-top: 6px;
|
||||
margin: 2px 0 0 0;
|
||||
background-color: $osd_fg_color;
|
||||
}
|
||||
&:focus .login-dialog-timed-login-indicator { background-color: $selected_fg_color; }
|
||||
@ -1815,8 +1816,8 @@ StScrollBar {
|
||||
padding-left: 15px;
|
||||
}
|
||||
.user-widget-label {
|
||||
&:ltr { padding-left: 14px; }
|
||||
&:rtl { padding-right: 14px; }
|
||||
&:ltr { padding-left: 18px; }
|
||||
&:rtl { padding-right: 18px; }
|
||||
}
|
||||
|
||||
.login-dialog-prompt-layout {
|
||||
|
@ -25,6 +25,7 @@ const GLib = imports.gi.GLib;
|
||||
const GObject = imports.gi.GObject;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Pango = imports.gi.Pango;
|
||||
const Shell = imports.gi.Shell;
|
||||
@ -85,8 +86,7 @@ var UserListItem = new Lang.Class({
|
||||
GObject.BindingFlags.SYNC_CREATE);
|
||||
|
||||
this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator',
|
||||
scale_x: 0,
|
||||
visible: false });
|
||||
scale_x: 0 });
|
||||
layout.add(this._timedLoginIndicator);
|
||||
|
||||
this.actor.connect('clicked', this._onClicked.bind(this));
|
||||
@ -126,8 +126,6 @@ var UserListItem = new Lang.Class({
|
||||
|
||||
this.hideTimedLoginIndicator();
|
||||
|
||||
this._timedLoginIndicator.visible = true;
|
||||
|
||||
let startTime = GLib.get_monotonic_time();
|
||||
|
||||
this._timedLoginTimeoutId = GLib.timeout_add (GLib.PRIORITY_DEFAULT, 33,
|
||||
@ -154,8 +152,6 @@ var UserListItem = new Lang.Class({
|
||||
GLib.source_remove(this._timedLoginTimeoutId);
|
||||
this._timedLoginTimeoutId = 0;
|
||||
}
|
||||
|
||||
this._timedLoginIndicator.visible = false;
|
||||
this._timedLoginIndicator.scale_x = 0.;
|
||||
}
|
||||
});
|
||||
@ -995,81 +991,59 @@ var LoginDialog = new Lang.Class({
|
||||
return hold;
|
||||
},
|
||||
|
||||
_showTimedLoginAnimation() {
|
||||
this._timedLoginItem.actor.grab_key_focus();
|
||||
return this._timedLoginItem.showTimedLoginIndicator(this._timedLoginAnimationTime);
|
||||
},
|
||||
|
||||
_blockTimedLoginUntilIdle() {
|
||||
// This blocks timed login from starting until a few
|
||||
// seconds after the user stops interacting with the
|
||||
// login screen.
|
||||
//
|
||||
// We skip this step if the timed login delay is very
|
||||
// short.
|
||||
if ((this._timedLoginDelay - _TIMED_LOGIN_IDLE_THRESHOLD) <= 0)
|
||||
return null;
|
||||
|
||||
let hold = new Batch.Hold();
|
||||
|
||||
this._timedLoginIdleTimeOutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, _TIMED_LOGIN_IDLE_THRESHOLD,
|
||||
this._timedLoginIdleTimeOutId = Mainloop.timeout_add_seconds(_TIMED_LOGIN_IDLE_THRESHOLD,
|
||||
() => {
|
||||
this._timedLoginIdleTimeOutId = 0;
|
||||
this._timedLoginAnimationTime -= _TIMED_LOGIN_IDLE_THRESHOLD;
|
||||
hold.release();
|
||||
return GLib.SOURCE_REMOVE;
|
||||
});
|
||||
GLib.Source.set_name_by_id(this._timedLoginIdleTimeOutId, '[gnome-shell] this._timedLoginIdleTimeOutId');
|
||||
GLib.Source.set_name_by_id(this._timedLoginIdleTimeOutId, '[gnome-shell] this._timedLoginAnimationTime');
|
||||
return hold;
|
||||
},
|
||||
|
||||
_startTimedLogin(userName, delay) {
|
||||
let firstRun = true;
|
||||
|
||||
// Cancel execution of old batch
|
||||
if (this._timedLoginBatch) {
|
||||
this._timedLoginBatch.cancel();
|
||||
this._timedLoginBatch = null;
|
||||
firstRun = false;
|
||||
}
|
||||
|
||||
// Reset previous idle-timeout
|
||||
if (this._timedLoginIdleTimeOutId) {
|
||||
GLib.source_remove(this._timedLoginIdleTimeOutId);
|
||||
this._timedLoginIdleTimeOutId = 0;
|
||||
}
|
||||
|
||||
let loginItem = null;
|
||||
let animationTime;
|
||||
this._timedLoginItem = null;
|
||||
this._timedLoginDelay = delay;
|
||||
this._timedLoginAnimationTime = delay;
|
||||
|
||||
let tasks = [() => this._waitForItemForUser(userName),
|
||||
|
||||
() => {
|
||||
loginItem = this._userList.getItemFromUserName(userName);
|
||||
|
||||
// If there is an animation running on the item, reset it.
|
||||
loginItem.hideTimedLoginIndicator();
|
||||
this._timedLoginItem = this._userList.getItemFromUserName(userName);
|
||||
},
|
||||
|
||||
() => {
|
||||
// If we're just starting out, start on the right item.
|
||||
// If we're just starting out, start on the right
|
||||
// item.
|
||||
if (!this._userManager.is_loaded) {
|
||||
this._userList.jumpToItem(loginItem);
|
||||
this._userList.jumpToItem(this._timedLoginItem);
|
||||
}
|
||||
},
|
||||
|
||||
this._blockTimedLoginUntilIdle,
|
||||
|
||||
() => {
|
||||
// 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._userList.scrollToItem(this._timedLoginItem);
|
||||
},
|
||||
|
||||
() => {
|
||||
// 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._showTimedLoginAnimation,
|
||||
|
||||
() => {
|
||||
this._timedLoginBatch = null;
|
||||
@ -1081,17 +1055,37 @@ var LoginDialog = new Lang.Class({
|
||||
return this._timedLoginBatch.run();
|
||||
},
|
||||
|
||||
_onTimedLoginRequested(client, userName, seconds) {
|
||||
if (this._timedLoginBatch)
|
||||
return;
|
||||
_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) {
|
||||
this._startTimedLogin(userName, seconds);
|
||||
|
||||
// Restart timed login on user interaction
|
||||
global.stage.connect('captured-event', (actor, event) => {
|
||||
if (this._timedLoginDelay == undefined)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if (event.type() == Clutter.EventType.KEY_PRESS ||
|
||||
event.type() == Clutter.EventType.BUTTON_PRESS) {
|
||||
this._startTimedLogin(userName, seconds);
|
||||
if (this._timedLoginBatch) {
|
||||
this._timedLoginBatch.cancel();
|
||||
this._timedLoginBatch = null;
|
||||
}
|
||||
} else if (event.type() == Clutter.EventType.KEY_RELEASE ||
|
||||
event.type() == Clutter.EventType.BUTTON_RELEASE) {
|
||||
this._resetTimedLogin();
|
||||
}
|
||||
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
@ -115,6 +115,11 @@ var IBusManager = new Lang.Class({
|
||||
object_path: IBus.PATH_PANEL });
|
||||
this._candidatePopup.setPanelService(this._panelService);
|
||||
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 {
|
||||
// IBus versions older than 1.5.10 have a bug which
|
||||
// causes spurious set-content-type emissions when
|
||||
|
@ -136,7 +136,8 @@ function run() {
|
||||
global.frame_finish_timestamp = true;
|
||||
|
||||
for (let k = 0; k < 5; k++)
|
||||
yield Scripting.createTestWindow({ maximized: true });
|
||||
yield Scripting.createTestWindow(640, 480,
|
||||
{ maximized: true });
|
||||
yield Scripting.waitTestWindows();
|
||||
|
||||
yield Scripting.sleep(1000);
|
||||
@ -157,7 +158,8 @@ function run() {
|
||||
yield Scripting.destroyTestWindows();
|
||||
Main.overview.hide();
|
||||
|
||||
yield Scripting.createTestWindow({ maximized: true,
|
||||
yield Scripting.createTestWindow(640, 480,
|
||||
{ maximized: true,
|
||||
redraws: true});
|
||||
yield Scripting.waitTestWindows();
|
||||
|
||||
|
@ -821,6 +821,8 @@ var EventsSection = new Lang.Class({
|
||||
this._desktopSettings.connect('changed', this._reloadEvents.bind(this));
|
||||
this._eventSource = new EmptyEventSource();
|
||||
|
||||
this._messageById = new Map();
|
||||
|
||||
this.parent();
|
||||
|
||||
this._title = new St.Button({ style_class: 'events-section-title',
|
||||
@ -875,20 +877,32 @@ var EventsSection = new Lang.Class({
|
||||
|
||||
this._reloading = true;
|
||||
|
||||
this._list.destroy_all_children();
|
||||
|
||||
let periodBegin = _getBeginningOfDay(this._date);
|
||||
let periodEnd = _getEndOfDay(this._date);
|
||||
let events = this._eventSource.getEvents(periodBegin, periodEnd);
|
||||
|
||||
let ids = events.map(e => e.id);
|
||||
this._messageById.forEach((message, id) => {
|
||||
if (ids.includes(id))
|
||||
return;
|
||||
this._messageById.delete(id);
|
||||
this.removeMessage(message);
|
||||
});
|
||||
|
||||
for (let i = 0; i < events.length; i++) {
|
||||
let event = events[i];
|
||||
|
||||
let message = new EventMessage(event, this._date);
|
||||
message.connect('close', () => {
|
||||
this._ignoreEvent(event);
|
||||
});
|
||||
this.addMessage(message, false);
|
||||
let message = this._messageById.get(event.id);
|
||||
if (!message) {
|
||||
message = new EventMessage(event, this._date);
|
||||
message.connect('close', () => {
|
||||
this._ignoreEvent(event);
|
||||
});
|
||||
this._messageById.set(event.id, message);
|
||||
this.addMessage(message, false);
|
||||
} else {
|
||||
this.moveMessage(message, i, false);
|
||||
}
|
||||
}
|
||||
|
||||
this._reloading = false;
|
||||
|
@ -604,17 +604,12 @@ var NetworkAgent = new Lang.Class({
|
||||
|
||||
this._native.connect('new-request', this._newRequest.bind(this));
|
||||
this._native.connect('cancel-request', this._cancelRequest.bind(this));
|
||||
|
||||
this._initialized = false;
|
||||
this._native.init_async(GLib.PRIORITY_DEFAULT, null, (o, res) => {
|
||||
try {
|
||||
this._native.init_finish(res);
|
||||
this._initialized = true;
|
||||
} catch(e) {
|
||||
this._native = null;
|
||||
logError(e, 'error initializing the NetworkManager Agent');
|
||||
}
|
||||
});
|
||||
try {
|
||||
this._native.init(null);
|
||||
} catch(e) {
|
||||
this._native = null;
|
||||
logError(e, 'error initializing the NetworkManager Agent');
|
||||
}
|
||||
},
|
||||
|
||||
enable() {
|
||||
@ -622,7 +617,7 @@ var NetworkAgent = new Lang.Class({
|
||||
return;
|
||||
|
||||
this._native.auto_register = true;
|
||||
if (this._initialized && !this._native.registered)
|
||||
if (!this._native.registered)
|
||||
this._native.register_async(null, null);
|
||||
},
|
||||
|
||||
@ -645,7 +640,7 @@ var NetworkAgent = new Lang.Class({
|
||||
return;
|
||||
|
||||
this._native.auto_register = false;
|
||||
if (this._initialized && this._native.registered)
|
||||
if (this._native.registered)
|
||||
this._native.unregister_async(null, null);
|
||||
},
|
||||
|
||||
|
@ -166,7 +166,7 @@ var CandidatePopup = new Lang.Class({
|
||||
this._panelService.cursor_down();
|
||||
});
|
||||
|
||||
this._candidateArea.connect('candidate-clicked', (area, index, button, state) => {
|
||||
this._candidateArea.connect('candidate-clicked', () => {
|
||||
this._panelService.candidate_clicked(index, button, state);
|
||||
});
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const FocusCaretTracker = imports.ui.focusCaretTracker;
|
||||
const Atspi = imports.gi.Atspi;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gdk = imports.gi.Gdk;
|
||||
@ -13,6 +12,7 @@ const Signals = imports.signals;
|
||||
const St = imports.gi.St;
|
||||
const InputSourceManager = imports.ui.status.keyboard;
|
||||
|
||||
const IBusManager = imports.misc.ibusManager;
|
||||
const BoxPointer = imports.ui.boxpointer;
|
||||
const Layout = imports.ui.layout;
|
||||
const Main = imports.ui.main;
|
||||
@ -261,6 +261,7 @@ var Key = new Lang.Class({
|
||||
this._extended_keyboard = null;
|
||||
this._pressTimeoutId = 0;
|
||||
this._capturedPress = false;
|
||||
|
||||
this._capturedEventId = 0;
|
||||
this._unmapId = 0;
|
||||
this._longPress = false;
|
||||
@ -484,6 +485,71 @@ 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) {
|
||||
let frameRect = this._currentWindow.get_frame_rect();
|
||||
rect.x -= frameRect.x;
|
||||
rect.y -= frameRect.y;
|
||||
|
||||
this._rect = rect;
|
||||
this.emit('position-changed');
|
||||
},
|
||||
|
||||
getCurrentRect() {
|
||||
let frameRect = this._currentWindow.get_frame_rect();
|
||||
let rect = { x: this._rect.x + frameRect.x, y: this._rect.y + frameRect.y, width: this._rect.width, height: this._rect.height };
|
||||
|
||||
return rect;
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(FocusTracker.prototype);
|
||||
|
||||
var Keyboard = new Lang.Class({
|
||||
Name: 'Keyboard',
|
||||
|
||||
@ -491,15 +557,10 @@ var Keyboard = new Lang.Class({
|
||||
this.actor = null;
|
||||
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._currentAccessible = null;
|
||||
this._caretTrackingEnabled = false;
|
||||
this._updateCaretPositionId = 0;
|
||||
this._currentFocusWindow = null;
|
||||
this._originalWindowY = null;
|
||||
this._animFocusedWindow = null;
|
||||
this._delayedAnimFocusWindow = null;
|
||||
|
||||
this._enableKeyboard = false; // a11y settings value
|
||||
this._enabled = false; // enabled state (by setting or device type)
|
||||
@ -510,6 +571,14 @@ var Keyboard = new Lang.Class({
|
||||
this._lastDeviceId = 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',
|
||||
(backend, deviceId) => {
|
||||
let manager = Clutter.DeviceManager.get_default();
|
||||
@ -532,102 +601,15 @@ var Keyboard = new Lang.Class({
|
||||
this._keyboardRestingId = 0;
|
||||
|
||||
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() {
|
||||
return this._keyboardVisible;
|
||||
},
|
||||
|
||||
_setCaretTrackerEnabled(enabled) {
|
||||
if (this._caretTrackingEnabled == enabled)
|
||||
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);
|
||||
_onFocusPositionChanged(focusTracker) {
|
||||
let rect = focusTracker.getCurrentRect();
|
||||
this.setCursorLocation(focusTracker.currentWindow, rect.x, rect.y, rect.width, rect.height);
|
||||
},
|
||||
|
||||
_lastDeviceIsTouchscreen() {
|
||||
@ -650,8 +632,6 @@ var Keyboard = new Lang.Class({
|
||||
if (!this._enabled && !this._keyboardController)
|
||||
return;
|
||||
|
||||
this._setCaretTrackerEnabled(this._enabled);
|
||||
|
||||
if (this._enabled && !this._keyboardController)
|
||||
this._setupKeyboard();
|
||||
else if (!this._enabled)
|
||||
@ -1027,11 +1007,14 @@ var Keyboard = new Lang.Class({
|
||||
if (!this._keyboardRequested)
|
||||
return;
|
||||
|
||||
if (this._currentAccessible)
|
||||
this._updateCaretPosition(this._currentAccessible);
|
||||
Main.layoutManager.keyboardIndex = monitor;
|
||||
this._relayout();
|
||||
Main.layoutManager.showKeyboard();
|
||||
|
||||
if (this._delayedAnimFocusWindow) {
|
||||
this._setAnimationWindow(this._delayedAnimFocusWindow);
|
||||
this._delayedAnimFocusWindow = null;
|
||||
}
|
||||
},
|
||||
|
||||
hide() {
|
||||
@ -1102,8 +1085,9 @@ var Keyboard = new Lang.Class({
|
||||
window.move_frame(true, frameRect.x, frameRect.y);
|
||||
},
|
||||
|
||||
_animateWindow(window, show, deltaY) {
|
||||
_animateWindow(window, show) {
|
||||
let windowActor = window.get_compositor_private();
|
||||
let deltaY = Main.layoutManager.keyboardBox.height;
|
||||
if (!windowActor)
|
||||
return;
|
||||
|
||||
@ -1124,35 +1108,39 @@ var Keyboard = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
setCursorLocation(window, x, y , w, h) {
|
||||
if (window == this._oskFocusWindow)
|
||||
_setAnimationWindow(window) {
|
||||
if (this._animFocusedWindow == window)
|
||||
return;
|
||||
|
||||
if (this._oskFocusWindow) {
|
||||
let display = global.screen.get_display();
|
||||
if (this._animFocusedWindow)
|
||||
this._animateWindow(this._animFocusedWindow, false);
|
||||
if (window)
|
||||
this._animateWindow(window, true);
|
||||
|
||||
if (display.get_grab_op() == Meta.GrabOp.NONE ||
|
||||
display.get_focus_window() != this._oskFocusWindow)
|
||||
this._animateWindow(this._oskFocusWindow, false, this._oskFocusWindowDelta);
|
||||
this._animFocusedWindow = window;
|
||||
},
|
||||
|
||||
this._oskFocusWindow = null;
|
||||
this._oskFocusWindowDelta = null;
|
||||
}
|
||||
setCursorLocation(window, x, y , w, h) {
|
||||
let monitor = Main.layoutManager.keyboardMonitor;
|
||||
|
||||
if (window) {
|
||||
let monitor = Main.layoutManager.keyboardMonitor;
|
||||
if (window && monitor) {
|
||||
let keyboardHeight = Main.layoutManager.keyboardBox.height;
|
||||
let frameRect = window.get_frame_rect();
|
||||
let windowActor = window.get_compositor_private();
|
||||
let delta = 0;
|
||||
let focusObscured = false;
|
||||
|
||||
if (frameRect.y + y + h >= monitor.height - keyboardHeight)
|
||||
delta = keyboardHeight;
|
||||
|
||||
this._animateWindow(window, true, delta);
|
||||
this._oskFocusWindow = window;
|
||||
this._oskFocusWindowDelta = delta;
|
||||
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;
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -19,7 +19,6 @@ const MagnifierDBus = imports.ui.magnifierDBus;
|
||||
const Params = imports.misc.params;
|
||||
const PointerWatcher = imports.ui.pointerWatcher;
|
||||
|
||||
var MOUSE_POLL_FREQUENCY = 50;
|
||||
var CROSSHAIRS_CLIP_SIZE = [100, 100];
|
||||
var NO_CHANGE = 0.0;
|
||||
|
||||
@ -152,8 +151,10 @@ var Magnifier = new Lang.Class({
|
||||
* Turn on mouse tracking, if not already doing so.
|
||||
*/
|
||||
startTrackingMouse() {
|
||||
if (!this._pointerWatch)
|
||||
this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(MOUSE_POLL_FREQUENCY, this.scrollToMousePos.bind(this));
|
||||
if (!this._pointerWatch) {
|
||||
let interval = 1000 / Clutter.get_default_frame_rate();
|
||||
this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(interval, this.scrollToMousePos.bind(this));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -119,9 +119,6 @@ var RemoteMenuItemMapper = new Lang.Class({
|
||||
this._trackerItem = trackerItem;
|
||||
|
||||
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.menuItem.actor.add_child(this._label);
|
||||
this.menuItem.actor.label_actor = this._label;
|
||||
@ -132,13 +129,11 @@ var RemoteMenuItemMapper = new Lang.Class({
|
||||
|
||||
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::sensitive', this._updateSensitivity.bind(this));
|
||||
this._trackerItem.connect('notify::role', this._updateRole.bind(this));
|
||||
this._trackerItem.connect('notify::toggled', this._updateDecoration.bind(this));
|
||||
|
||||
this._updateIcon();
|
||||
this._updateLabel();
|
||||
this._updateSensitivity();
|
||||
this._updateRole();
|
||||
@ -148,11 +143,6 @@ var RemoteMenuItemMapper = new Lang.Class({
|
||||
});
|
||||
},
|
||||
|
||||
_updateIcon() {
|
||||
this._icon.gicon = this._trackerItem.icon;
|
||||
this._icon.visible = (this._icon.gicon != null);
|
||||
},
|
||||
|
||||
_updateLabel() {
|
||||
this._label.text = stripMnemonics(this._trackerItem.label);
|
||||
},
|
||||
|
@ -133,7 +133,7 @@ function _callRemote(obj, method, ...args) {
|
||||
* because of the normal X asynchronous mapping process, to actually wait
|
||||
* until the window has been mapped and exposed, use waitTestWindows().
|
||||
*/
|
||||
function createTestWindow(params) {
|
||||
function createTestWindow(width, height, params) {
|
||||
params = Params.parse(params, { width: 640,
|
||||
height: 480,
|
||||
alpha: false,
|
||||
|
@ -1944,6 +1944,7 @@ var NMApplet = new Lang.Class({
|
||||
this.indicators.visible = this._client.nm_running;
|
||||
this.menu.actor.visible = this._client.networking_enabled;
|
||||
|
||||
this._updateIcon();
|
||||
this._syncConnectivity();
|
||||
},
|
||||
|
||||
|
@ -56,11 +56,12 @@ const BoltDeviceProxy = Gio.DBusProxy.makeProxyWrapper(BoltDeviceInterface);
|
||||
|
||||
var Status = {
|
||||
DISCONNECTED: 'disconnected',
|
||||
CONNECTING: 'connecting',
|
||||
CONNECTED: 'connected',
|
||||
AUTHORIZING: 'authorizing',
|
||||
AUTH_ERROR: 'auth-error',
|
||||
AUTHORIZED: 'authorized'
|
||||
AUTHORIZED: 'authorized',
|
||||
AUTHORIZED_SECURE: 'authorized-secure',
|
||||
AUTHORIZED_NEWKEY: 'authorized-newkey'
|
||||
};
|
||||
|
||||
var Policy = {
|
||||
@ -69,7 +70,7 @@ var Policy = {
|
||||
AUTO: 'auto'
|
||||
};
|
||||
|
||||
var AuthCtrl = {
|
||||
var AuthFlags = {
|
||||
NONE: 'none',
|
||||
};
|
||||
|
||||
@ -140,10 +141,9 @@ var Client = new Lang.Class({
|
||||
},
|
||||
|
||||
enrollDevice(id, policy, callback) {
|
||||
this._proxy.EnrollDeviceRemote(id, policy, AuthCtrl.NONE,
|
||||
this._proxy.EnrollDeviceRemote(id, policy, AuthFlags.NONE,
|
||||
(res, error) => {
|
||||
if (error) {
|
||||
Gio.DBusError.strip_remote_error(error);
|
||||
callback(null, error);
|
||||
return;
|
||||
}
|
||||
@ -228,7 +228,7 @@ var AuthRobot = new Lang.Class({
|
||||
|
||||
_onEnrollDone(device, error) {
|
||||
if (error)
|
||||
this.emit('enroll-failed', device, error);
|
||||
this.emit('enroll-failed', error, device);
|
||||
|
||||
/* TODO: scan the list of devices to be authorized for children
|
||||
* of this device and remove them (and their children and
|
||||
@ -354,7 +354,7 @@ var Indicator = new Lang.Class({
|
||||
|
||||
_onEnrollFailed(obj, device, 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);
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ const EdgeDragAction = imports.ui.edgeDragAction;
|
||||
const CloseDialog = imports.ui.closeDialog;
|
||||
const SwitchMonitor = imports.ui.switchMonitor;
|
||||
|
||||
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
||||
var SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
||||
var MINIMIZE_WINDOW_ANIMATION_TIME = 0.2;
|
||||
var SHOW_WINDOW_ANIMATION_TIME = 0.15;
|
||||
var DIALOG_SHOW_WINDOW_ANIMATION_TIME = 0.1;
|
||||
|
@ -1431,34 +1431,26 @@ var Workspace = new Lang.Class({
|
||||
_doRemoveWindow(metaWin) {
|
||||
let win = metaWin.get_compositor_private();
|
||||
|
||||
// find the position of the window in our list
|
||||
let index = this._lookupIndex (metaWin);
|
||||
let clone = this._removeWindowClone(metaWin);
|
||||
|
||||
if (index == -1)
|
||||
return;
|
||||
|
||||
let clone = this._windows[index];
|
||||
|
||||
this._windows.splice(index, 1);
|
||||
this._windowOverlays.splice(index, 1);
|
||||
|
||||
// If metaWin.get_compositor_private() returned non-NULL, that
|
||||
// means the window still exists (and is just being moved to
|
||||
// another workspace or something), so set its overviewHint
|
||||
// accordingly. (If it returned NULL, then the window is being
|
||||
// destroyed; we'd like to animate this, but it's too late at
|
||||
// this point.)
|
||||
if (win) {
|
||||
let [stageX, stageY] = clone.actor.get_transformed_position();
|
||||
let [stageWidth, stageHeight] = clone.actor.get_transformed_size();
|
||||
win._overviewHint = {
|
||||
x: stageX,
|
||||
y: stageY,
|
||||
scale: stageWidth / clone.actor.width
|
||||
};
|
||||
if (clone) {
|
||||
// If metaWin.get_compositor_private() returned non-NULL, that
|
||||
// means the window still exists (and is just being moved to
|
||||
// another workspace or something), so set its overviewHint
|
||||
// accordingly. (If it returned NULL, then the window is being
|
||||
// destroyed; we'd like to animate this, but it's too late at
|
||||
// this point.)
|
||||
if (win) {
|
||||
let [stageX, stageY] = clone.actor.get_transformed_position();
|
||||
let [stageWidth, stageHeight] = clone.actor.get_transformed_size();
|
||||
win._overviewHint = {
|
||||
x: stageX,
|
||||
y: stageY,
|
||||
scale: stageWidth / clone.actor.width
|
||||
};
|
||||
}
|
||||
clone.destroy();
|
||||
}
|
||||
clone.destroy();
|
||||
|
||||
|
||||
// We need to reposition the windows; to avoid shuffling windows
|
||||
// around while the user is interacting with the workspace, we delay
|
||||
@ -1848,6 +1840,9 @@ var Workspace = new Lang.Class({
|
||||
clone.connect('size-changed', () => {
|
||||
this._recalculateWindowPositions(WindowPositionFlags.NONE);
|
||||
});
|
||||
clone.actor.connect('destroy', () => {
|
||||
this._removeWindowClone(clone.metaWindow);
|
||||
});
|
||||
|
||||
this.actor.add_actor(clone.actor);
|
||||
|
||||
@ -1869,6 +1864,17 @@ var Workspace = new Lang.Class({
|
||||
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) {
|
||||
for (let i = 0; i < this._windowOverlays.length; i++) {
|
||||
let overlay = this._windowOverlays[i];
|
||||
|
@ -31,7 +31,7 @@ var WORKSPACE_CUT_SIZE = 10;
|
||||
|
||||
var WORKSPACE_KEEP_ALIVE_TIME = 100;
|
||||
|
||||
const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
|
||||
var OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
|
||||
|
||||
/* A layout manager that requests size only for primary_actor, but then allocates
|
||||
all using a fixed layout */
|
||||
@ -241,7 +241,7 @@ var WindowClone = new Lang.Class({
|
||||
Signals.addSignalMethods(WindowClone.prototype);
|
||||
|
||||
|
||||
const ThumbnailState = {
|
||||
var ThumbnailState = {
|
||||
NEW : 0,
|
||||
ANIMATING_IN : 1,
|
||||
NORMAL: 2,
|
||||
@ -372,18 +372,9 @@ var WorkspaceThumbnail = new Lang.Class({
|
||||
},
|
||||
|
||||
_doRemoveWindow(metaWin) {
|
||||
let win = metaWin.get_compositor_private();
|
||||
|
||||
// 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();
|
||||
let clone = this._removeWindowClone(metaWin);
|
||||
if (clone)
|
||||
clone.destroy();
|
||||
},
|
||||
|
||||
_doAddWindow(metaWin) {
|
||||
@ -535,6 +526,9 @@ var WorkspaceThumbnail = new Lang.Class({
|
||||
clone.connect('drag-end', () => {
|
||||
Main.overview.endWindowDrag(clone.metaWindow);
|
||||
});
|
||||
clone.actor.connect('destroy', () => {
|
||||
this._removeWindowClone(clone.metaWindow);
|
||||
});
|
||||
this._contents.add_actor(clone.actor);
|
||||
|
||||
if (this._windows.length == 0)
|
||||
@ -547,6 +541,16 @@ var WorkspaceThumbnail = new Lang.Class({
|
||||
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) {
|
||||
if (this.state > ThumbnailState.NORMAL)
|
||||
return;
|
||||
@ -884,9 +888,6 @@ var ThumbnailsBox = new Lang.Class({
|
||||
},
|
||||
|
||||
_destroyThumbnails() {
|
||||
if (this._thumbnails.length == 0)
|
||||
return;
|
||||
|
||||
if (this._switchWorkspaceNotifyId > 0) {
|
||||
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
|
||||
this._switchWorkspaceNotifyId = 0;
|
||||
|
@ -1,5 +1,5 @@
|
||||
project('gnome-shell', 'c',
|
||||
version: '3.29.1',
|
||||
version: '3.28.3',
|
||||
meson_version: '>= 0.42.0',
|
||||
license: 'GPLv2+'
|
||||
)
|
||||
@ -23,7 +23,7 @@ gi_req = '>= 1.49.1'
|
||||
gjs_req = '>= 1.47.0'
|
||||
gtk_req = '>= 3.15.0'
|
||||
json_glib_req = '>= 0.13.2'
|
||||
mutter_req = '>= 3.29.1'
|
||||
mutter_req = '>= 3.28.0'
|
||||
polkit_req = '>= 0.100'
|
||||
schemas_req = '>= 3.21.3'
|
||||
startup_req = '>= 0.11'
|
||||
@ -31,7 +31,7 @@ ibus_req = '>= 1.5.2'
|
||||
|
||||
bt_req = '>= 3.9.0'
|
||||
gst_req = '>= 0.11.92'
|
||||
nm_req = '>= 1.10.4'
|
||||
nm_req = '>= 0.9.8'
|
||||
secret_req = '>= 0.18'
|
||||
|
||||
gnome = import('gnome')
|
||||
|
62
po/cs.po
62
po/cs.po
@ -11,8 +11,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||
"POT-Creation-Date: 2018-04-13 19:54+0000\n"
|
||||
"PO-Revision-Date: 2018-04-24 17:32+0200\n"
|
||||
"POT-Creation-Date: 2018-02-26 12:57+0000\n"
|
||||
"PO-Revision-Date: 2018-02-26 17:57+0100\n"
|
||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||
"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
|
||||
"Language: cs\n"
|
||||
@ -332,7 +332,7 @@ msgstr ""
|
||||
"Nastala chyba při načítání dialogového okna předvoleb pro rozšíření %s:"
|
||||
|
||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
|
||||
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
||||
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
||||
msgid "Cancel"
|
||||
@ -667,12 +667,12 @@ msgstr "Přidat mezi oblíbené"
|
||||
msgid "Show Details"
|
||||
msgstr "Zobrazit podrobnosti"
|
||||
|
||||
#: js/ui/appFavorites.js:140
|
||||
#: js/ui/appFavorites.js:138
|
||||
#, javascript-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s byl přidán mezi oblíbené."
|
||||
|
||||
#: js/ui/appFavorites.js:174
|
||||
#: js/ui/appFavorites.js:172
|
||||
#, javascript-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s byl odstraněn z oblíbených."
|
||||
@ -867,7 +867,7 @@ msgstr "Externí svazek odpojen"
|
||||
msgid "Open with %s"
|
||||
msgstr "Otevřít pomocí %s"
|
||||
|
||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295
|
||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
|
||||
msgid "Password:"
|
||||
msgstr "Heslo:"
|
||||
|
||||
@ -955,15 +955,15 @@ msgstr "Pro připojení k „%s“ je vyžadováno heslo."
|
||||
msgid "Network Manager"
|
||||
msgstr "Network Manager"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:48
|
||||
#: js/ui/components/polkitAgent.js:43
|
||||
msgid "Authentication Required"
|
||||
msgstr "Je vyžadováno ověření"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:76
|
||||
#: js/ui/components/polkitAgent.js:71
|
||||
msgid "Administrator"
|
||||
msgstr "Správce"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:156
|
||||
#: js/ui/components/polkitAgent.js:151
|
||||
msgid "Authenticate"
|
||||
msgstr "Ověřit"
|
||||
|
||||
@ -971,7 +971,7 @@ msgstr "Ověřit"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327
|
||||
#: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327
|
||||
msgid "Sorry, that didn’t work. Please try again."
|
||||
msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
|
||||
|
||||
@ -1021,7 +1021,7 @@ msgstr "Přidat světový čas…"
|
||||
msgid "World Clocks"
|
||||
msgstr "Světové hodiny"
|
||||
|
||||
#: js/ui/dateMenu.js:227
|
||||
#: js/ui/dateMenu.js:225
|
||||
msgid "Weather"
|
||||
msgstr "Počasí"
|
||||
|
||||
@ -1029,7 +1029,7 @@ msgstr "Počasí"
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:291
|
||||
#: js/ui/dateMenu.js:289
|
||||
#, javascript-format
|
||||
msgid "%s all day."
|
||||
msgstr "%s celý den."
|
||||
@ -1038,7 +1038,7 @@ msgstr "%s celý den."
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:297
|
||||
#: js/ui/dateMenu.js:295
|
||||
#, javascript-format
|
||||
msgid "%s, then %s later."
|
||||
msgstr "%s, později %s."
|
||||
@ -1047,30 +1047,30 @@ msgstr "%s, později %s."
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:303
|
||||
#: js/ui/dateMenu.js:301
|
||||
#, javascript-format
|
||||
msgid "%s, then %s, followed by %s later."
|
||||
msgstr "%s, pak %s a později %s."
|
||||
|
||||
#: js/ui/dateMenu.js:314
|
||||
#: js/ui/dateMenu.js:312
|
||||
msgid "Select a location…"
|
||||
msgstr "Vybrat místo…"
|
||||
|
||||
#: js/ui/dateMenu.js:317
|
||||
#: js/ui/dateMenu.js:315
|
||||
msgid "Loading…"
|
||||
msgstr "Načítá se…"
|
||||
|
||||
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
||||
#: js/ui/dateMenu.js:323
|
||||
#: js/ui/dateMenu.js:321
|
||||
#, javascript-format
|
||||
msgid "Feels like %s."
|
||||
msgstr "Pocitově jako %s."
|
||||
|
||||
#: js/ui/dateMenu.js:326
|
||||
#: js/ui/dateMenu.js:324
|
||||
msgid "Go online for weather information"
|
||||
msgstr "Připojit se kvůli informacím o počasí"
|
||||
|
||||
#: js/ui/dateMenu.js:328
|
||||
#: js/ui/dateMenu.js:326
|
||||
msgid "Weather information is currently unavailable"
|
||||
msgstr "Informace o počasí nejsou nyní dostupné"
|
||||
|
||||
@ -1986,16 +1986,16 @@ msgstr "Uspat do paměti"
|
||||
msgid "Power Off"
|
||||
msgstr "Vypnout"
|
||||
|
||||
#: js/ui/status/thunderbolt.js:294
|
||||
#: js/ui/status/thunderbolt.js:272
|
||||
msgid "Thunderbolt"
|
||||
msgstr "Thunderbolt"
|
||||
|
||||
#. we are done
|
||||
#: js/ui/status/thunderbolt.js:350
|
||||
#: js/ui/status/thunderbolt.js:328
|
||||
msgid "Unknown Thunderbolt device"
|
||||
msgstr "Neznámé zařízení Thunderbolt"
|
||||
|
||||
#: js/ui/status/thunderbolt.js:351
|
||||
#: js/ui/status/thunderbolt.js:329
|
||||
msgid ""
|
||||
"New device has been detected while you were away. Please disconnect and "
|
||||
"reconnect the device to start using it."
|
||||
@ -2003,13 +2003,13 @@ msgstr ""
|
||||
"Zatímco jste byli pryč, bylo nalezeno nové zařízení. Odpojte jej prosím a "
|
||||
"znovu připojte, abyste jej mohli používat."
|
||||
|
||||
#: js/ui/status/thunderbolt.js:356
|
||||
#: js/ui/status/thunderbolt.js:334
|
||||
msgid "Thunderbolt authorization error"
|
||||
msgstr "Chyba ověření Thunderbolt"
|
||||
|
||||
#: js/ui/status/thunderbolt.js:357
|
||||
#: js/ui/status/thunderbolt.js:335
|
||||
#, javascript-format
|
||||
msgid "Could not authorize the Thunderbolt device: %s"
|
||||
msgid "Could not authorize the thunderbolt device: %s"
|
||||
msgstr "Nezdařilo se provést ověření zařízení Thunderbolt: %s"
|
||||
|
||||
#: js/ui/status/volume.js:128
|
||||
@ -2233,3 +2233,15 @@ msgstr[2] "%u vstupů"
|
||||
#: subprojects/gvc/gvc-mixer-control.c:2738
|
||||
msgid "System Sounds"
|
||||
msgstr "Systémové zvuky"
|
||||
|
||||
#~ msgctxt "search-result"
|
||||
#~ msgid "Power off"
|
||||
#~ msgstr "Vypnout"
|
||||
|
||||
#~ msgctxt "search-result"
|
||||
#~ msgid "Log out"
|
||||
#~ msgstr "Odhlásit se"
|
||||
|
||||
#~ msgctxt "search-result"
|
||||
#~ msgid "Switch user"
|
||||
#~ msgstr "Přepnout uživatele"
|
||||
|
51
po/es.po
51
po/es.po
@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||
"POT-Creation-Date: 2018-04-13 19:54+0000\n"
|
||||
"PO-Revision-Date: 2018-04-25 12:54+0200\n"
|
||||
"POT-Creation-Date: 2018-02-22 09:24+0000\n"
|
||||
"PO-Revision-Date: 2018-02-23 08:26+0100\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: es <gnome-es-list@gnome.org>\n"
|
||||
"Language: es\n"
|
||||
@ -346,7 +346,7 @@ msgid "There was an error loading the preferences dialog for %s:"
|
||||
msgstr "Hubo un error al lanzar el diálogo de preferencias para %s:"
|
||||
|
||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
|
||||
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
||||
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
||||
msgid "Cancel"
|
||||
@ -665,12 +665,12 @@ msgstr "Añadir a los favoritos"
|
||||
msgid "Show Details"
|
||||
msgstr "Mostrar detalles"
|
||||
|
||||
#: js/ui/appFavorites.js:140
|
||||
#: js/ui/appFavorites.js:138
|
||||
#, javascript-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "Se ha añadido %s a sus favoritos."
|
||||
|
||||
#: js/ui/appFavorites.js:174
|
||||
#: js/ui/appFavorites.js:172
|
||||
#, javascript-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "Se ha quitado %s de sus favoritos."
|
||||
@ -865,7 +865,7 @@ msgstr "Dispositivo externo desconectado"
|
||||
msgid "Open with %s"
|
||||
msgstr "Abrir con %s"
|
||||
|
||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295
|
||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
|
||||
msgid "Password:"
|
||||
msgstr "Contraseña:"
|
||||
|
||||
@ -953,15 +953,15 @@ msgstr "Se requiere una contraseña para conectarse a «%s»."
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestor de la red"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:48
|
||||
#: js/ui/components/polkitAgent.js:43
|
||||
msgid "Authentication Required"
|
||||
msgstr "Se necesita autenticación"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:76
|
||||
#: js/ui/components/polkitAgent.js:71
|
||||
msgid "Administrator"
|
||||
msgstr "Administrador"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:156
|
||||
#: js/ui/components/polkitAgent.js:151
|
||||
msgid "Authenticate"
|
||||
msgstr "Autenticar"
|
||||
|
||||
@ -969,7 +969,7 @@ msgstr "Autenticar"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327
|
||||
#: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327
|
||||
msgid "Sorry, that didn’t work. Please try again."
|
||||
msgstr "Eso no ha funcionado. Inténtelo de nuevo."
|
||||
|
||||
@ -1017,7 +1017,7 @@ msgstr "Añadir relojes del mundo…"
|
||||
msgid "World Clocks"
|
||||
msgstr "Relojes del mundo"
|
||||
|
||||
#: js/ui/dateMenu.js:227
|
||||
#: js/ui/dateMenu.js:225
|
||||
msgid "Weather"
|
||||
msgstr "Meteorología"
|
||||
|
||||
@ -1025,7 +1025,7 @@ msgstr "Meteorología"
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:291
|
||||
#: js/ui/dateMenu.js:289
|
||||
#, javascript-format
|
||||
msgid "%s all day."
|
||||
msgstr "%s todo el día."
|
||||
@ -1034,7 +1034,7 @@ msgstr "%s todo el día."
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:297
|
||||
#: js/ui/dateMenu.js:295
|
||||
#, javascript-format
|
||||
msgid "%s, then %s later."
|
||||
msgstr "%s, luego %s."
|
||||
@ -1043,30 +1043,30 @@ msgstr "%s, luego %s."
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:303
|
||||
#: js/ui/dateMenu.js:301
|
||||
#, javascript-format
|
||||
msgid "%s, then %s, followed by %s later."
|
||||
msgstr "%s, luego %s seguido de %s."
|
||||
|
||||
#: js/ui/dateMenu.js:314
|
||||
#: js/ui/dateMenu.js:312
|
||||
msgid "Select a location…"
|
||||
msgstr "Seleccionar ubicación…"
|
||||
|
||||
#: js/ui/dateMenu.js:317
|
||||
#: js/ui/dateMenu.js:315
|
||||
msgid "Loading…"
|
||||
msgstr "Cargando…"
|
||||
|
||||
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
||||
#: js/ui/dateMenu.js:323
|
||||
#: js/ui/dateMenu.js:321
|
||||
#, javascript-format
|
||||
msgid "Feels like %s."
|
||||
msgstr "Sensación térmica de %s."
|
||||
|
||||
#: js/ui/dateMenu.js:326
|
||||
#: js/ui/dateMenu.js:324
|
||||
msgid "Go online for weather information"
|
||||
msgstr "Conectarse para obtener la información meteorológica"
|
||||
|
||||
#: js/ui/dateMenu.js:328
|
||||
#: js/ui/dateMenu.js:326
|
||||
msgid "Weather information is currently unavailable"
|
||||
msgstr "La información meteorológica no está disponible actualmente."
|
||||
|
||||
@ -1968,16 +1968,16 @@ msgstr "Suspender"
|
||||
msgid "Power Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
#: js/ui/status/thunderbolt.js:294
|
||||
#: js/ui/status/thunderbolt.js:272
|
||||
msgid "Thunderbolt"
|
||||
msgstr "Thunderbolt"
|
||||
|
||||
#. we are done
|
||||
#: js/ui/status/thunderbolt.js:350
|
||||
#: js/ui/status/thunderbolt.js:328
|
||||
msgid "Unknown Thunderbolt device"
|
||||
msgstr "Dispositivo Thunderbolt desconocido"
|
||||
|
||||
#: js/ui/status/thunderbolt.js:351
|
||||
#: js/ui/status/thunderbolt.js:329
|
||||
msgid ""
|
||||
"New device has been detected while you were away. Please disconnect and "
|
||||
"reconnect the device to start using it."
|
||||
@ -1985,14 +1985,13 @@ msgstr ""
|
||||
"Se ha detectado un dispositivo nuevo mientras estaba fuera. Desconéctelo y "
|
||||
"vuélvalo a conectar para empezar a usarlo."
|
||||
|
||||
#: js/ui/status/thunderbolt.js:356
|
||||
#: js/ui/status/thunderbolt.js:334
|
||||
msgid "Thunderbolt authorization error"
|
||||
msgstr "Error de autorización de Thunderbolt"
|
||||
|
||||
#: js/ui/status/thunderbolt.js:357
|
||||
#: js/ui/status/thunderbolt.js:335
|
||||
#, javascript-format
|
||||
#| msgid "Could not authorize the thunderbolt device: %s"
|
||||
msgid "Could not authorize the Thunderbolt device: %s"
|
||||
msgid "Could not authorize the thunderbolt device: %s"
|
||||
msgstr "No se pudo autorizar el dispositivo Thunderbolt: %s"
|
||||
|
||||
#: js/ui/status/volume.js:128
|
||||
|
54
po/hr.po
54
po/hr.po
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||
"POT-Creation-Date: 2018-04-13 19:54+0000\n"
|
||||
"PO-Revision-Date: 2018-04-16 14:30+0200\n"
|
||||
"POT-Creation-Date: 2018-02-26 17:00+0000\n"
|
||||
"PO-Revision-Date: 2018-03-07 22:46+0100\n"
|
||||
"Last-Translator: gogo <trebelnik2@gmail.com>\n"
|
||||
"Language-Team: Croatian <hr@li.org>\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:"
|
||||
|
||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
|
||||
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
||||
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
||||
msgid "Cancel"
|
||||
@ -663,12 +663,12 @@ msgstr "Dodaj u omiljene"
|
||||
msgid "Show Details"
|
||||
msgstr "Prikaži pojedinosti"
|
||||
|
||||
#: js/ui/appFavorites.js:140
|
||||
#: js/ui/appFavorites.js:138
|
||||
#, javascript-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "%s je dodan u omiljene."
|
||||
|
||||
#: js/ui/appFavorites.js:174
|
||||
#: js/ui/appFavorites.js:172
|
||||
#, javascript-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s je uklonjen iz omiljenih."
|
||||
@ -863,7 +863,7 @@ msgstr "Vanjski uređaj odspojen"
|
||||
msgid "Open with %s"
|
||||
msgstr "Otvori s(a) %s"
|
||||
|
||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295
|
||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
|
||||
msgid "Password:"
|
||||
msgstr "Lozinka:"
|
||||
|
||||
@ -950,15 +950,15 @@ msgstr "Potrebna je lozinka za povezivanje s “%s”."
|
||||
msgid "Network Manager"
|
||||
msgstr "Mrežni upravitelj"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:48
|
||||
#: js/ui/components/polkitAgent.js:43
|
||||
msgid "Authentication Required"
|
||||
msgstr "Potrebna je ovjera"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:76
|
||||
#: js/ui/components/polkitAgent.js:71
|
||||
msgid "Administrator"
|
||||
msgstr "Administrator"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:156
|
||||
#: js/ui/components/polkitAgent.js:151
|
||||
msgid "Authenticate"
|
||||
msgstr "Ovjeri"
|
||||
|
||||
@ -966,7 +966,7 @@ msgstr "Ovjeri"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327
|
||||
#: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327
|
||||
msgid "Sorry, that didn’t work. Please try again."
|
||||
msgstr "Nažalost, to ne radi. Pokušajte ponovno."
|
||||
|
||||
@ -1014,7 +1014,7 @@ msgstr "Dodaj satove iz svijeta…"
|
||||
msgid "World Clocks"
|
||||
msgstr "Svjetski satovi"
|
||||
|
||||
#: js/ui/dateMenu.js:227
|
||||
#: js/ui/dateMenu.js:225
|
||||
msgid "Weather"
|
||||
msgstr "Vrijeme"
|
||||
|
||||
@ -1022,7 +1022,7 @@ msgstr "Vrijeme"
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:291
|
||||
#: js/ui/dateMenu.js:289
|
||||
#, javascript-format
|
||||
msgid "%s all day."
|
||||
msgstr "%s cijeli dan."
|
||||
@ -1031,7 +1031,7 @@ msgstr "%s cijeli dan."
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:297
|
||||
#: js/ui/dateMenu.js:295
|
||||
#, javascript-format
|
||||
msgid "%s, then %s later."
|
||||
msgstr "%s, zatim %s kasnije."
|
||||
@ -1040,30 +1040,30 @@ msgstr "%s, zatim %s kasnije."
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:303
|
||||
#: js/ui/dateMenu.js:301
|
||||
#, javascript-format
|
||||
msgid "%s, then %s, followed by %s later."
|
||||
msgstr "%s, zatim %s, praćena s %s kasnije."
|
||||
|
||||
#: js/ui/dateMenu.js:314
|
||||
#: js/ui/dateMenu.js:312
|
||||
msgid "Select a location…"
|
||||
msgstr "Odaberi lokaciju…"
|
||||
|
||||
#: js/ui/dateMenu.js:317
|
||||
#: js/ui/dateMenu.js:315
|
||||
msgid "Loading…"
|
||||
msgstr "Pretraživanje…"
|
||||
|
||||
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
||||
#: js/ui/dateMenu.js:323
|
||||
#: js/ui/dateMenu.js:321
|
||||
#, javascript-format
|
||||
msgid "Feels like %s."
|
||||
msgstr "Kao da je %s."
|
||||
|
||||
#: js/ui/dateMenu.js:326
|
||||
#: js/ui/dateMenu.js:324
|
||||
msgid "Go online for weather information"
|
||||
msgstr "Posjetite za opširnije vremenske informacije"
|
||||
|
||||
#: js/ui/dateMenu.js:328
|
||||
#: js/ui/dateMenu.js:326
|
||||
msgid "Weather information is currently unavailable"
|
||||
msgstr "Vremenske informacije su trenutno nedostupne"
|
||||
|
||||
@ -1977,16 +1977,16 @@ msgstr "Suspendiraj"
|
||||
msgid "Power Off"
|
||||
msgstr "Isključivanje"
|
||||
|
||||
#: js/ui/status/thunderbolt.js:294
|
||||
#: js/ui/status/thunderbolt.js:272
|
||||
msgid "Thunderbolt"
|
||||
msgstr "Thunderbolt"
|
||||
|
||||
#. we are done
|
||||
#: js/ui/status/thunderbolt.js:350
|
||||
#: js/ui/status/thunderbolt.js:328
|
||||
msgid "Unknown Thunderbolt device"
|
||||
msgstr "Nepoznati Thunderbolt uređaj"
|
||||
|
||||
#: js/ui/status/thunderbolt.js:351
|
||||
#: js/ui/status/thunderbolt.js:329
|
||||
msgid ""
|
||||
"New device has been detected while you were away. Please disconnect and "
|
||||
"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 "
|
||||
"uređaj kako bi ga mogli koristiti."
|
||||
|
||||
#: js/ui/status/thunderbolt.js:356
|
||||
#: js/ui/status/thunderbolt.js:334
|
||||
msgid "Thunderbolt authorization error"
|
||||
msgstr "Greška Thunderbolt odobravanja"
|
||||
msgstr "Greška Thunderbolt ovjere"
|
||||
|
||||
#: js/ui/status/thunderbolt.js:357
|
||||
#: js/ui/status/thunderbolt.js:335
|
||||
#, javascript-format
|
||||
msgid "Could not authorize the Thunderbolt device: %s"
|
||||
msgstr "Nemoguće odobravanje Thunderbolt uređaja: %s"
|
||||
msgid "Could not authorize the thunderbolt device: %s"
|
||||
msgstr "Nemoguća ovjera Thunderbolt uređaja: %s"
|
||||
|
||||
#: js/ui/status/volume.js:128
|
||||
msgid "Volume changed"
|
||||
|
87
po/sl.po
87
po/sl.po
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||
"POT-Creation-Date: 2018-04-17 15:11+0000\n"
|
||||
"PO-Revision-Date: 2018-04-17 18:32+0200\n"
|
||||
"POT-Creation-Date: 2018-03-18 10:36+0000\n"
|
||||
"PO-Revision-Date: 2018-03-19 21:42+0100\n"
|
||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||
"Language: sl\n"
|
||||
@ -66,19 +66,19 @@ msgstr "Upravljanje oken in zaganjanje programov"
|
||||
msgid "Enable internal tools useful for developers and testers from Alt-F2"
|
||||
msgstr ""
|
||||
"Omogoči dostop do orodij razvijalcev in preizkuševalcev programske opreme "
|
||||
"prek vnosnega polja Alt-F2."
|
||||
"preko Alt-F2 vnosnega polja."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:9
|
||||
msgid ""
|
||||
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
|
||||
"dialog."
|
||||
msgstr ""
|
||||
"Dovoli dostop do razhroščevanja in drugih orodij nadzora prek vnosnega polja "
|
||||
"Alt-F2."
|
||||
"Dovoli dostop do razhroščevanja in drugih orodij nadzora preko Alt-F2 "
|
||||
"vnosnega polja."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:16
|
||||
msgid "UUIDs of extensions to enable"
|
||||
msgstr "Določila razširitev UUID, ki bodo omogočene"
|
||||
msgstr "Določila UUID razširitev, ki bodo omogočene"
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:17
|
||||
msgid ""
|
||||
@ -87,9 +87,10 @@ msgid ""
|
||||
"list. You can also manipulate this list with the EnableExtension and "
|
||||
"DisableExtension D-Bus methods on org.gnome.Shell."
|
||||
msgstr ""
|
||||
"Razširitve lupine GNOME imajo nastavljeno določilo UUID; ključ določa seznam "
|
||||
"razširitev, ki naj bodo naložene ob zagonu. Upravljanje seznama je mogoče "
|
||||
"tudi prek vodila D-BUs na org.gnome.Shell."
|
||||
"Razširitve lupine GNOME imajo določila UUID; ključ določa seznam razširitev, "
|
||||
"ki bodo naložene. Razširitev, ki se naj naloži, mora biti zavedena na tem "
|
||||
"seznamu. Upravljanje seznama je mogoče tudi preko vodila D-BUs na org.gnome."
|
||||
"Shell."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:26
|
||||
msgid "Disable user extensions"
|
||||
@ -114,8 +115,8 @@ msgid ""
|
||||
"load all extensions regardless of the versions they claim to support."
|
||||
msgstr ""
|
||||
"Lupina GNOME naloži le razširitve, ki so skladne z nameščeno različico. "
|
||||
"Izbrana možnost onemogoči preverjanje, zato so lahko naložene tudi "
|
||||
"razširitve, katerih skladnost ni potrjena."
|
||||
"Izbrana možnost onemogoči preverjanje skladnosti, zato so lahko naložene "
|
||||
"tudi razširitve, katerih skladnost ni potrjena."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:43
|
||||
msgid "List of desktop file IDs for favorite applications"
|
||||
@ -126,7 +127,7 @@ msgid ""
|
||||
"The applications corresponding to these identifiers will be displayed in the "
|
||||
"favorites area."
|
||||
msgstr ""
|
||||
"Programi, ki ustrezajo določilom, bodo prikazani v polju priljubljenih "
|
||||
"Programi določeni s temi določili bodo prikazani v območju priljubljenih "
|
||||
"programov"
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:51
|
||||
@ -144,18 +145,18 @@ msgstr "Zgodovina pogovornega okna ukazov (Alt-F2)"
|
||||
#. Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass
|
||||
#: data/org.gnome.shell.gschema.xml.in:63
|
||||
msgid "History for the looking glass dialog"
|
||||
msgstr "Zgodovina za pogovorno okno povečevala"
|
||||
msgstr "Zgodovina za pogovorno okno povečevalnega stekla"
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:67
|
||||
msgid "Always show the “Log out” menu item in the user menu."
|
||||
msgstr "Vedno pokaži možnost »Odjave« v uporabniškem meniju."
|
||||
msgstr "Vedno pokaži možnost »Odjava« v uporabniškem meniju."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:68
|
||||
msgid ""
|
||||
"This key overrides the automatic hiding of the “Log out” menu item in single-"
|
||||
"user, single-session situations."
|
||||
msgstr ""
|
||||
"Izbira prepiše možnost samodejnega skrivanja gumba za »Odjavo« na sistemskem "
|
||||
"Izbira prepiše možnost samodejnega skrivanja predmeta »Odjava« na sistemskem "
|
||||
"meniju pri eno-uporabniškem in eno-sejnem zagonu."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:75
|
||||
@ -173,8 +174,8 @@ msgid ""
|
||||
"state of the checkbox."
|
||||
msgstr ""
|
||||
"Za priklop oddaljenega datotečnega sistema ali šifrirane naprave bo po "
|
||||
"izbiri podana zahteva za vnos gesla. Na pogovornem oknu bo prikazana tudi "
|
||||
"možnost »Shrani geslo«. Ta možnost določa privzeto stanje izbirnega polja."
|
||||
"izbiri možnosti zahtevano geslo. Na pogovornem oknu bo prikazana možnost "
|
||||
"»Shrani geslo«. Ta možnost določa privzeto stanje izbirnega polja."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:85
|
||||
msgid ""
|
||||
@ -332,7 +333,7 @@ msgid "There was an error loading the preferences dialog for %s:"
|
||||
msgstr "Prišlo je do napake med nalaganjem pogovornega okna z možnostmi za %s:"
|
||||
|
||||
#: js/gdm/authPrompt.js:147 js/ui/audioDeviceSelection.js:71
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:153
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
|
||||
#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
|
||||
#: js/ui/shellMountOperation.js:343 js/ui/status/network.js:919
|
||||
msgid "Cancel"
|
||||
@ -663,12 +664,12 @@ msgstr "Dodaj med priljubljene"
|
||||
msgid "Show Details"
|
||||
msgstr "Pokaži besedilo"
|
||||
|
||||
#: js/ui/appFavorites.js:140
|
||||
#: js/ui/appFavorites.js:138
|
||||
#, javascript-format
|
||||
msgid "%s has been added to your favorites."
|
||||
msgstr "Program »%s« je dodan med priljubljeno."
|
||||
|
||||
#: js/ui/appFavorites.js:174
|
||||
#: js/ui/appFavorites.js:172
|
||||
#, javascript-format
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "Program »%s« je odstranjen iz priljubljenih."
|
||||
@ -839,7 +840,7 @@ msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
msgstr ""
|
||||
"Lahko počakate, če se program morda začne spet odzivati, lahko pa vsilite "
|
||||
"Lahko še malo počakate, če začne morda program spet delovati, ali pa vsilite "
|
||||
"končanje delovanja."
|
||||
|
||||
#: js/ui/closeDialog.js:61
|
||||
@ -863,13 +864,13 @@ msgstr "Zunanji pogon je odklopljen"
|
||||
msgid "Open with %s"
|
||||
msgstr "Odpri s programom %s"
|
||||
|
||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:295
|
||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
|
||||
msgid "Password:"
|
||||
msgstr "Geslo:"
|
||||
|
||||
#: js/ui/components/keyring.js:140
|
||||
msgid "Type again:"
|
||||
msgstr "Ponovni vpis:"
|
||||
msgstr "Vpišite znova:"
|
||||
|
||||
#: js/ui/components/networkAgent.js:112 js/ui/status/network.js:245
|
||||
#: js/ui/status/network.js:336 js/ui/status/network.js:922
|
||||
@ -886,19 +887,19 @@ msgstr "Geslo:"
|
||||
#. static WEP
|
||||
#: js/ui/components/networkAgent.js:210
|
||||
msgid "Key: "
|
||||
msgstr "Ključ: "
|
||||
msgstr "Ključ:"
|
||||
|
||||
#: js/ui/components/networkAgent.js:249
|
||||
msgid "Identity: "
|
||||
msgstr "_Istovetnost: "
|
||||
msgstr "_Istovetnost:"
|
||||
|
||||
#: js/ui/components/networkAgent.js:251
|
||||
msgid "Private key password: "
|
||||
msgstr "Geslo zasebnega ključa: "
|
||||
msgstr "Geslo zasebnega ključa:"
|
||||
|
||||
#: js/ui/components/networkAgent.js:263
|
||||
msgid "Service: "
|
||||
msgstr "Storitev: "
|
||||
msgstr "Storitev:"
|
||||
|
||||
#: js/ui/components/networkAgent.js:292 js/ui/components/networkAgent.js:659
|
||||
msgid "Authentication required by wireless network"
|
||||
@ -919,7 +920,7 @@ msgstr "Žična overitev 802.1X"
|
||||
|
||||
#: js/ui/components/networkAgent.js:299
|
||||
msgid "Network name: "
|
||||
msgstr "Naziv omrežja: "
|
||||
msgstr "Naziv omrežja:"
|
||||
|
||||
#: js/ui/components/networkAgent.js:304 js/ui/components/networkAgent.js:667
|
||||
msgid "DSL authentication"
|
||||
@ -951,15 +952,15 @@ msgstr "Za povezavo z omrežjem »%s« je zahtevano geslo."
|
||||
msgid "Network Manager"
|
||||
msgstr "Upravljalnik omrežij"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:48
|
||||
#: js/ui/components/polkitAgent.js:43
|
||||
msgid "Authentication Required"
|
||||
msgstr "Zahtevana je overitev"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:76
|
||||
#: js/ui/components/polkitAgent.js:71
|
||||
msgid "Administrator"
|
||||
msgstr "Skrbnik"
|
||||
|
||||
#: js/ui/components/polkitAgent.js:156
|
||||
#: js/ui/components/polkitAgent.js:151
|
||||
msgid "Authenticate"
|
||||
msgstr "Overi"
|
||||
|
||||
@ -967,7 +968,7 @@ msgstr "Overi"
|
||||
#. * requested authentication was not gained; this can happen
|
||||
#. * because of an authentication error (like invalid password),
|
||||
#. * for instance.
|
||||
#: js/ui/components/polkitAgent.js:281 js/ui/shellMountOperation.js:327
|
||||
#: js/ui/components/polkitAgent.js:270 js/ui/shellMountOperation.js:327
|
||||
msgid "Sorry, that didn’t work. Please try again."
|
||||
msgstr "Overitev je spodletela.. Poskusite znova."
|
||||
|
||||
@ -1015,7 +1016,7 @@ msgstr "Dodaj svetovni čas ..."
|
||||
msgid "World Clocks"
|
||||
msgstr "Svetovni časi"
|
||||
|
||||
#: js/ui/dateMenu.js:227
|
||||
#: js/ui/dateMenu.js:225
|
||||
msgid "Weather"
|
||||
msgstr "Vreme"
|
||||
|
||||
@ -1023,7 +1024,7 @@ msgstr "Vreme"
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:291
|
||||
#: js/ui/dateMenu.js:289
|
||||
#, javascript-format
|
||||
msgid "%s all day."
|
||||
msgstr "%s – ves dan."
|
||||
@ -1032,7 +1033,7 @@ msgstr "%s – ves dan."
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:297
|
||||
#: js/ui/dateMenu.js:295
|
||||
#, javascript-format
|
||||
msgid "%s, then %s later."
|
||||
msgstr "%s, sledi %s."
|
||||
@ -1041,30 +1042,30 @@ msgstr "%s, sledi %s."
|
||||
#. libgweather for the possible condition strings. If at all
|
||||
#. possible, the sentence should match the grammatical case etc. of
|
||||
#. the inserted conditions.
|
||||
#: js/ui/dateMenu.js:303
|
||||
#: js/ui/dateMenu.js:301
|
||||
#, javascript-format
|
||||
msgid "%s, then %s, followed by %s later."
|
||||
msgstr "%s, sledi %s, kasneje tudi %s."
|
||||
|
||||
#: js/ui/dateMenu.js:314
|
||||
#: js/ui/dateMenu.js:312
|
||||
msgid "Select a location…"
|
||||
msgstr "Izbor mesta ..."
|
||||
|
||||
#: js/ui/dateMenu.js:317
|
||||
#: js/ui/dateMenu.js:315
|
||||
msgid "Loading…"
|
||||
msgstr "Poteka nalaganje ..."
|
||||
|
||||
#. Translators: %s is a temperature with unit, e.g. "23℃"
|
||||
#: js/ui/dateMenu.js:323
|
||||
#: js/ui/dateMenu.js:321
|
||||
#, javascript-format
|
||||
msgid "Feels like %s."
|
||||
msgstr "Občuti se kot %s."
|
||||
|
||||
#: js/ui/dateMenu.js:326
|
||||
#: js/ui/dateMenu.js:324
|
||||
msgid "Go online for weather information"
|
||||
msgstr "Preglej splet za podrobnosti o vremenu."
|
||||
|
||||
#: js/ui/dateMenu.js:328
|
||||
#: js/ui/dateMenu.js:326
|
||||
msgid "Weather information is currently unavailable"
|
||||
msgstr "Podatki o vremenu trenutno niso na voljo."
|
||||
|
||||
@ -2013,8 +2014,8 @@ msgstr "Napaka overitve naprave Thunderbolt"
|
||||
|
||||
#: js/ui/status/thunderbolt.js:357
|
||||
#, javascript-format
|
||||
msgid "Could not authorize the Thunderbolt device: %s"
|
||||
msgstr "Naprave Thunderbolt ni mogoče overiti: %s"
|
||||
msgid "Could not authorize the thunderbolt device: %s"
|
||||
msgstr "Naprave thunderbolt ni mogoče overiti: %s"
|
||||
|
||||
#: js/ui/status/volume.js:128
|
||||
msgid "Volume changed"
|
||||
|
@ -590,11 +590,6 @@ app_load_events (App *app)
|
||||
g_list_free (app->live_views);
|
||||
app->live_views = NULL;
|
||||
|
||||
if (!app->since || !app->until)
|
||||
{
|
||||
print_debug ("Skipping load of events, no time interval set yet");
|
||||
return;
|
||||
}
|
||||
/* timezone could have changed */
|
||||
app_update_timezone (app);
|
||||
|
||||
|
@ -347,10 +347,10 @@ if options.perf == None:
|
||||
options.perf = 'core'
|
||||
|
||||
if options.extra_filter is None:
|
||||
options.extra_filter = []
|
||||
|
||||
if options.perf == 'hwtest':
|
||||
options.extra_filter.append('Gedit')
|
||||
if options.hwtest:
|
||||
options.extra_filter = ['Gedit']
|
||||
else:
|
||||
options.extra_filter = []
|
||||
|
||||
if args:
|
||||
parser.print_usage()
|
||||
|
@ -1190,37 +1190,12 @@ app_child_setup (gpointer user_data)
|
||||
}
|
||||
#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
|
||||
wait_pid (GDesktopAppInfo *appinfo,
|
||||
GPid pid,
|
||||
ShellApp *app)
|
||||
gpointer user_data)
|
||||
{
|
||||
g_child_watch_add (pid, (GChildWatchFunc) _shell_app_watch_callback, app);
|
||||
g_child_watch_add (pid, (GChildWatchFunc) g_spawn_close_pid, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1267,8 +1242,7 @@ shell_app_launch (ShellApp *app,
|
||||
#else
|
||||
NULL, NULL,
|
||||
#endif
|
||||
(GDesktopAppLaunchCallback) wait_pid,
|
||||
app,
|
||||
wait_pid, NULL,
|
||||
error);
|
||||
g_object_unref (context);
|
||||
|
||||
|
@ -906,11 +906,6 @@ shell_startup_sequence_create_icon (ShellStartupSequence *sequence, guint size)
|
||||
return texture;
|
||||
}
|
||||
|
||||
void
|
||||
shell_startup_sequence_complete (ShellStartupSequence *sequence)
|
||||
{
|
||||
sn_startup_sequence_complete ((SnStartupSequence*)sequence);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_window_tracker_get_default:
|
||||
|
@ -36,7 +36,6 @@ const char *shell_startup_sequence_get_name (ShellStartupSequence *sequence);
|
||||
gboolean shell_startup_sequence_get_completed (ShellStartupSequence *sequence);
|
||||
int shell_startup_sequence_get_workspace (ShellStartupSequence *sequence);
|
||||
ClutterActor *shell_startup_sequence_create_icon (ShellStartupSequence *sequence, guint size);
|
||||
void shell_startup_sequence_complete (ShellStartupSequence *sequence);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@ -309,7 +309,8 @@ st_entry_style_changed (StWidget *self)
|
||||
|
||||
theme_node = st_widget_get_theme_node (self);
|
||||
|
||||
_st_set_text_from_style (CLUTTER_TEXT (priv->entry), theme_node);
|
||||
st_theme_node_get_foreground_color (theme_node, &color);
|
||||
clutter_text_set_color (CLUTTER_TEXT (priv->entry), &color);
|
||||
|
||||
if (st_theme_node_lookup_length (theme_node, "caret-size", TRUE, &size))
|
||||
clutter_text_set_cursor_size (CLUTTER_TEXT (priv->entry), (int)(.5 + size));
|
||||
|
@ -180,6 +180,7 @@ st_label_dispose (GObject *object)
|
||||
{
|
||||
StLabelPrivate *priv = ST_LABEL (object)->priv;
|
||||
|
||||
priv->label = NULL;
|
||||
g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
|
||||
|
||||
G_OBJECT_CLASS (st_label_parent_class)->dispose (object);
|
||||
|
@ -116,7 +116,6 @@ _st_set_text_from_style (ClutterText *text,
|
||||
PangoAttrList *attribs = NULL;
|
||||
const PangoFontDescription *font;
|
||||
StTextAlign align;
|
||||
gdouble spacing;
|
||||
|
||||
st_theme_node_get_foreground_color (theme_node, &color);
|
||||
clutter_text_set_color (text, &color);
|
||||
@ -124,11 +123,11 @@ _st_set_text_from_style (ClutterText *text,
|
||||
font = st_theme_node_get_font (theme_node);
|
||||
clutter_text_set_font_description (text, (PangoFontDescription *) font);
|
||||
|
||||
attribs = pango_attr_list_new ();
|
||||
|
||||
decoration = st_theme_node_get_text_decoration (theme_node);
|
||||
if (decoration)
|
||||
{
|
||||
attribs = pango_attr_list_new ();
|
||||
|
||||
if (decoration & ST_TEXT_DECORATION_UNDERLINE)
|
||||
{
|
||||
PangoAttribute *underline = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE);
|
||||
@ -144,13 +143,6 @@ _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);
|
||||
|
||||
if (attribs)
|
||||
|
@ -37,6 +37,7 @@ struct _StTextureCachePrivate
|
||||
|
||||
/* Things that were loaded with a cache policy != NONE */
|
||||
GHashTable *keyed_cache; /* char * -> CoglTexture* */
|
||||
GHashTable *keyed_surface_cache; /* char * -> cairo_surface_t* */
|
||||
|
||||
/* Presently this is used to de-duplicate requests for GIcons and async URIs. */
|
||||
GHashTable *outstanding_requests; /* char * -> AsyncTextureLoadData * */
|
||||
@ -145,6 +146,10 @@ st_texture_cache_init (StTextureCache *self)
|
||||
|
||||
self->priv->keyed_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, cogl_object_unref);
|
||||
self->priv->keyed_surface_cache = g_hash_table_new_full (g_str_hash,
|
||||
g_str_equal,
|
||||
g_free,
|
||||
(GDestroyNotify) cairo_surface_destroy);
|
||||
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, NULL);
|
||||
self->priv->file_monitors = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal,
|
||||
@ -166,6 +171,7 @@ st_texture_cache_dispose (GObject *object)
|
||||
}
|
||||
|
||||
g_clear_pointer (&self->priv->keyed_cache, g_hash_table_destroy);
|
||||
g_clear_pointer (&self->priv->keyed_surface_cache, g_hash_table_destroy);
|
||||
g_clear_pointer (&self->priv->outstanding_requests, g_hash_table_destroy);
|
||||
g_clear_pointer (&self->priv->file_monitors, g_hash_table_destroy);
|
||||
|
||||
@ -520,6 +526,8 @@ finish_texture_load (AsyncTextureLoadData *data,
|
||||
goto out;
|
||||
|
||||
texdata = pixbuf_to_cogl_texture (pixbuf);
|
||||
if (!texdata)
|
||||
goto out;
|
||||
|
||||
if (data->policy != ST_TEXTURE_CACHE_POLICY_NONE)
|
||||
{
|
||||
@ -986,7 +994,7 @@ file_changed_cb (GFileMonitor *monitor,
|
||||
g_free (key);
|
||||
|
||||
key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", file_hash);
|
||||
g_hash_table_remove (cache->priv->keyed_cache, key);
|
||||
g_hash_table_remove (cache->priv->keyed_surface_cache, key);
|
||||
g_free (key);
|
||||
|
||||
g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, file);
|
||||
@ -1273,6 +1281,9 @@ st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache,
|
||||
texdata = pixbuf_to_cogl_texture (pixbuf);
|
||||
g_object_unref (pixbuf);
|
||||
|
||||
if (!texdata)
|
||||
goto out;
|
||||
|
||||
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
||||
{
|
||||
cogl_object_ref (texdata);
|
||||
@ -1304,7 +1315,7 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache,
|
||||
|
||||
key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", g_file_hash (file));
|
||||
|
||||
surface = g_hash_table_lookup (cache->priv->keyed_cache, key);
|
||||
surface = g_hash_table_lookup (cache->priv->keyed_surface_cache, key);
|
||||
|
||||
if (surface == NULL)
|
||||
{
|
||||
@ -1318,7 +1329,8 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache,
|
||||
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
||||
{
|
||||
cairo_surface_reference (surface);
|
||||
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), surface);
|
||||
g_hash_table_insert (cache->priv->keyed_surface_cache,
|
||||
g_strdup (key), surface);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -2545,28 +2545,6 @@ st_theme_node_get_text_align(StThemeNode *node)
|
||||
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
|
||||
font_family_from_terms (CRTerm *term,
|
||||
char **family)
|
||||
|
@ -223,8 +223,6 @@ StTextDecoration st_theme_node_get_text_decoration (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
|
||||
* under the standard font/font-family/font-size/etc names. This means
|
||||
* you can't have multiple separate styled fonts for a single item,
|
||||
|
Reference in New Issue
Block a user