Compare commits
19 Commits
3.29.2
...
theme-sear
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9ab35786f6 | ||
![]() |
5fe349d5ba | ||
![]() |
1f03599d1c | ||
![]() |
a24999b7a3 | ||
![]() |
8237a1f6e0 | ||
![]() |
f9dec475a1 | ||
![]() |
68b01a8f56 | ||
![]() |
f56ba0877a | ||
![]() |
5ac6201d91 | ||
![]() |
a21a22fdb5 | ||
![]() |
a0fa50ac31 | ||
![]() |
b1dd746443 | ||
![]() |
c15e163eb1 | ||
![]() |
7a3927c168 | ||
![]() |
6eed4e31d7 | ||
![]() |
f0557ea05c | ||
![]() |
44894262f4 | ||
![]() |
b03bcc85aa | ||
![]() |
70057c6a55 |
@@ -733,6 +733,7 @@ StScrollBar {
|
|||||||
transition-duration: 500ms;
|
transition-duration: 500ms;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
height: 1.86em;
|
height: 1.86em;
|
||||||
|
font-feature-settings: "tnum";
|
||||||
|
|
||||||
&.unlock-screen,
|
&.unlock-screen,
|
||||||
&.login-screen,
|
&.login-screen,
|
||||||
@@ -958,6 +959,7 @@ StScrollBar {
|
|||||||
padding: 0.1em;
|
padding: 0.1em;
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
border-radius: 1.4em;
|
border-radius: 1.4em;
|
||||||
|
font-feature-settings: "tnum";
|
||||||
&:hover,&:focus { background-color: lighten($bg_color,5%); }
|
&:hover,&:focus { background-color: lighten($bg_color,5%); }
|
||||||
&:active,&:selected {
|
&:active,&:selected {
|
||||||
color: lighten($selected_fg_color,5%);
|
color: lighten($selected_fg_color,5%);
|
||||||
@@ -1867,6 +1869,7 @@ StScrollBar {
|
|||||||
.screen-shield-clock-time {
|
.screen-shield-clock-time {
|
||||||
font-size: 72pt;
|
font-size: 72pt;
|
||||||
text-shadow: 0px 2px 2px rgba(0,0,0,0.4);
|
text-shadow: 0px 2px 2px rgba(0,0,0,0.4);
|
||||||
|
font-feature-settings: "tnum";
|
||||||
}
|
}
|
||||||
|
|
||||||
.screen-shield-clock-date {
|
.screen-shield-clock-date {
|
||||||
|
@@ -1778,10 +1778,11 @@ var AppIcon = new Lang.Class({
|
|||||||
activate(button) {
|
activate(button) {
|
||||||
let event = Clutter.get_current_event();
|
let event = Clutter.get_current_event();
|
||||||
let modifiers = event ? event.get_state() : 0;
|
let modifiers = event ? event.get_state() : 0;
|
||||||
let openNewWindow = this.app.can_open_new_window () &&
|
let isMiddleButton = button && button == Clutter.BUTTON_MIDDLE;
|
||||||
modifiers & Clutter.ModifierType.CONTROL_MASK &&
|
let isCtrlPressed = (modifiers & Clutter.ModifierType.CONTROL_MASK) != 0;
|
||||||
this.app.state == Shell.AppState.RUNNING ||
|
let openNewWindow = this.app.can_open_new_window() &&
|
||||||
button && button == 2;
|
this.app.state == Shell.AppState.RUNNING &&
|
||||||
|
(isCtrlPressed || isMiddleButton);
|
||||||
|
|
||||||
if (this.app.state == Shell.AppState.STOPPED || openNewWindow)
|
if (this.app.state == Shell.AppState.STOPPED || openNewWindow)
|
||||||
this.animateLaunch();
|
this.animateLaunch();
|
||||||
@@ -1870,7 +1871,9 @@ var AppIconMenu = new Lang.Class({
|
|||||||
this._appendSeparator();
|
this._appendSeparator();
|
||||||
separatorShown = true;
|
separatorShown = true;
|
||||||
}
|
}
|
||||||
let item = this._appendMenuItem(window.title);
|
let title = window.title ? window.title
|
||||||
|
: this._source.app.get_name();
|
||||||
|
let item = this._appendMenuItem(title);
|
||||||
item.connect('activate', () => {
|
item.connect('activate', () => {
|
||||||
this.emit('activate-window', window);
|
this.emit('activate-window', window);
|
||||||
});
|
});
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
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;
|
||||||
@@ -13,6 +14,7 @@ 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',
|
||||||
@@ -26,6 +28,7 @@ var CloseDialog = new Lang.Class({
|
|||||||
this.parent();
|
this.parent();
|
||||||
this._window = window;
|
this._window = window;
|
||||||
this._dialog = null;
|
this._dialog = null;
|
||||||
|
this._timeoutId = 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
get window() {
|
get window() {
|
||||||
@@ -97,6 +100,14 @@ var CloseDialog = new Lang.Class({
|
|||||||
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._addWindowEffect();
|
this._addWindowEffect();
|
||||||
this._initDialog();
|
this._initDialog();
|
||||||
|
|
||||||
@@ -117,6 +128,11 @@ 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;
|
||||||
|
|
||||||
let dialog = this._dialog;
|
let dialog = this._dialog;
|
||||||
this._dialog = null;
|
this._dialog = null;
|
||||||
this._removeWindowEffect();
|
this._removeWindowEffect();
|
||||||
|
@@ -14,6 +14,7 @@ const St = imports.gi.St;
|
|||||||
const AccessDialog = imports.ui.accessDialog;
|
const AccessDialog = imports.ui.accessDialog;
|
||||||
const AudioDeviceSelection = imports.ui.audioDeviceSelection;
|
const AudioDeviceSelection = imports.ui.audioDeviceSelection;
|
||||||
const Components = imports.ui.components;
|
const Components = imports.ui.components;
|
||||||
|
const Config = imports.misc.config;
|
||||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||||
const EndSessionDialog = imports.ui.endSessionDialog;
|
const EndSessionDialog = imports.ui.endSessionDialog;
|
||||||
const Environment = imports.ui.environment;
|
const Environment = imports.ui.environment;
|
||||||
@@ -249,26 +250,61 @@ function _initializeUI() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _findThemeDirByVersion(dir, major, minor, name) {
|
||||||
|
let path;
|
||||||
|
let stylesheet;
|
||||||
|
let subpath;
|
||||||
|
|
||||||
|
/* Don't search back to before we introduced this support */
|
||||||
|
let max_minor = (major == 3) ? 28 : 0;
|
||||||
|
|
||||||
|
for (let i = minor; i >= max_minor; i = i - 2) {
|
||||||
|
subpath = major + '.' + i;
|
||||||
|
path = GLib.build_filenamev([dir, 'gnome-shell', subpath, 'theme', name]);
|
||||||
|
stylesheet = Gio.file_new_for_path(path);
|
||||||
|
|
||||||
|
log('Checking for ' + path);
|
||||||
|
|
||||||
|
if (stylesheet.query_exists(null)) {
|
||||||
|
log('Using ' + path);
|
||||||
|
return stylesheet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
path = GLib.build_filenamev([dir, 'gnome-shell', 'theme', name]);
|
||||||
|
stylesheet = Gio.file_new_for_path(path);
|
||||||
|
|
||||||
|
if (stylesheet.query_exists(null)) {
|
||||||
|
log('Using unversioned' + path);
|
||||||
|
return stylesheet;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
function _getStylesheet(name) {
|
function _getStylesheet(name) {
|
||||||
let stylesheet;
|
let stylesheet;
|
||||||
|
|
||||||
|
let [major, minor] = Config.PACKAGE_VERSION.split('.');
|
||||||
|
|
||||||
|
// Directories are versioned according to the stable version
|
||||||
|
if ((minor % 2) == 1)
|
||||||
|
minor++;
|
||||||
|
|
||||||
stylesheet = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/' + name);
|
stylesheet = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/' + name);
|
||||||
if (stylesheet.query_exists(null))
|
if (stylesheet.query_exists(null)) {
|
||||||
|
log('Using built-in default theme ' + name)
|
||||||
return stylesheet;
|
return stylesheet;
|
||||||
|
}
|
||||||
|
|
||||||
let dataDirs = GLib.get_system_data_dirs();
|
let dataDirs = GLib.get_system_data_dirs();
|
||||||
for (let i = 0; i < dataDirs.length; i++) {
|
for (let i = 0; i < dataDirs.length; i++) {
|
||||||
let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', 'theme', name]);
|
stylesheet = _findThemeDirByVersion(dataDirs[i], major, minor, name)
|
||||||
let stylesheet = Gio.file_new_for_path(path);
|
if (stylesheet != null)
|
||||||
if (stylesheet.query_exists(null))
|
|
||||||
return stylesheet;
|
return stylesheet;
|
||||||
}
|
}
|
||||||
|
|
||||||
stylesheet = Gio.File.new_for_path(global.datadir + '/theme/' + name);
|
return _findThemeDirByVersion(global.datadir, major, minor, name);
|
||||||
if (stylesheet.query_exists(null))
|
|
||||||
return stylesheet;
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function _getDefaultStylesheet() {
|
function _getDefaultStylesheet() {
|
||||||
|
@@ -995,8 +995,16 @@ var NMWirelessDialog = new Lang.Class({
|
|||||||
else if (!oneHasConnection && twoHasConnection)
|
else if (!oneHasConnection && twoHasConnection)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
let oneStrength = one.accessPoints[0].strength;
|
let oneAp = one.accessPoints[0] || null;
|
||||||
let twoStrength = two.accessPoints[0].strength;
|
let twoAp = two.accessPoints[0] || null;
|
||||||
|
|
||||||
|
if (oneAp != null && twoAp == null)
|
||||||
|
return -1;
|
||||||
|
else if (oneAp == null && twoAp != null)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
let oneStrength = oneAp.strength;
|
||||||
|
let twoStrength = twoAp.strength;
|
||||||
|
|
||||||
// place stronger connections first
|
// place stronger connections first
|
||||||
if (oneStrength != twoStrength)
|
if (oneStrength != twoStrength)
|
||||||
@@ -1156,6 +1164,11 @@ var NMWirelessDialog = new Lang.Class({
|
|||||||
Util.ensureActorVisibleInScrollView(this._scrollView, network.item.actor);
|
Util.ensureActorVisibleInScrollView(this._scrollView, network.item.actor);
|
||||||
this._selectNetwork(network);
|
this._selectNetwork(network);
|
||||||
});
|
});
|
||||||
|
network.item.actor.connect('destroy', () => {
|
||||||
|
let keyFocus = global.stage.key_focus;
|
||||||
|
if (keyFocus && keyFocus.contains(network.item.actor))
|
||||||
|
this._itemBox.grab_key_focus();
|
||||||
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -49,7 +49,6 @@ const BoltDeviceInterface = '<node> \
|
|||||||
</interface> \
|
</interface> \
|
||||||
</node>';
|
</node>';
|
||||||
|
|
||||||
const BoltClientProxy = Gio.DBusProxy.makeProxyWrapper(BoltClientInterface);
|
|
||||||
const BoltDeviceProxy = Gio.DBusProxy.makeProxyWrapper(BoltDeviceInterface);
|
const BoltDeviceProxy = Gio.DBusProxy.makeProxyWrapper(BoltDeviceInterface);
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
@@ -78,6 +77,7 @@ var AuthMode = {
|
|||||||
ENABLED: 'enabled'
|
ENABLED: 'enabled'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const BOLT_DBUS_CLIENT_IFACE = 'org.freedesktop.bolt1.Manager';
|
||||||
const BOLT_DBUS_NAME = 'org.freedesktop.bolt';
|
const BOLT_DBUS_NAME = 'org.freedesktop.bolt';
|
||||||
const BOLT_DBUS_PATH = '/org/freedesktop/bolt';
|
const BOLT_DBUS_PATH = '/org/freedesktop/bolt';
|
||||||
|
|
||||||
@@ -87,22 +87,26 @@ var Client = new Lang.Class({
|
|||||||
_init() {
|
_init() {
|
||||||
|
|
||||||
this._proxy = null;
|
this._proxy = null;
|
||||||
new BoltClientProxy(
|
let nodeInfo = Gio.DBusNodeInfo.new_for_xml(BoltClientInterface);
|
||||||
Gio.DBus.system,
|
Gio.DBusProxy.new(Gio.DBus.system,
|
||||||
BOLT_DBUS_NAME,
|
Gio.DBusProxyFlags.DO_NOT_AUTO_START,
|
||||||
BOLT_DBUS_PATH,
|
nodeInfo.lookup_interface(BOLT_DBUS_CLIENT_IFACE),
|
||||||
this._onProxyReady.bind(this)
|
BOLT_DBUS_NAME,
|
||||||
);
|
BOLT_DBUS_PATH,
|
||||||
|
BOLT_DBUS_CLIENT_IFACE,
|
||||||
|
null,
|
||||||
|
this._onProxyReady.bind(this));
|
||||||
|
|
||||||
this.probing = false;
|
this.probing = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onProxyReady(proxy, error) {
|
_onProxyReady(o, res) {
|
||||||
if (error !== null) {
|
try {
|
||||||
log('error creating bolt proxy: %s'.format(error.message));
|
this._proxy = Gio.DBusProxy.new_finish(res);
|
||||||
return;
|
} catch(e) {
|
||||||
}
|
log('error creating bolt proxy: %s'.format(e.message));
|
||||||
this._proxy = proxy;
|
return;
|
||||||
|
}
|
||||||
this._propsChangedId = this._proxy.connect('g-properties-changed', this._onPropertiesChanged.bind(this));
|
this._propsChangedId = this._proxy.connect('g-properties-changed', this._onPropertiesChanged.bind(this));
|
||||||
this._deviceAddedId = this._proxy.connectSignal('DeviceAdded', this._onDeviceAdded.bind(this));
|
this._deviceAddedId = this._proxy.connectSignal('DeviceAdded', this._onDeviceAdded.bind(this));
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
|
var 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;
|
||||||
|
@@ -447,12 +447,13 @@ var WindowOverlay = new Lang.Class({
|
|||||||
this.border = new St.Bin({ style_class: 'window-clone-border' });
|
this.border = new St.Bin({ style_class: 'window-clone-border' });
|
||||||
|
|
||||||
let title = new St.Label({ style_class: 'window-caption',
|
let title = new St.Label({ style_class: 'window-caption',
|
||||||
text: metaWindow.title });
|
text: this._getCaption() });
|
||||||
title.clutter_text.ellipsize = Pango.EllipsizeMode.END;
|
title.clutter_text.ellipsize = Pango.EllipsizeMode.END;
|
||||||
windowClone.actor.label_actor = title;
|
windowClone.actor.label_actor = title;
|
||||||
|
|
||||||
this._updateCaptionId = metaWindow.connect('notify::title', w => {
|
this._updateCaptionId = metaWindow.connect('notify::title', w => {
|
||||||
this.title.text = w.title;
|
this.title.text = w.title;
|
||||||
|
this.title.text = this._getCaption();
|
||||||
this.relayout(false);
|
this.relayout(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -565,6 +566,16 @@ var WindowOverlay = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_getCaption() {
|
||||||
|
let metaWindow = this._windowClone.metaWindow;
|
||||||
|
if (metaWindow.title)
|
||||||
|
return metaWindow.title;
|
||||||
|
|
||||||
|
let tracker = Shell.WindowTracker.get_default();
|
||||||
|
let app = tracker.get_window_app(metaWindow);
|
||||||
|
return app.get_name();
|
||||||
|
},
|
||||||
|
|
||||||
_animateOverlayActor(actor, x, y, width, height) {
|
_animateOverlayActor(actor, x, y, width, height) {
|
||||||
let params = { x: x,
|
let params = { x: x,
|
||||||
y: y,
|
y: y,
|
||||||
|
@@ -31,7 +31,7 @@ var WORKSPACE_CUT_SIZE = 10;
|
|||||||
|
|
||||||
var WORKSPACE_KEEP_ALIVE_TIME = 100;
|
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
|
/* A layout manager that requests size only for primary_actor, but then allocates
|
||||||
all using a fixed layout */
|
all using a fixed layout */
|
||||||
@@ -241,7 +241,7 @@ var WindowClone = new Lang.Class({
|
|||||||
Signals.addSignalMethods(WindowClone.prototype);
|
Signals.addSignalMethods(WindowClone.prototype);
|
||||||
|
|
||||||
|
|
||||||
const ThumbnailState = {
|
var ThumbnailState = {
|
||||||
NEW : 0,
|
NEW : 0,
|
||||||
ANIMATING_IN : 1,
|
ANIMATING_IN : 1,
|
||||||
NORMAL: 2,
|
NORMAL: 2,
|
||||||
|
134
po/zh_TW.po
134
po/zh_TW.po
@@ -8,8 +8,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnome-shell 3.3.90\n"
|
"Project-Id-Version: gnome-shell 3.3.90\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-05 21:11+0000\n"
|
"POT-Creation-Date: 2018-06-08 17:30+0000\n"
|
||||||
"PO-Revision-Date: 2018-03-10 20:30+0800\n"
|
"PO-Revision-Date: 2018-06-09 11:17+0800\n"
|
||||||
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
|
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
|
||||||
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
|
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
|
||||||
"Language: zh_TW\n"
|
"Language: zh_TW\n"
|
||||||
@@ -17,7 +17,7 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
"X-Generator: Poedit 2.0.6\n"
|
"X-Generator: Poedit 2.0.8\n"
|
||||||
|
|
||||||
#: data/50-gnome-shell-system.xml:6
|
#: data/50-gnome-shell-system.xml:6
|
||||||
msgid "System"
|
msgid "System"
|
||||||
@@ -308,7 +308,7 @@ msgid "There was an error loading the preferences dialog for %s:"
|
|||||||
msgstr "載入 %s 的偏好設定對話盒時發生錯誤:"
|
msgstr "載入 %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"
|
||||||
@@ -328,20 +328,20 @@ msgctxt "button"
|
|||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "登入"
|
msgstr "登入"
|
||||||
|
|
||||||
#: js/gdm/loginDialog.js:315
|
#: js/gdm/loginDialog.js:319
|
||||||
msgid "Choose Session"
|
msgid "Choose Session"
|
||||||
msgstr "選擇工作階段"
|
msgstr "選擇工作階段"
|
||||||
|
|
||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: js/gdm/loginDialog.js:458
|
#: js/gdm/loginDialog.js:462
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "沒有列出來?"
|
msgstr "沒有列出來?"
|
||||||
|
|
||||||
#. Translators: this message is shown below the username entry field
|
#. Translators: this message is shown below the username entry field
|
||||||
#. to clue the user in on how to login to the local network realm
|
#. to clue the user in on how to login to the local network realm
|
||||||
#: js/gdm/loginDialog.js:887
|
#: js/gdm/loginDialog.js:891
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "(e.g., user or %s)"
|
msgid "(e.g., user or %s)"
|
||||||
msgstr "(例如: user 或 %s)"
|
msgstr "(例如: user 或 %s)"
|
||||||
@@ -349,12 +349,12 @@ msgstr "(例如: user 或 %s)"
|
|||||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||||
#. is not visible here since we only care about phase2 authentication
|
#. is not visible here since we only care about phase2 authentication
|
||||||
#. (and don't even care of which one)
|
#. (and don't even care of which one)
|
||||||
#: js/gdm/loginDialog.js:892 js/ui/components/networkAgent.js:243
|
#: js/gdm/loginDialog.js:896 js/ui/components/networkAgent.js:243
|
||||||
#: js/ui/components/networkAgent.js:261
|
#: js/ui/components/networkAgent.js:261
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "使用者名稱:"
|
msgstr "使用者名稱:"
|
||||||
|
|
||||||
#: js/gdm/loginDialog.js:1228
|
#: js/gdm/loginDialog.js:1234
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "登入視窗"
|
msgstr "登入視窗"
|
||||||
|
|
||||||
@@ -601,32 +601,32 @@ msgstr "常用"
|
|||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "全部"
|
msgstr "全部"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1886
|
#: js/ui/appDisplay.js:1889
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "新視窗"
|
msgstr "新視窗"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1900
|
#: js/ui/appDisplay.js:1903
|
||||||
msgid "Launch using Dedicated Graphics Card"
|
msgid "Launch using Dedicated Graphics Card"
|
||||||
msgstr "使用獨立顯卡啟動"
|
msgstr "使用獨立顯卡啟動"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1927 js/ui/dash.js:285
|
#: js/ui/appDisplay.js:1930 js/ui/dash.js:285
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "自喜好中移除"
|
msgstr "自喜好中移除"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1933
|
#: js/ui/appDisplay.js:1936
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "加入喜好"
|
msgstr "加入喜好"
|
||||||
|
|
||||||
#: js/ui/appDisplay.js:1943
|
#: js/ui/appDisplay.js:1946
|
||||||
msgid "Show Details"
|
msgid "Show Details"
|
||||||
msgstr "顯示詳細資訊"
|
msgstr "顯示詳細資訊"
|
||||||
|
|
||||||
#: 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 已加入您的喜好中。"
|
msgstr "%s 已加入您的喜好中。"
|
||||||
|
|
||||||
#: 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 已經從您的喜好中移除。"
|
msgstr "%s 已經從您的喜好中移除。"
|
||||||
@@ -787,22 +787,22 @@ msgid "Clear All"
|
|||||||
msgstr "全部清除"
|
msgstr "全部清除"
|
||||||
|
|
||||||
#. Translators: %s is an application name
|
#. Translators: %s is an application name
|
||||||
#: js/ui/closeDialog.js:44
|
#: js/ui/closeDialog.js:47
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "“%s” is not responding."
|
msgid "“%s” is not responding."
|
||||||
msgstr "「%s」沒有回應。"
|
msgstr "「%s」沒有回應。"
|
||||||
|
|
||||||
#: js/ui/closeDialog.js:45
|
#: js/ui/closeDialog.js:48
|
||||||
msgid ""
|
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 "您可以選擇再等一下讓它繼續,或是強制讓應用程式立刻退出。"
|
||||||
|
|
||||||
#: js/ui/closeDialog.js:61
|
#: js/ui/closeDialog.js:64
|
||||||
msgid "Force Quit"
|
msgid "Force Quit"
|
||||||
msgstr "強制退出"
|
msgstr "強制退出"
|
||||||
|
|
||||||
#: js/ui/closeDialog.js:64
|
#: js/ui/closeDialog.js:67
|
||||||
msgid "Wait"
|
msgid "Wait"
|
||||||
msgstr "等待"
|
msgstr "等待"
|
||||||
|
|
||||||
@@ -819,7 +819,7 @@ msgstr "外部裝置已拔除"
|
|||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "用 %s 開啟"
|
msgstr "用 %s 開啟"
|
||||||
|
|
||||||
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:284
|
#: js/ui/components/keyring.js:107 js/ui/components/polkitAgent.js:297
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "密碼: "
|
msgstr "密碼: "
|
||||||
|
|
||||||
@@ -856,18 +856,18 @@ msgstr "私密金鑰密碼:"
|
|||||||
msgid "Service: "
|
msgid "Service: "
|
||||||
msgstr "服務:"
|
msgstr "服務:"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:292 js/ui/components/networkAgent.js:659
|
#: js/ui/components/networkAgent.js:292 js/ui/components/networkAgent.js:664
|
||||||
msgid "Authentication required by wireless network"
|
msgid "Authentication required by wireless network"
|
||||||
msgstr "無線網路所需要的核對"
|
msgstr "無線網路所需要的核對"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:293 js/ui/components/networkAgent.js:660
|
#: js/ui/components/networkAgent.js:293 js/ui/components/networkAgent.js:665
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Passwords or encryption keys are required to access the wireless network "
|
"Passwords or encryption keys are required to access the wireless network "
|
||||||
"“%s”."
|
"“%s”."
|
||||||
msgstr "需要密碼或是加密金鑰來存取無線網路「%s」。"
|
msgstr "需要密碼或是加密金鑰來存取無線網路「%s」。"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:297 js/ui/components/networkAgent.js:663
|
#: js/ui/components/networkAgent.js:297 js/ui/components/networkAgent.js:668
|
||||||
msgid "Wired 802.1X authentication"
|
msgid "Wired 802.1X authentication"
|
||||||
msgstr "有線網路 802.1X 核對"
|
msgstr "有線網路 802.1X 核對"
|
||||||
|
|
||||||
@@ -875,15 +875,15 @@ msgstr "有線網路 802.1X 核對"
|
|||||||
msgid "Network name: "
|
msgid "Network name: "
|
||||||
msgstr "網路名稱:"
|
msgstr "網路名稱:"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:304 js/ui/components/networkAgent.js:667
|
#: js/ui/components/networkAgent.js:304 js/ui/components/networkAgent.js:672
|
||||||
msgid "DSL authentication"
|
msgid "DSL authentication"
|
||||||
msgstr "DSL 核對"
|
msgstr "DSL 核對"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:311 js/ui/components/networkAgent.js:673
|
#: js/ui/components/networkAgent.js:311 js/ui/components/networkAgent.js:678
|
||||||
msgid "PIN code required"
|
msgid "PIN code required"
|
||||||
msgstr "需要 PIN 碼"
|
msgstr "需要 PIN 碼"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:674
|
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:679
|
||||||
msgid "PIN code is needed for the mobile broadband device"
|
msgid "PIN code is needed for the mobile broadband device"
|
||||||
msgstr "這個行動寬頻裝置需要 PIN 碼"
|
msgstr "這個行動寬頻裝置需要 PIN 碼"
|
||||||
|
|
||||||
@@ -891,29 +891,29 @@ msgstr "這個行動寬頻裝置需要 PIN 碼"
|
|||||||
msgid "PIN: "
|
msgid "PIN: "
|
||||||
msgstr "PIN: "
|
msgstr "PIN: "
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:320 js/ui/components/networkAgent.js:680
|
#: js/ui/components/networkAgent.js:320 js/ui/components/networkAgent.js:685
|
||||||
msgid "Mobile broadband network password"
|
msgid "Mobile broadband network password"
|
||||||
msgstr "行動寬頻網路密碼"
|
msgstr "行動寬頻網路密碼"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:321 js/ui/components/networkAgent.js:664
|
#: js/ui/components/networkAgent.js:321 js/ui/components/networkAgent.js:669
|
||||||
#: js/ui/components/networkAgent.js:668 js/ui/components/networkAgent.js:681
|
#: js/ui/components/networkAgent.js:673 js/ui/components/networkAgent.js:686
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "A password is required to connect to “%s”."
|
msgid "A password is required to connect to “%s”."
|
||||||
msgstr "連線至「%s」需要密碼。"
|
msgstr "連線至「%s」需要密碼。"
|
||||||
|
|
||||||
#: js/ui/components/networkAgent.js:648 js/ui/status/network.js:1691
|
#: js/ui/components/networkAgent.js:653 js/ui/status/network.js:1704
|
||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "網路管理員"
|
msgstr "網路管理員"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:43
|
#: js/ui/components/polkitAgent.js:48
|
||||||
msgid "Authentication Required"
|
msgid "Authentication Required"
|
||||||
msgstr "要求核對"
|
msgstr "要求核對"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:71
|
#: js/ui/components/polkitAgent.js:76
|
||||||
msgid "Administrator"
|
msgid "Administrator"
|
||||||
msgstr "管理員"
|
msgstr "管理員"
|
||||||
|
|
||||||
#: js/ui/components/polkitAgent.js:151
|
#: js/ui/components/polkitAgent.js:156
|
||||||
msgid "Authenticate"
|
msgid "Authenticate"
|
||||||
msgstr "核對"
|
msgstr "核對"
|
||||||
|
|
||||||
@@ -921,7 +921,7 @@ msgstr "核對"
|
|||||||
#. * 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:283 js/ui/shellMountOperation.js:327
|
||||||
msgid "Sorry, that didn’t work. Please try again."
|
msgid "Sorry, that didn’t work. Please try again."
|
||||||
msgstr "抱歉,那沒有作用。請再試一次。"
|
msgstr "抱歉,那沒有作用。請再試一次。"
|
||||||
|
|
||||||
@@ -969,7 +969,7 @@ msgstr "加入世界時鐘…"
|
|||||||
msgid "World Clocks"
|
msgid "World Clocks"
|
||||||
msgstr "世界時鐘"
|
msgstr "世界時鐘"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:225
|
#: js/ui/dateMenu.js:227
|
||||||
msgid "Weather"
|
msgid "Weather"
|
||||||
msgstr "天氣"
|
msgstr "天氣"
|
||||||
|
|
||||||
@@ -977,7 +977,7 @@ msgstr "天氣"
|
|||||||
#. 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。"
|
msgstr "全天%s。"
|
||||||
@@ -986,7 +986,7 @@ msgstr "全天%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:295
|
#: js/ui/dateMenu.js:297
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s, then %s later."
|
msgid "%s, then %s later."
|
||||||
msgstr "%s,較晚%s。"
|
msgstr "%s,較晚%s。"
|
||||||
@@ -995,30 +995,30 @@ msgstr "%s,較晚%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,然後%s,接著較晚%s。"
|
msgstr "%s,然後%s,接著較晚%s。"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:312
|
#: js/ui/dateMenu.js:314
|
||||||
msgid "Select a location…"
|
msgid "Select a location…"
|
||||||
msgstr "選擇位置…"
|
msgstr "選擇位置…"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:315
|
#: js/ui/dateMenu.js:317
|
||||||
msgid "Loading…"
|
msgid "Loading…"
|
||||||
msgstr "載入中…"
|
msgstr "載入中…"
|
||||||
|
|
||||||
#. 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 "體感溫度 %s。"
|
msgstr "體感溫度 %s。"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:324
|
#: js/ui/dateMenu.js:326
|
||||||
msgid "Go online for weather information"
|
msgid "Go online for weather information"
|
||||||
msgstr "上線以取得天氣資訊"
|
msgstr "上線以取得天氣資訊"
|
||||||
|
|
||||||
#: js/ui/dateMenu.js:326
|
#: js/ui/dateMenu.js:328
|
||||||
msgid "Weather information is currently unavailable"
|
msgid "Weather information is currently unavailable"
|
||||||
msgstr "天氣資訊目前不可使用"
|
msgstr "天氣資訊目前不可使用"
|
||||||
|
|
||||||
@@ -1239,13 +1239,13 @@ msgid "Leave On"
|
|||||||
msgstr "離開"
|
msgstr "離開"
|
||||||
|
|
||||||
#: js/ui/kbdA11yDialog.js:59 js/ui/status/bluetooth.js:143
|
#: js/ui/kbdA11yDialog.js:59 js/ui/status/bluetooth.js:143
|
||||||
#: js/ui/status/network.js:1281
|
#: js/ui/status/network.js:1294
|
||||||
msgid "Turn On"
|
msgid "Turn On"
|
||||||
msgstr "開啟"
|
msgstr "開啟"
|
||||||
|
|
||||||
#: js/ui/kbdA11yDialog.js:67 js/ui/status/bluetooth.js:143
|
#: js/ui/kbdA11yDialog.js:67 js/ui/status/bluetooth.js:143
|
||||||
#: js/ui/status/network.js:154 js/ui/status/network.js:337
|
#: js/ui/status/network.js:154 js/ui/status/network.js:337
|
||||||
#: js/ui/status/network.js:1281 js/ui/status/network.js:1396
|
#: js/ui/status/network.js:1294 js/ui/status/network.js:1409
|
||||||
#: js/ui/status/nightLight.js:47 js/ui/status/rfkill.js:90
|
#: js/ui/status/nightLight.js:47 js/ui/status/rfkill.js:90
|
||||||
#: js/ui/status/rfkill.js:117
|
#: js/ui/status/rfkill.js:117
|
||||||
msgid "Turn Off"
|
msgid "Turn Off"
|
||||||
@@ -1307,7 +1307,7 @@ msgstr "檢示來源"
|
|||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "網頁"
|
msgstr "網頁"
|
||||||
|
|
||||||
#: js/ui/messageTray.js:1493
|
#: js/ui/messageTray.js:1495
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "系統資訊"
|
msgstr "系統資訊"
|
||||||
|
|
||||||
@@ -1622,7 +1622,7 @@ msgid "<unknown>"
|
|||||||
msgstr "<不明>"
|
msgstr "<不明>"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:441 js/ui/status/network.js:1310
|
#: js/ui/status/network.js:441 js/ui/status/network.js:1323
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Off"
|
msgid "%s Off"
|
||||||
msgstr "%s 關閉"
|
msgstr "%s 關閉"
|
||||||
@@ -1648,7 +1648,7 @@ msgid "%s Disconnecting"
|
|||||||
msgstr "%s 正在斷線"
|
msgstr "%s 正在斷線"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:459 js/ui/status/network.js:1302
|
#: js/ui/status/network.js:459 js/ui/status/network.js:1315
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Connecting"
|
msgid "%s Connecting"
|
||||||
msgstr "正連線到 %s"
|
msgstr "正連線到 %s"
|
||||||
@@ -1688,7 +1688,7 @@ msgid "Mobile Broadband Settings"
|
|||||||
msgstr "行動寬頻設定值"
|
msgstr "行動寬頻設定值"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:578 js/ui/status/network.js:1307
|
#: js/ui/status/network.js:578 js/ui/status/network.js:1320
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Hardware Disabled"
|
msgid "%s Hardware Disabled"
|
||||||
msgstr "%s 硬體已停用"
|
msgstr "%s 硬體已停用"
|
||||||
@@ -1744,78 +1744,78 @@ msgstr "沒有網路"
|
|||||||
msgid "Use hardware switch to turn off"
|
msgid "Use hardware switch to turn off"
|
||||||
msgstr "使用硬體開關來關閉"
|
msgstr "使用硬體開關來關閉"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1173
|
#: js/ui/status/network.js:1186
|
||||||
msgid "Select Network"
|
msgid "Select Network"
|
||||||
msgstr "選擇網路"
|
msgstr "選擇網路"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1179
|
#: js/ui/status/network.js:1192
|
||||||
msgid "Wi-Fi Settings"
|
msgid "Wi-Fi Settings"
|
||||||
msgstr "Wi-Fi 設定值"
|
msgstr "Wi-Fi 設定值"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:1298
|
#: js/ui/status/network.js:1311
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Hotspot Active"
|
msgid "%s Hotspot Active"
|
||||||
msgstr "%s 熱點有效"
|
msgstr "%s 熱點有效"
|
||||||
|
|
||||||
#. Translators: %s is a network identifier
|
#. Translators: %s is a network identifier
|
||||||
#: js/ui/status/network.js:1313
|
#: js/ui/status/network.js:1326
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Not Connected"
|
msgid "%s Not Connected"
|
||||||
msgstr "%s 未連線"
|
msgstr "%s 未連線"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1413
|
#: js/ui/status/network.js:1426
|
||||||
msgid "connecting…"
|
msgid "connecting…"
|
||||||
msgstr "連線中…"
|
msgstr "連線中…"
|
||||||
|
|
||||||
#. Translators: this is for network connections that require some kind of key or password
|
#. Translators: this is for network connections that require some kind of key or password
|
||||||
#: js/ui/status/network.js:1416
|
#: js/ui/status/network.js:1429
|
||||||
msgid "authentication required"
|
msgid "authentication required"
|
||||||
msgstr "要求核對"
|
msgstr "要求核對"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1418
|
#: js/ui/status/network.js:1431
|
||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "連線失敗"
|
msgstr "連線失敗"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1472
|
#: js/ui/status/network.js:1485
|
||||||
msgid "VPN Settings"
|
msgid "VPN Settings"
|
||||||
msgstr "VPN 設定值"
|
msgstr "VPN 設定值"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1485
|
#: js/ui/status/network.js:1498
|
||||||
msgid "VPN"
|
msgid "VPN"
|
||||||
msgstr "VPN"
|
msgstr "VPN"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1495
|
#: js/ui/status/network.js:1508
|
||||||
msgid "VPN Off"
|
msgid "VPN Off"
|
||||||
msgstr "VPN 關閉"
|
msgstr "VPN 關閉"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1559 js/ui/status/rfkill.js:93
|
#: js/ui/status/network.js:1572 js/ui/status/rfkill.js:93
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "網路設定值"
|
msgstr "網路設定值"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1588
|
#: js/ui/status/network.js:1601
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Wired Connection"
|
msgid "%s Wired Connection"
|
||||||
msgid_plural "%s Wired Connections"
|
msgid_plural "%s Wired Connections"
|
||||||
msgstr[0] "%s 個有線網路連線"
|
msgstr[0] "%s 個有線網路連線"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1592
|
#: js/ui/status/network.js:1605
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Wi-Fi Connection"
|
msgid "%s Wi-Fi Connection"
|
||||||
msgid_plural "%s Wi-Fi Connections"
|
msgid_plural "%s Wi-Fi Connections"
|
||||||
msgstr[0] "%s 個 Wi-Fi 連線"
|
msgstr[0] "%s 個 Wi-Fi 連線"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1596
|
#: js/ui/status/network.js:1609
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "%s Modem Connection"
|
msgid "%s Modem Connection"
|
||||||
msgid_plural "%s Modem Connections"
|
msgid_plural "%s Modem Connections"
|
||||||
msgstr[0] "%s 個數據機連線"
|
msgstr[0] "%s 個數據機連線"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1728
|
#: js/ui/status/network.js:1741
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "連線失敗"
|
msgstr "連線失敗"
|
||||||
|
|
||||||
#: js/ui/status/network.js:1729
|
#: js/ui/status/network.js:1742
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "啟動網路連線失敗"
|
msgstr "啟動網路連線失敗"
|
||||||
|
|
||||||
@@ -1918,7 +1918,7 @@ msgstr "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 "無法授權該 Thunderbolt 裝置:%s"
|
msgstr "無法授權該 Thunderbolt 裝置:%s"
|
||||||
|
|
||||||
#: js/ui/status/volume.js:128
|
#: js/ui/status/volume.js:128
|
||||||
|
@@ -31,6 +31,8 @@ struct _ShellScreenshotPrivate
|
|||||||
char *filename;
|
char *filename;
|
||||||
char *filename_used;
|
char *filename_used;
|
||||||
|
|
||||||
|
GDateTime *datetime;
|
||||||
|
|
||||||
cairo_surface_t *image;
|
cairo_surface_t *image;
|
||||||
cairo_rectangle_int_t screenshot_area;
|
cairo_rectangle_int_t screenshot_area;
|
||||||
|
|
||||||
@@ -72,6 +74,7 @@ on_screenshot_written (GObject *source,
|
|||||||
g_clear_pointer (&priv->image, cairo_surface_destroy);
|
g_clear_pointer (&priv->image, cairo_surface_destroy);
|
||||||
g_clear_pointer (&priv->filename, g_free);
|
g_clear_pointer (&priv->filename, g_free);
|
||||||
g_clear_pointer (&priv->filename_used, g_free);
|
g_clear_pointer (&priv->filename_used, g_free);
|
||||||
|
g_clear_pointer (&priv->datetime, g_date_time_unref);
|
||||||
|
|
||||||
meta_enable_unredirect_for_screen (shell_global_get_screen (priv->global));
|
meta_enable_unredirect_for_screen (shell_global_get_screen (priv->global));
|
||||||
}
|
}
|
||||||
@@ -175,6 +178,7 @@ write_screenshot_thread (GTask *result,
|
|||||||
GOutputStream *stream;
|
GOutputStream *stream;
|
||||||
ShellScreenshot *screenshot = SHELL_SCREENSHOT (object);
|
ShellScreenshot *screenshot = SHELL_SCREENSHOT (object);
|
||||||
ShellScreenshotPrivate *priv;
|
ShellScreenshotPrivate *priv;
|
||||||
|
char *creation_time;
|
||||||
|
|
||||||
g_assert (screenshot != NULL);
|
g_assert (screenshot != NULL);
|
||||||
|
|
||||||
@@ -193,14 +197,18 @@ write_screenshot_thread (GTask *result,
|
|||||||
0, 0,
|
0, 0,
|
||||||
cairo_image_surface_get_width (priv->image),
|
cairo_image_surface_get_width (priv->image),
|
||||||
cairo_image_surface_get_height (priv->image));
|
cairo_image_surface_get_height (priv->image));
|
||||||
|
creation_time = g_date_time_format (priv->datetime, "%c");
|
||||||
|
|
||||||
if (gdk_pixbuf_save_to_stream (pixbuf, stream, "png", NULL, NULL,
|
if (gdk_pixbuf_save_to_stream (pixbuf, stream, "png", NULL, NULL,
|
||||||
"tEXt::Software", "gnome-screenshot", NULL))
|
"tEXt::Software", "gnome-screenshot",
|
||||||
|
"tEXt::Creation Time", creation_time,
|
||||||
|
NULL))
|
||||||
status = CAIRO_STATUS_SUCCESS;
|
status = CAIRO_STATUS_SUCCESS;
|
||||||
else
|
else
|
||||||
status = CAIRO_STATUS_WRITE_ERROR;
|
status = CAIRO_STATUS_WRITE_ERROR;
|
||||||
|
|
||||||
g_object_unref (pixbuf);
|
g_object_unref (pixbuf);
|
||||||
|
g_free (creation_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -241,6 +249,7 @@ do_grab_screenshot (ShellScreenshot *screenshot,
|
|||||||
n_captures,
|
n_captures,
|
||||||
x, y,
|
x, y,
|
||||||
width, height);
|
width, height);
|
||||||
|
priv->datetime = g_date_time_new_now_local ();
|
||||||
|
|
||||||
for (i = 0; i < n_captures; i++)
|
for (i = 0; i < n_captures; i++)
|
||||||
cairo_surface_destroy (captures[i].image);
|
cairo_surface_destroy (captures[i].image);
|
||||||
@@ -432,6 +441,7 @@ grab_window_screenshot (ClutterActor *stage,
|
|||||||
|
|
||||||
stex = META_SHAPED_TEXTURE (meta_window_actor_get_texture (META_WINDOW_ACTOR (window_actor)));
|
stex = META_SHAPED_TEXTURE (meta_window_actor_get_texture (META_WINDOW_ACTOR (window_actor)));
|
||||||
priv->image = meta_shaped_texture_get_image (stex, &clip);
|
priv->image = meta_shaped_texture_get_image (stex, &clip);
|
||||||
|
priv->datetime = g_date_time_new_now_local ();
|
||||||
|
|
||||||
settings = g_settings_new (A11Y_APPS_SCHEMA);
|
settings = g_settings_new (A11Y_APPS_SCHEMA);
|
||||||
if (priv->include_cursor && !g_settings_get_boolean (settings, MAGNIFIER_ACTIVE_KEY))
|
if (priv->include_cursor && !g_settings_get_boolean (settings, MAGNIFIER_ACTIVE_KEY))
|
||||||
|
@@ -180,6 +180,7 @@ 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);
|
||||||
|
@@ -117,6 +117,7 @@ _st_set_text_from_style (ClutterText *text,
|
|||||||
const PangoFontDescription *font;
|
const PangoFontDescription *font;
|
||||||
StTextAlign align;
|
StTextAlign align;
|
||||||
gdouble spacing;
|
gdouble spacing;
|
||||||
|
gchar *font_features;
|
||||||
|
|
||||||
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);
|
||||||
@@ -151,6 +152,13 @@ _st_set_text_from_style (ClutterText *text,
|
|||||||
pango_attr_list_insert (attribs, letter_spacing);
|
pango_attr_list_insert (attribs, letter_spacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
font_features = st_theme_node_get_font_features (theme_node);
|
||||||
|
if (font_features)
|
||||||
|
{
|
||||||
|
pango_attr_list_insert (attribs, pango_attr_font_features_new (font_features));
|
||||||
|
g_free (font_features);
|
||||||
|
}
|
||||||
|
|
||||||
clutter_text_set_attributes (text, attribs);
|
clutter_text_set_attributes (text, attribs);
|
||||||
|
|
||||||
if (attribs)
|
if (attribs)
|
||||||
|
@@ -37,6 +37,7 @@ 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 * */
|
||||||
@@ -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,
|
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,
|
||||||
@@ -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_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);
|
||||||
|
|
||||||
@@ -520,6 +526,8 @@ 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)
|
||||||
{
|
{
|
||||||
@@ -986,7 +994,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_cache, key);
|
g_hash_table_remove (cache->priv->keyed_surface_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);
|
||||||
@@ -1273,6 +1281,9 @@ 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);
|
||||||
@@ -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));
|
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)
|
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)
|
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
|
||||||
{
|
{
|
||||||
cairo_surface_reference (surface);
|
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
|
else
|
||||||
|
@@ -3019,6 +3019,39 @@ st_theme_node_get_font (StThemeNode *node)
|
|||||||
return node->font_desc;
|
return node->font_desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gchar *
|
||||||
|
st_theme_node_get_font_features (StThemeNode *node)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
ensure_properties (node);
|
||||||
|
|
||||||
|
for (i = node->n_properties - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
CRDeclaration *decl = node->properties[i];
|
||||||
|
|
||||||
|
if (strcmp (decl->property->stryng->str, "font-feature-settings") == 0)
|
||||||
|
{
|
||||||
|
CRTerm *term = decl->value;
|
||||||
|
|
||||||
|
if (!term->next && term->type == TERM_IDENT)
|
||||||
|
{
|
||||||
|
gchar *ident = term->content.str->stryng->str;
|
||||||
|
|
||||||
|
if (strcmp (ident, "inherit") == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (strcmp (ident, "normal") == 0)
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (gchar *)cr_term_to_string (term);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return node->parent_node ? st_theme_node_get_font_features (node->parent_node) : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_theme_node_get_border_image:
|
* st_theme_node_get_border_image:
|
||||||
* @node: a #StThemeNode
|
* @node: a #StThemeNode
|
||||||
|
@@ -232,6 +232,8 @@ double st_theme_node_get_letter_spacing (StThemeNode *node);
|
|||||||
*/
|
*/
|
||||||
const PangoFontDescription *st_theme_node_get_font (StThemeNode *node);
|
const PangoFontDescription *st_theme_node_get_font (StThemeNode *node);
|
||||||
|
|
||||||
|
gchar *st_theme_node_get_font_features (StThemeNode *node);
|
||||||
|
|
||||||
StBorderImage *st_theme_node_get_border_image (StThemeNode *node);
|
StBorderImage *st_theme_node_get_border_image (StThemeNode *node);
|
||||||
StShadow *st_theme_node_get_box_shadow (StThemeNode *node);
|
StShadow *st_theme_node_get_box_shadow (StThemeNode *node);
|
||||||
StShadow *st_theme_node_get_text_shadow (StThemeNode *node);
|
StShadow *st_theme_node_get_text_shadow (StThemeNode *node);
|
||||||
|
@@ -59,6 +59,24 @@ assert_font (StThemeNode *node,
|
|||||||
g_free (value);
|
g_free (value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
assert_font_features (StThemeNode *node,
|
||||||
|
const char *node_description,
|
||||||
|
const char *expected)
|
||||||
|
{
|
||||||
|
char *value = st_theme_node_get_font_features (node);
|
||||||
|
|
||||||
|
if (g_strcmp0 (expected, value) != 0)
|
||||||
|
{
|
||||||
|
g_print ("%s: %s.font-feature-settings: expected: %s, got: %s\n",
|
||||||
|
test, node_description, expected, value);
|
||||||
|
fail = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value)
|
||||||
|
g_free (value);
|
||||||
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
text_decoration_to_string (StTextDecoration decoration)
|
text_decoration_to_string (StTextDecoration decoration)
|
||||||
{
|
{
|
||||||
@@ -396,7 +414,7 @@ test_background (void)
|
|||||||
/* text1 inherits the background image but not the color */
|
/* text1 inherits the background image but not the color */
|
||||||
assert_background_color (text1, "text1", 0x00000000);
|
assert_background_color (text1, "text1", 0x00000000);
|
||||||
assert_background_image (text1, "text1", "st/some-background.png");
|
assert_background_image (text1, "text1", "st/some-background.png");
|
||||||
/* text1 inherits inherits both, but then background: none overrides both */
|
/* text2 inherits both, but then background: none overrides both */
|
||||||
assert_background_color (text2, "text2", 0x00000000);
|
assert_background_color (text2, "text2", 0x00000000);
|
||||||
assert_background_image (text2, "text2", NULL);
|
assert_background_image (text2, "text2", NULL);
|
||||||
/* background-image property */
|
/* background-image property */
|
||||||
@@ -413,6 +431,22 @@ test_font (void)
|
|||||||
assert_font (text3, "text3", "serif Bold Oblique Small-Caps 24px");
|
assert_font (text3, "text3", "serif Bold Oblique Small-Caps 24px");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_font_features (void)
|
||||||
|
{
|
||||||
|
test = "font_features";
|
||||||
|
/* group1 has font-feature-settings: "tnum" */
|
||||||
|
assert_font_features (group1, "group1", "\"tnum\"");
|
||||||
|
/* text2 should inherit from group1 */
|
||||||
|
assert_font_features (text2, "text2", "\"tnum\"");
|
||||||
|
/* group2 has font-feature-settings: "tnum", "zero" */
|
||||||
|
assert_font_features (group2, "group2", "\"tnum\", \"zero\"");
|
||||||
|
/* text3 should inherit from group2 using the inherit keyword */
|
||||||
|
assert_font_features (text3, "text3", "\"tnum\", \"zero\"");
|
||||||
|
/* text4 has font-feature-settings: normal */
|
||||||
|
assert_font_features (text4, "text4", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_pseudo_class (void)
|
test_pseudo_class (void)
|
||||||
{
|
{
|
||||||
@@ -554,6 +588,7 @@ main (int argc, char **argv)
|
|||||||
test_border ();
|
test_border ();
|
||||||
test_background ();
|
test_background ();
|
||||||
test_font ();
|
test_font ();
|
||||||
|
test_font_features ();
|
||||||
test_pseudo_class ();
|
test_pseudo_class ();
|
||||||
test_inline_style ();
|
test_inline_style ();
|
||||||
|
|
||||||
|
@@ -13,6 +13,8 @@ stage {
|
|||||||
margin-left: 1in;
|
margin-left: 1in;
|
||||||
|
|
||||||
background: #ff0000 url('some-background.png');
|
background: #ff0000 url('some-background.png');
|
||||||
|
|
||||||
|
font-feature-settings: "tnum";
|
||||||
}
|
}
|
||||||
|
|
||||||
#text1 {
|
#text1 {
|
||||||
@@ -35,6 +37,7 @@ ClutterTexture.special-text {
|
|||||||
|
|
||||||
#group2 {
|
#group2 {
|
||||||
font: italic 12px serif;
|
font: italic 12px serif;
|
||||||
|
font-feature-settings: "tnum", "zero";
|
||||||
}
|
}
|
||||||
|
|
||||||
#text3 {
|
#text3 {
|
||||||
@@ -42,6 +45,11 @@ ClutterTexture.special-text {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-style: oblique;
|
font-style: oblique;
|
||||||
font-size: 200%;
|
font-size: 200%;
|
||||||
|
font-feature-settings: "pnum";
|
||||||
|
}
|
||||||
|
|
||||||
|
#text4 {
|
||||||
|
font-feature-settings: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClutterTexture {
|
ClutterTexture {
|
||||||
@@ -60,6 +68,10 @@ stage > #text2 {
|
|||||||
color: #ff0000;
|
color: #ff0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#group2 > #text3 {
|
||||||
|
font-feature-settings: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
#group2 {
|
#group2 {
|
||||||
background-image: url('other-background.png');
|
background-image: url('other-background.png');
|
||||||
padding: 1px 2px 3px 4px;
|
padding: 1px 2px 3px 4px;
|
||||||
|
Reference in New Issue
Block a user