Compare commits

...

22 Commits

Author SHA1 Message Date
Florian Müllner 913b2ba691 Bump version to 3.30.0 2018-09-04 00:10:36 +02:00
Florian Müllner ba51869b93 Bump version to 3.29.91
Update NEWS.
2018-08-20 15:48:53 +02:00
Florian Müllner ffe6110ea9 Stop using conditional catch statements
They are a mozilla extension that is going away in SpiderMonkey 60.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/90
2018-08-13 12:00:22 +02:00
Florian Müllner 8b1bcc9fed Bump version to 3.29.90
Update NEWS.
2018-08-01 03:47:30 +02:00
Florian Müllner ebad80c64d Update sass submodule 2018-08-01 03:46:05 +02:00
Florian Müllner 39caf951e0 data: Use override for default alt-tab keybindings
Per-desktop overrides aren't limited to keys in org.gnome.mutter, so
we can use them instead of the alternate-tab extension to default to
the window switcher in the classic session.

https://bugzilla.gnome.org/show_bug.cgi?id=786496
2018-07-09 19:18:54 +02:00
Florian Müllner ecf28e13b4 window-list: Use correct settings schemas
Override schemas are gone (yay!), so we can now simply use the original
schema independent from the used session mode.

https://bugzilla.gnome.org/show_bug.cgi?id=786496
2018-07-09 19:18:54 +02:00
Florian Müllner a01b44f7de data: Replace override schema with per-desktop override
GSettings now recognizes per-desktop overrides that can be used
to change schemas' default values for classic mode, so use that
instead of the separate override schema we currently use with
mutter's custom override mechanism.

https://bugzilla.gnome.org/show_bug.cgi?id=786496
2018-07-09 19:18:54 +02:00
Florian Müllner 6b1926bab3 Bump version to 3.29.3
Update NEWS.
2018-07-09 19:09:13 +02:00
Florian Müllner 64986740e3 Update sass submodule 2018-07-09 19:08:15 +02:00
Jonas Ådahl 6583eae622 Remove usage of MetaScreen
As of the libmutter API version 3 MetaScreen does no longer exist.
Functionality that previously depended on MetaScreen has been moved
elsewhere (e.g. MetaDisplay or MetaWorkspaceManager etc).

https://bugzilla.gnome.org/show_bug.cgi?id=759538
2018-07-06 19:53:08 +02:00
Florian Müllner 9add688abf Actually bump version number
Gah ...
2018-05-24 19:06:33 +02:00
Florian Müllner a85764a0ab Bump version to 3.29.2
Update NEWS.
2018-05-24 19:04:07 +02:00
Florian Müllner eaa2c7857e Update submodule URL
gnome-shell-sass was migrated to gitlab, so update to the correct URL
instead of relying on the redirect.
2018-05-24 19:04:07 +02:00
Florian Müllner 6e1b5bc346 Update sass submodule 2018-05-24 19:01:36 +02:00
Florian Müllner f59ab1272d drive-menu: Disconnect volume monitor signals
The handler IDs were renamed at some point, resulting in the signals
not being disconnected on disable.
2018-05-10 18:56:23 +02:00
Florian Müllner f25ffe6f63 build: Include translations in uploaded zip files
The meson port accidentally dropped translations from the generated
zip files for uploading to extensions.gnome.org, add them back.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/69
2018-05-07 12:00:19 +02:00
Florian Müllner 6746061898 Bump version to 3.28.1
Update NEWS.
2018-04-13 20:30:56 +02:00
Florian Müllner 3dc9f2e4ff cleanup: Use Array.includes() to check for element existence
This is a relatively recent addition to the standard we can use where we
don't care about the actual position of an element inside the array.
(Array.includes() and Array.indexOf() do behave differently in edge cases,
for example in the handling of NaN, but those don't matter to us)
2018-04-12 11:05:41 +02:00
Florian Müllner 682d6a8fd1 window-list: Handle no overrides settings
We can only know about override settings that are provided by the
upstream GNOME or GNOME Classic sessions, but not any custom sessions
created by admins, users or distributions. Handle that case by falling
back to the original settings.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/62
2018-04-12 11:05:41 +02:00
Dz Chen d3ea985e14 Update zh_CN translation 2018-03-21 19:21:17 +08:00
Xiaoguang Wang 496ae16cf1 apps-menu: Duplicate destroy actor
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/59
2018-03-13 09:06:00 +08:00
19 changed files with 277 additions and 240 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
[submodule "data/gnome-shell-sass"] [submodule "data/gnome-shell-sass"]
path = data/gnome-shell-sass path = data/gnome-shell-sass
url = https://git.gnome.org/browse/gnome-shell-sass/ url = https://gitlab.gnome.org/GNOME/gnome-shell-sass.git
+42
View File
@@ -1,3 +1,45 @@
3.30.0
======
* Bump version
3.29.91
=======
* Misc. bug fixes [Florian; #90]
Contributors:
Florian Müllner
3.29.90
=======
* Misc. bug fixes [Florian; #786496]
Contributors:
Florian Müllner
3.29.3
======
* Adjust to global.screen removal [Jonas; #759538]
Contributors:
Jonas Ådahl, Florian Müllner
3.29.2
======
* Misc. bug fixes [Florian; #69]
Contributors:
Florian Müllner
3.28.1
======
* Misc. bug fixes [Xiaoguang, Florian; #59, #62]
Contributors:
Florian Müllner, Xiaoguang Wang
Translators:
Dz Chen [zh_CN]
3.28.0 3.28.0
====== ======
@@ -0,0 +1,9 @@
[org.gnome.mutter:GNOME-Classic]
dynamic-workspaces=false
[org.gnome.desktop.wm.preferences:GNOME-Classic]
button-layout='appmenu:minimize,maximize,close'
[org.gnome.desktop.wm.keybindings:GNOME-Classic]
switch-applications=[]
switch-windows=['<Super>Tab','<Alt>Tab']
+2 -2
View File
@@ -59,5 +59,5 @@ custom_target(style + '.css',
install_data(theme_data, install_dir: themedir) install_data(theme_data, install_dir: themedir)
classic_schema = 'org.gnome.shell.extensions.classic-overrides.gschema.xml' classic_override = '00_org.gnome.shell.extensions.classic.gschema.override'
install_data(classic_schema, install_dir: schemadir) install_data(classic_override, install_dir: schemadir)
@@ -1,46 +0,0 @@
<schemalist>
<schema id="org.gnome.shell.extensions.classic-overrides"
path="/org/gnome/shell/extensions/classic-overrides/"
gettext-domain="gnome-shell-extensions">
<key name="attach-modal-dialogs" type="b">
<default>true</default>
<summary>Attach modal dialog to the parent window</summary>
<description>
This key overrides the key in org.gnome.mutter when running
GNOME Shell.
</description>
</key>
<key name="button-layout" type="s">
<default>"appmenu:minimize,maximize,close"</default>
<summary>Arrangement of buttons on the titlebar</summary>
<description>
This key overrides the key in org.gnome.desktop.wm.preferences when running GNOME Shell.
</description>
</key>
<key name="edge-tiling" type="b">
<default>true</default>
<summary>Enable edge tiling when dropping windows on screen edges</summary>
<description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</key>
<key name="workspaces-only-on-primary" type="b">
<default>true</default>
<summary>Workspaces only on primary monitor</summary>
<description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</key>
<key name="focus-change-on-pointer-rest" type="b">
<default>true</default>
<summary>Delay focus changes in mouse mode until the pointer stops moving</summary>
<description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</key>
</schema>
</schemalist>
+1
View File
@@ -22,6 +22,7 @@ for f in $extensiondir/*; do
schema=$schemadir/org.gnome.shell.extensions.$name.gschema.xml schema=$schemadir/org.gnome.shell.extensions.$name.gschema.xml
cp $srcdir/NEWS $srcdir/COPYING $f cp $srcdir/NEWS $srcdir/COPYING $f
cp -r $localedir $f
if [ -f $schema ]; then if [ -f $schema ]; then
mkdir $f/schemas mkdir $f/schemas
+1 -1
View File
@@ -31,7 +31,7 @@ function enable() {
return injections['_keyPressHandler'].call(this, keysym, action); return injections['_keyPressHandler'].call(this, keysym, action);
}; };
Main.wm._forcedWindowSwitcher = function(display, screen, window, binding) { Main.wm._forcedWindowSwitcher = function(display, window, binding) {
/* prevent a corner case where both popups show up at once */ /* prevent a corner case where both popups show up at once */
if (this._workspaceSwitcherPopup != null) if (this._workspaceSwitcherPopup != null)
this._workspaceSwitcherPopup.destroy(); this._workspaceSwitcherPopup.destroy();
-1
View File
@@ -742,7 +742,6 @@ class ApplicationsButton extends PanelMenu.Button {
} }
destroy() { destroy() {
this.menu.actor.get_children().forEach(c => { c.destroy() });
super.destroy(); super.destroy();
} }
}; };
+3 -2
View File
@@ -79,9 +79,10 @@ class WindowMover {
return; return;
// ensure we have the required number of workspaces // ensure we have the required number of workspaces
for (let i = global.screen.n_workspaces; i <= workspaceNum; i++) { let workspaceManager = global.workspace_manager;
for (let i = workspaceManager.n_workspaces; i <= workspaceNum; i++) {
window.change_workspace_by_index(i - 1, false); window.change_workspace_by_index(i - 1, false);
global.screen.append_new_workspace(false, 0); workspaceManager.append_new_workspace(false, 0);
} }
window.change_workspace_by_index(workspaceNum, false); window.change_workspace_by_index(workspaceNum, false);
+5 -5
View File
@@ -175,11 +175,11 @@ class DriveMenu extends PanelMenu.Button {
} }
destroy() { destroy() {
if (this._connectedId) { if (this._addedId) {
this._monitor.disconnect(this._connectedId); this._monitor.disconnect(this._addedId);
this._monitor.disconnect(this._disconnectedId); this._monitor.disconnect(this._removedId);
this._connectedId = 0; this._addedId = 0;
this._disconnectedId = 0; this._removedId = 0;
} }
super.destroy(); super.destroy();
+50 -38
View File
@@ -50,33 +50,35 @@ class PlaceInfo {
return (_ignored, result) => { return (_ignored, result) => {
try { try {
Gio.AppInfo.launch_default_for_uri_finish(result); Gio.AppInfo.launch_default_for_uri_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) {
let source = {
get_icon: () => { return this.icon; }
};
let op = new ShellMountOperation.ShellMountOperation(source);
this.file.mount_enclosing_volume(0, op.mountOp, null, (file, result) => {
try {
op.close();
file.mount_enclosing_volume_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED)) {
// e.g. user canceled the password dialog
return;
} catch(e) {
Main.notifyError(_("Failed to mount volume for “%s”").format(this.name), e.message);
return;
}
if (tryMount) {
let callback = this._createLaunchCallback(launchContext, false);
Gio.AppInfo.launch_default_for_uri_async(file.get_uri(),
launchContext,
null,
callback);
}
});
} catch(e) { } catch(e) {
Main.notifyError(_("Failed to launch “%s”").format(this.name), e.message); if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) {
let source = {
get_icon: () => { return this.icon; }
};
let op = new ShellMountOperation.ShellMountOperation(source);
this.file.mount_enclosing_volume(0, op.mountOp, null, (file, result) => {
try {
op.close();
file.mount_enclosing_volume_finish(result);
} catch(e) {
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
// e.g. user canceled the password dialog
return;
Main.notifyError(_("Failed to mount volume for “%s”").format(this.name), e.message);
return;
}
if (tryMount) {
let callback = this._createLaunchCallback(launchContext, false);
Gio.AppInfo.launch_default_for_uri_async(file.get_uri(),
launchContext,
null,
callback);
}
});
} else {
Main.notifyError(_("Failed to launch “%s”").format(this.name), e.message);
}
} }
} }
} }
@@ -97,8 +99,10 @@ class PlaceInfo {
let info = file.query_info_finish(result); let info = file.query_info_finish(result);
this.icon = info.get_symbolic_icon(); this.icon = info.get_symbolic_icon();
this.emit('changed'); this.emit('changed');
} catch(e if e instanceof Gio.IOErrorEnum) { } catch(e) {
return; if (e instanceof Gio.IOErrorEnum)
return;
throw e;
} }
}); });
@@ -123,8 +127,10 @@ class PlaceInfo {
try { try {
let info = this.file.query_info('standard::display-name', 0, null); let info = this.file.query_info('standard::display-name', 0, null);
return info.get_display_name(); return info.get_display_name();
} catch(e if e instanceof Gio.IOErrorEnum) { } catch(e) {
return this.file.get_basename(); if (e instanceof Gio.IOErrorEnum)
return this.file.get_basename();
throw e;
} }
} }
}; };
@@ -349,8 +355,10 @@ var PlacesManager = class {
let file = Gio.File.new_for_path(specialPath), info; let file = Gio.File.new_for_path(specialPath), info;
try { try {
info = new PlaceInfo('special', file); info = new PlaceInfo('special', file);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { } catch(e) {
continue; if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
continue;
throw e;
} }
specials.push(info); specials.push(info);
@@ -385,7 +393,7 @@ var PlacesManager = class {
for(let j = 0; j < volumes.length; j++) { for(let j = 0; j < volumes.length; j++) {
let identifier = volumes[j].get_identifier('class'); let identifier = volumes[j].get_identifier('class');
if (identifier && identifier.indexOf('network') >= 0) { if (identifier && identifier.includes('network')) {
networkVolumes.push(volumes[j]); networkVolumes.push(volumes[j]);
} else { } else {
let mount = volumes[j].get_mount(); let mount = volumes[j].get_mount();
@@ -402,7 +410,7 @@ var PlacesManager = class {
continue; continue;
let identifier = volumes[i].get_identifier('class'); let identifier = volumes[i].get_identifier('class');
if (identifier && identifier.indexOf('network') >= 0) { if (identifier && identifier.includes('network')) {
networkVolumes.push(volumes[i]); networkVolumes.push(volumes[i]);
} else { } else {
let mount = volumes[i].get_mount(); let mount = volumes[i].get_mount();
@@ -514,8 +522,10 @@ var PlacesManager = class {
try { try {
devItem = new PlaceDeviceInfo(kind, mount); devItem = new PlaceDeviceInfo(kind, mount);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { } catch(e) {
return; if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
return;
throw e;
} }
this._places[kind].push(devItem); this._places[kind].push(devItem);
@@ -526,8 +536,10 @@ var PlacesManager = class {
try { try {
volItem = new PlaceVolumeInfo(kind, volume); volItem = new PlaceVolumeInfo(kind, volume);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) { } catch(e) {
return; if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
return;
throw e;
} }
this._places[kind].push(volItem); this._places[kind].push(volItem);
@@ -69,7 +69,7 @@ let SIZES = [
[1600, 900] [1600, 900]
]; ];
function cycleScreenshotSizes(display, screen, window, binding) { function cycleScreenshotSizes(display, window, binding) {
// Probably this isn't useful with 5 sizes, but you can decrease instead // Probably this isn't useful with 5 sizes, but you can decrease instead
// of increase by holding down shift. // of increase by holding down shift.
let modifiers = binding.get_modifiers(); let modifiers = binding.get_modifiers();
+57 -58
View File
@@ -238,10 +238,10 @@ class BaseButton {
if (this._perMonitor) { if (this._perMonitor) {
this._windowEnteredMonitorId = this._windowEnteredMonitorId =
global.screen.connect('window-entered-monitor', global.display.connect('window-entered-monitor',
this._windowEnteredOrLeftMonitor.bind(this)); this._windowEnteredOrLeftMonitor.bind(this));
this._windowLeftMonitorId = this._windowLeftMonitorId =
global.screen.connect('window-left-monitor', global.display.connect('window-left-monitor',
this._windowEnteredOrLeftMonitor.bind(this)); this._windowEnteredOrLeftMonitor.bind(this));
} }
} }
@@ -282,12 +282,12 @@ class BaseButton {
this.actor.remove_style_class_name('focused'); this.actor.remove_style_class_name('focused');
} }
_windowEnteredOrLeftMonitor(metaScreen, monitorIndex, metaWindow) { _windowEnteredOrLeftMonitor(metaDisplay, monitorIndex, metaWindow) {
throw new Error('Not implemented'); throw new Error('Not implemented');
} }
_isWindowVisible(window) { _isWindowVisible(window) {
let workspace = global.screen.get_active_workspace(); let workspace = global.workspace_manager.get_active_workspace();
return !window.skip_taskbar && return !window.skip_taskbar &&
window.located_on_workspace(workspace) && window.located_on_workspace(workspace) &&
@@ -315,11 +315,11 @@ class BaseButton {
global.window_manager.disconnect(this._switchWorkspaceId); global.window_manager.disconnect(this._switchWorkspaceId);
if (this._windowEnteredMonitorId) if (this._windowEnteredMonitorId)
global.screen.disconnect(this._windowEnteredMonitorId); global.display.disconnect(this._windowEnteredMonitorId);
this._windowEnteredMonitorId = 0; this._windowEnteredMonitorId = 0;
if (this._windowLeftMonitorId) if (this._windowLeftMonitorId)
global.screen.disconnect(this._windowLeftMonitorId); global.display.disconnect(this._windowLeftMonitorId);
this._windowLeftMonitorId = 0; this._windowLeftMonitorId = 0;
} }
}; };
@@ -377,7 +377,7 @@ class WindowButton extends BaseButton {
this.actor.remove_style_class_name('minimized'); this.actor.remove_style_class_name('minimized');
} }
_windowEnteredOrLeftMonitor(metaScreen, monitorIndex, metaWindow) { _windowEnteredOrLeftMonitor(metaDisplay, monitorIndex, metaWindow) {
if (monitorIndex == this._monitorIndex && metaWindow == this.metaWindow) if (monitorIndex == this._monitorIndex && metaWindow == this.metaWindow)
this._updateVisibility(); this._updateVisibility();
} }
@@ -518,7 +518,7 @@ class AppButton extends BaseButton {
this._updateStyle(); this._updateStyle();
} }
_windowEnteredOrLeftMonitor(metaScreen, monitorIndex, metaWindow) { _windowEnteredOrLeftMonitor(metaDisplay, monitorIndex, metaWindow) {
if (this._windowTracker.get_window_app(metaWindow) == this.app && if (this._windowTracker.get_window_app(metaWindow) == this.app &&
monitorIndex == this._monitorIndex) { monitorIndex == this._monitorIndex) {
this._updateVisibility(); this._updateVisibility();
@@ -529,7 +529,7 @@ class AppButton extends BaseButton {
_updateVisibility() { _updateVisibility() {
if (!this._perMonitor) { if (!this._perMonitor) {
// fast path: use ShellApp API to avoid iterating over all windows. // fast path: use ShellApp API to avoid iterating over all windows.
let workspace = global.screen.get_active_workspace(); let workspace = global.workspace_manager.get_active_workspace();
this.actor.visible = this.app.is_on_workspace(workspace); this.actor.visible = this.app.is_on_workspace(workspace);
} else { } else {
this.actor.visible = this.getWindowList().length >= 1; this.actor.visible = this.getWindowList().length >= 1;
@@ -652,7 +652,9 @@ class WorkspaceIndicator extends PanelMenu.Button {
x_expand: true, y_expand: true }); x_expand: true, y_expand: true });
this.actor.add_actor(container); this.actor.add_actor(container);
this._currentWorkspace = global.screen.get_active_workspace().index(); let workspaceManager = global.workspace_manager;
this._currentWorkspace = workspaceManager.get_active_workspace().index();
this.statusLabel = new St.Label({ text: this._getStatusText(), this.statusLabel = new St.Label({ text: this._getStatusText(),
x_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
@@ -660,11 +662,11 @@ class WorkspaceIndicator extends PanelMenu.Button {
this.workspacesItems = []; this.workspacesItems = [];
this._screenSignals = []; this._workspaceManagerSignals = [];
this._screenSignals.push(global.screen.connect('notify::n-workspaces', this._workspaceManagerSignals.push(workspaceManager.connect('notify::n-workspaces',
this._updateMenu.bind(this))); this._updateMenu.bind(this)));
this._screenSignals.push(global.screen.connect_after('workspace-switched', this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-switched',
this._updateIndicator.bind(this))); this._updateIndicator.bind(this)));
this.actor.connect('scroll-event', this._onScrollEvent.bind(this)); this.actor.connect('scroll-event', this._onScrollEvent.bind(this));
this._updateMenu(); this._updateMenu();
@@ -676,8 +678,8 @@ class WorkspaceIndicator extends PanelMenu.Button {
} }
destroy() { destroy() {
for (let i = 0; i < this._screenSignals.length; i++) for (let i = 0; i < this._workspaceManagerSignals.length; i++)
global.screen.disconnect(this._screenSignals[i]); global.workspace_manager.disconnect(this._workspaceManagerSignals[i]);
if (this._settingsChangedId) { if (this._settingsChangedId) {
this._settings.disconnect(this._settingsChangedId); this._settings.disconnect(this._settingsChangedId);
@@ -689,25 +691,28 @@ class WorkspaceIndicator extends PanelMenu.Button {
_updateIndicator() { _updateIndicator() {
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.NONE); this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.NONE);
this._currentWorkspace = global.screen.get_active_workspace().index(); this._currentWorkspace = global.workspace_manager.get_active_workspace().index();
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.DOT); this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.DOT);
this.statusLabel.set_text(this._getStatusText()); this.statusLabel.set_text(this._getStatusText());
} }
_getStatusText() { _getStatusText() {
let current = global.screen.get_active_workspace().index(); let workspaceManager = global.workspace_manager;
let total = global.screen.n_workspaces; let current = workspaceManager.get_active_workspace().index();
let total = workspaceManager.n_workspaces;
return '%d / %d'.format(current + 1, total); return '%d / %d'.format(current + 1, total);
} }
_updateMenu() { _updateMenu() {
let workspaceManager = global.workspace_manager;
this.menu.removeAll(); this.menu.removeAll();
this.workspacesItems = []; this.workspacesItems = [];
this._currentWorkspace = global.screen.get_active_workspace().index(); this._currentWorkspace = workspaceManager.get_active_workspace().index();
for(let i = 0; i < global.screen.n_workspaces; i++) { for(let i = 0; i < workspaceManager.n_workspaces; i++) {
let name = Meta.prefs_get_workspace_name(i); let name = Meta.prefs_get_workspace_name(i);
let item = new PopupMenu.PopupMenuItem(name); let item = new PopupMenu.PopupMenuItem(name);
item.workspaceId = i; item.workspaceId = i;
@@ -727,8 +732,10 @@ class WorkspaceIndicator extends PanelMenu.Button {
} }
_activate(index) { _activate(index) {
if(index >= 0 && index < global.screen.n_workspaces) { let workspaceManager = global.workspace_manager;
let metaWorkspace = global.screen.get_workspace_by_index(index);
if(index >= 0 && index < workspaceManager.n_workspaces) {
let metaWorkspace = workspaceManager.get_workspace_by_index(index);
metaWorkspace.activate(global.get_current_time()); metaWorkspace.activate(global.get_current_time());
} }
} }
@@ -792,14 +799,12 @@ class WindowList {
indicatorsBox.add(this._workspaceIndicator.container, { expand: false, y_fill: true }); indicatorsBox.add(this._workspaceIndicator.container, { expand: false, y_fill: true });
this._mutterSettings = new Gio.Settings({ schema_id: 'org.gnome.mutter' }); this._mutterSettings = new Gio.Settings({ schema_id: 'org.gnome.mutter' });
this._workspaceSettings = this._getWorkspaceSettings();
this._workspacesOnlyOnPrimaryChangedId = this._workspacesOnlyOnPrimaryChangedId =
this._workspaceSettings.connect('changed::workspaces-only-on-primary', this._mutterSettings.connect('changed::workspaces-only-on-primary',
this._updateWorkspaceIndicatorVisibility.bind(this)); this._updateWorkspaceIndicatorVisibility.bind(this));
this._dynamicWorkspacesSettings = this._getDynamicWorkspacesSettings();
this._dynamicWorkspacesChangedId = this._dynamicWorkspacesChangedId =
this._dynamicWorkspacesSettings.connect('changed::dynamic-workspaces', this._mutterSettings.connect('changed::dynamic-workspaces',
this._updateWorkspaceIndicatorVisibility.bind(this)); this._updateWorkspaceIndicatorVisibility.bind(this));
this._updateWorkspaceIndicatorVisibility(); this._updateWorkspaceIndicatorVisibility();
this._menuManager = new PopupMenu.PopupMenuManager(this); this._menuManager = new PopupMenu.PopupMenuManager(this);
@@ -833,10 +838,12 @@ class WindowList {
this._updateKeyboardAnchor(); this._updateKeyboardAnchor();
}); });
let workspaceManager = global.workspace_manager;
this._workspaceSignals = new Map(); this._workspaceSignals = new Map();
this._nWorkspacesChangedId = this._nWorkspacesChangedId =
global.screen.connect('notify::n-workspaces', workspaceManager.connect('notify::n-workspaces',
this._onWorkspacesChanged.bind(this)); this._onWorkspacesChanged.bind(this));
this._onWorkspacesChanged(); this._onWorkspacesChanged();
this._switchWorkspaceId = this._switchWorkspaceId =
@@ -856,7 +863,7 @@ class WindowList {
}); });
this._fullscreenChangedId = this._fullscreenChangedId =
global.screen.connect('in-fullscreen-changed', () => { global.display.connect('in-fullscreen-changed', () => {
this._updateKeyboardAnchor(); this._updateKeyboardAnchor();
}); });
@@ -881,19 +888,6 @@ class WindowList {
this._groupingModeChanged(); this._groupingModeChanged();
} }
_getDynamicWorkspacesSettings() {
if (this._workspaceSettings.list_keys().indexOf('dynamic-workspaces') > -1)
return this._workspaceSettings;
return this._mutterSettings;
}
_getWorkspaceSettings() {
let settings = global.get_overrides_settings();
if (settings.list_keys().indexOf('workspaces-only-on-primary') > -1)
return settings;
return this._mutterSettings;
}
_onScrollEvent(actor, event) { _onScrollEvent(actor, event) {
let direction = event.get_scroll_direction(); let direction = event.get_scroll_direction();
let diff = 0; let diff = 0;
@@ -923,10 +917,11 @@ class WindowList {
} }
_updateWorkspaceIndicatorVisibility() { _updateWorkspaceIndicatorVisibility() {
let hasWorkspaces = this._dynamicWorkspacesSettings.get_boolean('dynamic-workspaces') || let workspaceManager = global.workspace_manager;
global.screen.n_workspaces > 1; let hasWorkspaces = this._mutterSettings.get_boolean('dynamic-workspaces') ||
workspaceManager.n_workspaces > 1;
let workspacesOnMonitor = this._monitor == Main.layoutManager.primaryMonitor || let workspacesOnMonitor = this._monitor == Main.layoutManager.primaryMonitor ||
!this._workspaceSettings.get_boolean('workspaces-only-on-primary'); !this._mutterSettings.get_boolean('workspaces-only-on-primary');
this._workspaceIndicator.actor.visible = hasWorkspaces && workspacesOnMonitor; this._workspaceIndicator.actor.visible = hasWorkspaces && workspacesOnMonitor;
} }
@@ -939,7 +934,7 @@ class WindowList {
let [, childWidth] = children[0].get_preferred_width(-1); let [, childWidth] = children[0].get_preferred_width(-1);
let spacing = this._windowList.layout_manager.spacing; let spacing = this._windowList.layout_manager.spacing;
let workspace = global.screen.get_active_workspace(); let workspace = global.workspace_manager.get_active_workspace();
let windows = global.display.get_tab_list(Meta.TabList.NORMAL, workspace); let windows = global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
if (this._perMonitor) if (this._perMonitor)
windows = windows.filter(w => w.get_monitor() == this._monitor.index); windows = windows.filter(w => w.get_monitor() == this._monitor.index);
@@ -1079,9 +1074,11 @@ class WindowList {
} }
_onWorkspacesChanged() { _onWorkspacesChanged() {
let numWorkspaces = global.screen.n_workspaces; let workspaceManager = global.workspace_manager;
let numWorkspaces = workspaceManager.n_workspaces;
for (let i = 0; i < numWorkspaces; i++) { for (let i = 0; i < numWorkspaces; i++) {
let workspace = global.screen.get_workspace_by_index(i); let workspace = workspaceManager.get_workspace_by_index(i);
if (this._workspaceSignals.has(workspace)) if (this._workspaceSignals.has(workspace))
continue; continue;
@@ -1099,9 +1096,11 @@ class WindowList {
} }
_disconnectWorkspaceSignals() { _disconnectWorkspaceSignals() {
let numWorkspaces = global.screen.n_workspaces; let workspaceManager = global.workspace_manager;
let numWorkspaces = workspaceManager.n_workspaces;
for (let i = 0; i < numWorkspaces; i++) { for (let i = 0; i < numWorkspaces; i++) {
let workspace = global.screen.get_workspace_by_index(i); let workspace = workspaceManager.get_workspace_by_index(i);
let signals = this._workspaceSignals.get(workspace); let signals = this._workspaceSignals.get(workspace);
this._workspaceSignals.delete(workspace); this._workspaceSignals.delete(workspace);
workspace.disconnect(signals._windowAddedId); workspace.disconnect(signals._windowAddedId);
@@ -1163,8 +1162,8 @@ class WindowList {
} }
_onDestroy() { _onDestroy() {
this._workspaceSettings.disconnect(this._workspacesOnlyOnPrimaryChangedId); this._mutterSettings.disconnect(this._workspacesOnlyOnPrimaryChangedId);
this._dynamicWorkspacesSettings.disconnect(this._dynamicWorkspacesChangedId); this._mutterSettings.disconnect(this._dynamicWorkspacesChangedId);
this._workspaceIndicator.destroy(); this._workspaceIndicator.destroy();
@@ -1179,7 +1178,7 @@ class WindowList {
Main.layoutManager.hideKeyboard(); Main.layoutManager.hideKeyboard();
this._disconnectWorkspaceSignals(); this._disconnectWorkspaceSignals();
global.screen.disconnect(this._nWorkspacesChangedId); global.workspace_manager.disconnect(this._nWorkspacesChangedId);
this._nWorkspacesChangedId = 0; this._nWorkspacesChangedId = 0;
global.window_manager.disconnect(this._switchWorkspaceId); global.window_manager.disconnect(this._switchWorkspaceId);
@@ -1189,7 +1188,7 @@ class WindowList {
Main.overview.disconnect(this._overviewShowingId); Main.overview.disconnect(this._overviewShowingId);
Main.overview.disconnect(this._overviewHidingId); Main.overview.disconnect(this._overviewHidingId);
global.screen.disconnect(this._fullscreenChangedId); global.display.disconnect(this._fullscreenChangedId);
Main.xdndHandler.disconnect(this._dragBeginId); Main.xdndHandler.disconnect(this._dragBeginId);
Main.xdndHandler.disconnect(this._dragEndId); Main.xdndHandler.disconnect(this._dragEndId);
+5 -3
View File
@@ -135,14 +135,16 @@ function enable() {
if(Main.overview.viewSelector._activePage != Main.overview.viewSelector._workspacesPage) if(Main.overview.viewSelector._activePage != Main.overview.viewSelector._workspacesPage)
return false; return false;
let workspaceManager = global.workspace_manager;
if ((o.get_key_symbol() == Clutter.KEY_Alt_L || if ((o.get_key_symbol() == Clutter.KEY_Alt_L ||
o.get_key_symbol() == Clutter.KEY_Alt_R) o.get_key_symbol() == Clutter.KEY_Alt_R)
&& !this._pickWorkspace) { && !this._pickWorkspace) {
this._prevFocusActor = global.stage.get_key_focus(); this._prevFocusActor = global.stage.get_key_focus();
global.stage.set_key_focus(null); global.stage.set_key_focus(null);
this._active = global.screen.get_active_workspace_index(); this._active = workspaceManager.get_active_workspace_index();
this._pickWindow = true; this._pickWindow = true;
this._workspaces[global.screen.get_active_workspace_index()].showWindowsTooltips(); this._workspaces[workspaceManager.get_active_workspace_index()].showWindowsTooltips();
return true; return true;
} }
if ((o.get_key_symbol() == Clutter.KEY_Control_L || if ((o.get_key_symbol() == Clutter.KEY_Control_L ||
@@ -166,7 +168,7 @@ function enable() {
return true; return true;
if (this._pickWindow) { if (this._pickWindow) {
if (this._active != global.screen.get_active_workspace_index()) { if (this._active != workspaceManager.get_active_workspace_index()) {
this._hideTooltips(); this._hideTooltips();
return false; return false;
} }
+22 -15
View File
@@ -25,7 +25,9 @@ class WorkspaceIndicator extends PanelMenu.Button {
constructor() { constructor() {
super(0.0, _("Workspace Indicator")); super(0.0, _("Workspace Indicator"));
this._currentWorkspace = global.screen.get_active_workspace().index(); let workspaceManager = global.workspace_manager;
this._currentWorkspace = workspaceManager.get_active_workspace().index();
this.statusLabel = new St.Label({ y_align: Clutter.ActorAlign.CENTER, this.statusLabel = new St.Label({ y_align: Clutter.ActorAlign.CENTER,
text: this._labelText() }); text: this._labelText() });
@@ -35,12 +37,13 @@ class WorkspaceIndicator extends PanelMenu.Button {
this._workspaceSection = new PopupMenu.PopupMenuSection(); this._workspaceSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._workspaceSection); this.menu.addMenuItem(this._workspaceSection);
this._screenSignals = []; this._workspaceManagerSignals = [];
this._screenSignals.push(global.screen.connect_after('workspace-added', this._createWorkspacesSection.bind(this))); this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-added',
this._screenSignals.push(global.screen.connect_after('workspace-removed', this._createWorkspacesSection.bind(this)));
this._createWorkspacesSection.bind(this))); this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-removed',
this._screenSignals.push(global.screen.connect_after('workspace-switched', this._createWorkspacesSection.bind(this)));
this._updateIndicator.bind(this))); this._workspaceManagerSignals.push(workspaceManager.connect_after('workspace-switched',
this._updateIndicator.bind(this)));
this.actor.connect('scroll-event', this._onScrollEvent.bind(this)); this.actor.connect('scroll-event', this._onScrollEvent.bind(this));
this._createWorkspacesSection(); this._createWorkspacesSection();
@@ -55,8 +58,8 @@ class WorkspaceIndicator extends PanelMenu.Button {
} }
destroy() { destroy() {
for (let i = 0; i < this._screenSignals.length; i++) for (let i = 0; i < this._workspaceManagerSignals.length; i++)
global.screen.disconnect(this._screenSignals[i]); global.workspace_manager.disconnect(this._workspaceManagerSignals[i]);
if (this._settingsChangedId) { if (this._settingsChangedId) {
this._settings.disconnect(this._settingsChangedId); this._settings.disconnect(this._settingsChangedId);
@@ -68,7 +71,7 @@ class WorkspaceIndicator extends PanelMenu.Button {
_updateIndicator() { _updateIndicator() {
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.NONE); this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.NONE);
this._currentWorkspace = global.screen.get_active_workspace().index(); this._currentWorkspace = global.workspace_manager.get_active_workspace().index();
this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.DOT); this.workspacesItems[this._currentWorkspace].setOrnament(PopupMenu.Ornament.DOT);
this.statusLabel.set_text(this._labelText()); this.statusLabel.set_text(this._labelText());
@@ -83,12 +86,14 @@ class WorkspaceIndicator extends PanelMenu.Button {
} }
_createWorkspacesSection() { _createWorkspacesSection() {
let workspaceManager = global.workspace_manager;
this._workspaceSection.removeAll(); this._workspaceSection.removeAll();
this.workspacesItems = []; this.workspacesItems = [];
this._currentWorkspace = global.screen.get_active_workspace().index(); this._currentWorkspace = workspaceManager.get_active_workspace().index();
let i = 0; let i = 0;
for(; i < global.screen.n_workspaces; i++) { for(; i < workspaceManager.n_workspaces; i++) {
this.workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i)); this.workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i));
this._workspaceSection.addMenuItem(this.workspacesItems[i]); this._workspaceSection.addMenuItem(this.workspacesItems[i]);
this.workspacesItems[i].workspaceId = i; this.workspacesItems[i].workspaceId = i;
@@ -106,8 +111,10 @@ class WorkspaceIndicator extends PanelMenu.Button {
} }
_activate(index) { _activate(index) {
if(index >= 0 && index < global.screen.n_workspaces) { let workspaceManager = global.workspace_manager;
let metaWorkspace = global.screen.get_workspace_by_index(index);
if(index >= 0 && index < workspaceManager.n_workspaces) {
let metaWorkspace = workspaceManager.get_workspace_by_index(index);
metaWorkspace.activate(global.get_current_time()); metaWorkspace.activate(global.get_current_time());
} }
} }
@@ -123,7 +130,7 @@ class WorkspaceIndicator extends PanelMenu.Button {
return; return;
} }
let newIndex = global.screen.get_active_workspace().index() + diff; let newIndex = global.workspace_manager.get_active_workspace().index() + diff;
this._activate(newIndex); this._activate(newIndex);
} }
}; };
+2 -2
View File
@@ -1,5 +1,5 @@
project('gnome-shell-extensions', project('gnome-shell-extensions',
version: '3.28.0', version: '3.30.0',
meson_version: '>= 0.44.0', meson_version: '>= 0.44.0',
license: 'GPL2+' license: 'GPL2+'
) )
@@ -34,7 +34,6 @@ endif
uuid_suffix = '@gnome-shell-extensions.gcampax.github.com' uuid_suffix = '@gnome-shell-extensions.gcampax.github.com'
classic_extensions = [ classic_extensions = [
'alternate-tab',
'apps-menu', 'apps-menu',
'places-menu', 'places-menu',
'launch-new-instance', 'launch-new-instance',
@@ -43,6 +42,7 @@ classic_extensions = [
default_extensions = classic_extensions default_extensions = classic_extensions
default_extensions += [ default_extensions += [
'alternate-tab',
'drive-menu', 'drive-menu',
'screenshot-window-sizer', 'screenshot-window-sizer',
'windowsNavigator', 'windowsNavigator',
-1
View File
@@ -1,6 +1,5 @@
data/gnome-classic.desktop.in data/gnome-classic.desktop.in
data/gnome-classic.session.desktop.in data/gnome-classic.session.desktop.in
data/org.gnome.shell.extensions.classic-overrides.gschema.xml
extensions/alternate-tab/prefs.js extensions/alternate-tab/prefs.js
extensions/apps-menu/extension.js extensions/apps-menu/extension.js
extensions/auto-move-windows/extension.js extensions/auto-move-windows/extension.js
+75 -63
View File
@@ -5,21 +5,22 @@
# Aron Xu <aronxu@gnome.org>, 2011. # Aron Xu <aronxu@gnome.org>, 2011.
# tuhaihe <1132321739qq@gmail.com>, 2012, 2013. # tuhaihe <1132321739qq@gmail.com>, 2012, 2013.
# 甘露(Gan Lu) <rhythm.gan@gmail.com>, 2013. # 甘露(Gan Lu) <rhythm.gan@gmail.com>, 2013.
# Mingcong Bai <jeffbai@aosc.xyz>, 2017.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2016-10-11 08:03+0000\n" "POT-Creation-Date: 2018-01-18 12:15+0000\n"
"PO-Revision-Date: 2016-10-18 17:53+0800\n" "PO-Revision-Date: 2017-08-18 21:26+0800\n"
"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n" "Last-Translator: Mingcong Bai <jeffbai@aosc.xyz>\n"
"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n" "Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
"Language: zh_CN\n" "Language: zh_CN\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"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"
"X-Generator: Poedit 1.8.9\n" "X-Generator: Poedit 2.0.2\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3
@@ -65,35 +66,35 @@ msgstr "仅在主显示器上显示工作区"
msgid "Delay focus changes in mouse mode until the pointer stops moving" msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "将鼠标模式下焦点的切换推迟到光标停止移动之后" msgstr "将鼠标模式下焦点的切换推迟到光标停止移动之后"
#: extensions/alternate-tab/prefs.js:20 #: extensions/alternate-tab/prefs.js:19
msgid "Thumbnail only" msgid "Thumbnail only"
msgstr "仅缩略图" msgstr "仅缩略图"
#: extensions/alternate-tab/prefs.js:21 #: extensions/alternate-tab/prefs.js:20
msgid "Application icon only" msgid "Application icon only"
msgstr "仅应用程序图标" msgstr "仅应用程序图标"
#: extensions/alternate-tab/prefs.js:22 #: extensions/alternate-tab/prefs.js:21
msgid "Thumbnail and application icon" msgid "Thumbnail and application icon"
msgstr "缩略图和应用程序图标" msgstr "缩略图和应用程序图标"
#: extensions/alternate-tab/prefs.js:38 #: extensions/alternate-tab/prefs.js:34
msgid "Present windows as" msgid "Present windows as"
msgstr "窗口展现为" msgstr "窗口展现为"
#: extensions/alternate-tab/prefs.js:69 #: extensions/alternate-tab/prefs.js:65
msgid "Show only windows in the current workspace" msgid "Show only windows in the current workspace"
msgstr "仅显示当前工作区中的窗口" msgstr "仅显示当前工作区中的窗口"
#: extensions/apps-menu/extension.js:38 #: extensions/apps-menu/extension.js:37
msgid "Activities Overview" msgid "Activities Overview"
msgstr "活动概览" msgstr "活动概览"
#: extensions/apps-menu/extension.js:109 #: extensions/apps-menu/extension.js:130
msgid "Favorites" msgid "Favorites"
msgstr "收藏" msgstr "收藏"
#: extensions/apps-menu/extension.js:266 #: extensions/apps-menu/extension.js:417
msgid "Applications" msgid "Applications"
msgstr "应用程序" msgstr "应用程序"
@@ -106,41 +107,43 @@ msgid ""
"A list of strings, each containing an application id (desktop file name), " "A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
msgstr "" msgstr ""
"一系列字符串,每个字符串包含一个应用程序标识(桌面文件名称)、冒号加工作区号" "一系列字符串,每个字符串包含一个应用程序标识桌面文件名称、冒号加工作区号"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:53
msgid "Application" msgid "Application"
msgstr "应用程序" msgstr "应用程序"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:62
#: extensions/auto-move-windows/prefs.js:127 #: extensions/auto-move-windows/prefs.js:117
msgid "Workspace" msgid "Workspace"
msgstr "工作区" msgstr "工作区"
#: extensions/auto-move-windows/prefs.js:85 #: extensions/auto-move-windows/prefs.js:78
msgid "Add Rule" msgid "Add Rule"
msgstr "添加规则" msgstr "添加规则"
#: extensions/auto-move-windows/prefs.js:106 #: extensions/auto-move-windows/prefs.js:98
msgid "Create new matching rule" msgid "Create new matching rule"
msgstr "创建新的匹配规则" msgstr "创建新的匹配规则"
#: extensions/auto-move-windows/prefs.js:111 #: extensions/auto-move-windows/prefs.js:103
msgid "Add" msgid "Add"
msgstr "添加" msgstr "添加"
#: extensions/drive-menu/extension.js:106 #. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:103
#: extensions/places-menu/placeDisplay.js:219
#, javascript-format #, javascript-format
msgid "Ejecting drive '%s' failed:" msgid "Ejecting drive %s failed:"
msgstr "弹出驱动器“%s”失败:" msgstr "弹出驱动器“%s”失败:"
#: extensions/drive-menu/extension.js:124 #: extensions/drive-menu/extension.js:118
msgid "Removable devices" msgid "Removable devices"
msgstr "可移动设备" msgstr "可移动设备"
#: extensions/drive-menu/extension.js:149 #: extensions/drive-menu/extension.js:143
msgid "Open File" msgid "Open Files"
msgstr "打开文件管理器" msgstr "打开文件"
#: extensions/example/extension.js:17 #: extensions/example/extension.js:17
msgid "Hello, world!" msgid "Hello, world!"
@@ -156,17 +159,17 @@ msgid ""
"panel." "panel."
msgstr "如果不为空,所包含的文本会在点击面板时显示。" msgstr "如果不为空,所包含的文本会在点击面板时显示。"
#: extensions/example/prefs.js:30 #: extensions/example/prefs.js:27
msgid "Message" msgid "Message"
msgstr "消息" msgstr "消息"
#. TRANSLATORS: Example is the name of the extension, should not be #. TRANSLATORS: Example is the name of the extension, should not be
#. translated #. translated
#: extensions/example/prefs.js:43 #: extensions/example/prefs.js:40
msgid "" msgid ""
"Example aims to show how to build well behaved extensions for the Shell and " "Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n" "as such it has little functionality on its own.\n"
"Nevertheless it's possible to customize the greeting message." "Nevertheless its possible to customize the greeting message."
msgstr "" msgstr ""
"示例意在展示如何为 Shell 创建良好工作的扩展,本身功能有限。\n" "示例意在展示如何为 Shell 创建良好工作的扩展,本身功能有限。\n"
"尽管如此,它还是具备定制祝福语的功能。" "尽管如此,它还是具备定制祝福语的功能。"
@@ -197,32 +200,41 @@ msgstr ""
"如果设置为 true,则将窗口说明文字放置在对应窗口的缩略图上方,而不是默认的下" "如果设置为 true,则将窗口说明文字放置在对应窗口的缩略图上方,而不是默认的下"
"方。修改此设置需要重启 GNOME Shell 以使设置生效。" "方。修改此设置需要重启 GNOME Shell 以使设置生效。"
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:79
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:82
msgid "Places" msgid "Places"
msgstr "位置" msgstr "位置"
#: extensions/places-menu/placeDisplay.js:59 #: extensions/places-menu/placeDisplay.js:66
#, javascript-format #, javascript-format
msgid "Failed to launch \"%s\"" msgid "Failed to mount volume for “%s”"
msgstr "无法为“%s”挂载卷"
#: extensions/places-menu/placeDisplay.js:79
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "无法启动“%s”" msgstr "无法启动“%s”"
#: extensions/places-menu/placeDisplay.js:101 #: extensions/places-menu/placeDisplay.js:135
#: extensions/places-menu/placeDisplay.js:124 #: extensions/places-menu/placeDisplay.js:158
msgid "Computer" msgid "Computer"
msgstr "计算机" msgstr "计算机"
#: extensions/places-menu/placeDisplay.js:267 #: extensions/places-menu/placeDisplay.js:336
msgid "Home" msgid "Home"
msgstr "主文件夹" msgstr "主文件夹"
#: extensions/places-menu/placeDisplay.js:311 #: extensions/places-menu/placeDisplay.js:378
msgid "Browse Network" msgid "Browse Network"
msgstr "浏览网络" msgstr "浏览网络"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes" msgid "Cycle Screenshot Sizes"
msgstr "循环调整窗口截图大小" msgstr "循环调整截图大小"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "反向循环调整截图大小"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name" msgid "Theme name"
@@ -232,52 +244,52 @@ msgstr "主题名称"
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell" msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "从 ~/.themes/name/gnome-shell 加载的主题名称" msgstr "从 ~/.themes/name/gnome-shell 加载的主题名称"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:106
msgid "Close" msgid "Close"
msgstr "关闭" msgstr "关闭"
#: extensions/window-list/extension.js:120 #: extensions/window-list/extension.js:125
msgid "Unminimize" msgid "Unminimize"
msgstr "取消最小化" msgstr "取消最小化"
#: extensions/window-list/extension.js:121 #: extensions/window-list/extension.js:126
msgid "Minimize" msgid "Minimize"
msgstr "最小化" msgstr "最小化"
#: extensions/window-list/extension.js:127 #: extensions/window-list/extension.js:132
msgid "Unmaximize" msgid "Unmaximize"
msgstr "取消最大化" msgstr "取消最大化"
#: extensions/window-list/extension.js:128 #: extensions/window-list/extension.js:133
msgid "Maximize" msgid "Maximize"
msgstr "最大化" msgstr "最大化"
#: extensions/window-list/extension.js:411 #: extensions/window-list/extension.js:408
msgid "Minimize all" msgid "Minimize all"
msgstr "全部最小化" msgstr "全部最小化"
#: extensions/window-list/extension.js:419 #: extensions/window-list/extension.js:414
msgid "Unminimize all" msgid "Unminimize all"
msgstr "全部取消最小化" msgstr "全部取消最小化"
#: extensions/window-list/extension.js:427 #: extensions/window-list/extension.js:420
msgid "Maximize all" msgid "Maximize all"
msgstr "全部最大化" msgstr "全部最大化"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:429
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "全部取消最大化" msgstr "全部取消最大化"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:438
msgid "Close all" msgid "Close all"
msgstr "全部关闭" msgstr "全部关闭"
#: extensions/window-list/extension.js:669 #: extensions/window-list/extension.js:646
#: extensions/workspace-indicator/extension.js:30 #: extensions/workspace-indicator/extension.js:26
msgid "Workspace Indicator" msgid "Workspace Indicator"
msgstr "工作区指示器" msgstr "工作区指示器"
#: extensions/window-list/extension.js:828 #: extensions/window-list/extension.js:811
msgid "Window List" msgid "Window List"
msgstr "窗口列表" msgstr "窗口列表"
@@ -288,10 +300,10 @@ msgstr "何时分组窗口"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are \"never\", \"auto\" and \"always\"." "Possible values are never”, “auto and always."
msgstr "" msgstr ""
"决定何时对窗口列表上的同一应用的窗口进行分组。可用值有“never”(从" "决定何时对窗口列表上的同一应用的窗口进行分组。可用值有“never”从"
"不)、“auto”(自动)和“always”(总是)。" "不、“auto”自动和“always”总是。"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
@@ -303,35 +315,35 @@ msgid ""
"primary one." "primary one."
msgstr "是否在所有连接的显示器上显示窗口列表或仅在主显示器上显示。" msgstr "是否在所有连接的显示器上显示窗口列表或仅在主显示器上显示。"
#: extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:28
msgid "Window Grouping" msgid "Window Grouping"
msgstr "窗口分组" msgstr "窗口分组"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:46
msgid "Never group windows" msgid "Never group windows"
msgstr "从不将窗口分组" msgstr "从不将窗口分组"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:47
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "当空间有限时将窗口分组" msgstr "当空间有限时将窗口分组"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:48
msgid "Always group windows" msgid "Always group windows"
msgstr "总是对窗口分组" msgstr "总是对窗口分组"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:71
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "在所有显示器上显示" msgstr "在所有显示器上显示"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/workspace-indicator/prefs.js:134
msgid "Workspace Names" msgid "Workspace Names"
msgstr "工作区名称" msgstr "工作区名称"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:150
msgid "Name" msgid "Name"
msgstr "名称" msgstr "名称"
#: extensions/workspace-indicator/prefs.js:198 #: extensions/workspace-indicator/prefs.js:190
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "工作区 %d" msgstr "工作区 %d"