Compare commits

..

1 Commits

Author SHA1 Message Date
e7f82c66de wobbly 2014-09-03 10:58:01 -07:00
74 changed files with 14469 additions and 18706 deletions

48
NEWS
View File

@ -1,51 +1,3 @@
3.14.0
======
* Fix exposure of the accessible tree [Alejandro; #736821]
* Hide empty app folders in app picker [Florian; #736910]
Contributors:
Florian Müllner, Alejandro Piñeiro
Translations:
Yuri Myasoedov [ru], Pawan Chitrakar [ne], Manoj Kumar Giri [or],
Daniel Mustieles [es], GNOME Translation Robot [de], Rajesh Ranjan [hi],
Shankar Prasad [kn], Kenneth Nielsen [da], Daniel Korostil [uk],
Changwoo Ryu [ko], A S Alam [pa], Tom Tryfonidis [el], Petr Kovar [cs]
3.13.92
=======
* Fix submenu arrow animations [Hashem; #728927]
* Always initialize clutter accessibility [Alejandro; #735908]
* Adapt to mutter background changes [Owen; #735638]
* Improve handling of outOfDate extensions in prefs [Florian; #736185]
* Port offline updates to PackageKit's DBus interface [Kalev; #736337]
* location: Translate accuracy levels for geoclue [Zeeshan; #736479]
* Implement input source switching [Rui; #736435]
* Fix crash when dragging window from workspace switcher [Carlos G.; #735972]
* Clean out list of default favorites [Elad; #735682]
* Add settings link to location submenu [Florian; #736542]
* Fix keynav of message tray menu button [Florian; #707799]
* Misc. bug fixes [Carlos G., Florian, Rui; #736110, #736329, #736343,
#735927, #735976]
Contributors:
Elad Alfassa, Zeeshan Ali (Khattak), Michael Catanzaro, Adel Gadllah,
Carlos Garnacho, Kalev Lember, Rui Matos, Florian Müllner, Hashem Nasarat,
Alejandro Piñeiro, Carlos Soriano, Jasper St. Pierre, Owen W. Taylor
Translations:
Piotr Drąg [pl], Changwoo Ryu [ko], Yuri Myasoedov [ru], Zhou Fang [ja],
Peter Mráz [sk], Ville-Pekka Vainio [fi], Sweta Kothari [gu],
Marek Černocký [cs], A S Alam [pa], Christian Kirbach [de],
Alexandre Franke [fr], Aurimas Černius [lt], Khaled Hosny [ar],
Enrico Nicoletto [pt_BR], Andika Triwidada [id], Shantha kumar [ta],
Matej Urbančič [sl], Pawan Chitrakar [ne], Yosef Or Boczko [he],
Balázs Úr [hu], Dušan Kazik [sk], Gil Forcada [ca],
Carles Ferrando [ca@valencia], Nilamdyuti Goswami [as], Ivaylo Valkov [bg],
Sandeep Sheshrao Shedmake [mr], Umarzuki Bin Mochlis Moktar [ms],
Muhammet Kara [tr], Jiro Matsuzawa [ja], Kris Thomsen [da],
Mattias Eriksson [sv]
3.13.91
=======
* Fix keynav into session menu on login screen [Florian; #735614]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.14.0],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.13.91],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -76,8 +76,8 @@ AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.15.90
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.14.0
GTK_MIN_VERSION=3.13.2
MUTTER_MIN_VERSION=3.13.91
GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_MIN_VERSION=3.5.3

View File

@ -31,7 +31,7 @@
</_description>
</key>
<key name="favorite-apps" type="as">
<default>[ 'epiphany.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
<default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Documents.desktop', 'org.gnome.Software.desktop' ]</default>
<_summary>List of desktop file IDs for favorite applications</_summary>
<_description>
The applications corresponding to these identifiers

View File

@ -59,10 +59,14 @@ const Application = new Lang.Class({
_extensionAvailable: function(uuid) {
let extension = ExtensionUtils.extensions[uuid];
let checkVersion = !this._settings.get_boolean('disable-extension-version-validation');
if (!extension)
return false;
if (checkVersion && ExtensionUtils.isOutOfDate(extension))
return false;
if (!extension.dir.get_child('prefs.js').query_exists(null))
return false;
@ -281,10 +285,6 @@ const ExtensionRow = new Lang.Class({
function() {
this._switch.state = this._isEnabled();
}));
this._settings.connect('changed::disable-extension-version-validation',
Lang.bind(this, function() {
this._switch.sensitive = this._canEnable();
}));
this._buildUI();
},
@ -323,7 +323,6 @@ const ExtensionRow = new Lang.Class({
this.prefsButton = button;
this._switch = new Gtk.Switch({ valign: Gtk.Align.CENTER,
sensitive: this._canEnable(),
state: this._isEnabled() });
this._switch.connect('notify::active', Lang.bind(this,
function() {
@ -336,13 +335,6 @@ const ExtensionRow = new Lang.Class({
hbox.add(this._switch);
},
_canEnable: function() {
let extension = ExtensionUtils.extensions[this.uuid];
let checkVersion = !this._settings.get_boolean('disable-extension-version-validation');
return !(checkVersion && ExtensionUtils.isOutOfDate(extension));
},
_isEnabled: function() {
let extensions = this._settings.get_strv('enabled-extensions');
return extensions.indexOf(this.uuid) != -1;

View File

@ -16,9 +16,7 @@
<file>misc/fileUtils.js</file>
<file>misc/gnomeSession.js</file>
<file>misc/history.js</file>
<file>misc/ibusManager.js</file>
<file>misc/jsParse.js</file>
<file>misc/keyboardManager.js</file>
<file>misc/loginManager.js</file>
<file>misc/modemManager.js</file>
<file>misc/objectManager.js</file>
@ -92,6 +90,7 @@
<file>ui/windowAttentionHandler.js</file>
<file>ui/windowMenu.js</file>
<file>ui/windowManager.js</file>
<file>ui/wobbly.js</file>
<file>ui/workspace.js</file>
<file>ui/workspaceSwitcherPopup.js</file>
<file>ui/workspaceThumbnail.js</file>

View File

@ -1,180 +0,0 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Signals = imports.signals;
try {
var IBus = imports.gi.IBus;
if (!('new_async' in IBus.Bus))
throw "IBus version is too old";
const IBusCandidatePopup = imports.ui.ibusCandidatePopup;
} catch (e) {
var IBus = null;
log(e);
}
let _ibusManager = null;
function getIBusManager() {
if (_ibusManager == null)
_ibusManager = new IBusManager();
return _ibusManager;
}
const IBusManager = new Lang.Class({
Name: 'IBusManager',
// This is the longest we'll keep the keyboard frozen until an input
// source is active.
_MAX_INPUT_SOURCE_ACTIVATION_TIME: 4000, // ms
_init: function() {
if (!IBus)
return;
IBus.init();
this._candidatePopup = new IBusCandidatePopup.CandidatePopup();
this._panelService = null;
this._engines = {};
this._ready = false;
this._registerPropertiesId = 0;
this._currentEngineName = null;
this._ibus = IBus.Bus.new_async();
this._ibus.connect('connected', Lang.bind(this, this._onConnected));
this._ibus.connect('disconnected', Lang.bind(this, this._clear));
// Need to set this to get 'global-engine-changed' emitions
this._ibus.set_watch_ibus_signal(true);
this._ibus.connect('global-engine-changed', Lang.bind(this, this._engineChanged));
this._spawn();
},
_spawn: function() {
try {
Gio.Subprocess.new(['ibus-daemon', '--xim', '--panel', 'disable'],
Gio.SubprocessFlags.NONE);
} catch(e) {
log('Failed to launch ibus-daemon: ' + e.message);
}
},
_clear: function() {
if (this._panelService)
this._panelService.destroy();
this._panelService = null;
this._candidatePopup.setPanelService(null);
this._engines = {};
this._ready = false;
this._registerPropertiesId = 0;
this._currentEngineName = null;
this.emit('ready', false);
this._spawn();
},
_onConnected: function() {
this._ibus.list_engines_async(-1, null, Lang.bind(this, this._initEngines));
this._ibus.request_name_async(IBus.SERVICE_PANEL,
IBus.BusNameFlag.REPLACE_EXISTING,
-1, null,
Lang.bind(this, this._initPanelService));
},
_initEngines: function(ibus, result) {
let enginesList = this._ibus.list_engines_async_finish(result);
if (enginesList) {
for (let i = 0; i < enginesList.length; ++i) {
let name = enginesList[i].get_name();
this._engines[name] = enginesList[i];
}
this._updateReadiness();
} else {
this._clear();
}
},
_initPanelService: function(ibus, result) {
let success = this._ibus.request_name_async_finish(result);
if (success) {
this._panelService = new IBus.PanelService({ connection: this._ibus.get_connection(),
object_path: IBus.PATH_PANEL });
this._candidatePopup.setPanelService(this._panelService);
this._panelService.connect('update-property', Lang.bind(this, this._updateProperty));
// If an engine is already active we need to get its properties
this._ibus.get_global_engine_async(-1, null, Lang.bind(this, function(i, result) {
let engine;
try {
engine = this._ibus.get_global_engine_async_finish(result);
if (!engine)
return;
} catch(e) {
return;
}
this._engineChanged(this._ibus, engine.get_name());
}));
this._updateReadiness();
} else {
this._clear();
}
},
_updateReadiness: function() {
this._ready = (Object.keys(this._engines).length > 0 &&
this._panelService != null);
this.emit('ready', this._ready);
},
_engineChanged: function(bus, engineName) {
if (!this._ready)
return;
this._currentEngineName = engineName;
if (this._registerPropertiesId != 0)
return;
this._registerPropertiesId =
this._panelService.connect('register-properties', Lang.bind(this, function(p, props) {
if (!props.get(0))
return;
this._panelService.disconnect(this._registerPropertiesId);
this._registerPropertiesId = 0;
this.emit('properties-registered', this._currentEngineName, props);
}));
},
_updateProperty: function(panel, prop) {
this.emit('property-updated', this._currentEngineName, prop);
},
activateProperty: function(key, state) {
this._panelService.property_activate(key, state);
},
getEngineDesc: function(id) {
if (!IBus || !this._ready)
return null;
return this._engines[id];
},
setEngine: function(id, callback) {
if (!IBus || !this._ready || id == this._currentEngineName) {
if (callback)
callback();
return;
}
this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
null, callback);
},
});
Signals.addSignalMethods(IBusManager.prototype);

View File

@ -1,153 +0,0 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const GLib = imports.gi.GLib;
const GnomeDesktop = imports.gi.GnomeDesktop;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Main = imports.ui.main;
const DEFAULT_LOCALE = 'en_US';
const DEFAULT_LAYOUT = 'us';
const DEFAULT_VARIANT = '';
let _xkbInfo = null;
function getXkbInfo() {
if (_xkbInfo == null)
_xkbInfo = new GnomeDesktop.XkbInfo();
return _xkbInfo;
}
let _keyboardManager = null;
function getKeyboardManager() {
if (_keyboardManager == null)
_keyboardManager = new KeyboardManager();
return _keyboardManager;
}
function releaseKeyboard() {
if (Main.modalCount > 0)
global.display.unfreeze_keyboard(global.get_current_time());
else
global.display.ungrab_keyboard(global.get_current_time());
}
function holdKeyboard() {
global.freeze_keyboard(global.get_current_time());
}
const KeyboardManager = new Lang.Class({
Name: 'KeyboardManager',
// The XKB protocol doesn't allow for more that 4 layouts in a
// keymap. Wayland doesn't impose this limit and libxkbcommon can
// handle up to 32 layouts but since we need to support X clients
// even as a Wayland compositor, we can't bump this.
MAX_LAYOUTS_PER_GROUP: 4,
_init: function() {
this._xkbInfo = getXkbInfo();
this._current = null;
this._localeLayoutInfo = this._getLocaleLayout();
this._layoutInfos = {};
},
_applyLayoutGroup: function(group) {
let options = this._buildOptionsString();
let [layouts, variants] = this._buildGroupStrings(group);
Meta.get_backend().set_keymap(layouts, variants, options);
},
_applyLayoutGroupIndex: function(idx) {
Meta.get_backend().lock_layout_group(idx);
},
apply: function(id) {
let info = this._layoutInfos[id];
if (!info)
return;
if (this._current && this._current.group == info.group) {
if (this._current.groupIndex != info.groupIndex)
this._applyLayoutGroupIndex(info.groupIndex);
} else {
this._applyLayoutGroup(info.group);
this._applyLayoutGroupIndex(info.groupIndex);
}
this._current = info;
},
reapply: function() {
if (!this._current)
return;
this._applyLayoutGroup(this._current.group);
this._applyLayoutGroupIndex(this._current.groupIndex);
},
setUserLayouts: function(ids) {
this._current = null;
this._layoutInfos = {};
for (let i = 0; i < ids.length; ++i) {
let [found, , , _layout, _variant] = this._xkbInfo.get_layout_info(ids[i]);
if (found)
this._layoutInfos[ids[i]] = { id: ids[i], layout: _layout, variant: _variant };
}
let i = 0;
let group = [];
for (let id in this._layoutInfos) {
// We need to leave one slot on each group free so that we
// can add a layout containing the symbols for the
// language used in UI strings to ensure that toolkits can
// handle mnemonics like Alt+Ф even if the user is
// actually typing in a different layout.
let groupIndex = i % (this.MAX_LAYOUTS_PER_GROUP - 1);
if (groupIndex == 0)
group = [];
let info = this._layoutInfos[id];
group[groupIndex] = info;
info.group = group;
info.groupIndex = groupIndex;
i += 1;
}
},
_getLocaleLayout: function() {
let locale = GLib.get_language_names()[0];
if (locale.indexOf('_') == -1)
locale = DEFAULT_LOCALE;
let [found, , id] = GnomeDesktop.get_input_source_from_locale(locale);
if (!found)
[, , id] = GnomeDesktop.get_input_source_from_locale(DEFAULT_LOCALE);
let [found, , , _layout, _variant] = this._xkbInfo.get_layout_info(id);
if (found)
return { layout: _layout, variant: _variant };
else
return { layout: DEFAULT_LAYOUT, variant: DEFAULT_VARIANT };
},
_buildGroupStrings: function(_group) {
let group = _group.concat(this._localeLayoutInfo);
let layouts = group.map(function(g) { return g.layout; }).join(',');
let variants = group.map(function(g) { return g.variant; }).join(',');
return [layouts, variants];
},
setKeyboardOptions: function(options) {
this._xkbOptions = options;
},
_buildOptionsString: function() {
let options = this._xkbOptions.join(',');
return options;
}
});

View File

@ -58,14 +58,6 @@ const AppSwitcherPopup = new Lang.Class({
this._currentWindow = -1;
this.thumbnailsVisible = false;
let apps = Shell.AppSystem.get_default().get_running ();
if (apps.length == 0)
return;
this._switcherList = new AppSwitcher(apps, this);
this._items = this._switcherList.icons;
},
_allocate: function (actor, box, flags) {
@ -107,6 +99,20 @@ const AppSwitcherPopup = new Lang.Class({
}
},
_createSwitcher: function() {
let apps = Shell.AppSystem.get_default().get_running ();
if (apps.length == 0)
return false;
this._switcherList = new AppSwitcher(apps, this);
this._items = this._switcherList.icons;
if (this._items.length == 0)
return false;
return true;
},
_initialSelection: function(backward, binding) {
if (binding == 'switch-group') {
if (backward) {
@ -359,18 +365,9 @@ const WindowSwitcherPopup = new Lang.Class({
Name: 'WindowSwitcherPopup',
Extends: SwitcherPopup.SwitcherPopup,
_init: function() {
this.parent();
_init: function(items) {
this.parent(items);
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' });
let windows = this._getWindowList();
if (windows.length == 0)
return;
let mode = this._settings.get_enum('app-icon-mode');
this._switcherList = new WindowList(windows, mode);
this._items = this._switcherList.icons;
},
_getWindowList: function() {
@ -378,6 +375,31 @@ const WindowSwitcherPopup = new Lang.Class({
return global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
},
_createSwitcher: function() {
let windows = this._getWindowList();
if (windows.length == 0)
return false;
let mode = this._settings.get_enum('app-icon-mode');
this._switcherList = new WindowList(windows, mode);
this._items = this._switcherList.icons;
if (this._items.length == 0)
return false;
return true;
},
_initialSelection: function(backward, binding) {
if (binding == 'switch-windows-backward' || backward)
this._select(this._items.length - 1);
else if (this._items.length == 1)
this._select(0);
else
this._select(1);
},
_keyPressHandler: function(keysym, action) {
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS) {
this._select(this._next());

View File

@ -1267,7 +1267,6 @@ const FolderIcon = new Lang.Class({
addAppId(appInfo.get_id());
});
this.actor.visible = this.view.getAllItems().length > 0;
this.view.loadGrid();
this.emit('apps-changed');
},
@ -1688,8 +1687,7 @@ const AppIcon = new Lang.Class({
activate: function (button) {
let event = Clutter.get_current_event();
let modifiers = event ? event.get_state() : 0;
let openNewWindow = this.app.can_open_new_window () &&
modifiers & Clutter.ModifierType.CONTROL_MASK &&
let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK &&
this.app.state == Shell.AppState.RUNNING ||
button && button == 2;

View File

@ -14,11 +14,6 @@ const RENAMED_DESKTOP_IDS = {
'gcalctool.desktop': 'gnome-calculator.desktop',
'gedit.desktop': 'org.gnome.gedit.desktop',
'glchess.desktop': 'gnome-chess.desktop',
'glines.desktop': 'five-or-more.desktop',
'gnect.desktop': 'four-in-a-row.desktop',
'gnibbles.desktop': 'gnome-nibbles.desktop',
'gnobots2.desktop': 'gnome-robots.desktop',
'gnome-boxes.desktop': 'org.gnome.Boxes.desktop',
'gnome-clocks.desktop': 'org.gnome.clocks.desktop',
'gnome-contacts.desktop': 'org.gnome.Contacts.desktop',
'gnome-documents.desktop': 'org.gnome.Documents.desktop',
@ -28,9 +23,6 @@ const RENAMED_DESKTOP_IDS = {
'gnome-software.desktop': 'org.gnome.Software.desktop',
'gnome-weather.desktop': 'org.gnome.Weather.Application.desktop',
'gnomine.desktop': 'gnome-mines.desktop',
'gnotravex.desktop': 'gnome-tetravex.desktop',
'gnotski.desktop': 'gnome-klotski.desktop',
'gtali.desktop': 'tali.desktop',
'nautilus.desktop': 'org.gnome.Nautilus.desktop',
'polari.desktop': 'org.gnome.Polari.desktop',
'totem.desktop': 'org.gnome.Totem.desktop',

View File

@ -242,7 +242,11 @@ const Background = new Lang.Class({
destroy: function() {
this._cancellable.cancel();
this._removeAnimationTimeout();
if (this._updateAnimationTimeoutId) {
GLib.source_remove (this._updateAnimationTimeoutId);
this._updateAnimationTimeoutId = 0;
}
let i;
let keys = Object.keys(this._fileWatches);
@ -256,13 +260,6 @@ const Background = new Lang.Class({
this._settingsChangedSignalId = 0;
},
updateResolution: function() {
if (this._animation) {
this._removeAnimationTimeout();
this._updateAnimation();
}
},
_setLoaded: function() {
if (this.isLoaded)
return;
@ -306,13 +303,6 @@ const Background = new Lang.Class({
this._fileWatches[filename] = signalId;
},
_removeAnimationTimeout: function() {
if (this._updateAnimationTimeoutId) {
GLib.source_remove(this._updateAnimationTimeoutId);
this._updateAnimationTimeoutId = 0;
}
},
_updateAnimation: function() {
this._updateAnimationTimeoutId = 0;
@ -487,23 +477,6 @@ const BackgroundSource = new Lang.Class({
this._overrideImage = GLib.getenv('SHELL_BACKGROUND_IMAGE');
this._settings = new Gio.Settings({ schema_id: settingsSchema });
this._backgrounds = [];
this._monitorsChangedId = global.screen.connect('monitors-changed',
Lang.bind(this, this._onMonitorsChanged));
},
_onMonitorsChanged: function() {
for (let monitorIndex in this._backgrounds) {
let background = this._backgrounds[monitorIndex];
if (monitorIndex < this._layoutManager.monitors.length) {
background.updateResolution();
} else {
background.disconnect(background._changedId);
background.destroy();
delete this._backgrounds[monitorIndex];
}
}
},
getBackground: function(monitorIndex) {
@ -540,8 +513,8 @@ const BackgroundSource = new Lang.Class({
style: style
});
background._changedId = background.connect('changed', Lang.bind(this, function() {
background.disconnect(background._changedId);
let changedId = background.connect('changed', Lang.bind(this, function() {
background.disconnect(changedId);
background.destroy();
delete this._backgrounds[monitorIndex];
}));
@ -553,13 +526,8 @@ const BackgroundSource = new Lang.Class({
},
destroy: function() {
global.screen.disconnect(this._monitorsChangedId);
for (let monitorIndex in this._backgrounds) {
let background = this._backgrounds[monitorIndex];
background.disconnect(background._changedId);
background.destroy();
}
for (let monitorIndex in this._backgrounds)
this._backgrounds[monitorIndex].destroy();
this._backgrounds = null;
}
@ -733,7 +701,7 @@ const BackgroundManager = new Lang.Class({
background.disconnect(changeSignalId);
if (backgroundActor.loadedSignalId)
background.disconnect(backgroundActor.loadedSignalId);
backgroundActor.background._delegate.disconnect(backgroundActor.loadedSignalId);
}));
return backgroundActor;

View File

@ -84,7 +84,6 @@ const KeyringDialog = new Lang.Class({
let table = new St.Widget({ style_class: 'keyring-dialog-control-table',
layout_manager: layout });
layout.hookup_style(table);
let rtl = table.get_text_direction() == Clutter.TextDirection.RTL;
let row = 0;
if (this.prompt.password_visible) {
@ -93,6 +92,7 @@ const KeyringDialog = new Lang.Class({
y_align: Clutter.ActorAlign.CENTER });
label.set_text(_("Password:"));
label.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
layout.attach(label, 0, row, 1, 1);
this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
text: '',
can_focus: true,
@ -100,14 +100,7 @@ const KeyringDialog = new Lang.Class({
this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onPasswordActivate));
if (rtl) {
layout.attach(this._passwordEntry, 0, row, 1, 1);
layout.attach(label, 1, row, 1, 1);
} else {
layout.attach(label, 0, row, 1, 1);
layout.attach(this._passwordEntry, 1, row, 1, 1);
}
layout.attach(this._passwordEntry, 1, row, 1, 1);
row++;
} else {
this._passwordEntry = null;
@ -118,6 +111,7 @@ const KeyringDialog = new Lang.Class({
x_align: Clutter.ActorAlign.START,
y_align: Clutter.ActorAlign.CENTER }));
label.set_text(_("Type again:"));
layout.attach(label, 0, row, 1, 1);
this._confirmEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
text: '',
can_focus: true,
@ -125,13 +119,7 @@ const KeyringDialog = new Lang.Class({
this._confirmEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
ShellEntry.addContextMenu(this._confirmEntry, { isPassword: true });
this._confirmEntry.clutter_text.connect('activate', Lang.bind(this, this._onConfirmActivate));
if (rtl) {
layout.attach(this._confirmEntry, 0, row, 1, 1);
layout.attach(label, 1, row, 1, 1);
} else {
layout.attach(label, 0, row, 1, 1);
layout.attach(this._confirmEntry, 1, row, 1, 1);
}
layout.attach(this._confirmEntry, 1, row, 1, 1);
row++;
} else {
this._confirmEntry = null;
@ -144,7 +132,7 @@ const KeyringDialog = new Lang.Class({
let choice = new CheckBox.CheckBox();
this.prompt.bind_property('choice-label', choice.getLabelActor(), 'text', GObject.BindingFlags.SYNC_CREATE);
this.prompt.bind_property('choice-chosen', choice.actor, 'checked', GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL);
layout.attach(choice.actor, rtl ? 0 : 1, row, 1, 1);
layout.attach(choice.actor, 1, row, 1, 1);
row++;
}
@ -152,7 +140,7 @@ const KeyringDialog = new Lang.Class({
x_align: Clutter.ActorAlign.START });
warning.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
warning.clutter_text.line_wrap = true;
layout.attach(warning, rtl ? 0 : 1, row, 1, 1);
layout.attach(warning, 1, row, 1, 1);
this.prompt.bind_property('warning-visible', warning, 'visible', GObject.BindingFlags.SYNC_CREATE);
this.prompt.bind_property('warning', warning, 'text', GObject.BindingFlags.SYNC_CREATE);

View File

@ -140,10 +140,20 @@ const CtrlAltTabPopup = new Lang.Class({
Name: 'CtrlAltTabPopup',
Extends: SwitcherPopup.SwitcherPopup,
_init: function(items) {
this.parent(items);
_createSwitcher: function() {
this._switcherList = new CtrlAltTabSwitcher(this._items);
return true;
},
_initialSelection: function(backward, binding) {
if (binding == 'switch-panels') {
if (backward)
this._selectedIndex = this._items.length - 1;
} else if (binding == 'switch-panels-backward') {
if (!backward)
this._selectedIndex = this._items.length - 1;
}
this._select(this._selectedIndex);
},
_keyPressHandler: function(keysym, action) {

View File

@ -38,6 +38,8 @@ const UserWidget = imports.ui.userWidget;
let _endSessionDialog = null;
const TRIGGER_OFFLINE_UPDATE = '/usr/libexec/pk-trigger-offline-update';
const _ITEM_ICON_SIZE = 48;
const _DIALOG_ICON_SIZE = 48;
@ -132,18 +134,11 @@ const restartInstallDialogContent = {
showOtherSessions: true,
};
const DialogType = {
LOGOUT: 0 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_LOGOUT */,
SHUTDOWN: 1 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_SHUTDOWN */,
RESTART: 2 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART */,
UPDATE_RESTART: 3
};
const DialogContent = {
0 /* DialogType.LOGOUT */: logoutDialogContent,
1 /* DialogType.SHUTDOWN */: shutdownDialogContent,
2 /* DialogType.RESTART */: restartDialogContent,
3 /* DialogType.UPDATE_RESTART */: restartInstallDialogContent
0 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_LOGOUT */: logoutDialogContent,
1 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_SHUTDOWN */: shutdownDialogContent,
2 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART */: restartDialogContent,
3: restartInstallDialogContent
};
const MAX_USERS_IN_SESSION_DIALOG = 5;
@ -160,19 +155,6 @@ const LogindSessionIface = '<node> \
const LogindSession = Gio.DBusProxy.makeProxyWrapper(LogindSessionIface);
const PkOfflineIface = '<node> \
<interface name="org.freedesktop.PackageKit.Offline"> \
<property name="UpdatePrepared" type="b" access="read"/> \
<property name="TriggerAction" type="s" access="read"/> \
<method name="Trigger"> \
<arg type="s" name="action" direction="in"/> \
</method> \
<method name="Cancel"/> \
</interface> \
</node>';
const PkOfflineProxy = Gio.DBusProxy.makeProxyWrapper(PkOfflineIface);
const UPowerIface = '<node> \
<interface name="org.freedesktop.UPower"> \
<property name="OnBattery" type="b" access="read"/> \
@ -263,14 +245,9 @@ const EndSessionDialog = new Lang.Class({
this._loginManager = LoginManager.getLoginManager();
this._userManager = AccountsService.UserManager.get_default();
this._user = this._userManager.get_user(GLib.get_user_name());
this._updatesFile = Gio.File.new_for_path('/system-update');
this._preparedUpdateFile = Gio.File.new_for_path('/var/lib/PackageKit/prepared-update');
this._pkOfflineProxy = new PkOfflineProxy(Gio.DBus.system,
'org.freedesktop.PackageKit',
'/org/freedesktop/PackageKit',
Lang.bind(this, function(proxy, error) {
if (error)
log(error.message);
}));
this._powerProxy = new UPowerProxy(Gio.DBus.system,
'org.freedesktop.UPower',
'/org/freedesktop/UPower',
@ -522,29 +499,31 @@ const EndSessionDialog = new Lang.Class({
},
_triggerOfflineUpdateReboot: function(callback) {
this._pkOfflineProxy.TriggerRemote('reboot',
function (result, error) {
if (error)
log(error.message);
callback();
});
this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, 'reboot'], callback);
},
_triggerOfflineUpdateShutdown: function(callback) {
this._pkOfflineProxy.TriggerRemote('power-off',
function (result, error) {
if (error)
log(error.message);
callback();
});
this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, 'power-off'], callback);
},
_triggerOfflineUpdateCancel: function(callback) {
this._pkOfflineProxy.CancelRemote(function (result, error) {
if (error)
log(error.message);
this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, '--cancel'], callback);
},
_pkexecSpawn: function(argv, callback) {
let ret, pid;
try {
[ret, pid] = GLib.spawn_async(null, ['pkexec'].concat(argv), null,
GLib.SpawnFlags.DO_NOT_REAP_CHILD | GLib.SpawnFlags.SEARCH_PATH,
null);
} catch (e) {
log('Error spawning "pkexec %s": %s'.format(argv.join(' '), e.toString()));
callback();
return;
}
GLib.child_watch_add(GLib.PRIORITY_DEFAULT, pid, function(pid, status) {
GLib.spawn_close_pid(pid);
callback();
});
@ -698,9 +677,8 @@ const EndSessionDialog = new Lang.Class({
this._totalSecondsToStayOpen = totalSecondsToStayOpen;
this._type = type;
if (this._type == DialogType.RESTART &&
this._pkOfflineProxy.TriggerAction == 'reboot')
this._type = DialogType.UPDATE_RESTART;
if (this._type == 2 && this._updatesFile.query_exists(null))
this._type = 3;
this._applications = [];
this._applicationList.destroy_all_children();
@ -727,19 +705,19 @@ const EndSessionDialog = new Lang.Class({
if (dialogContent.showOtherSessions)
this._loadSessions();
let updateAlreadyTriggered = this._pkOfflineProxy.TriggerAction == 'power-off' || this._pkOfflineProxy.TriggerAction == 'reboot';
let updatePrepared = this._pkOfflineProxy.UpdatePrepared;
let preparedUpdate = this._preparedUpdateFile.query_exists(null);
let updateAlreadyTriggered = this._updatesFile.query_exists(null);
let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed;
_setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText);
this._checkBox.actor.visible = (dialogContent.checkBoxText && updatePrepared && updatesAllowed);
this._checkBox.actor.checked = (updatePrepared && updateAlreadyTriggered);
this._checkBox.actor.visible = (dialogContent.checkBoxText && preparedUpdate && updatesAllowed);
this._checkBox.actor.checked = (preparedUpdate && updateAlreadyTriggered);
// We show the warning either together with the checkbox, or when
// updates have already been triggered, but the user doesn't have
// enough permissions to cancel them.
this._batteryWarning.visible = (dialogContent.showBatteryWarning &&
(this._checkBox.actor.visible || updatePrepared && updateAlreadyTriggered && !updatesAllowed));
(this._checkBox.actor.visible || preparedUpdate && updateAlreadyTriggered && !updatesAllowed));
this._updateButtons();

View File

@ -271,17 +271,10 @@ function onEnabledExtensionsChanged() {
}
function _onVersionValidationChanged() {
// we want to reload all extensions, but only enable
// extensions when allowed by the sessionMode, so
// temporarily disable them all
enabledExtensions = [];
for (let uuid in ExtensionUtils.extensions)
reloadExtension(ExtensionUtils.extensions[uuid]);
enabledExtensions = getEnabledExtensions();
if (Main.sessionMode.allowExtensions) {
enabledExtensions.forEach(function(uuid) {
enableExtension(uuid);
if (ExtensionUtils.extensions[uuid])
reloadExtension(ExtensionUtils.extensions[uuid]);
});
}
}

View File

@ -447,6 +447,7 @@ const IconGrid = new Lang.Class({
actorClone.set_size(originalWidth, originalHeight);
let bounceUpTime = ANIMATION_TIME_IN / 4;
// Defeat onComplete anonymous function closure
let isLastItem = index == actors.length - 1;
Tweener.addTween(actorClone,
{ time: bounceUpTime,
@ -520,10 +521,11 @@ const IconGrid = new Lang.Class({
let scaleY = sourceScaledHeight / height;
let [adjustedSourcePositionX, adjustedSourcePositionY] = [sourceCenterX - sourceScaledWidth / 2, sourceCenterY - sourceScaledHeight / 2];
// Defeat onComplete anonymous function closure
let isLastItem = index == actors.length - 1;
let movementParams, fadeParams;
if (animationDirection == AnimationDirection.IN) {
let isLastItem = actor._distance == minDist;
actorClone.opacity = 0;
actorClone.set_scale(scaleX, scaleY);
@ -551,8 +553,6 @@ const IconGrid = new Lang.Class({
delay: delay,
opacity: 255 };
} else {
let isLastItem = actor._distance == maxDist;
let [startX, startY] = actor._transformedPosition;
actorClone.set_position(startX, startY);
@ -569,7 +569,6 @@ const IconGrid = new Lang.Class({
this._animationDone();
this._restoreItemsOpacity();
}
actor.reactive = true;
actorClone.destroy();
})};
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,

View File

@ -204,24 +204,24 @@ function _initializeUI() {
}
layoutManager.connect('startup-complete', function() {
if (keybindingMode == Shell.KeyBindingMode.NONE) {
keybindingMode = Shell.KeyBindingMode.NORMAL;
}
if (screenShield) {
screenShield.lockIfWasLocked();
}
if (LoginManager.haveSystemd() &&
sessionMode.currentMode != 'gdm' &&
sessionMode.currentMode != 'initial-setup') {
// Do not import globally to not depend
// on systemd on non-systemd systems.
let GSystem = imports.gi.GSystem;
GSystem.log_structured_print('GNOME Shell started at ' + _startDate,
['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]);
} else {
log('GNOME Shell started at ' + _startDate);
}
});
if (keybindingMode == Shell.KeyBindingMode.NONE) {
keybindingMode = Shell.KeyBindingMode.NORMAL;
}
if (screenShield) {
screenShield.lockIfWasLocked();
}
if (LoginManager.haveSystemd() &&
sessionMode.currentMode != 'gdm' &&
sessionMode.currentMode != 'initial-setup') {
// Do not import globally to not depend
// on systemd on non-systemd systems.
let GSystem = imports.gi.GSystem;
GSystem.log_structured_print('GNOME Shell started at ' + _startDate,
['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]);
} else {
log('GNOME Shell started at ' + _startDate);
}
});
}
function _loadDefaultStylesheet() {

View File

@ -27,7 +27,6 @@ const PopupMenu = imports.ui.popupMenu;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
const Util = imports.misc.util;
const ViewSelector = imports.ui.viewSelector;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
@ -1812,13 +1811,6 @@ const MessageTray = new Lang.Class({
y_expand: true });
this.actor.add_actor(this._summary);
this._focusTrap = new ViewSelector.FocusTrap({ can_focus: true });
this._focusTrap.connect('key-focus-in', Lang.bind(this,
function() {
this._messageTrayMenuButton.actor.grab_key_focus();
}));
this._summary.add_actor(this._focusTrap);
this._summaryMotionId = 0;
this._summaryBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM,
@ -1943,9 +1935,6 @@ const MessageTray = new Lang.Class({
this._messageTrayMenuButton = new MessageTrayMenuButton(this);
this.actor.add_actor(this._messageTrayMenuButton.actor);
this._messageTrayMenuButton.actor.connect('key-press-event',
Lang.bind(this, this._onTrayButtonKeyPress));
let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM);
gesture.connect('activated', Lang.bind(this, this.toggle));
global.stage.add_action(gesture);
@ -2041,16 +2030,6 @@ const MessageTray = new Lang.Class({
return GLib.SOURCE_REMOVE;
},
_onTrayButtonKeyPress: function(actor, event) {
if (event.get_key_symbol() == Clutter.ISO_Left_Tab) {
this._focusTrap.can_focus = false;
this._summary.navigate_focus(null, Gtk.DirectionType.TAB_BACKWARD, false);
this._focusTrap.can_focus = true;
return Clutter.EVENT_STOP;
}
return Clutter.EVENT_PROPAGATE;
},
_onNotificationKeyRelease: function(actor, event) {
if (event.get_key_symbol() == Clutter.KEY_Escape && event.get_state() == 0) {
this._expireNotification();

View File

@ -435,17 +435,17 @@ const Overview = new Lang.Class({
this._inDrag = false;
},
beginWindowDrag: function(window) {
this.emit('window-drag-begin', window);
beginWindowDrag: function(clone) {
this.emit('window-drag-begin', clone);
this._inDrag = true;
},
cancelledWindowDrag: function(window) {
this.emit('window-drag-cancelled', window);
cancelledWindowDrag: function(clone) {
this.emit('window-drag-cancelled', clone);
},
endWindowDrag: function(window) {
this.emit('window-drag-end', window);
endWindowDrag: function(clone) {
this.emit('window-drag-end', clone);
this._inDrag = false;
},

View File

@ -918,14 +918,14 @@ const PopupSubMenu = new Lang.Class({
if (animate && needsScrollbar)
animate = false;
let targetAngle = this.actor.text_direction == Clutter.TextDirection.RTL ? -90 : 90;
if (animate) {
let [minHeight, naturalHeight] = this.actor.get_preferred_height(-1);
this.actor.height = 0;
this.actor._arrowRotation = this._arrow.rotation_angle_z;
let angle = this.actor._arrowRotation;
// animate to the first multiple of 90 greater than current angle
Tweener.addTween(this.actor,
{ _arrowRotation: targetAngle,
{ _arrowRotation: angle - angle % 90 + 90,
height: naturalHeight,
time: 0.25,
onUpdateScope: this,
@ -938,7 +938,7 @@ const PopupSubMenu = new Lang.Class({
}
});
} else {
this._arrow.rotation_angle_z = targetAngle;
this._arrow.rotation_angle_z = this.actor._arrowRotation + 90;
}
},
@ -957,8 +957,10 @@ const PopupSubMenu = new Lang.Class({
if (animate) {
this.actor._arrowRotation = this._arrow.rotation_angle_z;
let angle = this.actor._arrowRotation;
// animate to the first multiple of 90 less than current angle
Tweener.addTween(this.actor,
{ _arrowRotation: 0,
{ _arrowRotation: (angle - 1) - (angle - 1) % 90,
height: 0,
time: 0.25,
onUpdateScope: this,
@ -972,7 +974,7 @@ const PopupSubMenu = new Lang.Class({
},
});
} else {
this._arrow.rotation_angle_z = 0;
this._arrow.rotation_angle_z = this.actor._arrowRotation - 90;
this.actor.hide();
}
},
@ -1050,6 +1052,8 @@ const PopupSubMenuMenuItem = new Lang.Class({
this._triangleBin = new St.Widget({ y_expand: true,
y_align: Clutter.ActorAlign.CENTER });
this._triangleBin.add_child(this._triangle);
if (this._triangleBin.get_text_direction() == Clutter.TextDirection.RTL)
this._triangleBin.set_scale(-1.0, 1.0);
this.actor.add_child(this._triangleBin);
this.actor.add_accessible_state (Atk.StateType.EXPANDABLE);

View File

@ -2,7 +2,6 @@
const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta;
@ -25,6 +24,108 @@ const SEARCH_PROVIDERS_SCHEMA = 'org.gnome.desktop.search-providers';
const MAX_LIST_SEARCH_RESULTS_ROWS = 3;
const MAX_GRID_SEARCH_RESULTS_ROWS = 1;
const SearchSystem = new Lang.Class({
Name: 'SearchSystem',
_init: function() {
this._providers = [];
this._registerProvider(new AppDisplay.AppSearchProvider());
this._searchSettings = new Gio.Settings({ schema_id: SEARCH_PROVIDERS_SCHEMA });
this._searchSettings.connect('changed::enabled', Lang.bind(this, this._reloadRemoteProviders));
this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders));
this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders));
this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders));
this._reloadRemoteProviders();
this._cancellable = new Gio.Cancellable();
},
addProvider: function(provider) {
this._providers.push(provider);
this.emit('providers-changed');
},
_reloadRemoteProviders: function() {
let remoteProviders = this._providers.filter(function(provider) {
return provider.isRemoteProvider;
});
remoteProviders.forEach(Lang.bind(this, function(provider) {
this._unregisterProvider(provider);
}));
RemoteSearch.loadRemoteSearchProviders(Lang.bind(this, function(providers) {
providers.forEach(Lang.bind(this, this._registerProvider));
}));
this.emit('providers-changed');
},
_registerProvider: function (provider) {
this._providers.push(provider);
},
_unregisterProvider: function (provider) {
let index = this._providers.indexOf(provider);
this._providers.splice(index, 1);
if (provider.display)
provider.display.destroy();
},
getProviders: function() {
return this._providers;
},
getTerms: function() {
return this._terms;
},
reset: function() {
this._terms = [];
this._results = {};
},
_gotResults: function(results, provider) {
this._results[provider.id] = results;
this.emit('search-updated', provider, results);
},
setTerms: function(terms) {
this._cancellable.cancel();
this._cancellable.reset();
let previousResults = this._results;
let previousTerms = this._terms;
this.reset();
if (!terms)
return;
let searchString = terms.join(' ');
let previousSearchString = previousTerms.join(' ');
if (searchString == previousSearchString)
return;
let isSubSearch = false;
if (previousTerms.length > 0)
isSubSearch = searchString.indexOf(previousSearchString) == 0;
this._terms = terms;
this._providers.forEach(Lang.bind(this, function(provider) {
let previousProviderResults = previousResults[provider.id];
if (isSubSearch && previousProviderResults)
provider.getSubsearchResultSet(previousProviderResults, terms, Lang.bind(this, this._gotResults, provider), this._cancellable);
else
provider.getInitialResultSet(terms, Lang.bind(this, this._gotResults, provider), this._cancellable);
}));
}
});
Signals.addSignalMethods(SearchSystem.prototype);
const MaxWidthBin = new Lang.Class({
Name: 'MaxWidthBin',
Extends: St.Bin,
@ -234,10 +335,9 @@ const SearchResultsBase = new Lang.Class({
let hasMoreResults = results.length < providerResults.length;
this._ensureResultActors(results, Lang.bind(this, function(successful) {
if (!successful) {
this._clearResultDisplay();
this._clearResultDisplay();
if (!successful)
return;
}
// To avoid CSS transitions causing flickering when
// the first search result stays the same, we hide the
@ -397,120 +497,16 @@ const SearchResults = new Lang.Class({
this._statusText = new St.Label({ style_class: 'search-statustext' });
this._statusBin = new St.Bin({ x_align: St.Align.MIDDLE,
y_align: St.Align.MIDDLE });
this.actor.add(this._statusBin, { expand: true });
this._content.add(this._statusBin, { expand: true });
this._statusBin.add_actor(this._statusText);
this._highlightDefault = false;
this._defaultResult = null;
this._startingSearch = false;
this._terms = [];
this._results = {};
this._providers = [];
this._searchSettings = new Gio.Settings({ schema_id: SEARCH_PROVIDERS_SCHEMA });
this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders));
this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders));
this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders));
this._searchTimeoutId = 0;
this._cancellable = new Gio.Cancellable();
this._registerProvider(new AppDisplay.AppSearchProvider());
this._reloadRemoteProviders();
},
_reloadRemoteProviders: function() {
let remoteProviders = this._providers.filter(function(provider) {
return provider.isRemoteProvider;
});
remoteProviders.forEach(Lang.bind(this, function(provider) {
this._unregisterProvider(provider);
}));
RemoteSearch.loadRemoteSearchProviders(Lang.bind(this, function(providers) {
providers.forEach(Lang.bind(this, this._registerProvider));
}));
},
_registerProvider: function (provider) {
this._providers.push(provider);
this._ensureProviderDisplay(provider);
},
_unregisterProvider: function (provider) {
let index = this._providers.indexOf(provider);
this._providers.splice(index, 1);
if (provider.display)
provider.display.destroy();
},
_gotResults: function(results, provider) {
this._results[provider.id] = results;
this._updateResults(provider, results);
},
_doSearch: function() {
this._startingSearch = false;
let previousResults = this._results;
this._results = {};
this._providers.forEach(Lang.bind(this, function(provider) {
provider.searchInProgress = true;
let previousProviderResults = previousResults[provider.id];
if (this._isSubSearch && previousProviderResults)
provider.getSubsearchResultSet(previousProviderResults, this._terms, Lang.bind(this, this._gotResults, provider), this._cancellable);
else
provider.getInitialResultSet(this._terms, Lang.bind(this, this._gotResults, provider), this._cancellable);
}));
this._updateSearchProgress();
if (this._searchTimeoutId > 0) {
GLib.source_remove(this._searchTimeoutId);
this._searchTimeoutId = 0;
}
},
_onSearchTimeout: function() {
this._searchTimeoutId = 0;
this._doSearch();
return GLib.SOURCE_REMOVE;
},
setTerms: function(terms) {
this._startingSearch = true;
this._cancellable.cancel();
this._cancellable.reset();
if (!terms) {
if (this._searchTimeoutId > 0) {
GLib.source_remove(this._searchTimeoutId);
this._searchTimeoutId = 0;
}
return;
}
let searchString = terms.join(' ');
let previousSearchString = this._terms.join(' ');
if (searchString == previousSearchString)
return;
let isSubSearch = false;
if (this._terms.length > 0)
isSubSearch = searchString.indexOf(previousSearchString) == 0;
this._terms = terms;
this._isSubSearch = isSubSearch;
this._updateSearchProgress();
if (this._searchTimeoutId == 0)
this._searchTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 150, Lang.bind(this, this._onSearchTimeout));
this._searchSystem = new SearchSystem();
this._searchSystem.connect('search-updated', Lang.bind(this, this._updateResults));
this._searchSystem.connect('providers-changed', Lang.bind(this, this._updateProviderDisplays));
this._updateProviderDisplays();
},
_onPan: function(action) {
@ -532,23 +528,44 @@ const SearchResults = new Lang.Class({
if (provider.appInfo)
providerDisplay = new ListSearchResults(provider);
else
providerDisplay = new GridSearchResults(provider, this.actor);
providerDisplay = new GridSearchResults(provider, this._content);
providerDisplay.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
this._content.add(providerDisplay.actor);
provider.display = providerDisplay;
},
_updateProviderDisplays: function() {
this._searchSystem.getProviders().forEach(Lang.bind(this, this._ensureProviderDisplay));
},
_clearDisplay: function() {
this._providers.forEach(function(provider) {
this._searchSystem.getProviders().forEach(function(provider) {
provider.display.clear();
});
},
reset: function() {
this._searchSystem.reset();
this._statusBin.hide();
this._clearDisplay();
this._defaultResult = null;
},
startingSearch: function() {
this.reset();
this._statusText.set_text(_("Searching…"));
this._statusBin.show();
},
setTerms: function(terms) {
this._searchSystem.setTerms(terms);
},
_maybeSetInitialSelection: function() {
let newDefaultResult = null;
let providers = this._providers;
let providers = this._searchSystem.getProviders();
for (let i = 0; i < providers.length; i++) {
let provider = providers[i];
let display = provider.display;
@ -571,50 +588,31 @@ const SearchResults = new Lang.Class({
}
},
get searchInProgress() {
if (this._startingSearch)
return true;
return this._providers.some(function(provider) {
return provider.searchInProgress;
});
},
_updateSearchProgress: function () {
let haveResults = this._providers.some(function(provider) {
_updateStatusText: function () {
let haveResults = this._searchSystem.getProviders().some(function(provider) {
let display = provider.display;
return (display.getFirstResult() != null);
});
this._scrollView.visible = haveResults;
this._statusBin.visible = !haveResults;
if (!haveResults) {
if (this.searchInProgress) {
this._statusText.set_text(_("Searching…"));
} else {
this._statusText.set_text(_("No results."));
}
this._statusText.set_text(_("No results."));
this._statusBin.show();
} else {
this._statusBin.hide();
}
},
_updateResults: function(provider, results) {
let terms = this._terms;
_updateResults: function(searchSystem, provider, results) {
let terms = searchSystem.getTerms();
let display = provider.display;
display.updateSearch(results, terms, Lang.bind(this, function() {
provider.searchInProgress = false;
this._maybeSetInitialSelection();
this._updateSearchProgress();
this._updateStatusText();
}));
},
activateDefault: function() {
// If we have a search queued up, force the search now.
if (this._searchTimeoutId > 0)
this._doSearch();
if (this._defaultResult)
this._defaultResult.activate();
},

View File

@ -17,6 +17,8 @@ const EntryMenu = new Lang.Class({
_init: function(entry) {
this.parent(entry, 0, St.Side.TOP);
this.actor.add_style_class_name('entry-context-menu');
this._entry = entry;
this._clipboard = St.Clipboard.get_default();

View File

@ -2,6 +2,8 @@
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GnomeDesktop = imports.gi.GnomeDesktop;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
@ -9,9 +11,16 @@ const Signals = imports.signals;
const St = imports.gi.St;
const Gettext = imports.gettext;
const IBus = imports.misc.ibusManager.IBus;
const IBusManager = imports.misc.ibusManager;
const KeyboardManager = imports.misc.keyboardManager;
try {
var IBus = imports.gi.IBus;
if (!('new_async' in IBus.Bus))
throw "IBus version is too old";
const IBusCandidatePopup = imports.ui.ibusCandidatePopup;
} catch (e) {
var IBus = null;
log(e);
}
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const PanelMenu = imports.ui.panelMenu;
@ -19,12 +28,173 @@ const SwitcherPopup = imports.ui.switcherPopup;
const Util = imports.misc.util;
const DESKTOP_INPUT_SOURCES_SCHEMA = 'org.gnome.desktop.input-sources';
const KEY_CURRENT_INPUT_SOURCE = 'current';
const KEY_INPUT_SOURCES = 'sources';
const KEY_KEYBOARD_OPTIONS = 'xkb-options';
const INPUT_SOURCE_TYPE_XKB = 'xkb';
const INPUT_SOURCE_TYPE_IBUS = 'ibus';
// This is the longest we'll keep the keyboard frozen until an input
// source is active.
const MAX_INPUT_SOURCE_ACTIVATION_TIME = 4000; // ms
const BUS_NAME = 'org.gnome.SettingsDaemon.Keyboard';
const OBJECT_PATH = '/org/gnome/SettingsDaemon/Keyboard';
const KeyboardManagerInterface = '<node> \
<interface name="org.gnome.SettingsDaemon.Keyboard"> \
<method name="SetInputSource"> \
<arg type="u" direction="in" /> \
</method> \
</interface> \
</node>';
const KeyboardManagerProxy = Gio.DBusProxy.makeProxyWrapper(KeyboardManagerInterface);
function releaseKeyboard() {
if (Main.modalCount > 0)
global.display.unfreeze_keyboard(global.get_current_time());
else
global.display.ungrab_keyboard(global.get_current_time());
}
function holdKeyboard() {
global.freeze_keyboard(global.get_current_time());
}
const IBusManager = new Lang.Class({
Name: 'IBusManager',
_init: function(readyCallback) {
if (!IBus)
return;
IBus.init();
this._readyCallback = readyCallback;
this._candidatePopup = new IBusCandidatePopup.CandidatePopup();
this._panelService = null;
this._engines = {};
this._ready = false;
this._registerPropertiesId = 0;
this._currentEngineName = null;
this._ibus = IBus.Bus.new_async();
this._ibus.connect('connected', Lang.bind(this, this._onConnected));
this._ibus.connect('disconnected', Lang.bind(this, this._clear));
// Need to set this to get 'global-engine-changed' emitions
this._ibus.set_watch_ibus_signal(true);
this._ibus.connect('global-engine-changed', Lang.bind(this, this._engineChanged));
},
_clear: function() {
if (this._panelService)
this._panelService.destroy();
this._panelService = null;
this._candidatePopup.setPanelService(null);
this._engines = {};
this._ready = false;
this._registerPropertiesId = 0;
this._currentEngineName = null;
if (this._readyCallback)
this._readyCallback(false);
},
_onConnected: function() {
this._ibus.list_engines_async(-1, null, Lang.bind(this, this._initEngines));
this._ibus.request_name_async(IBus.SERVICE_PANEL,
IBus.BusNameFlag.REPLACE_EXISTING,
-1, null,
Lang.bind(this, this._initPanelService));
},
_initEngines: function(ibus, result) {
let enginesList = this._ibus.list_engines_async_finish(result);
if (enginesList) {
for (let i = 0; i < enginesList.length; ++i) {
let name = enginesList[i].get_name();
this._engines[name] = enginesList[i];
}
this._updateReadiness();
} else {
this._clear();
}
},
_initPanelService: function(ibus, result) {
let success = this._ibus.request_name_async_finish(result);
if (success) {
this._panelService = new IBus.PanelService({ connection: this._ibus.get_connection(),
object_path: IBus.PATH_PANEL });
this._candidatePopup.setPanelService(this._panelService);
this._panelService.connect('update-property', Lang.bind(this, this._updateProperty));
// If an engine is already active we need to get its properties
this._ibus.get_global_engine_async(-1, null, Lang.bind(this, function(i, result) {
let engine;
try {
engine = this._ibus.get_global_engine_async_finish(result);
if (!engine)
return;
} catch(e) {
return;
}
this._engineChanged(this._ibus, engine.get_name());
}));
this._updateReadiness();
} else {
this._clear();
}
},
_updateReadiness: function() {
this._ready = (Object.keys(this._engines).length > 0 &&
this._panelService != null);
if (this._readyCallback)
this._readyCallback(this._ready);
},
_engineChanged: function(bus, engineName) {
if (!this._ready)
return;
this._currentEngineName = engineName;
if (this._registerPropertiesId != 0)
return;
this._registerPropertiesId =
this._panelService.connect('register-properties', Lang.bind(this, function(p, props) {
if (!props.get(0))
return;
this._panelService.disconnect(this._registerPropertiesId);
this._registerPropertiesId = 0;
this.emit('properties-registered', this._currentEngineName, props);
}));
},
_updateProperty: function(panel, prop) {
this.emit('property-updated', this._currentEngineName, prop);
},
activateProperty: function(key, state) {
this._panelService.property_activate(key, state);
},
getEngineDesc: function(id) {
if (!IBus || !this._ready)
return null;
return this._engines[id];
}
});
Signals.addSignalMethods(IBusManager.prototype);
const LayoutMenuItem = new Lang.Class({
Name: 'LayoutMenuItem',
Extends: PopupMenu.PopupBaseMenuItem,
@ -50,9 +220,16 @@ const InputSource = new Lang.Class({
this._shortName = shortName;
this.index = index;
this.properties = null;
this._menuItem = new LayoutMenuItem(this.displayName, this._shortName);
this._menuItem.connect('activate', Lang.bind(this, this.activate));
this._indicatorLabel = new St.Label({ text: this._shortName });
this.xkbId = this._getXkbId();
this.properties = null;
},
destroy: function() {
this._menuItem.destroy();
this._indicatorLabel.destroy();
},
get shortName() {
@ -61,23 +238,21 @@ const InputSource = new Lang.Class({
set shortName(v) {
this._shortName = v;
this.emit('changed');
this._menuItem.indicator.set_text(v);
this._indicatorLabel.set_text(v);
},
get menuItem() {
return this._menuItem;
},
get indicatorLabel() {
return this._indicatorLabel;
},
activate: function() {
this.emit('activate');
},
_getXkbId: function() {
let engineDesc = IBusManager.getIBusManager().getEngineDesc(this.id);
if (!engineDesc)
return this.id;
if (engineDesc.variant && engineDesc.variant.length > 0)
return engineDesc.layout + '+' + engineDesc.variant;
else
return engineDesc.layout;
}
});
Signals.addSignalMethods(InputSource.prototype);
@ -90,8 +265,22 @@ const InputSourcePopup = new Lang.Class({
this._action = action;
this._actionBackward = actionBackward;
},
_createSwitcher: function() {
this._switcherList = new InputSourceSwitcher(this._items);
return true;
},
_initialSelection: function(backward, binding) {
if (binding == 'switch-input-source') {
if (backward)
this._selectedIndex = this._items.length - 1;
} else if (binding == 'switch-input-source-backward') {
if (!backward)
this._selectedIndex = this._items.length - 1;
}
this._select(this._selectedIndex);
},
_keyPressHandler: function(keysym, action) {
@ -142,10 +331,25 @@ const InputSourceSwitcher = new Lang.Class({
}
});
const InputSourceManager = new Lang.Class({
Name: 'InputSourceManager',
const InputSourceIndicator = new Lang.Class({
Name: 'InputSourceIndicator',
Extends: PanelMenu.Button,
_init: function() {
this.parent(0.0, _("Keyboard"));
this._container = new Shell.GenericContainer();
this._container.connect('get-preferred-width', Lang.bind(this, this._containerGetPreferredWidth));
this._container.connect('get-preferred-height', Lang.bind(this, this._containerGetPreferredHeight));
this._container.connect('allocate', Lang.bind(this, this._containerAllocate));
this._hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
this._hbox.add_child(this._container);
this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
this.actor.add_child(this._hbox);
this.actor.add_style_class_name('panel-status-button');
// All valid input sources currently in the gsettings
// KEY_INPUT_SOURCES list indexed by their index there
this._inputSources = {};
@ -172,20 +376,38 @@ const InputSourceManager = new Lang.Class({
Shell.KeyBindingMode.ALL,
Lang.bind(this, this._switchInputSource));
this._settings = new Gio.Settings({ schema_id: DESKTOP_INPUT_SOURCES_SCHEMA });
this._settings.connect('changed::' + KEY_CURRENT_INPUT_SOURCE, Lang.bind(this, this._currentInputSourceChanged));
this._settings.connect('changed::' + KEY_INPUT_SOURCES, Lang.bind(this, this._inputSourcesChanged));
this._settings.connect('changed::' + KEY_KEYBOARD_OPTIONS, Lang.bind(this, this._keyboardOptionsChanged));
this._xkbInfo = KeyboardManager.getXkbInfo();
this._keyboardManager = KeyboardManager.getKeyboardManager();
this._xkbInfo = new GnomeDesktop.XkbInfo();
this._propSeparator = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(this._propSeparator);
this._propSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._propSection);
this._propSection.actor.hide();
this._ibusReady = false;
this._ibusManager = IBusManager.getIBusManager();
this._ibusManager.connect('ready', Lang.bind(this, this._ibusReadyCallback));
this._ibusManager = new IBusManager(Lang.bind(this, this._ibusReadyCallback));
this._ibusManager.connect('properties-registered', Lang.bind(this, this._ibusPropertiesRegistered));
this._ibusManager.connect('property-updated', Lang.bind(this, this._ibusPropertyUpdated));
this._inputSourcesChanged();
this._keyboardManager = new KeyboardManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
function(proxy, error) {
if (error)
log(error.message);
});
this._keyboardManager.g_default_timeout = MAX_INPUT_SOURCE_ACTIVATION_TIME;
global.display.connect('modifiers-accelerator-activated', Lang.bind(this, this._modifiersSwitcher));
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this._showLayoutItem = this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, this._showLayout));
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated();
this._sourcesPerWindow = false;
this._focusWindowNotifyId = 0;
this._overviewShowingId = 0;
@ -194,12 +416,15 @@ const InputSourceManager = new Lang.Class({
this._sourcesPerWindowChanged();
},
reload: function() {
this._keyboardManager.setKeyboardOptions(this._settings.get_strv(KEY_KEYBOARD_OPTIONS));
this._inputSourcesChanged();
_sessionUpdated: function() {
// re-using "allowSettings" for the keyboard layout is a bit shady,
// but at least for now it is used as "allow popping up windows
// from shell menus"; we can always add a separate sessionMode
// option if need arises.
this._showLayoutItem.actor.visible = Main.sessionMode.allowSettings;
},
_ibusReadyCallback: function(im, ready) {
_ibusReadyCallback: function(ready) {
if (this._ibusReady == ready)
return;
@ -211,7 +436,7 @@ const InputSourceManager = new Lang.Class({
_modifiersSwitcher: function() {
let sourceIndexes = Object.keys(this._inputSources);
if (sourceIndexes.length == 0) {
KeyboardManager.releaseKeyboard();
releaseKeyboard();
return true;
}
@ -246,20 +471,42 @@ const InputSourceManager = new Lang.Class({
}
let popup = new InputSourcePopup(this._mruSources, this._keybindingAction, this._keybindingActionBackward);
let modifiers = binding.get_modifiers();
if (!popup.show(binding.is_reversed(), binding.get_name(), binding.get_mask()))
popup.destroy();
},
_keyboardOptionsChanged: function() {
this._keyboardManager.setKeyboardOptions(this._settings.get_strv(KEY_KEYBOARD_OPTIONS));
this._keyboardManager.reapply();
},
_currentInputSourceChanged: function() {
let nVisibleSources = Object.keys(this._inputSources).length;
let newSourceIndex = this._settings.get_uint(KEY_CURRENT_INPUT_SOURCE);
let newSource = this._inputSources[newSourceIndex];
_currentInputSourceChanged: function(newSource) {
let oldSource;
[oldSource, this._currentSource] = [this._currentSource, newSource];
this.emit('current-source-changed', oldSource);
if (oldSource) {
oldSource.menuItem.setOrnament(PopupMenu.Ornament.NONE);
oldSource.indicatorLabel.hide();
}
if (!newSource || (nVisibleSources < 2 && !newSource.properties)) {
// This source index might be invalid if we weren't able
// to build a menu item for it, so we hide ourselves since
// we can't fix it here. *shrug*
// We also hide if we have only one visible source unless
// it's an IBus source with properties.
this.menu.close();
this.actor.hide();
return;
}
this.actor.show();
newSource.menuItem.setOrnament(PopupMenu.Ornament.DOT);
newSource.indicatorLabel.show();
this._buildPropSection(newSource.properties);
for (let i = 1; i < this._mruSources.length; ++i)
if (this._mruSources[i] == newSource) {
@ -271,32 +518,16 @@ const InputSourceManager = new Lang.Class({
this._changePerWindowSource();
},
_activateInputSource: function(is) {
KeyboardManager.holdKeyboard();
this._keyboardManager.apply(is.xkbId);
// All the "xkb:..." IBus engines simply "echo" back symbols,
// despite their naming implying differently, so we always set
// one in order for XIM applications to work given that we set
// XMODIFIERS=@im=ibus in the first place so that they can
// work without restarting when/if the user adds an IBus input
// source.
let engine;
if (is.type == INPUT_SOURCE_TYPE_IBUS)
engine = is.id;
else
engine = 'xkb:us::eng';
this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
this._currentInputSourceChanged(is);
},
_inputSourcesChanged: function() {
let sources = this._settings.get_value(KEY_INPUT_SOURCES);
let nSources = sources.n_children();
for (let i in this._inputSources)
this._inputSources[i].destroy();
this._inputSources = {};
this._ibusSources = {};
this._currentSource = null;
let inputSourcesByShortName = {};
@ -328,7 +559,10 @@ const InputSourceManager = new Lang.Class({
let is = new InputSource(type, id, displayName, shortName, i);
is.connect('activate', Lang.bind(this, this._activateInputSource));
is.connect('activate', Lang.bind(this, function() {
holdKeyboard();
this._keyboardManager.SetInputSourceRemote(is.index, releaseKeyboard);
}));
if (!(is.shortName in inputSourcesByShortName))
inputSourcesByShortName[is.shortName] = [];
@ -340,22 +574,24 @@ const InputSourceManager = new Lang.Class({
this._ibusSources[is.id] = is;
}
let menuIndex = 0;
for (let i in this._inputSources) {
let is = this._inputSources[i];
if (inputSourcesByShortName[is.shortName].length > 1) {
let sub = inputSourcesByShortName[is.shortName].indexOf(is) + 1;
is.shortName += String.fromCharCode(0x2080 + sub);
}
}
this.emit('sources-changed');
this.menu.addMenuItem(is.menuItem, menuIndex++);
is.indicatorLabel.hide();
this._container.add_actor(is.indicatorLabel);
}
let sourcesList = [];
for (let i in this._inputSources)
sourcesList.push(this._inputSources[i]);
this._keyboardManager.setUserLayouts(sourcesList.map(function(x) { return x.xkbId; }));
let mruSources = [];
for (let i = 0; i < this._mruSources.length; i++) {
for (let j = 0; j < sourcesList.length; j++)
@ -367,8 +603,34 @@ const InputSourceManager = new Lang.Class({
}
this._mruSources = mruSources.concat(sourcesList);
if (this._mruSources.length > 0)
this._mruSources[0].activate();
this._currentInputSourceChanged();
},
_showLayout: function() {
Main.overview.hide();
let source = this._currentSource;
let xkbLayout = '';
let xkbVariant = '';
if (source.type == INPUT_SOURCE_TYPE_XKB) {
[, , , xkbLayout, xkbVariant] = this._xkbInfo.get_layout_info(source.id);
} else if (source.type == INPUT_SOURCE_TYPE_IBUS) {
let engineDesc = this._ibusManager.getEngineDesc(source.id);
if (engineDesc) {
xkbLayout = engineDesc.get_layout();
xkbVariant = '';
}
}
if (!xkbLayout || xkbLayout.length == 0)
return;
let description = xkbLayout;
if (xkbVariant.length > 0)
description = description + '\t' + xkbVariant;
Util.spawn(['gkbd-keyboard-display', '-l', description]);
},
_makeEngineShortName: function(engineDesc) {
@ -391,7 +653,7 @@ const InputSourceManager = new Lang.Class({
source.properties = props;
if (source == this._currentSource)
this.emit('current-source-changed', null);
this._currentInputSourceChanged();
},
_ibusPropertyUpdated: function(im, engineName, prop) {
@ -401,7 +663,7 @@ const InputSourceManager = new Lang.Class({
if (this._updateSubProperty(source.properties, prop) &&
source == this._currentSource)
this.emit('current-source-changed', null);
this._currentInputSourceChanged();
},
_updateSubProperty: function(props, prop) {
@ -421,6 +683,116 @@ const InputSourceManager = new Lang.Class({
return false;
},
_buildPropSection: function(properties) {
this._propSeparator.actor.hide();
this._propSection.actor.hide();
this._propSection.removeAll();
this._buildPropSubMenu(this._propSection, properties);
if (!this._propSection.isEmpty()) {
this._propSection.actor.show();
this._propSeparator.actor.show();
}
},
_buildPropSubMenu: function(menu, props) {
if (!props)
return;
let radioGroup = [];
let p;
for (let i = 0; (p = props.get(i)) != null; ++i) {
let prop = p;
if (!prop.get_visible())
continue;
if (prop.get_key() == 'InputMode') {
let text;
if (prop.get_symbol)
text = prop.get_symbol().get_text();
else
text = prop.get_label().get_text();
if (text && text.length > 0 && text.length < 3)
this._currentSource.indicatorLabel.set_text(text);
}
let item;
switch (prop.get_prop_type()) {
case IBus.PropType.MENU:
item = new PopupMenu.PopupSubMenuMenuItem(prop.get_label().get_text());
this._buildPropSubMenu(item.menu, prop.get_sub_props());
break;
case IBus.PropType.RADIO:
item = new PopupMenu.PopupMenuItem(prop.get_label().get_text());
item.prop = prop;
radioGroup.push(item);
item.radioGroup = radioGroup;
item.setOrnament(prop.get_state() == IBus.PropState.CHECKED ?
PopupMenu.Ornament.DOT : PopupMenu.Ornament.NONE);
item.connect('activate', Lang.bind(this, function() {
if (item.prop.get_state() == IBus.PropState.CHECKED)
return;
let group = item.radioGroup;
for (let i = 0; i < group.length; ++i) {
if (group[i] == item) {
item.setOrnament(PopupMenu.Ornament.DOT);
item.prop.set_state(IBus.PropState.CHECKED);
this._ibusManager.activateProperty(item.prop.get_key(),
IBus.PropState.CHECKED);
} else {
group[i].setOrnament(PopupMenu.Ornament.NONE);
group[i].prop.set_state(IBus.PropState.UNCHECKED);
this._ibusManager.activateProperty(group[i].prop.get_key(),
IBus.PropState.UNCHECKED);
}
}
}));
break;
case IBus.PropType.TOGGLE:
item = new PopupMenu.PopupSwitchMenuItem(prop.get_label().get_text(), prop.get_state() == IBus.PropState.CHECKED);
item.prop = prop;
item.connect('toggled', Lang.bind(this, function() {
if (item.state) {
item.prop.set_state(IBus.PropState.CHECKED);
this._ibusManager.activateProperty(item.prop.get_key(),
IBus.PropState.CHECKED);
} else {
item.prop.set_state(IBus.PropState.UNCHECKED);
this._ibusManager.activateProperty(item.prop.get_key(),
IBus.PropState.UNCHECKED);
}
}));
break;
case IBus.PropType.NORMAL:
item = new PopupMenu.PopupMenuItem(prop.get_label().get_text());
item.prop = prop;
item.connect('activate', Lang.bind(this, function() {
this._ibusManager.activateProperty(item.prop.get_key(),
item.prop.get_state());
}));
break;
case IBus.PropType.SEPARATOR:
item = new PopupMenu.PopupSeparatorMenuItem();
break;
default:
log ('IBus property %s has invalid type %d'.format(prop.get_key(), type));
continue;
}
item.setSensitive(prop.get_sensitive());
menu.addMenuItem(item);
}
},
_getNewInputSource: function(current) {
for (let i in this._inputSources) {
let is = this._inputSources[i];
@ -497,279 +869,15 @@ const InputSourceManager = new Lang.Class({
window._currentSource = this._currentSource;
},
get currentSource() {
return this._currentSource;
},
get inputSources() {
return this._inputSources;
},
});
Signals.addSignalMethods(InputSourceManager.prototype);
let _inputSourceManager = null;
function getInputSourceManager() {
if (_inputSourceManager == null)
_inputSourceManager = new InputSourceManager();
return _inputSourceManager;
}
const InputSourceIndicator = new Lang.Class({
Name: 'InputSourceIndicator',
Extends: PanelMenu.Button,
_init: function() {
this.parent(0.0, _("Keyboard"));
this._menuItems = {};
this._indicatorLabels = {};
this._container = new Shell.GenericContainer();
this._container.connect('get-preferred-width', Lang.bind(this, this._containerGetPreferredWidth));
this._container.connect('get-preferred-height', Lang.bind(this, this._containerGetPreferredHeight));
this._container.connect('allocate', Lang.bind(this, this._containerAllocate));
this._hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
this._hbox.add_child(this._container);
this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
this.actor.add_child(this._hbox);
this.actor.add_style_class_name('panel-status-button');
this._propSeparator = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(this._propSeparator);
this._propSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._propSection);
this._propSection.actor.hide();
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this._showLayoutItem = this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, this._showLayout));
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated();
this._inputSourceManager = getInputSourceManager();
this._inputSourceManager.connect('sources-changed', Lang.bind(this, this._sourcesChanged));
this._inputSourceManager.connect('current-source-changed', Lang.bind(this, this._currentSourceChanged));
this._inputSourceManager.reload();
},
_sessionUpdated: function() {
// re-using "allowSettings" for the keyboard layout is a bit shady,
// but at least for now it is used as "allow popping up windows
// from shell menus"; we can always add a separate sessionMode
// option if need arises.
this._showLayoutItem.actor.visible = Main.sessionMode.allowSettings;
},
_sourcesChanged: function() {
for (let i in this._menuItems)
this._menuItems[i].destroy();
for (let i in this._indicatorLabels)
this._indicatorLabels[i].destroy();
let menuIndex = 0;
for (let i in this._inputSourceManager.inputSources) {
let is = this._inputSourceManager.inputSources[i];
let menuItem = new LayoutMenuItem(is.displayName, is.shortName);
menuItem.connect('activate', Lang.bind(is, is.activate));
let indicatorLabel = new St.Label({ text: is.shortName,
visible: false });
this._menuItems[i] = menuItem;
this._indicatorLabels[i] = indicatorLabel;
is.connect('changed', function() {
menuItem.indicator.set_text(is.shortName);
indicatorLabel.set_text(is.shorName);
});
this.menu.addMenuItem(menuItem, menuIndex++);
this._container.add_actor(indicatorLabel);
}
},
_currentSourceChanged: function(manager, oldSource) {
let nVisibleSources = Object.keys(this._inputSourceManager.inputSources).length;
let newSource = this._inputSourceManager.currentSource;
if (oldSource) {
this._menuItems[oldSource.index].setOrnament(PopupMenu.Ornament.NONE);
this._indicatorLabels[oldSource.index].hide();
}
if (!newSource || (nVisibleSources < 2 && !newSource.properties)) {
// This source index might be invalid if we weren't able
// to build a menu item for it, so we hide ourselves since
// we can't fix it here. *shrug*
// We also hide if we have only one visible source unless
// it's an IBus source with properties.
this.menu.close();
this.actor.hide();
return;
}
this.actor.show();
this._buildPropSection(newSource.properties);
this._menuItems[newSource.index].setOrnament(PopupMenu.Ornament.DOT);
this._indicatorLabels[newSource.index].show();
},
_buildPropSection: function(properties) {
this._propSeparator.actor.hide();
this._propSection.actor.hide();
this._propSection.removeAll();
this._buildPropSubMenu(this._propSection, properties);
if (!this._propSection.isEmpty()) {
this._propSection.actor.show();
this._propSeparator.actor.show();
}
},
_buildPropSubMenu: function(menu, props) {
if (!props)
return;
let ibusManager = IBusManager.getIBusManager();
let radioGroup = [];
let p;
for (let i = 0; (p = props.get(i)) != null; ++i) {
let prop = p;
if (!prop.get_visible())
continue;
if (prop.get_key() == 'InputMode') {
let text;
if (prop.get_symbol)
text = prop.get_symbol().get_text();
else
text = prop.get_label().get_text();
let currentSource = this._inputSourceManager.currentSource;
if (currentSource) {
let indicatorLabel = this._indicatorLabels[currentSource.index];
if (text && text.length > 0 && text.length < 3)
indicatorLabel.set_text(text);
}
}
let item;
switch (prop.get_prop_type()) {
case IBus.PropType.MENU:
item = new PopupMenu.PopupSubMenuMenuItem(prop.get_label().get_text());
this._buildPropSubMenu(item.menu, prop.get_sub_props());
break;
case IBus.PropType.RADIO:
item = new PopupMenu.PopupMenuItem(prop.get_label().get_text());
item.prop = prop;
radioGroup.push(item);
item.radioGroup = radioGroup;
item.setOrnament(prop.get_state() == IBus.PropState.CHECKED ?
PopupMenu.Ornament.DOT : PopupMenu.Ornament.NONE);
item.connect('activate', Lang.bind(this, function() {
if (item.prop.get_state() == IBus.PropState.CHECKED)
return;
let group = item.radioGroup;
for (let i = 0; i < group.length; ++i) {
if (group[i] == item) {
item.setOrnament(PopupMenu.Ornament.DOT);
item.prop.set_state(IBus.PropState.CHECKED);
ibusManager.activateProperty(item.prop.get_key(),
IBus.PropState.CHECKED);
} else {
group[i].setOrnament(PopupMenu.Ornament.NONE);
group[i].prop.set_state(IBus.PropState.UNCHECKED);
ibusManager.activateProperty(group[i].prop.get_key(),
IBus.PropState.UNCHECKED);
}
}
}));
break;
case IBus.PropType.TOGGLE:
item = new PopupMenu.PopupSwitchMenuItem(prop.get_label().get_text(), prop.get_state() == IBus.PropState.CHECKED);
item.prop = prop;
item.connect('toggled', Lang.bind(this, function() {
if (item.state) {
item.prop.set_state(IBus.PropState.CHECKED);
ibusManager.activateProperty(item.prop.get_key(),
IBus.PropState.CHECKED);
} else {
item.prop.set_state(IBus.PropState.UNCHECKED);
ibusManager.activateProperty(item.prop.get_key(),
IBus.PropState.UNCHECKED);
}
}));
break;
case IBus.PropType.NORMAL:
item = new PopupMenu.PopupMenuItem(prop.get_label().get_text());
item.prop = prop;
item.connect('activate', Lang.bind(this, function() {
ibusManager.activateProperty(item.prop.get_key(),
item.prop.get_state());
}));
break;
case IBus.PropType.SEPARATOR:
item = new PopupMenu.PopupSeparatorMenuItem();
break;
default:
log ('IBus property %s has invalid type %d'.format(prop.get_key(), type));
continue;
}
item.setSensitive(prop.get_sensitive());
menu.addMenuItem(item);
}
},
_showLayout: function() {
Main.overview.hide();
let source = this._inputSourceManager.currentSource;
let xkbLayout = '';
let xkbVariant = '';
if (source.type == INPUT_SOURCE_TYPE_XKB) {
[, , , xkbLayout, xkbVariant] = KeyboardManager.getXkbInfo().get_layout_info(source.id);
} else if (source.type == INPUT_SOURCE_TYPE_IBUS) {
let engineDesc = IBusManager.getIBusManager().getEngineDesc(source.id);
if (engineDesc) {
xkbLayout = engineDesc.get_layout();
xkbVariant = '';
}
}
if (!xkbLayout || xkbLayout.length == 0)
return;
let description = xkbLayout;
if (xkbVariant.length > 0)
description = description + '\t' + xkbVariant;
Util.spawn(['gkbd-keyboard-display', '-l', description]);
},
_containerGetPreferredWidth: function(container, for_height, alloc) {
// Here, and in _containerGetPreferredHeight, we need to query
// for the height of all children, but we ignore the results
// for those we don't actually display.
let max_min_width = 0, max_natural_width = 0;
for (let i in this._inputSourceManager.inputSources) {
let label = this._indicatorLabels[i];
let [min_width, natural_width] = label.get_preferred_width(for_height);
for (let i in this._inputSources) {
let is = this._inputSources[i];
let [min_width, natural_width] = is.indicatorLabel.get_preferred_width(for_height);
max_min_width = Math.max(max_min_width, min_width);
max_natural_width = Math.max(max_natural_width, natural_width);
}
@ -781,9 +889,9 @@ const InputSourceIndicator = new Lang.Class({
_containerGetPreferredHeight: function(container, for_width, alloc) {
let max_min_height = 0, max_natural_height = 0;
for (let i in this._inputSourceManager.inputSources) {
let label = this._indicatorLabels[i];
let [min_height, natural_height] = label.get_preferred_height(for_width);
for (let i in this._inputSources) {
let is = this._inputSources[i];
let [min_height, natural_height] = is.indicatorLabel.get_preferred_height(for_width);
max_min_height = Math.max(max_min_height, min_height);
max_natural_height = Math.max(max_natural_height, natural_height);
}
@ -799,9 +907,9 @@ const InputSourceIndicator = new Lang.Class({
box.y2 -= box.y1;
box.y1 = 0;
for (let i in this._inputSourceManager.inputSources) {
let label = this._indicatorLabels[i];
label.allocate_align_fill(box, 0.5, 0.5, false, false, flags);
for (let i in this._inputSources) {
let is = this._inputSources[i];
is.indicatorLabel.allocate_align_fill(box, 0.5, 0.5, false, false, flags);
}
}
});

View File

@ -13,15 +13,6 @@ const LOCATION_SCHEMA = 'org.gnome.system.location';
const MAX_ACCURACY_LEVEL = 'max-accuracy-level';
const ENABLED = 'enabled';
const GeoclueAccuracyLevel = {
NONE: 0,
COUNTRY: 1,
CITY: 4,
NEIGHBORHOOD: 5,
STREET: 6,
EXACT: 8
};
var GeoclueIface = '<node> \
<interface name="org.freedesktop.GeoClue2.Manager"> \
<property name="InUse" type="b" access="read"/> \
@ -70,7 +61,6 @@ const Indicator = new Lang.Class({
this._item.status.text = _("Enabled");
this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction));
this._item.menu.addSettingsAction(_("Privacy Settings"), 'gnome-privacy-panel.desktop');
this.menu.addMenuItem(this._item);
@ -191,14 +181,10 @@ const Indicator = new Lang.Class({
},
_getMaxAccuracyLevel: function() {
if (this._settings.get_boolean(ENABLED)) {
let level = this._settings.get_string(MAX_ACCURACY_LEVEL);
return GeoclueAccuracyLevel[level.toUpperCase()] ||
GeoclueAccuracyLevel.NONE;
} else {
return GeoclueAccuracyLevel.NONE;
}
if (this._settings.get_boolean(ENABLED))
return this._settings.get_enum(MAX_ACCURACY_LEVEL);
else
return 0;
},
_notifyMaxAccuracyLevel: function() {

View File

@ -102,17 +102,16 @@ const SwitcherPopup = new Lang.Class({
this._switcherList.actor.allocate(childBox, flags);
},
_createSwitcher: function() {
throw new Error('Not implemented');
},
_initialSelection: function(backward, binding) {
if (backward)
this._select(this._items.length - 1);
else if (this._items.length == 1)
this._select(0);
else
this._select(1);
throw new Error('Not implemented');
},
show: function(backward, binding, mask) {
if (this._items.length == 0)
if (!this._createSwitcher())
return false;
if (!Main.pushModal(this.actor)) {
@ -140,6 +139,11 @@ const SwitcherPopup = new Lang.Class({
this.actor.show();
this.actor.get_allocation_box();
if (this._items.length > 1)
this._selectedIndex = 1;
else
this._selectedIndex = 0;
this._initialSelection(backward, binding);
// There's a race condition; if the user released Alt before

View File

@ -125,6 +125,7 @@ const ViewSelector = new Lang.Class({
this._activePage = null;
this._searchActive = false;
this._searchTimeoutId = 0;
this._entry = searchEntry;
ShellEntry.addContextMenu(this._entry);
@ -143,8 +144,12 @@ const ViewSelector = new Lang.Class({
this._entry.set_primary_icon(new St.Icon({ style_class: 'search-entry-icon',
icon_name: 'edit-find-symbolic' }));
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
icon_name: 'edit-clear-symbolic' });
if (this._entry.get_text_direction() == Clutter.TextDirection.RTL)
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
icon_name: 'edit-clear-symbolic-rtl' });
else
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
icon_name: 'edit-clear-symbolic-ltr' });
this._iconClickedId = 0;
this._capturedEventId = 0;
@ -484,23 +489,36 @@ const ViewSelector = new Lang.Class({
_onTextChanged: function (se, prop) {
let terms = getTermsForSearchString(this._entry.get_text());
let searchPreviouslyActive = this._searchActive;
this._searchActive = (terms.length > 0);
this._searchResults.setTerms(terms);
let startSearch = this._searchActive && !searchPreviouslyActive;
if (startSearch)
this._searchResults.startingSearch();
if (this._searchActive) {
this._showPage(this._searchPage);
this._entry.set_secondary_icon(this._clearIcon);
if (this._iconClickedId == 0)
this._iconClickedId = this._entry.connect('secondary-icon-clicked',
Lang.bind(this, this.reset));
if (this._searchTimeoutId == 0) {
this._searchTimeoutId = Mainloop.timeout_add(150,
Lang.bind(this, this._doSearch));
GLib.Source.set_name_by_id(this._searchTimeoutId, '[gnome-shell] this._doSearch');
}
} else {
if (this._iconClickedId > 0) {
this._entry.disconnect(this._iconClickedId);
this._iconClickedId = 0;
}
if (this._searchTimeoutId > 0) {
Mainloop.source_remove(this._searchTimeoutId);
this._searchTimeoutId = 0;
}
this._entry.set_secondary_icon(null);
this._searchCancelled();
}
@ -538,6 +556,12 @@ const ViewSelector = new Lang.Class({
this._searchResults.navigateFocus(nextDirection);
return Clutter.EVENT_STOP;
} else if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
// We can't connect to 'activate' here because search providers
// might want to do something with the modifiers in activateDefault.
if (this._searchTimeoutId > 0) {
Mainloop.source_remove(this._searchTimeoutId);
this._doSearch();
}
this._searchResults.activateDefault();
return Clutter.EVENT_STOP;
}
@ -560,6 +584,17 @@ const ViewSelector = new Lang.Class({
return Clutter.EVENT_PROPAGATE;
},
_doSearch: function () {
this._searchTimeoutId = 0;
let terms = getTermsForSearchString(this._entry.get_text());
this._searchResults.setTerms(terms);
this._showPage(this._searchPage);
return GLib.SOURCE_REMOVE;
},
getActivePage: function() {
if (this._activePage == this._workspacesPage)
return ViewPage.WINDOWS;

View File

@ -17,6 +17,7 @@ const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
const Tweener = imports.ui.tweener;
const WindowMenu = imports.ui.windowMenu;
const Wobbly = imports.ui.wobbly;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
const MAXIMIZE_WINDOW_ANIMATION_TIME = 0.15;
@ -526,11 +527,6 @@ const AppSwitchAction = new Lang.Class({
},
vfunc_gesture_prepare : function(action, actor) {
if (Main.overview.visible) {
this.cancel();
return false;
}
return this.get_n_current_points() <= 4;
},
@ -816,6 +812,8 @@ const WindowManager = new Lang.Class({
gesture = new AppSwitchAction();
gesture.connect('activated', Lang.bind(this, this._switchApp));
global.stage.add_action(gesture);
this._wobblyWindows = new Wobbly.WobblyWindowManager();
},
_lookupIndex: function (windows, metaWindow) {

130
js/ui/wobbly.js Normal file
View File

@ -0,0 +1,130 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
function clampAbs(v, cap) {
if (v > cap)
v = cap;
if (v < -cap)
v = -cap;
return v;
}
const ActorWobbler = new Lang.Class({
Name: 'ActorWobbler',
_init: function(actor) {
this._actor = actor;
this._effect = new Shell.WobblyEffect();
this._actor.add_effect(this._effect);
this._actor._wobbler = this;
this._currentBend = 0;
this._currentHeightOffset = 0;
this._running = false;
this._allocationChangedId = this._actor.connect('allocation-changed', Lang.bind(this, this._allocationChanged));
this._timeline = new Clutter.Timeline({ duration: 100, repeat_count: -1 });
this._timeline.connect('new-frame', Lang.bind(this, this._newFrame));
this._timeline.start();
},
start: function() {
this._running = true;
},
stop: function() {
this._running = false;
},
_destroy: function() {
this._timeline.run_dispose();
this._timeline = null;
this._actor.disconnect(this._allocationChangedId);
this._actor.scale_y = 1.0;
this._actor.remove_effect(this._effect);
this._actor._wobbler = null;
},
_newFrame: function() {
this._step();
},
_step: function() {
const DAMPEN = 0.8;
this._currentBend *= DAMPEN;
if (Math.abs(this._currentBend) < 1)
this._currentBend = 0;
this._currentHeightOffset *= DAMPEN;
if (Math.abs(this._currentHeightOffset) < 1)
this._currentHeightOffset = 0;
// Cap the bend to a 100px shift.
const BEND_CAP = 50;
this._currentBend = clampAbs(this._currentBend, BEND_CAP);
this._effect.set_bend_x(this._currentBend);
// Cap the height change to 25px in either direction.
const HEIGHT_OFFSET_CAP = 25;
this._currentHeightOffset = clampAbs(this._currentHeightOffset, HEIGHT_OFFSET_CAP);
let [minHeight, natHeight] = this._actor.get_preferred_height(-1);
let scale = (natHeight + this._currentHeightOffset) / natHeight;
this._actor.scale_y = scale;
if (!this._running && this._currentBend == 0 && this._currentHeightOffset == 0)
this._destroy();
},
_allocationChanged: function(actor, box, flags) {
if (!this._running)
return;
if (this._oldX) {
let deltaX = box.x1 - this._oldX;
// Every 2px the user moves the window, we bend it by 1px.
this._currentBend -= deltaX / 2;
}
if (this._oldY) {
let deltaY = box.y1 - this._oldY;
// Every 2px the user moves the window, we scale it by 1px.
this._currentHeightOffset -= deltaY / 2;
}
this._oldX = box.x1;
this._oldY = box.y1;
},
});
const WobblyWindowManager = new Lang.Class({
Name: 'WobblyWindowManager',
_init: function() {
global.display.connect('grab-op-begin', Lang.bind(this, this._grabOpBegin));
global.display.connect('grab-op-end', Lang.bind(this, this._grabOpEnd));
},
_grabOpBegin: function(display, screen, window, op) {
if (op != Meta.GrabOp.MOVING)
return;
let actor = window.get_compositor_private();
if (!actor._wobbler)
new ActorWobbler(actor);
actor._wobbler.start();
},
_grabOpEnd: function(display, screen, window, op) {
if (!window)
return;
let actor = window.get_compositor_private();
if (actor._wobbler)
actor._wobbler.stop();
},
});

View File

@ -1209,18 +1209,14 @@ const Workspace = new Lang.Class({
return this._windows.length == 0;
},
setReservedSlot: function(metaWindow) {
if (this._reservedSlotWindow == metaWindow)
setReservedSlot: function(clone) {
if (this._reservedSlot == clone)
return;
if (!metaWindow || this.containsMetaWindow(metaWindow)) {
this._reservedSlotWindow = null;
this._reservedSlot = null;
} else {
this._reservedSlotWindow = metaWindow;
this._reservedSlot = this._windows[this._lookupIndex(metaWindow)];
}
if (clone && this.containsMetaWindow(clone.metaWindow))
clone = null;
this._reservedSlot = clone;
this._recalculateWindowPositions(WindowPositionFlags.ANIMATE);
},
@ -1818,16 +1814,16 @@ const Workspace = new Lang.Class({
Lang.bind(this, this._onCloneSelected));
clone.connect('drag-begin',
Lang.bind(this, function() {
Main.overview.beginWindowDrag(clone.metaWindow);
Main.overview.beginWindowDrag(clone);
overlay.hide();
}));
clone.connect('drag-cancelled',
Lang.bind(this, function() {
Main.overview.cancelledWindowDrag(clone.metaWindow);
Main.overview.cancelledWindowDrag(clone);
}));
clone.connect('drag-end',
Lang.bind(this, function() {
Main.overview.endWindowDrag(clone.metaWindow);
Main.overview.endWindowDrag(clone);
overlay.show();
}));
clone.connect('size-changed',

View File

@ -518,15 +518,15 @@ const WorkspaceThumbnail = new Lang.Class({
}));
clone.connect('drag-begin',
Lang.bind(this, function() {
Main.overview.beginWindowDrag(clone.metaWindow);
Main.overview.beginWindowDrag(clone);
}));
clone.connect('drag-cancelled',
Lang.bind(this, function() {
Main.overview.cancelledWindowDrag(clone.metaWindow);
Main.overview.cancelledWindowDrag(clone);
}));
clone.connect('drag-end',
Lang.bind(this, function() {
Main.overview.endWindowDrag(clone.metaWindow);
Main.overview.endWindowDrag(clone);
}));
this._contents.add_actor(clone.actor);

View File

@ -63,9 +63,9 @@ const WorkspacesViewBase = new Lang.Class({
}
},
_dragBegin: function(overview, window) {
_dragBegin: function(overview, clone) {
this._inDrag = true;
this._setReservedSlot(window);
this._setReservedSlot(clone);
},
_dragEnd: function() {
@ -127,9 +127,9 @@ const WorkspacesView = new Lang.Class({
Lang.bind(this, this._activeWorkspaceChanged));
},
_setReservedSlot: function(window) {
_setReservedSlot: function(clone) {
for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].setReservedSlot(window);
this._workspaces[i].setReservedSlot(clone);
},
_syncFullGeometry: function() {
@ -366,8 +366,8 @@ const ExtraWorkspaceView = new Lang.Class({
this.actor.add_actor(this._workspace.actor);
},
_setReservedSlot: function(window) {
this._workspace.setReservedSlot(window);
_setReservedSlot: function(clone) {
this._workspace.setReservedSlot(clone);
},
_syncFullGeometry: function() {

View File

@ -45,7 +45,6 @@ mk
mr
ms
nb
ne
nl
nn
or

1015
po/ar.po

File diff suppressed because it is too large Load Diff

332
po/as.po
View File

@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-15 07:36+0000\n"
"PO-Revision-Date: 2014-09-15 14:59+0530\n"
"POT-Creation-Date: 2014-08-13 07:33+0000\n"
"PO-Revision-Date: 2014-08-13 17:32+0530\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
"Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
"Language: as_IN\n"
@ -110,9 +110,8 @@ msgid ""
"load all extensions regardless of the versions they claim to support."
msgstr ""
"GNOME শ্বেলে কেৱল বৰ্তমান চলি থকা সংস্কৰণক সমৰ্থন কৰা সম্প্ৰসাৰনসমূহ ল'ড "
"কৰিব। এই "
"বিকল্প সামৰ্থবান কৰিলে এই নিৰক্ষণ অসামৰ্থবান কৰা হব আৰু সিহতে সমৰ্থন কৰা "
"সংস্কৰণসমূহৰ নিৰপেক্ষে সকলো সম্প্ৰসাৰন ল'ড কৰিব।"
"কৰিব। এই বিকল্প সামৰ্থবান কৰিলে এই নিৰীক্ষণ অসামৰ্থবান কৰা হব আৰু সিহতে "
"মৰ্থন কৰা সংস্কৰণসমূহৰ নিৰপেক্ষে সকলো সম্প্ৰসাৰন ল'ড কৰিব।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications"
@ -158,8 +157,8 @@ msgstr ""
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"ইনক্ৰিপ্টেড অথবা দূৰৱৰ্তী ফাইলচিস্টেমসমূহ মাউ্ট কৰাৰ বাবে পাছৱৰ্ড মনত ৰখা হব "
"নে"
"ইনক্ৰিপ্টেড অথবা দূৰৱৰ্তী ফাইলচিস্টেমসমূহ মাউ্ট কৰাৰ বাবে পাছৱৰ্ড মনত ৰখা "
"হব নে"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid ""
@ -170,11 +169,10 @@ msgid ""
msgstr ""
"শ্বেলে এটা পাছৱৰ্ড অনুৰোধ কৰিব যেতিয়া এটা ইনক্ৰিপ্টেড ডিভাইচ অথবা এটা "
"দূৰৱৰ্তী "
"ফাইলচিস্টেম মাউ্ট কৰা হয়। যদি পাছৱৰ্ডক ভৱিষ্যত ব্যৱহাৰৰ বাবে সংৰক্ষণ কৰিব "
"ফাইলচিস্টেম মাউ্ট কৰা হয়। যদি পাছৱৰ্ডক ভৱিষ্যত ব্যৱহাৰৰ বাবে সংৰক্ষণ কৰিব "
"পাৰি "
"তেন্তে এটা 'পাছৱৰ্ড মনত ৰাখক' চেকবাকচ উপস্থিত থাকিব। এই কি'য়ে চেকবাকচৰ "
"অবিকল্পিত "
"অৱস্থা সংহতি কৰে।"
"অবিকল্পিত অৱস্থা সংহতি কৰে।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Show the week date in the calendar"
@ -250,8 +248,7 @@ msgid ""
"shown in the switcher. Otherwise, all applications are included."
msgstr ""
"যদি সত্য, কেৱল বৰ্তমান কাৰ্য্যস্থানক উইন্ডো থকা এপ্লিকেচনসমূক চুইচাৰত দেখুৱা "
"হব। নহলে, "
"সকলো এপ্লিকেচন অন্তৰ্ভুক্ত কৰা হয়।"
"হব। নহলে, সকলো এপ্লিকেচন অন্তৰ্ভুক্ত কৰা হয়।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "The application icon mode."
@ -274,8 +271,7 @@ msgid ""
"Otherwise, all windows are included."
msgstr ""
"যদি সত্য, কেৱল বৰ্তমান কাৰ্য্যস্থানৰ পৰা উইন্ডোসমূহক চুইচাৰত দেখুৱা হব। নহলে, "
"সকলো "
"উইন্ডো অন্তৰ্ভুক্ত কৰা হব।"
"সকলো উইন্ডো অন্তৰ্ভুক্ত কৰা হব।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Attach modal dialog to the parent window"
@ -307,17 +303,18 @@ msgstr ""
msgid "Captive Portal"
msgstr "কেপটিভ পৰ্টেল"
#: ../js/extensionPrefs/main.js:123
#: ../js/extensionPrefs/main.js:127
#, javascript-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr "%s ৰ বাবে পছন্দসমূহ ডাইলগ ল'ড কৰোতে এটা ত্ৰুটি হৈছিল:"
#: ../js/extensionPrefs/main.js:155
#: ../js/extensionPrefs/main.js:159
#| msgid "Configure GNOME Shell Extensions"
msgid "GNOME Shell Extensions"
msgstr "GNOME শ্বেল সম্প্ৰসাৰনসমূহ"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915
msgid "Cancel"
@ -380,44 +377,46 @@ msgstr "কমান্ড বিশ্লেষন কৰিব নোৱাৰ
msgid "Execution of “%s” failed:"
msgstr "“%s” ৰ প্ৰেৰণ ব্যৰ্থ হল:"
#: ../js/portalHelper/main.js:85
#: ../js/portalHelper/main.js:84
#| msgid "Authentication Required"
msgid "Web Authentication Redirect"
msgstr "ৱেব প্ৰমাণীকৰণৰ পুনৰনিৰ্দেশ"
#: ../js/ui/appDisplay.js:772
#: ../js/ui/appDisplay.js:659
msgid "Frequently used applications will appear here"
msgstr "সঘনে ব্যৱহাৰ কৰা এপ্লিকেচনসমূহ ইয়াত উপস্থিত হব"
#: ../js/ui/appDisplay.js:883
#: ../js/ui/appDisplay.js:770
msgid "Frequent"
msgstr "সঘন"
#: ../js/ui/appDisplay.js:890
#: ../js/ui/appDisplay.js:777
msgid "All"
msgstr "সকলো"
#: ../js/ui/appDisplay.js:1789
#: ../js/ui/appDisplay.js:1649
msgid "New Window"
msgstr "নতুন উইন্ডো"
#: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1672 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "পছন্দৰ পৰা আতৰাওক"
#: ../js/ui/appDisplay.js:1821
#: ../js/ui/appDisplay.js:1678
msgid "Add to Favorites"
msgstr "পছন্দলে যোগ কৰক"
#: ../js/ui/appDisplay.js:1830
#: ../js/ui/appDisplay.js:1687
#| msgid "Show Text"
msgid "Show Details"
msgstr "বিৱৰণসমূহ দেখুৱাওক"
#: ../js/ui/appFavorites.js:124
#: ../js/ui/appFavorites.js:122
#, javascript-format
msgid "%s has been added to your favorites."
msgstr "%s ক আপোনাৰ পছন্দলে যোগ কৰা হৈছে।"
#: ../js/ui/appFavorites.js:158
#: ../js/ui/appFavorites.js:156
#, javascript-format
msgid "%s has been removed from your favorites."
msgstr "%s ক আপোনাৰ পছন্দৰ পৰা আতৰোৱা হৈছে।"
@ -609,11 +608,11 @@ msgstr "%s ৰ সৈতে খোলক"
msgid "Eject"
msgstr "উলিৱাওক"
#: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285
#: ../js/ui/components/keyring.js:93 ../js/ui/components/polkitAgent.js:285
msgid "Password:"
msgstr "পাছৱৰ্ড:"
#: ../js/ui/components/keyring.js:120
#: ../js/ui/components/keyring.js:113
msgid "Type again:"
msgstr "আকৌ টাইপ কৰক:"
@ -656,7 +655,8 @@ msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
msgstr ""
"বেতাঁৰ নেটৱৰ্ক “%s” অভিগম কৰিবলে পাছৱৰ্ডসমূহ অথবা ইনক্ৰিপষণ কি'সমূহৰ প্ৰয়োজন।"
"বেতাঁৰ নেটৱৰ্ক “%s” অভিগম কৰিবলে পাছৱৰ্ডসমূহ অথবা ইনক্ৰিপষণ কি'সমূহৰ "
"প্ৰয়োজন।"
#: ../js/ui/components/networkAgent.js:323
msgid "Wired 802.1X authentication"
@ -736,77 +736,89 @@ msgid "Mute"
msgstr "মোন কৰক"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:953
#: ../js/ui/components/telepathyClient.js:957
#| msgctxt "event list time"
#| msgid "%H%M"
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:960
#: ../js/ui/components/telepathyClient.js:964
#| msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgid "Yesterday, %H%M"
msgstr "যোৱাকালী, %H%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:967
#: ../js/ui/components/telepathyClient.js:971
#| msgctxt "event list time"
#| msgid "%H%M"
msgid "%A, %H%M"
msgstr "%A, %H%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:974
#: ../js/ui/components/telepathyClient.js:978
#| msgctxt "event list time"
#| msgid "%H%M"
msgid "%B %d, %H%M"
msgstr "%B %d, %H%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:980
#: ../js/ui/components/telepathyClient.js:984
msgid "%B %d %Y, %H%M"
msgstr "%B %d %Y, %H%M"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:986
#: ../js/ui/components/telepathyClient.js:990
#| msgctxt "event list time"
#| msgid "%l%M%p"
msgid "%l%M %p"
msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:993
#: ../js/ui/components/telepathyClient.js:997
msgid "Yesterday, %l%M %p"
msgstr "যোৱাকালী, %l%M %p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1000
#: ../js/ui/components/telepathyClient.js:1004
#| msgid "%a %l:%M %p"
msgid "%A, %l%M %p"
msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1007
#: ../js/ui/components/telepathyClient.js:1011
#| msgid "%a %b %e, %l:%M %p"
msgid "%B %d, %l%M %p"
msgstr "%B %d, %l%M %p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1013
#: ../js/ui/components/telepathyClient.js:1017
#| msgid "%a %b %e, %l:%M %p"
msgid "%B %d %Y, %l%M %p"
msgstr "%B %d %Y, %l%M %p"
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:1045
#: ../js/ui/components/telepathyClient.js:1049
#, javascript-format
msgid "%s is now known as %s"
msgstr "%s এতিয়া %s হিচাপে জনাজাত"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1149
#: ../js/ui/components/telepathyClient.js:1153
#, javascript-format
msgid "Invitation to %s"
msgstr "%s লে নিমন্ত্ৰণ"
@ -814,38 +826,38 @@ msgstr "%s লে নিমন্ত্ৰণ"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1157
#: ../js/ui/components/telepathyClient.js:1161
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s এ আপোনাক %s ত অংশগ্ৰহণ কৰিবলে আমন্ত্ৰণ জনাইছে"
#: ../js/ui/components/telepathyClient.js:1159
#: ../js/ui/components/telepathyClient.js:1194
#: ../js/ui/components/telepathyClient.js:1228
#: ../js/ui/components/telepathyClient.js:1286
#: ../js/ui/components/telepathyClient.js:1163
#: ../js/ui/components/telepathyClient.js:1198
#: ../js/ui/components/telepathyClient.js:1232
#: ../js/ui/components/telepathyClient.js:1290
msgid "Decline"
msgstr "নাকচ কৰক"
#: ../js/ui/components/telepathyClient.js:1165
#: ../js/ui/components/telepathyClient.js:1234
#: ../js/ui/components/telepathyClient.js:1291
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1238
#: ../js/ui/components/telepathyClient.js:1295
msgid "Accept"
msgstr "গ্ৰহন কৰক"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1184
#: ../js/ui/components/telepathyClient.js:1188
#, javascript-format
msgid "Video call from %s"
msgstr "%s ৰ পৰা ভিডিঅ' কল"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1187
#: ../js/ui/components/telepathyClient.js:1191
#, javascript-format
msgid "Call from %s"
msgstr "%s ৰ পৰা কল"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1201
#: ../js/ui/components/telepathyClient.js:1205
msgid "Answer"
msgstr "উত্তৰ দিয়ক"
@ -854,110 +866,110 @@ msgstr "উত্তৰ দিয়ক"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1222
#: ../js/ui/components/telepathyClient.js:1226
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s এ আপোনাক %s পঠাই আছে"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1251
#: ../js/ui/components/telepathyClient.js:1255
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "আপুনি কেতিয়া অনলাইন আছে চাবলে %s এ অনুমতি বিচাৰিব"
#: ../js/ui/components/telepathyClient.js:1337
#: ../js/ui/components/telepathyClient.js:1341
msgid "Network error"
msgstr "নেটৱৰ্ক ত্ৰুটি"
#: ../js/ui/components/telepathyClient.js:1339
#: ../js/ui/components/telepathyClient.js:1343
msgid "Authentication failed"
msgstr "প্ৰমাণীকৰণ ব্যৰ্থ"
#: ../js/ui/components/telepathyClient.js:1341
#: ../js/ui/components/telepathyClient.js:1345
msgid "Encryption error"
msgstr "ইনক্ৰিপষণ ত্ৰুটি"
#: ../js/ui/components/telepathyClient.js:1343
#: ../js/ui/components/telepathyClient.js:1347
msgid "Certificate not provided"
msgstr "প্ৰমাণপত্ৰ প্ৰদান কৰা হোৱা নাই"
#: ../js/ui/components/telepathyClient.js:1345
#: ../js/ui/components/telepathyClient.js:1349
msgid "Certificate untrusted"
msgstr "প্ৰমাণপত্ৰক ভৰষা কৰিব নোৱাৰি"
#: ../js/ui/components/telepathyClient.js:1347
#: ../js/ui/components/telepathyClient.js:1351
msgid "Certificate expired"
msgstr "প্ৰমাণপত্ৰৰ অৱসান ঘটিছে"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1353
msgid "Certificate not activated"
msgstr "প্ৰমাণপত্ৰ সক্ৰিয় কৰা হোৱা নাই"
#: ../js/ui/components/telepathyClient.js:1351
#: ../js/ui/components/telepathyClient.js:1355
msgid "Certificate hostname mismatch"
msgstr "প্ৰমাণপত্ৰ হস্টনাম অমিল"
#: ../js/ui/components/telepathyClient.js:1353
#: ../js/ui/components/telepathyClient.js:1357
msgid "Certificate fingerprint mismatch"
msgstr "প্ৰমাণপত্ৰ ফিংগাৰপ্ৰি্ট অমিল"
msgstr "প্ৰমাণপত্ৰ ফিংগাৰপ্ৰি্ট অমিল"
#: ../js/ui/components/telepathyClient.js:1355
#: ../js/ui/components/telepathyClient.js:1359
msgid "Certificate self-signed"
msgstr "প্ৰমাণপত্ৰ স্ব-স্বাক্ষৰীত"
#: ../js/ui/components/telepathyClient.js:1357
#: ../js/ui/components/telepathyClient.js:1361
msgid "Status is set to offline"
msgstr "অৱস্থা অফলাইনলে সংহতি কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1359
#: ../js/ui/components/telepathyClient.js:1363
msgid "Encryption is not available"
msgstr "ইনক্ৰিপষণ উপলব্ধ নহয়"
#: ../js/ui/components/telepathyClient.js:1361
#: ../js/ui/components/telepathyClient.js:1365
msgid "Certificate is invalid"
msgstr "প্ৰমাণপত্ৰ অবৈধ"
#: ../js/ui/components/telepathyClient.js:1363
#: ../js/ui/components/telepathyClient.js:1367
msgid "Connection has been refused"
msgstr "সংযোগ নাকচ কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1369
msgid "Connection can't be established"
msgstr "সংযোগ স্থাপন কৰিব নোৱাৰি"
#: ../js/ui/components/telepathyClient.js:1367
#: ../js/ui/components/telepathyClient.js:1371
msgid "Connection has been lost"
msgstr "সংযোগ হেৰাইছে"
#: ../js/ui/components/telepathyClient.js:1369
#: ../js/ui/components/telepathyClient.js:1373
msgid "This account is already connected to the server"
msgstr "এই একাও্ট ইতিমধ্যে চাৰ্ভাৰৰ সৈতে সংযোগিত"
msgstr "এই একাও্ট ইতিমধ্যে চাৰ্ভাৰৰ সৈতে সংযোগিত"
#: ../js/ui/components/telepathyClient.js:1371
#: ../js/ui/components/telepathyClient.js:1375
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "সংযোগক একে সম্পদ ব্যৱহাৰ কৰি এটা নতুন সংযোগৰে প্ৰতিস্থাপন কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1373
#: ../js/ui/components/telepathyClient.js:1377
msgid "The account already exists on the server"
msgstr "একাও্ট ইতিমধ্যে চাৰ্ভাৰত উপস্থিত"
msgstr "একাও্ট ইতিমধ্যে চাৰ্ভাৰত উপস্থিত"
#: ../js/ui/components/telepathyClient.js:1375
#: ../js/ui/components/telepathyClient.js:1379
msgid "Server is currently too busy to handle the connection"
msgstr "চাৰ্ভাৰ সংযোগ ব্যৱস্থাপনা কৰিবলে বৰ্তমানে অতি ব্যস্ত"
#: ../js/ui/components/telepathyClient.js:1377
#: ../js/ui/components/telepathyClient.js:1381
msgid "Certificate has been revoked"
msgstr "প্ৰমাণপত্ৰ প্ৰত্যাহাৰ কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1379
#: ../js/ui/components/telepathyClient.js:1383
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"প্ৰমাণপত্ৰয় এটা অসুৰক্ষিত চিফাৰ এলগৰিথম ব্যৱহাৰ কৰে অথবা ক্ৰিপ্টোগ্ৰাফিয়ভাৱে "
"দুৰ্বল"
#: ../js/ui/components/telepathyClient.js:1381
#: ../js/ui/components/telepathyClient.js:1385
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -966,26 +978,26 @@ msgstr ""
"ক্ৰিপ্টোগ্ৰাফী "
"লাইব্ৰেৰীয়ে প্ৰণয়ন কৰা সীমাসমূহত অতিক্ৰম কৰে"
#: ../js/ui/components/telepathyClient.js:1383
#: ../js/ui/components/telepathyClient.js:1387
msgid "Internal error"
msgstr "অভ্যন্তৰীক ত্ৰুটি"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1393
#: ../js/ui/components/telepathyClient.js:1397
#, javascript-format
msgid "Unable to connect to %s"
msgstr "%s ৰ সৈতে সংযোগ কৰিবলে অক্ষম"
#: ../js/ui/components/telepathyClient.js:1398
#: ../js/ui/components/telepathyClient.js:1402
msgid "View account"
msgstr "একাও্ট দৰ্শন কৰক"
msgstr "একাও্ট দৰ্শন কৰক"
#: ../js/ui/components/telepathyClient.js:1435
#: ../js/ui/components/telepathyClient.js:1439
msgid "Unknown reason"
msgstr "অজ্ঞাত কাৰণ"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228
msgid "Windows"
msgstr "উইন্ডোসমূহ"
@ -1016,86 +1028,86 @@ msgstr "তাৰিখ আৰু সময সংহতিসমূহ"
msgid "%A %B %e, %Y"
msgstr "%A %B %e, %Y"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:66
#, javascript-format
msgctxt "title"
msgid "Log Out %s"
msgstr "%s ক লগ আউট কৰক"
#: ../js/ui/endSessionDialog.js:65
#: ../js/ui/endSessionDialog.js:67
msgctxt "title"
msgid "Log Out"
msgstr "লগ আউট কৰক"
#: ../js/ui/endSessionDialog.js:67
#: ../js/ui/endSessionDialog.js:69
#, javascript-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s স্বচালিতভাৱে %d ছেকেণ্ডৰ পিছত লগ আউট হৈ যাব।"
msgstr[1] "%s স্বচালিতভাৱে %d ছেকেণ্ডৰ পিছত লগ আউট হৈ যাব।"
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:74
#, javascript-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ড পিছত লগ আউট হৈ যাব।"
msgstr[1] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ড পিছত লগ আউট হৈ যাব।"
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:80
msgctxt "button"
msgid "Log Out"
msgstr "লগ আউট কৰক"
#: ../js/ui/endSessionDialog.js:84
#: ../js/ui/endSessionDialog.js:86
msgctxt "title"
msgid "Power Off"
msgstr "বন্ধ কৰক"
#: ../js/ui/endSessionDialog.js:85
#: ../js/ui/endSessionDialog.js:87
msgctxt "title"
msgid "Install Updates & Power Off"
msgstr "আপডেইটসমূহ ইনস্টল কৰি চিস্টেম বন্ধ কৰক"
#: ../js/ui/endSessionDialog.js:87
#: ../js/ui/endSessionDialog.js:89
#, javascript-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "চিস্টেম %d ছেকেণ্ড পিছত স্বচালিতভাৱে বন্ধ কৰক হব। "
msgstr[1] "চিস্টেম %d ছেকেণ্ডৰ পিছত স্বচালিতভাৱে বন্ধ হব। "
#: ../js/ui/endSessionDialog.js:91
#: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox"
msgid "Install pending software updates"
msgstr "বাকি থকা চফ্টৱেৰ আপডেইটসমূহ ইনস্টল কৰক"
#: ../js/ui/endSessionDialog.js:94 ../js/ui/endSessionDialog.js:111
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
msgctxt "button"
msgid "Restart"
msgstr "পুনৰাম্ভ কৰক"
#: ../js/ui/endSessionDialog.js:96
#: ../js/ui/endSessionDialog.js:98
msgctxt "button"
msgid "Power Off"
msgstr "বন্ধ কৰক"
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:105
msgctxt "title"
msgid "Restart"
msgstr "পুনৰাম্ভ কৰক"
#: ../js/ui/endSessionDialog.js:105
#: ../js/ui/endSessionDialog.js:107
#, javascript-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।"
msgstr[1] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।"
#: ../js/ui/endSessionDialog.js:119
#: ../js/ui/endSessionDialog.js:121
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "পুনাৰম্ভ কৰক আৰু আপডেইটসমূহ ইনস্টল কৰক"
#: ../js/ui/endSessionDialog.js:121
#: ../js/ui/endSessionDialog.js:123
#, javascript-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
@ -1105,44 +1117,46 @@ msgstr[0] ""
msgstr[1] ""
"চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব আৰু আপডেইটসমূহ ইনস্টল কৰিব।"
#: ../js/ui/endSessionDialog.js:127
#: ../js/ui/endSessionDialog.js:129
#| msgctxt "button"
#| msgid "Restart & Install"
msgctxt "button"
msgid "Restart &amp; Install"
msgstr "পুনৰাম্ভ কৰক &amp; ইনস্টল কৰক"
#: ../js/ui/endSessionDialog.js:128
#: ../js/ui/endSessionDialog.js:130
msgctxt "button"
msgid "Install &amp; Power Off"
msgstr "ইনস্টল কৰক &amp; চিস্টেম বন্ধ কৰক"
#: ../js/ui/endSessionDialog.js:129
#: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox"
msgid "Power off after updates are installed"
msgstr "আপডেইটসমূহ ইনস্টল কৰাৰ পিছত চিস্টেম বন্ধ কৰক"
#: ../js/ui/endSessionDialog.js:338
#: ../js/ui/endSessionDialog.js:315
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"বেটাৰি শক্তিত চলি আছে: অনুগ্ৰহ কৰি আপডেইটসমূহ ইনস্টল কৰাৰ আগত চাৰ্জাৰ লগাওক।"
#: ../js/ui/endSessionDialog.js:355
#: ../js/ui/endSessionDialog.js:332
msgid "Some applications are busy or have unsaved work."
msgstr ""
"কিছুমান এপ্লিকেচন ব্যস্ত হব পাৰে অথবা সিহতৰ কিছুমান অসংৰক্ষিত কাৰ্য্য থাকিব "
"পাৰে।"
#: ../js/ui/endSessionDialog.js:362
#: ../js/ui/endSessionDialog.js:339
msgid "Other users are logged in."
msgstr "অন্য ব্যৱহাৰকাৰীসকল লগ্ড ইন আছে।"
#. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:640
#: ../js/ui/endSessionDialog.js:619
#, javascript-format
msgid "%s (remote)"
msgstr "%s (দূৰৱৰ্তী)"
#. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:643
#: ../js/ui/endSessionDialog.js:622
#, javascript-format
msgid "%s (console)"
msgstr "%s (কনচৌল)"
@ -1156,7 +1170,7 @@ msgstr "ইনস্টল কৰক"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "extensions.gnome.org ৰ পৰা “%s” ক ডাউনল'ড আৰু ইনস্টল কৰিব নে?"
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523
#: ../js/ui/keyboard.js:653 ../js/ui/status/keyboard.js:339
msgid "Keyboard"
msgstr "কিবৰ্ড"
@ -1178,8 +1192,8 @@ msgstr "ত্ৰুটিসমূহ লুকুৱাওক"
msgid "Show Errors"
msgstr "ত্ৰুটিসমূহ দেখুৱাওক"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71
#: ../js/ui/status/location.js:176
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:164
msgid "Enabled"
msgstr "সামৰ্থবান কৰা আছে"
@ -1187,7 +1201,7 @@ msgstr "সামৰ্থবান কৰা আছে"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:167
#: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "অসামৰ্থবান কৰা আছে"
@ -1212,39 +1226,39 @@ msgstr "উৎস দৰ্শন কৰক"
msgid "Web Page"
msgstr "ৱেব পৃষ্ঠা"
#: ../js/ui/messageTray.js:1326
#: ../js/ui/messageTray.js:1325
msgid "Open"
msgstr "খোলক"
#: ../js/ui/messageTray.js:1333
#: ../js/ui/messageTray.js:1332
msgid "Remove"
msgstr "আতৰাওক"
#: ../js/ui/messageTray.js:1630
#: ../js/ui/messageTray.js:1629
msgid "Notifications"
msgstr "অধিসূচনাসমূহ"
#: ../js/ui/messageTray.js:1637
#: ../js/ui/messageTray.js:1636
msgid "Clear Messages"
msgstr "বাৰ্তাসমূহ পৰিষ্কাৰ কৰক"
#: ../js/ui/messageTray.js:1656
#: ../js/ui/messageTray.js:1655
msgid "Notification Settings"
msgstr "অধিসূচনা সংহতিসমূহ"
#: ../js/ui/messageTray.js:1709
#: ../js/ui/messageTray.js:1708
msgid "Tray Menu"
msgstr "ট্ৰে মেনু"
#: ../js/ui/messageTray.js:1926
#: ../js/ui/messageTray.js:1925
msgid "No Messages"
msgstr "কোনো বাৰ্তা নাই"
#: ../js/ui/messageTray.js:1968
#: ../js/ui/messageTray.js:1963
msgid "Message Tray"
msgstr "বাৰ্তা ট্ৰে"
#: ../js/ui/messageTray.js:2971
#: ../js/ui/messageTray.js:2966
msgid "System Information"
msgstr "চিস্টেম তথ্য"
@ -1272,7 +1286,7 @@ msgstr "অভাৰভিউ"
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters. */
#: ../js/ui/overview.js:246
#: ../js/ui/overview.js:250
msgid "Type to search…"
msgstr "সন্ধান কৰিবলে টাইপ কৰক…"
@ -1290,7 +1304,7 @@ msgstr "কাৰ্য্যসমূহ"
msgid "Top Bar"
msgstr "উপৰৰ বাৰ"
#: ../js/ui/popupMenu.js:269
#: ../js/ui/popupMenu.js:280
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
@ -1302,7 +1316,8 @@ msgstr "এটা কমান্ড সুমুৱাওক"
msgid "Close"
msgstr "বন্ধ কৰক"
#: ../js/ui/runDialog.js:277
#: ../js/ui/runDialog.js:273
#| msgid "Estimating…"
msgid "Restarting…"
msgstr "পুনাৰম্ভ কৰা হৈছে…"
@ -1319,43 +1334,43 @@ msgid_plural "%d new notifications"
msgstr[0] "%d নতুন অধিসূচনা"
msgstr[1] "%d নতুন অধিসূচনাসমূহ"
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
msgid "Lock"
msgstr "লক কৰক"
#: ../js/ui/screenShield.js:706
#: ../js/ui/screenShield.js:708
msgid "GNOME needs to lock the screen"
msgstr "GNOME এ পৰ্দা লক কৰিব লাগিব"
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1306
msgid "Unable to lock"
msgstr "লক কৰিবলে অক্ষম"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1307
msgid "Lock was blocked by an application"
msgstr "লক কাৰ্য্য এটা এপ্লিকেচন দ্বাৰা প্ৰতিৰোধ কৰা হৈছিল"
#: ../js/ui/search.js:594
#: ../js/ui/search.js:614
msgid "Searching…"
msgstr "সন্ধান কৰা হৈছে…"
#: ../js/ui/search.js:596
#: ../js/ui/search.js:660
msgid "No results."
msgstr "কোনো ফলাফল নাই।"
#: ../js/ui/shellEntry.js:25
#: ../js/ui/shellEntry.js:27
msgid "Copy"
msgstr "কপি কৰক"
#: ../js/ui/shellEntry.js:30
#: ../js/ui/shellEntry.js:32
msgid "Paste"
msgstr "পেইস্ট কৰক"
#: ../js/ui/shellEntry.js:97
#: ../js/ui/shellEntry.js:99
msgid "Show Text"
msgstr "লিখনি দেখুৱাওক"
#: ../js/ui/shellEntry.js:99
#: ../js/ui/shellEntry.js:101
msgid "Hide Text"
msgstr "লিখনি লুকুৱাওক"
@ -1441,28 +1456,26 @@ msgstr "সংযুক্ত নহয়"
msgid "Brightness"
msgstr "উজ্জ্বলতা"
#: ../js/ui/status/keyboard.js:547
#: ../js/ui/status/keyboard.js:407
msgid "Show Keyboard Layout"
msgstr "কিবৰ্ড বিন্যাস দেখুৱাওক"
#: ../js/ui/status/location.js:65
#: ../js/ui/status/location.js:56
#| msgid "Notifications"
msgid "Location"
msgstr "অবস্থান"
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177
#: ../js/ui/status/location.js:63 ../js/ui/status/location.js:165
#| msgid "Disabled"
msgid "Disable"
msgstr "অসামৰ্থবান কৰক"
#: ../js/ui/status/location.js:73
#| msgid "Power Settings"
msgid "Privacy Settings"
msgstr "গোপনীয়তা সংহতিসমূহ"
#: ../js/ui/status/location.js:176
#: ../js/ui/status/location.js:164
msgid "In Use"
msgstr "ব্যৱহৃত"
#: ../js/ui/status/location.js:180
#: ../js/ui/status/location.js:168
#| msgid "Enabled"
msgid "Enable"
msgstr "সামৰ্থবান কৰক"
@ -1476,31 +1489,37 @@ msgid "Off"
msgstr "অফ"
#: ../js/ui/status/network.js:459
#| msgid "Connect"
msgid "Connected"
msgstr "সংযুক্ত"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:463
#| msgid "unmanaged"
msgid "Unmanaged"
msgstr "অব্যৱস্থাপিত"
#: ../js/ui/status/network.js:465
#| msgid "disconnecting..."
msgid "Disconnecting"
msgstr "বিচ্ছিনিত কৰা হৈছে"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301
#| msgid "Connection"
msgid "Connecting"
msgstr "সংযোগ কৰা হৈছে"
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:474
#| msgid "authentication required"
msgid "Authentication required"
msgstr "প্ৰমাণীকৰণৰ প্ৰয়োজন"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:482
#| msgid "firmware missing"
msgid "Firmware missing"
msgstr "ফাৰ্মৱেৰ সন্ধানহীন"
@ -1604,6 +1623,7 @@ msgid "Network Settings"
msgstr "নেটৱৰ্ক সংহতিসমূহ"
#: ../js/ui/status/network.js:1482
#| msgid "Settings"
msgid "VPN Settings"
msgstr "VPN সংহতিসমূহ"
@ -1697,11 +1717,11 @@ msgstr "অন্য ব্যৱহাৰকাৰী হিচাপে লগ
msgid "Unlock Window"
msgstr "উইন্ডো আনলক কৰক"
#: ../js/ui/viewSelector.js:158
#: ../js/ui/viewSelector.js:232
msgid "Applications"
msgstr "এপ্লিকেচনসমূহ"
#: ../js/ui/viewSelector.js:162
#: ../js/ui/viewSelector.js:236
msgid "Search"
msgstr "সন্ধান কৰক"
@ -1798,19 +1818,19 @@ msgstr[1] "%u ইনপুটসমূহ"
msgid "System Sounds"
msgstr "চিস্টেম শব্দসমূহ"
#: ../src/main.c:373
#: ../src/main.c:371
msgid "Print version"
msgstr "প্ৰি্ট সংস্কৰণ"
msgstr "প্ৰি্ট সংস্কৰণ"
#: ../src/main.c:379
#: ../src/main.c:377
msgid "Mode used by GDM for login screen"
msgstr "লগিন স্ক্ৰিনৰ বাবে GDM দ্বাৰা ব্যৱহাৰ কৰা অৱস্থা"
#: ../src/main.c:385
#: ../src/main.c:383
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "লগিন পৰ্দাৰ বাবে এটা বিশেষ অৱস্থা, উদাহৰণস্বৰূপ \"gdm\" ব্যৱহাৰ কৰক"
#: ../src/main.c:391
#: ../src/main.c:389
msgid "List possible modes"
msgstr "সম্ভাব্য অৱস্থাসমূহ তালিকাভুক্ত কৰক"
@ -2014,7 +2034,7 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক
#~ "সংহিত, অবিকল্পিত পাইপলাইন ব্যৱহাৰ কৰা হব। এইটো বৰ্তমানত 'vp8enc "
#~ "min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads="
#~ "%T ! queue ! webmmux' আৰু VP8 কডেক ব্যৱহাৰ কৰি WEBM ত ৰেকৰ্ড কৰে। %T ক "
#~ "চিস্টেমত অনুকূলিত থ্ৰেড কাও্টত এটা অনুমানৰ প্লেইচহল্ডাৰ হিচাপে ব্যৱহাৰ কৰা হয়।"
#~ "চিস্টেমত অনুকূলিত থ্ৰেড কাও্টত এটা অনুমানৰ প্লেইচহল্ডাৰ হিচাপে ব্যৱহাৰ কৰা হয়।"
#~ msgid "File extension used for storing the screencast"
#~ msgstr "screencast সংৰক্ষণ কৰাৰ কাৰণে লথিপত্ৰ সম্প্ৰসাৰন"
@ -2297,7 +2317,7 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক
#~ msgstr "চিস্টেম সংহতিসমূহ"
#~ msgid "Failed to unmount '%s'"
#~ msgstr "'%s' আনমাউ্ট কৰিবলে ব্যৰ্থ"
#~ msgstr "'%s' আনমাউ্ট কৰিবলে ব্যৰ্থ"
#~ msgid "Retry"
#~ msgstr "পুনৰ চেষ্টা কৰক"
@ -2375,7 +2395,7 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক
#~ msgstr "বন্ধ কৰক"
#~ msgid "Online Accounts"
#~ msgstr "অনলাইন একাও্টসমূহ"
#~ msgstr "অনলাইন একাও্টসমূহ"
#~ msgid "Lock Screen"
#~ msgstr "পৰ্দা লক কৰক"

1765
po/bg.po

File diff suppressed because it is too large Load Diff

928
po/ca.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

661
po/cs.po

File diff suppressed because it is too large Load Diff

1198
po/da.po

File diff suppressed because it is too large Load Diff

495
po/de.po

File diff suppressed because it is too large Load Diff

410
po/el.po

File diff suppressed because it is too large Load Diff

413
po/es.po

File diff suppressed because it is too large Load Diff

907
po/fi.po

File diff suppressed because it is too large Load Diff

148
po/fr.po
View File

@ -19,7 +19,7 @@ msgstr ""
"Project-Id-Version: gnome-shell master fr\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-12 17:00+0000\n"
"POT-Creation-Date: 2014-08-25 07:37+0000\n"
"PO-Revision-Date: 2014-08-25 17:00+0200\n"
"Last-Translator: Alain Lojewski <allomervan@gmail.com>\n"
"Language-Team: français <gnomefr@traduc.org>\n"
@ -242,8 +242,8 @@ msgstr "Combinaison de touches pour donner le focus à la notification active."
msgid ""
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
msgstr ""
"Combinaison de touches pour stopper et fermer toutes les transitions à des "
"fins de débogage"
"Combinaison de touches pour stopper et fermer toutes les transitions à des fins "
"de débogage"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "Which keyboard to use"
@ -322,19 +322,19 @@ msgstr ""
msgid "Captive Portal"
msgstr "Portail captif"
#: ../js/extensionPrefs/main.js:123
#: ../js/extensionPrefs/main.js:127
#, javascript-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr ""
"Une erreur s'est produite lors du chargement de la boîte de dialogue des "
"préférences de %s :"
#: ../js/extensionPrefs/main.js:155
#: ../js/extensionPrefs/main.js:159
msgid "GNOME Shell Extensions"
msgstr "Extensions GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915
msgid "Cancel"
@ -401,40 +401,40 @@ msgstr "Exécution de « %s » impossible :"
msgid "Web Authentication Redirect"
msgstr "Redirection de l'authentification Web"
#: ../js/ui/appDisplay.js:772
#: ../js/ui/appDisplay.js:660
msgid "Frequently used applications will appear here"
msgstr "Les applications fréquemment utilisées apparaîtront ici"
#: ../js/ui/appDisplay.js:883
#: ../js/ui/appDisplay.js:771
msgid "Frequent"
msgstr "Fréquemment utilisées"
#: ../js/ui/appDisplay.js:890
#: ../js/ui/appDisplay.js:778
msgid "All"
msgstr "Toutes"
#: ../js/ui/appDisplay.js:1789
#: ../js/ui/appDisplay.js:1650
msgid "New Window"
msgstr "Nouvelle fenêtre"
#: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1673 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Enlever des favoris"
#: ../js/ui/appDisplay.js:1821
#: ../js/ui/appDisplay.js:1679
msgid "Add to Favorites"
msgstr "Ajouter aux favoris"
#: ../js/ui/appDisplay.js:1830
#: ../js/ui/appDisplay.js:1688
msgid "Show Details"
msgstr "Afficher les détails"
#: ../js/ui/appFavorites.js:124
#: ../js/ui/appFavorites.js:122
#, javascript-format
msgid "%s has been added to your favorites."
msgstr "%s a été ajouté à vos favoris."
#: ../js/ui/appFavorites.js:158
#: ../js/ui/appFavorites.js:156
#, javascript-format
msgid "%s has been removed from your favorites."
msgstr "%s a été supprimé de vos favoris."
@ -647,11 +647,11 @@ msgstr "Ouvrir avec %s"
msgid "Eject"
msgstr "Éjecter"
#: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285
#: ../js/ui/components/keyring.js:93 ../js/ui/components/polkitAgent.js:285
msgid "Password:"
msgstr "Mot de passe :"
#: ../js/ui/components/keyring.js:120
#: ../js/ui/components/keyring.js:113
msgid "Type again:"
msgstr "Saisissez à nouveau :"
@ -1025,7 +1025,7 @@ msgstr "Afficher le compte"
msgid "Unknown reason"
msgstr "Raison inconnue"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228
msgid "Windows"
msgstr "Fenêtres"
@ -1062,86 +1062,86 @@ msgstr "Paramètres de date et heure"
msgid "%A %B %e, %Y"
msgstr "%A %e %B %Y"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:66
#, javascript-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Fermer la session de %s"
#: ../js/ui/endSessionDialog.js:65
#: ../js/ui/endSessionDialog.js:67
msgctxt "title"
msgid "Log Out"
msgstr "Fermer la session"
#: ../js/ui/endSessionDialog.js:67
#: ../js/ui/endSessionDialog.js:69
#, javascript-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s sera déconnecté automatiquement dans %d seconde."
msgstr[1] "%s sera déconnecté automatiquement dans %d secondes."
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:74
#, javascript-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "Vous allez être déconnecté automatiquement dans %d seconde."
msgstr[1] "Vous allez être déconnecté automatiquement dans %d secondes."
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:80
msgctxt "button"
msgid "Log Out"
msgstr "Fermer la session"
#: ../js/ui/endSessionDialog.js:84
#: ../js/ui/endSessionDialog.js:86
msgctxt "title"
msgid "Power Off"
msgstr "Éteindre"
#: ../js/ui/endSessionDialog.js:85
#: ../js/ui/endSessionDialog.js:87
msgctxt "title"
msgid "Install Updates & Power Off"
msgstr "Installer les mises à jour et éteindre"
#: ../js/ui/endSessionDialog.js:87
#: ../js/ui/endSessionDialog.js:89
#, javascript-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "Cet ordinateur s'éteindra automatiquement dans %d seconde."
msgstr[1] "Cet ordinateur s'éteindra automatiquement dans %d secondes."
#: ../js/ui/endSessionDialog.js:91
#: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox"
msgid "Install pending software updates"
msgstr "Installer les mises à jour logicielles en attente"
#: ../js/ui/endSessionDialog.js:94 ../js/ui/endSessionDialog.js:111
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
msgctxt "button"
msgid "Restart"
msgstr "Redémarrer"
#: ../js/ui/endSessionDialog.js:96
#: ../js/ui/endSessionDialog.js:98
msgctxt "button"
msgid "Power Off"
msgstr "Éteindre"
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:105
msgctxt "title"
msgid "Restart"
msgstr "Redémarrer"
#: ../js/ui/endSessionDialog.js:105
#: ../js/ui/endSessionDialog.js:107
#, javascript-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "Cet ordinateur redémarrera automatiquement dans %d seconde."
msgstr[1] "Cet ordinateur redémarrera automatiquement dans %d secondes."
#: ../js/ui/endSessionDialog.js:119
#: ../js/ui/endSessionDialog.js:121
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Redémarrer et installer les mises à jour"
#: ../js/ui/endSessionDialog.js:121
#: ../js/ui/endSessionDialog.js:123
#, javascript-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
@ -1149,44 +1149,44 @@ msgid_plural ""
msgstr[0] "Le système redémarrera automatiquement dans %d seconde."
msgstr[1] "Le système redémarrera automatiquement dans %d secondes."
#: ../js/ui/endSessionDialog.js:127
#: ../js/ui/endSessionDialog.js:129
msgctxt "button"
msgid "Restart &amp; Install"
msgstr "Redémarrer et installer"
#: ../js/ui/endSessionDialog.js:128
#: ../js/ui/endSessionDialog.js:130
msgctxt "button"
msgid "Install &amp; Power Off"
msgstr "Installer et éteindre"
#: ../js/ui/endSessionDialog.js:129
#: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox"
msgid "Power off after updates are installed"
msgstr "Éteindre après l'installation des mises à jour"
#: ../js/ui/endSessionDialog.js:338
#: ../js/ui/endSessionDialog.js:315
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"Fonctionnement sur batterie : veuillez vous brancher avant d'installer les "
"mises à jour."
#: ../js/ui/endSessionDialog.js:355
#: ../js/ui/endSessionDialog.js:332
msgid "Some applications are busy or have unsaved work."
msgstr ""
"Certaines applications sont occupées ou ont des travaux non-sauvegardés."
#: ../js/ui/endSessionDialog.js:362
#: ../js/ui/endSessionDialog.js:339
msgid "Other users are logged in."
msgstr "D'autres utilisateurs sont connectés."
#. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:640
#: ../js/ui/endSessionDialog.js:619
#, javascript-format
msgid "%s (remote)"
msgstr "%s (distant)"
#. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:643
#: ../js/ui/endSessionDialog.js:622
#, javascript-format
msgid "%s (console)"
msgstr "%s (console)"
@ -1200,7 +1200,7 @@ msgstr "Installer"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Télécharger et installer « %s » à partir de extensions.gnome.org ?"
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523
#: ../js/ui/keyboard.js:653 ../js/ui/status/keyboard.js:339
msgid "Keyboard"
msgstr "Clavier"
@ -1222,8 +1222,8 @@ msgstr "Masquer les erreurs"
msgid "Show Errors"
msgstr "Afficher les erreurs"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71
#: ../js/ui/status/location.js:176
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:166
msgid "Enabled"
msgstr "Activé"
@ -1231,7 +1231,7 @@ msgstr "Activé"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:169
#: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Désactivé"
@ -1256,39 +1256,39 @@ msgstr "Afficher la source"
msgid "Web Page"
msgstr "Page Web"
#: ../js/ui/messageTray.js:1326
#: ../js/ui/messageTray.js:1325
msgid "Open"
msgstr "Ouvrir"
#: ../js/ui/messageTray.js:1333
#: ../js/ui/messageTray.js:1332
msgid "Remove"
msgstr "Enlever"
#: ../js/ui/messageTray.js:1630
#: ../js/ui/messageTray.js:1629
msgid "Notifications"
msgstr "Notifications"
#: ../js/ui/messageTray.js:1637
#: ../js/ui/messageTray.js:1636
msgid "Clear Messages"
msgstr "Effacer les messages"
#: ../js/ui/messageTray.js:1656
#: ../js/ui/messageTray.js:1655
msgid "Notification Settings"
msgstr "Paramètres de notifications"
#: ../js/ui/messageTray.js:1709
#: ../js/ui/messageTray.js:1708
msgid "Tray Menu"
msgstr "Menu du tiroir de messagerie"
#: ../js/ui/messageTray.js:1926
#: ../js/ui/messageTray.js:1925
msgid "No Messages"
msgstr "Aucun message"
#: ../js/ui/messageTray.js:1968
#: ../js/ui/messageTray.js:1963
msgid "Message Tray"
msgstr "Tiroir de messagerie"
#: ../js/ui/messageTray.js:2971
#: ../js/ui/messageTray.js:2966
msgid "System Information"
msgstr "Informations du système"
@ -1316,7 +1316,7 @@ msgstr "Vue d'ensemble"
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters. */
#: ../js/ui/overview.js:246
#: ../js/ui/overview.js:250
msgid "Type to search…"
msgstr "Rechercher…"
@ -1379,27 +1379,27 @@ msgstr "Impossible de verrouiller"
msgid "Lock was blocked by an application"
msgstr "Le verrouillage a été bloqué par une application"
#: ../js/ui/search.js:594
#: ../js/ui/search.js:606
msgid "Searching…"
msgstr "Recherche en cours…"
#: ../js/ui/search.js:596
#: ../js/ui/search.js:652
msgid "No results."
msgstr "Aucun résultat."
#: ../js/ui/shellEntry.js:25
#: ../js/ui/shellEntry.js:27
msgid "Copy"
msgstr "Copier"
#: ../js/ui/shellEntry.js:30
#: ../js/ui/shellEntry.js:32
msgid "Paste"
msgstr "Coller"
#: ../js/ui/shellEntry.js:97
#: ../js/ui/shellEntry.js:99
msgid "Show Text"
msgstr "Afficher le texte"
#: ../js/ui/shellEntry.js:99
#: ../js/ui/shellEntry.js:101
msgid "Hide Text"
msgstr "Masquer le texte"
@ -1485,27 +1485,23 @@ msgstr "Non connecté"
msgid "Brightness"
msgstr "Luminosité"
#: ../js/ui/status/keyboard.js:547
#: ../js/ui/status/keyboard.js:406
msgid "Show Keyboard Layout"
msgstr "Afficher la disposition du clavier"
#: ../js/ui/status/location.js:65
#: ../js/ui/status/location.js:56
msgid "Location"
msgstr "Localisation"
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177
#: ../js/ui/status/location.js:63 ../js/ui/status/location.js:167
msgid "Disable"
msgstr "Désactiver"
#: ../js/ui/status/location.js:73
msgid "Privacy Settings"
msgstr "Paramètres de confidentialité"
#: ../js/ui/status/location.js:176
#: ../js/ui/status/location.js:166
msgid "In Use"
msgstr "En cours d'utilisation"
#: ../js/ui/status/location.js:180
#: ../js/ui/status/location.js:170
msgid "Enable"
msgstr "Activer"
@ -1740,11 +1736,11 @@ msgstr "Se connecter en tant qu'autre utilisateur"
msgid "Unlock Window"
msgstr "Fenêtre de déverrouillage"
#: ../js/ui/viewSelector.js:158
#: ../js/ui/viewSelector.js:232
msgid "Applications"
msgstr "Applications"
#: ../js/ui/viewSelector.js:162
#: ../js/ui/viewSelector.js:236
msgid "Search"
msgstr "Recherche"
@ -1841,20 +1837,20 @@ msgstr[1] "%u entrées"
msgid "System Sounds"
msgstr "Sons système"
#: ../src/main.c:373
#: ../src/main.c:371
msgid "Print version"
msgstr "Affiche la version"
#: ../src/main.c:379
#: ../src/main.c:377
msgid "Mode used by GDM for login screen"
msgstr "Mode utilisé par GDM pour l'écran de connexion"
#: ../src/main.c:385
#: ../src/main.c:383
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
"Utiliser un mode particulier, par ex. « gdm » pour l'écran de connexion"
#: ../src/main.c:391
#: ../src/main.c:389
msgid "List possible modes"
msgstr "Lister les modes possibles"

View File

@ -10,7 +10,7 @@ msgstr ""
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
"cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-08-26 07:37+0000\n"
"PO-Revision-Date: 2014-09-08 12:52+0530\n"
"PO-Revision-Date: 2014-08-26 16:19+0530\n"
"Last-Translator: \n"
"Language-Team: American English <kde-i18n-doc@kde.org>\n"
"Language: \n"
@ -125,7 +125,7 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "Index of the currently selected view in the application picker."
msgstr "કાર્યક્રમ પસંદકર્તામાં હાલમાં પસંદ થયેલ દૃશ્યની અનુક્રમણિકા."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "History for command (Alt-F2) dialog"
@ -136,9 +136,10 @@ msgid "History for the looking glass dialog"
msgstr "ગ્લાસ સંવાદને જોવા માટે ઇતિહાસ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
#, fuzzy
#| msgid "Always show the 'Log out' menuitem in the user menu."
msgid "Always show the 'Log out' menu item in the user menu."
msgstr "વપરાશકર્તા મેનુમાં હંમેશા 'બહાર નીકળો' મેનુ વસ્તુને બતાવ."
msgstr "હંમેશા વપરાશકર્તા મેનુમાં 'બહાર નીકળો' મેનુવસ્તુને બતાવે છે."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#, fuzzy
@ -192,14 +193,16 @@ msgid "Keybinding to open the \"Show Applications\" view of the Activities Overv
msgstr "પ્રવૃત્તિ ઝાંખીનાં \"કાર્યક્રમો બતાવો\" દૃશ્યને ખોલવા માટે કિબાઇન્ડીંગ."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#, fuzzy
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the overview"
msgstr "ઝાંખીને ખોલવા માટે કિબાઇન્ડીંગ"
msgstr "\"કાર્યક્રમો બતાવો\" દૃશ્યને ખોલવા માટે કિબાઇન્ડીંગ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#, fuzzy
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the Activities Overview."
msgstr "પ્રવૃત્તિ ઝાંખીને ખોલવા માટે કિબાઇન્ડીંગ"
msgstr "\"કાર્યક્રમો બતાવો\" દૃશ્યને ખોલવા માટે કિબાઇન્ડીંગ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to toggle the visibility of the message tray"
@ -358,19 +361,20 @@ msgid "Could not parse command:"
msgstr "આદેશનું પદચ્છેદન કરી શક્યા નથી:"
#: ../js/misc/util.js:156
#, javascript-format
#, fuzzy, javascript-format
#| msgid "Execution of '%s' failed:"
msgid "Execution of “%s” failed:"
msgstr "%s ને અમલમાં મૂકવાનુ નિષ્ફળ:"
msgstr "'%s' ને અમલમાં મૂકવાનુ નિષ્ફળ:"
#: ../js/portalHelper/main.js:85
#, fuzzy
#| msgid "Authentication Required"
msgid "Web Authentication Redirect"
msgstr "વેબ સત્તાધિકરણ દિશામાન"
msgstr "સત્તાધિકરણ જરૂરી"
#: ../js/ui/appDisplay.js:660
msgid "Frequently used applications will appear here"
msgstr "વારંવાર વપરાતા કાર્યક્રમો અહિંયા દેખાશે"
msgstr ""
#: ../js/ui/appDisplay.js:771
msgid "Frequent"
@ -636,14 +640,14 @@ msgid "Authentication required by wireless network"
msgstr "વાયરલેસ નેટવર્ક દ્દારાસત્તાધિકરણ જરૂરી"
#: ../js/ui/components/networkAgent.js:319
#, javascript-format
#, fuzzy, javascript-format
#| msgid ""
#| "Passwords or encryption keys are required to access the wireless network "
#| "'%s'."
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
msgstr "પાસવર્ડ અથવા એનક્રિપ્શન કીઓને વાયરલેસ નેટવર્ક %s માં પ્રવેશની જરૂર છે."
msgstr "પાસવર્ડ અથવા એનક્રિપ્શન કીઓને વાયરલેસ નેટવર્ક '%s' માં પ્રવેશની જરૂર છે."
#: ../js/ui/components/networkAgent.js:323
msgid "Wired 802.1X authentication"
@ -1042,10 +1046,11 @@ msgid "Power Off"
msgstr "પાવર બંધ"
#: ../js/ui/endSessionDialog.js:87
#, fuzzy
#| msgid "Install Updates & Restart"
msgctxt "title"
msgid "Install Updates & Power Off"
msgstr "સુધારા સ્થાપિત કરો અને પાવર બંધ કરો"
msgstr "સુધારા સ્થાપિત કરો અને પુન:શરૂ કરો"
#: ../js/ui/endSessionDialog.js:89
#, javascript-format
@ -1057,7 +1062,7 @@ msgstr[1] "સિસ્ટમ %d સેકંડમાં આપમેળે પ
#: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox"
msgid "Install pending software updates"
msgstr "બાકી રહેલા સોફ્ટવેર સુધારાને સ્થાપિત કરો"
msgstr ""
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
msgctxt "button"
@ -1099,25 +1104,25 @@ msgstr[1] "સિસ્ટમ %d સેકંડોમાં આપમેળે
#: ../js/ui/endSessionDialog.js:129
msgctxt "button"
msgid "Restart &amp; Install"
msgstr "પુન:શરૂ કરો અને સ્થાપિત કરો"
msgstr ""
#: ../js/ui/endSessionDialog.js:130
msgctxt "button"
msgid "Install &amp; Power Off"
msgstr "સ્થાપિત કરો અને પાવર બંધ "
msgstr ""
#: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox"
msgid "Power off after updates are installed"
msgstr "સુધારા સ્થાપિત થાય પછી પાવર બંધ કરો"
msgstr ""
#: ../js/ui/endSessionDialog.js:315
msgid "Running on battery power: please plug in before installing updates."
msgstr "બેટરી પાવર પર ચાલી રહ્યુ છે: મહેરબાની કરીને સુધારા સ્થાપિત કરતા પહેલાં પ્લગઇન કરો."
msgstr ""
#: ../js/ui/endSessionDialog.js:332
msgid "Some applications are busy or have unsaved work."
msgstr "અમુક કાર્યક્રમો વ્યસ્ત છે અથવા તેની પાસે અસંગ્રહેલ કામ છે."
msgstr ""
#: ../js/ui/endSessionDialog.js:339
msgid "Other users are logged in."
@ -1140,10 +1145,10 @@ msgid "Install"
msgstr "સ્થાપિત કરો"
#: ../js/ui/extensionDownloader.js:204
#, javascript-format
#, fuzzy, javascript-format
#| msgid "Download and install '%s' from extensions.gnome.org?"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "extensions.gnome.org માંથી %s ને સ્થાપિત અને ડાઉનલોડ કરો?"
msgstr "extensions.gnome.org માંથી '%s' ને સ્થાપિત અને ડાઉનલોડ કરો?"
#: ../js/ui/keyboard.js:653 ../js/ui/status/keyboard.js:339
msgid "Keyboard"
@ -1223,7 +1228,7 @@ msgstr "સૂચના સુયોજનો"
#: ../js/ui/messageTray.js:1708
msgid "Tray Menu"
msgstr "ટ્રે મેનુ"
msgstr ""
#: ../js/ui/messageTray.js:1925
msgid "No Messages"
@ -1417,12 +1422,12 @@ msgid "Bluetooth Settings"
msgstr "બ્લુટુથ સુયોજનો"
#: ../js/ui/status/bluetooth.js:104
#, javascript-format
#, fuzzy, javascript-format
#| msgid "Connected (private)"
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d જોડાયેલ ઉપકરણ"
msgstr[1] "%d જોડાયેલ ઉપકરણો"
msgstr[0] "જોડાયેલ (ખાનગી)"
msgstr[1] "જોડાયેલ (ખાનગી)"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309
#| msgid "Connect"
@ -1512,9 +1517,10 @@ msgid "Connection failed"
msgstr "જોડાણ નિષ્ફળ"
#: ../js/ui/status/network.js:504
#, fuzzy
#| msgid "Settings"
msgid "Wired Settings"
msgstr "વાયર થયેલ સુયોજનો"
msgstr "સુયોજનો"
#: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624
#| msgid "Mobile broadband"
@ -1528,19 +1534,19 @@ msgstr "હાર્ડવેર નિષ્ક્રિય"
#: ../js/ui/status/network.js:632
msgid "Use as Internet connection"
msgstr "ઇન્ટરનેટ જોડાણ તરીકે વાપરો"
msgstr ""
#: ../js/ui/status/network.js:813
msgid "Airplane Mode is On"
msgstr "ઍરપ્લેન સ્થિતિ ચાલુ છે"
msgstr ""
#: ../js/ui/status/network.js:814
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Wi-Fi નિષ્ક્રિય થયેલ છે જ્યારે ઍરપ્લેન સ્થિતિ ચાલુ હોય."
msgstr ""
#: ../js/ui/status/network.js:815
msgid "Turn Off Airplane Mode"
msgstr "ઍરપ્લેન સ્થિતિને બંધ કરો"
msgstr ""
#: ../js/ui/status/network.js:824
msgid "Wi-Fi is Off"
@ -1548,11 +1554,11 @@ msgstr "Wi-Fi બંધ છે"
#: ../js/ui/status/network.js:825
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "નેટવર્કમાં જોડાવા માટે ક્રમમાં Wi-Fi ને ચાલુ કરવાની જરૂર છે."
msgstr ""
#: ../js/ui/status/network.js:826
msgid "Turn On Wi-Fi"
msgstr "Wi-Fi ચાલુ કરો"
msgstr ""
#: ../js/ui/status/network.js:851
#| msgid "Network"
@ -1589,7 +1595,7 @@ msgstr "ચાલુ કરો"
#: ../js/ui/status/network.js:1298
msgid "Hotspot Active"
msgstr "હૉટસ્પોટ સક્રિય"
msgstr ""
#: ../js/ui/status/network.js:1409
msgid "connecting..."
@ -1640,7 +1646,7 @@ msgstr "અંદાજ કરી રહ્યા છે..."
#: ../js/ui/status/power.js:86
#, javascript-format
msgid "%d%02d Remaining (%d%%)"
msgstr "%d%02d બાકી રહેલ છે (%d%%)"
msgstr ""
#: ../js/ui/status/power.js:91
#, javascript-format
@ -1657,7 +1663,7 @@ msgstr "બેટરી"
#: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode"
msgstr "ઍરપ્લેન સ્થિતિ"
msgstr ""
#: ../js/ui/status/rfkill.js:85
#| msgid "Open"
@ -1720,15 +1726,16 @@ msgstr "“%s” તૈયાર છે"
#: ../js/ui/windowManager.js:65
msgid "Do you want to keep these display settings?"
msgstr "શું તમને આ દર્શાવ સુયોજનોને રાખવા માંગો છો?ે"
msgstr ""
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#. */
#: ../js/ui/windowManager.js:84
#, fuzzy
#| msgid "Power Settings"
msgid "Revert Settings"
msgstr "સુયોજનોને પાછા લાવો"
msgstr "પાવર સુયોજનો"
#: ../js/ui/windowManager.js:88
msgid "Keep Changes"
@ -1763,7 +1770,7 @@ msgstr "માપ બદલો"
#: ../js/ui/windowMenu.js:65
msgid "Move Titlebar Onscreen"
msgstr "શીર્ષકપટ્ટી ઓનસ્ક્રીનને ખસેડો"
msgstr ""
#: ../js/ui/windowMenu.js:70
msgid "Always on Top"
@ -1771,15 +1778,15 @@ msgstr "હંમેશા ટોચ ઉપર"
#: ../js/ui/windowMenu.js:89
msgid "Always on Visible Workspace"
msgstr "હંમેશા દૃશ્ય કામ કરવાની જગ્યા પર"
msgstr ""
#: ../js/ui/windowMenu.js:106
msgid "Move to Workspace Up"
msgstr "ઉપર કામ કરવાની જગ્યા પર ખસેડો"
msgstr ""
#: ../js/ui/windowMenu.js:111
msgid "Move to Workspace Down"
msgstr "નીચે કામ કરવાની જગ્યાએ ખસેડો"
msgstr ""
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
msgid "Evolution Calendar"

440
po/he.po

File diff suppressed because it is too large Load Diff

2294
po/hi.po

File diff suppressed because it is too large Load Diff

591
po/hu.po

File diff suppressed because it is too large Load Diff

118
po/id.po
View File

@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-13 07:37+0000\n"
"PO-Revision-Date: 2014-09-13 19:20+0700\n"
"POT-Creation-Date: 2014-09-02 07:38+0000\n"
"PO-Revision-Date: 2014-09-02 19:20+0700\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n"
@ -304,17 +304,17 @@ msgstr ""
msgid "Captive Portal"
msgstr "Portal Captive"
#: ../js/extensionPrefs/main.js:123
#: ../js/extensionPrefs/main.js:127
#, javascript-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr "Ada galat saat memuat dialog preferensi bagi %s:"
#: ../js/extensionPrefs/main.js:155
#: ../js/extensionPrefs/main.js:159
msgid "GNOME Shell Extensions"
msgstr "Ekstensi GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915
msgid "Cancel"
@ -393,19 +393,19 @@ msgstr "Sering"
msgid "All"
msgstr "Semua"
#: ../js/ui/appDisplay.js:1789
#: ../js/ui/appDisplay.js:1788
msgid "New Window"
msgstr "Jendela Baru"
#: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1814 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Hapus dari Favorit"
#: ../js/ui/appDisplay.js:1821
#: ../js/ui/appDisplay.js:1820
msgid "Add to Favorites"
msgstr "Tambah ke Favorit"
#: ../js/ui/appDisplay.js:1830
#: ../js/ui/appDisplay.js:1829
msgid "Show Details"
msgstr "Tampilkan Rincian"
@ -606,11 +606,11 @@ msgstr "Buka dengan %s"
msgid "Eject"
msgstr "Keluarkan"
#: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285
#: ../js/ui/components/keyring.js:93 ../js/ui/components/polkitAgent.js:285
msgid "Password:"
msgstr "Sandi:"
#: ../js/ui/components/keyring.js:120
#: ../js/ui/components/keyring.js:113
msgid "Type again:"
msgstr "Ketik lagi:"
@ -983,7 +983,7 @@ msgstr "Tilik akun"
msgid "Unknown reason"
msgstr "Alasan yang tidak diketahui"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:159
msgid "Windows"
msgstr "Jendela"
@ -1014,82 +1014,82 @@ msgstr "Pengaturan Waktu & Tanggal"
msgid "%A %B %e, %Y"
msgstr "%A, %e %B %Y"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:66
#, javascript-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Keluar %s"
#: ../js/ui/endSessionDialog.js:65
#: ../js/ui/endSessionDialog.js:67
msgctxt "title"
msgid "Log Out"
msgstr "Keluar"
#: ../js/ui/endSessionDialog.js:67
#: ../js/ui/endSessionDialog.js:69
#, javascript-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s akan log keluar otomatis dalam %d detik.\t\t"
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:74
#, javascript-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "Anda akan log keluar otomatis dalam %d detik."
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:80
msgctxt "button"
msgid "Log Out"
msgstr "Keluar"
#: ../js/ui/endSessionDialog.js:84
#: ../js/ui/endSessionDialog.js:86
msgctxt "title"
msgid "Power Off"
msgstr "Matikan"
#: ../js/ui/endSessionDialog.js:85
#: ../js/ui/endSessionDialog.js:87
msgctxt "title"
msgid "Install Updates & Power Off"
msgstr "Pasang Pemutakhiran & Matikan"
#: ../js/ui/endSessionDialog.js:87
#: ../js/ui/endSessionDialog.js:89
#, javascript-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "Sistem ini akan otomatis dimatikan dalam %d detik."
#: ../js/ui/endSessionDialog.js:91
#: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox"
msgid "Install pending software updates"
msgstr "Pasang pemutakhiran perangkat lunak yang tertunda"
#: ../js/ui/endSessionDialog.js:94 ../js/ui/endSessionDialog.js:111
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
msgctxt "button"
msgid "Restart"
msgstr "Nyalakan Ulang"
#: ../js/ui/endSessionDialog.js:96
#: ../js/ui/endSessionDialog.js:98
msgctxt "button"
msgid "Power Off"
msgstr "Matikan"
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:105
msgctxt "title"
msgid "Restart"
msgstr "Nyalakan Ulang"
#: ../js/ui/endSessionDialog.js:105
#: ../js/ui/endSessionDialog.js:107
#, javascript-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "Sistem ini akan otomatis dimulai ulang dalam %d detik."
#: ../js/ui/endSessionDialog.js:119
#: ../js/ui/endSessionDialog.js:121
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Start Ulang & Pasang Pemutakhiran"
#: ../js/ui/endSessionDialog.js:121
#: ../js/ui/endSessionDialog.js:123
#, javascript-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
@ -1098,42 +1098,42 @@ msgstr[0] ""
"Sistem ini akan otomatis dimulai ulang dan memasang pemutakhiran dalam %d "
"detik."
#: ../js/ui/endSessionDialog.js:127
#: ../js/ui/endSessionDialog.js:129
msgctxt "button"
msgid "Restart &amp; Install"
msgstr "Start Ulang &amp; Pasang"
#: ../js/ui/endSessionDialog.js:128
#: ../js/ui/endSessionDialog.js:130
msgctxt "button"
msgid "Install &amp; Power Off"
msgstr "Pasang &amp; Matikan"
#: ../js/ui/endSessionDialog.js:129
#: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox"
msgid "Power off after updates are installed"
msgstr "Matikan daya setelah pemutakhiran dipasang"
#: ../js/ui/endSessionDialog.js:338
#: ../js/ui/endSessionDialog.js:315
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"Berjalan memakai daya baterai: harap tancapkan sebelum memasang pemutakhiran."
#: ../js/ui/endSessionDialog.js:355
#: ../js/ui/endSessionDialog.js:332
msgid "Some applications are busy or have unsaved work."
msgstr "Beberapa aplikasi sedang sibuk atau belum disimpan perubahannya."
#: ../js/ui/endSessionDialog.js:362
#: ../js/ui/endSessionDialog.js:339
msgid "Other users are logged in."
msgstr "Pengguna lain sedang log masuk."
#. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:640
#: ../js/ui/endSessionDialog.js:619
#, javascript-format
msgid "%s (remote)"
msgstr "%s (jarak jauh)"
#. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:643
#: ../js/ui/endSessionDialog.js:622
#, javascript-format
msgid "%s (console)"
msgstr "%s (konsol)"
@ -1147,7 +1147,7 @@ msgstr "Pasang"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?"
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523
#: ../js/ui/keyboard.js:634 ../js/ui/status/keyboard.js:339
msgid "Keyboard"
msgstr "Papan Ketik"
@ -1169,8 +1169,8 @@ msgstr "Sembunyikan Galat"
msgid "Show Errors"
msgstr "Tampilkan Galat"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71
#: ../js/ui/status/location.js:176
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:166
msgid "Enabled"
msgstr "Diaktifkan"
@ -1178,7 +1178,7 @@ msgstr "Diaktifkan"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:169
#: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Dinonaktifkan"
@ -1262,7 +1262,7 @@ msgstr "Gambaran"
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters. */
#: ../js/ui/overview.js:246
#: ../js/ui/overview.js:250
msgid "Type to search…"
msgstr "Ketik untuk mencari…"
@ -1325,27 +1325,27 @@ msgstr "Tak bisa mengunci"
msgid "Lock was blocked by an application"
msgstr "Kunci diblokir oleh suatu aplikasi"
#: ../js/ui/search.js:594
#: ../js/ui/search.js:557
msgid "Searching…"
msgstr "Mencari…"
#: ../js/ui/search.js:596
#: ../js/ui/search.js:598
msgid "No results."
msgstr "Tak ada yang cocok."
#: ../js/ui/shellEntry.js:25
#: ../js/ui/shellEntry.js:27
msgid "Copy"
msgstr "Salin"
#: ../js/ui/shellEntry.js:30
#: ../js/ui/shellEntry.js:32
msgid "Paste"
msgstr "Tempel"
#: ../js/ui/shellEntry.js:97
#: ../js/ui/shellEntry.js:99
msgid "Show Text"
msgstr "Tampilkan Teks"
#: ../js/ui/shellEntry.js:99
#: ../js/ui/shellEntry.js:101
msgid "Hide Text"
msgstr "Sembunyikan Teks"
@ -1430,27 +1430,23 @@ msgstr "Tak Tersambung"
msgid "Brightness"
msgstr "Kecerahan"
#: ../js/ui/status/keyboard.js:547
#: ../js/ui/status/keyboard.js:406
msgid "Show Keyboard Layout"
msgstr "Tampilkan Tata Letak Papan Tik"
#: ../js/ui/status/location.js:65
#: ../js/ui/status/location.js:56
msgid "Location"
msgstr "Lokasi"
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177
#: ../js/ui/status/location.js:63 ../js/ui/status/location.js:167
msgid "Disable"
msgstr "Nonaktifkan"
#: ../js/ui/status/location.js:73
msgid "Privacy Settings"
msgstr "Pengaturan Privasi"
#: ../js/ui/status/location.js:176
#: ../js/ui/status/location.js:166
msgid "In Use"
msgstr "Dipakai"
#: ../js/ui/status/location.js:180
#: ../js/ui/status/location.js:170
msgid "Enable"
msgstr "Fungsikan"
@ -1685,11 +1681,11 @@ msgstr "Masuk sebagai pengguna lain"
msgid "Unlock Window"
msgstr "Buka Kunci Jendela"
#: ../js/ui/viewSelector.js:158
#: ../js/ui/viewSelector.js:163
msgid "Applications"
msgstr "Aplikasi"
#: ../js/ui/viewSelector.js:162
#: ../js/ui/viewSelector.js:167
msgid "Search"
msgstr "Cari"
@ -1783,19 +1779,19 @@ msgstr[0] "%u Masukan"
msgid "System Sounds"
msgstr "Suara Sistem"
#: ../src/main.c:373
#: ../src/main.c:371
msgid "Print version"
msgstr "Versi Cetak"
#: ../src/main.c:379
#: ../src/main.c:377
msgid "Mode used by GDM for login screen"
msgstr "Mode yang dipakai oleh layar log masuk GDM"
#: ../src/main.c:385
#: ../src/main.c:383
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Menggunakan mode tertentu, mis. \"gdm\" untuk layar masuk"
#: ../src/main.c:391
#: ../src/main.c:389
msgid "List possible modes"
msgstr "Menampilkan mode yang mungkin"

822
po/ja.po

File diff suppressed because it is too large Load Diff

2269
po/kn.po

File diff suppressed because it is too large Load Diff

889
po/ko.po

File diff suppressed because it is too large Load Diff

392
po/lt.po

File diff suppressed because it is too large Load Diff

2306
po/mr.po

File diff suppressed because it is too large Load Diff

2630
po/ms.po

File diff suppressed because it is too large Load Diff

1835
po/ne.po

File diff suppressed because it is too large Load Diff

214
po/or.po
View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-18 07:41+0000\n"
"PO-Revision-Date: 2014-09-18 17:43+0530\n"
"POT-Creation-Date: 2014-08-25 07:37+0000\n"
"PO-Revision-Date: 2014-08-26 16:26+0530\n"
"Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
"Language-Team: Oriya <oriya-it@googlegroups.com>\n"
"Language: or\n"
@ -79,10 +79,16 @@ msgstr ""
"ଅନୁମତି ପ୍ରଦାନ କରନ୍ତୁ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
#| msgid "Uuids of extensions to enable"
msgid "UUIDs of extensions to enable"
msgstr "ସକ୍ରିୟ କରିବା ପାଇଁ ଥିବା ଅନୁଲଗ୍ନଗୁଡ଼ିକର UUID ଗୁଡ଼ିକ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4
#| msgid ""
#| "GNOME Shell extensions have a uuid property; this key lists extensions "
#| "which should be loaded. Any extension that wants to be loaded needs to be "
#| "in this list. You can also manipulate this list with the EnableExtension "
#| "and DisableExtension DBus methods on org.gnome.Shell."
msgid ""
"GNOME Shell extensions have a UUID property; this key lists extensions which "
"should be loaded. Any extension that wants to be loaded needs to be in this "
@ -108,8 +114,8 @@ msgstr ""
"GNOME ସେଲ କେବଳ ଅନୁଲଗ୍ନଗୁଡ଼ିକୁ ଧାରଣ କରିବ ଯାହାକି ପ୍ରଚଳିତ ସଂସ୍କରଣକୁ ସହାୟତା ଦେବା "
"ପାଇଁ ଉଦ୍ଦିଷ୍ଟ।"
"ଏହି ବିକଳ୍ପକୁ ସକ୍ରିୟ କରିବା ଫଳରେ ତାହା ଏହି ଯାଞ୍ଚକୁ ନିଷ୍କ୍ରିୟ କରିବ ଏବଂ ସହାୟତା "
"ପାଇଁ ଉଦ୍ଦିଷ୍ଟ "
"ସଂସ୍କରଣଗୁଡ଼ିକୁ ଅଦେଖା କରି ସମସ୍ତ ଅନୁଲଗ୍ନଗୁଡ଼ିକୁ ଧାରଣ କରିବା ପାଇଁ ଚେଷ୍ଟା କରିବ।"
"ପାଇଁ ଉଦ୍ଦିଷ୍ଟ ସଂସ୍କରଣଗୁଡ଼ିକୁ ଅଦେଖା କରି "
"ସମସ୍ତ ଅନୁଲଗ୍ନଗୁଡ଼ିକୁ ଧାରଣ କରିବା ପାଇଁ ଚେଷ୍ଟା କରିବ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications"
@ -139,10 +145,14 @@ msgid "History for the looking glass dialog"
msgstr "କାଚ ସଂଳାପ ଦେଖିବା ପାଇଁ ପୁରୁଣା ତଥ୍ୟ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
#| msgid "Always show the 'Log out' menuitem in the user menu."
msgid "Always show the 'Log out' menu item in the user menu."
msgstr "ସର୍ବଦା 'ଲଗଆଉଟ' ତାଲିକା ବସ୍ତୁକୁ ବ୍ୟବହାରକାରୀ ତାଲିକାରେ ଦର୍ଶାନ୍ତୁ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#| msgid ""
#| "This key overrides the automatic hiding of the 'Log out' menuitem in "
#| "single-user, single-session situations."
msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations."
@ -198,10 +208,12 @@ msgstr ""
"କାର୍ଯ୍ୟକଳାପ ସମୀକ୍ଷାର \"ପ୍ରୟୋଗଗୁଡ଼ିକୁ ଦର୍ଶାନ୍ତୁ\" ଦୃଶ୍ୟକୁ ଖୋଲିବା ପାଇଁ କି ବନ୍ଧନ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the overview"
msgstr "ସମୀକ୍ଷାକୁ ଖୋଲିବା ପାଇଁ କି ବନ୍ଧନ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the Activities Overview."
msgstr "କାର୍ଯ୍ୟକଳାପ ସମୀକ୍ଷାକୁ ଖୋଲିବା ପାଇଁ କି ବନ୍ଧନ।"
@ -226,8 +238,7 @@ msgid ""
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
msgstr ""
"ଚାଲୁଥିବା ସମସ୍ତ ଟ୍ୱୀନଗୁଡ଼ିକୁ ସ୍ଥିର ରଖିବା ଏବଂ ପୁନଃଚାଳନ କରିବା ପାଇଁ ଥିବା କି "
"ବନ୍ଧନ, ତୃଟି ନିବାରଣ "
"ଉଦ୍ଦେଶ୍ୟରେ"
"ବନ୍ଧନ, ତୃଟି ନିବାରଣ ଉଦ୍ଦେଶ୍ୟରେ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "Which keyboard to use"
@ -272,8 +283,8 @@ msgid ""
"Otherwise, all windows are included."
msgstr ""
"ଯଦି true, ତେବେ କେବଳ ପ୍ରଚଳିତ କାର୍ଯ୍ୟକ୍ଷେତ୍ରରୁ ୱିଣ୍ଡୋଗୁଡ଼ିକ ପରିବର୍ତ୍ତକରେ "
"ଦର୍ଶାଯାଇଥାଏ।ଅନ୍ୟଥା, "
"ସମସ୍ତ ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ଅନ୍ତର୍ଭୁକ୍ତ କରାଯାଇଥାଏ।"
"ଦର୍ଶାଯାଇଥାଏ।"
"ଅନ୍ୟଥା, ସମସ୍ତ ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ଅନ୍ତର୍ଭୁକ୍ତ କରାଯାଇଥାଏ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Attach modal dialog to the parent window"
@ -308,17 +319,18 @@ msgstr ""
msgid "Captive Portal"
msgstr "କେପଟିଭ୍‌ ପୋର୍ଟାଲ"
#: ../js/extensionPrefs/main.js:123
#: ../js/extensionPrefs/main.js:127
#, javascript-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr "%s ପାଇଁ ପସନ୍ଦ ସଂଳାପ ଧାରଣ କରିବା ସମୟରେ ତ୍ରୁଟି:"
#: ../js/extensionPrefs/main.js:155
#: ../js/extensionPrefs/main.js:159
#| msgid "Configure GNOME Shell Extensions"
msgid "GNOME Shell Extensions"
msgstr "GNOME ସେଲ ଅନୁଲଗ୍ନଗୁଡ଼ିକ"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915
msgid "Cancel"
@ -339,6 +351,7 @@ msgid "Sign In"
msgstr "ସାଇନ ଇନ"
#: ../js/gdm/loginDialog.js:269
#| msgid "Switch Session"
msgid "Choose Session"
msgstr "ଅଧିବେଶନ ବାଛନ୍ତୁ"
@ -378,47 +391,50 @@ msgstr "ନିର୍ଦ୍ଦେଶ ବିଶ୍ଲେଷିତ କରିହେ
#: ../js/misc/util.js:156
#, javascript-format
#| msgid "Execution of '%s' failed:"
msgid "Execution of “%s” failed:"
msgstr "“%s” ର ନିଷ୍ପାଦନ ବିଫଳ ହୋଇଛି:"
#: ../js/portalHelper/main.js:85
#| msgid "Authentication Required"
msgid "Web Authentication Redirect"
msgstr "ୱେବ ବୈଧିକରଣ ଦିଗ ପରିବର୍ତ୍ତନ"
#: ../js/ui/appDisplay.js:772
#: ../js/ui/appDisplay.js:660
msgid "Frequently used applications will appear here"
msgstr "ବାରମ୍ବାର ବ୍ୟବହୃତ ପ୍ରୟୋଗଗୁଡ଼ିକ ଏଠାରେ ଦୃଶ୍ୟମାନ ହେବ"
#: ../js/ui/appDisplay.js:883
#: ../js/ui/appDisplay.js:771
msgid "Frequent"
msgstr "ବାରମ୍ବାର"
#: ../js/ui/appDisplay.js:890
#: ../js/ui/appDisplay.js:778
msgid "All"
msgstr "ସମସ୍ତ"
#: ../js/ui/appDisplay.js:1789
#: ../js/ui/appDisplay.js:1650
msgid "New Window"
msgstr "ନୂତନ ୱିଣ୍ଡୋ"
#: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1673 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "ମନପସନ୍ଦଗୁଡ଼ିକ ମଧ୍ଯରୁ କାଢ଼ନ୍ତୁ"
#: ../js/ui/appDisplay.js:1821
#: ../js/ui/appDisplay.js:1679
msgid "Add to Favorites"
msgstr "ମନପସନ୍ଦ ମଧ୍ଯରେ ଯୋଗକରନ୍ତୁ"
#: ../js/ui/appDisplay.js:1830
#: ../js/ui/appDisplay.js:1688
#| msgid "Show Text"
msgid "Show Details"
msgstr "ବିସ୍ତୃତ ବିବରଣୀ ଦର୍ଶାନ୍ତୁ"
#: ../js/ui/appFavorites.js:132
#: ../js/ui/appFavorites.js:122
#, javascript-format
msgid "%s has been added to your favorites."
msgstr "%s କୁ ଆପଣଙ୍କର ମନପସନ୍ଦରେ ଯୋଗ କରାଯାଇଛି।"
#: ../js/ui/appFavorites.js:166
#: ../js/ui/appFavorites.js:156
#, javascript-format
msgid "%s has been removed from your favorites."
msgstr "%s କୁ ମନପସନ୍ଦରୁ ବାହାର କରିଦିଆଯାଇଛି।"
@ -610,11 +626,11 @@ msgstr "%s ସହିତ ଖୋଲନ୍ତୁ"
msgid "Eject"
msgstr "ବାହାର କରନ୍ତୁ"
#: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285
#: ../js/ui/components/keyring.js:93 ../js/ui/components/polkitAgent.js:285
msgid "Password:"
msgstr "ପ୍ରବେଶ ସଙ୍କେତ:"
#: ../js/ui/components/keyring.js:120
#: ../js/ui/components/keyring.js:113
msgid "Type again:"
msgstr "ପୁଣିଥରେ ଲେଖନ୍ତୁ:"
@ -653,6 +669,9 @@ msgstr "ବେତାର ନେଟୱର୍କ ପାଇଁ ପ୍ରାଧିକ
#: ../js/ui/components/networkAgent.js:319
#, javascript-format
#| msgid ""
#| "Passwords or encryption keys are required to access the wireless network "
#| "'%s'."
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
@ -690,6 +709,7 @@ msgstr "ମୋବାଇଲ ବ୍ରୋଡ଼ବ୍ୟାଣ୍ଡ ନେଟୱ
#: ../js/ui/components/networkAgent.js:346
#, javascript-format
#| msgid "A password is required to connect to '%s'."
msgid "A password is required to connect to “%s”."
msgstr "“%s” ସହିତ ସଂଯୁକ୍ତ ହେବା ପାଇଁ ଗୋଟିଏ ପ୍ରବେଶ ସଂକେତ ଆବଶ୍ୟକ।"
@ -745,12 +765,14 @@ msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:960
#| msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgid "Yesterday, %H%M"
msgstr "ଗତକାଲି,%H:%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:967
#| msgid "%A, %B %d"
msgid "%A, %H%M"
msgstr "%A, %H%M"
@ -770,6 +792,8 @@ msgstr "%B %d %Y, %H%M"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:986
#| msgctxt "event list time"
#| msgid "%l:%M %p"
msgid "%l%M %p"
msgstr "%l%M %p"
@ -782,6 +806,7 @@ msgstr "ଗତକାଲି, %l:%M %p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1000
#| msgid "%a %l:%M %p"
msgid "%A, %l%M %p"
msgstr "%A, %l%M %p"
@ -789,6 +814,7 @@ msgstr "%A, %l%M %p"
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1007
#| msgid "%a %b %e, %l:%M %p"
msgid "%B %d, %l%M %p"
msgstr "%B %d, %l%M %p"
@ -796,6 +822,7 @@ msgstr "%B %d, %l%M %p"
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1013
#| msgid "%a %b %e, %l:%M %p"
msgid "%B %d %Y, %l%M %p"
msgstr "%B %d %Y, %l%M %p"
@ -989,7 +1016,7 @@ msgstr "ଖାତା ଦେଖନ୍ତୁ"
msgid "Unknown reason"
msgstr "ଅଜ୍ଞାତ କାରଣ"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228
msgid "Windows"
msgstr "Windows"
@ -1020,87 +1047,91 @@ msgstr "ତାରିଖ ଏବଂ ସମୟ ସେଟିଙ୍ଗ"
msgid "%A %B %e, %Y"
msgstr "%A %B %e, %Y"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:66
#, javascript-format
msgctxt "title"
msgid "Log Out %s"
msgstr "ଲଗଆଉଟ %s"
#: ../js/ui/endSessionDialog.js:65
#: ../js/ui/endSessionDialog.js:67
msgctxt "title"
msgid "Log Out"
msgstr "ଲଗ ଆଉଟ"
#: ../js/ui/endSessionDialog.js:67
#: ../js/ui/endSessionDialog.js:69
#, javascript-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s ସ୍ୱୟଂଚାଳିତ ଭାବରେ %d ସେକଣ୍ଡରେ ଲଗ ଆଉଟ ହେବ।"
msgstr[1] "%s ସ୍ୱୟଂଚାଳିତ ଭାବରେ %d ସେକଣ୍ଡରେ ଲଗ ଆଉଟ ହେବ।"
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:74
#, javascript-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "ଆପଣ ସ୍ୱୟଂଚାଳିତ ଭାବରେ %d ସେକଣ୍ଡରେ ଲଗ ଆଉଟ ହେବ।"
msgstr[1] "ଆପଣ ସ୍ୱୟଂଚାଳିତ ଭାବରେ %d ସେକଣ୍ଡରେ ଲଗ ଆଉଟ ହେବ।"
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:80
msgctxt "button"
msgid "Log Out"
msgstr "ଲଗଆଉଟ"
#: ../js/ui/endSessionDialog.js:84
#: ../js/ui/endSessionDialog.js:86
msgctxt "title"
msgid "Power Off"
msgstr "ବିଦ୍ୟୁତ ପ୍ରବାହ ବନ୍ଦ କରନ୍ତୁ"
#: ../js/ui/endSessionDialog.js:85
#: ../js/ui/endSessionDialog.js:87
#| msgid "Install Updates & Restart"
msgctxt "title"
msgid "Install Updates & Power Off"
msgstr "ଅଦ୍ୟତନଗୁଡ଼ିକୁ ସ୍ଥାପନ କରନ୍ତୁ ଏବଂ ଅଫ୍‌ କରନ୍ତୁ"
#: ../js/ui/endSessionDialog.js:87
#: ../js/ui/endSessionDialog.js:89
#, javascript-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "ତନ୍ତ୍ରଟି ସ୍ୱୟଂଚାଳିତ ଭାବରେ %d ସେକଣ୍ଡରେ ବିଦ୍ୟୁତ ପ୍ରବାହ ବନ୍ଦ ହେବ।"
msgstr[1] "ତନ୍ତ୍ରଟି ସ୍ୱୟଂଚାଳିତ ଭାବରେ %d ସେକଣ୍ଡରେ ବିଦ୍ୟୁତ ପ୍ରବାହ ବନ୍ଦ ହେବ।"
#: ../js/ui/endSessionDialog.js:91
#: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox"
msgid "Install pending software updates"
msgstr "ବଳକା ସଫ୍ଟୱେର ଅଦ୍ୟତନଗୁଡ଼ିକୁ ସ୍ଥାପନ କରନ୍ତୁ"
#: ../js/ui/endSessionDialog.js:94 ../js/ui/endSessionDialog.js:111
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
msgctxt "button"
msgid "Restart"
msgstr "ପୂନଃପ୍ରାରମ୍ଭ କରନ୍ତୁ"
#: ../js/ui/endSessionDialog.js:96
#: ../js/ui/endSessionDialog.js:98
msgctxt "button"
msgid "Power Off"
msgstr "ବିଦ୍ୟୁତ ପ୍ରବାହ ବନ୍ଦ କରନ୍ତୁ"
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:105
msgctxt "title"
msgid "Restart"
msgstr "ପୂନଃପ୍ରାରମ୍ଭ କରନ୍ତୁ"
#: ../js/ui/endSessionDialog.js:105
#: ../js/ui/endSessionDialog.js:107
#, javascript-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "ତନ୍ତ୍ର ସ୍ୱୟଂଚାଳିତ ଭାବରେ %d ସେକଣ୍ଡରେ ପୁନଃପ୍ରାରମ୍ଭ ହେବ।"
msgstr[1] "ତନ୍ତ୍ର ସ୍ୱୟଂଚାଳିତ ଭାବରେ %d ସେକଣ୍ଡରେ ପୁନଃପ୍ରାରମ୍ଭ ହେବ।"
#: ../js/ui/endSessionDialog.js:119
#: ../js/ui/endSessionDialog.js:121
#| msgid "Install Updates & Restart"
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "ପୁନଃଚାଳନ କରନ୍ତୁ ଏବଂ ଅଦ୍ୟତନଗୁଡ଼ିକୁ ସ୍ଥାପନ କରନ୍ତୁ"
#: ../js/ui/endSessionDialog.js:121
#: ../js/ui/endSessionDialog.js:123
#, javascript-format
#| msgid "The system will restart automatically in %d second."
#| msgid_plural "The system will restart automatically in %d seconds."
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
@ -1111,42 +1142,42 @@ msgstr[1] ""
"ତନ୍ତ୍ର ସ୍ୱୟଂଚାଳିତ ଭାବରେ %d ସେକଣ୍ଡରେ ପୁନଃପ୍ରାରମ୍ଭ ହେବ ଏବଂ ଅଦ୍ୟତନଗୁଡ଼ିକୁ ସ୍ଥାପନ "
"କରିବ।"
#: ../js/ui/endSessionDialog.js:127
#: ../js/ui/endSessionDialog.js:129
msgctxt "button"
msgid "Restart &amp; Install"
msgstr "ପୁନଃଚାଳନ କରନ୍ତୁ ଏବଂ ସ୍ଥାପନ କରନ୍ତୁ"
#: ../js/ui/endSessionDialog.js:128
#: ../js/ui/endSessionDialog.js:130
msgctxt "button"
msgid "Install &amp; Power Off"
msgstr "ସ୍ଥାପନ କରନ୍ତୁ ଏବଂ ଅଫ୍‌ କରନ୍ତୁ"
#: ../js/ui/endSessionDialog.js:129
#: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox"
msgid "Power off after updates are installed"
msgstr "ଅଦ୍ୟତନଗୁଡ଼ିକ ସ୍ଥାପିତ ହୋଇସାରିବା ପରେ ଅଫ୍‌ କରନ୍ତୁ"
#: ../js/ui/endSessionDialog.js:338
#: ../js/ui/endSessionDialog.js:315
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"ବ୍ୟାଟେରୀରେ ଚାଲୁଅଛି: ଅଦ୍ୟତନଗୁଡ଼ିକୁ ସ୍ଥାପନ କରିବା ପୂର୍ବରୁ ପ୍ଲଗଇନ୍‌ କରନ୍ତୁ।"
#: ../js/ui/endSessionDialog.js:355
#: ../js/ui/endSessionDialog.js:332
msgid "Some applications are busy or have unsaved work."
msgstr "କିଛି ପ୍ରୟୋଗଗୁଡ଼ିକ ବ୍ୟସ୍ତ ଅଛି କିମ୍ବା ସେଥିରେ କିଛି କାମ ଅସଂରକ୍ଷିତ ଅଛି।"
#: ../js/ui/endSessionDialog.js:362
#: ../js/ui/endSessionDialog.js:339
msgid "Other users are logged in."
msgstr "ଅନ୍ୟ ବ୍ୟବହାରକାରୀମାନେ ଲଗଇନ ହୋଇଛନ୍ତି।"
#. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:640
#: ../js/ui/endSessionDialog.js:619
#, javascript-format
msgid "%s (remote)"
msgstr "%s (ଦୂରବର୍ତ୍ତୀ)"
#. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:643
#: ../js/ui/endSessionDialog.js:622
#, javascript-format
msgid "%s (console)"
msgstr "%s (କୋନସୋଲ)"
@ -1157,10 +1188,11 @@ msgstr "ସ୍ଥାପନ କରନ୍ତୁ"
#: ../js/ui/extensionDownloader.js:204
#, javascript-format
#| msgid "Download and install '%s' from extensions.gnome.org?"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "“%s” କୁ extensions.gnome.org ରୁ ଆହରଣ କରି ସ୍ଥାପନ କରିବେ କି?"
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523
#: ../js/ui/keyboard.js:653 ../js/ui/status/keyboard.js:339
msgid "Keyboard"
msgstr "କିବୋର୍ଡ"
@ -1182,8 +1214,8 @@ msgstr "ତୃଟିଗୁଡ଼ିକୁ ଲୁଚାନ୍ତୁ"
msgid "Show Errors"
msgstr "ତୃଟି ଗୁଡିକୁ ଦର୍ଶାନ୍ତୁ"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71
#: ../js/ui/status/location.js:176
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:166
msgid "Enabled"
msgstr "ସକ୍ରିୟ"
@ -1191,7 +1223,7 @@ msgstr "ସକ୍ରିୟ"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:169
#: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "ନିଷ୍କ୍ରିୟ"
@ -1216,39 +1248,39 @@ msgstr "ଉତ୍ସକୁ ଦେଖନ୍ତୁ"
msgid "Web Page"
msgstr "ୱେବ ପୃଷ୍ଠା"
#: ../js/ui/messageTray.js:1327
#: ../js/ui/messageTray.js:1325
msgid "Open"
msgstr "ଖୋଲନ୍ତୁ"
#: ../js/ui/messageTray.js:1334
#: ../js/ui/messageTray.js:1332
msgid "Remove"
msgstr "ବାହାର କରନ୍ତୁ"
#: ../js/ui/messageTray.js:1631
#: ../js/ui/messageTray.js:1629
msgid "Notifications"
msgstr "ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ"
#: ../js/ui/messageTray.js:1638
#: ../js/ui/messageTray.js:1636
msgid "Clear Messages"
msgstr "ସନ୍ଦେଶଗୁଡ଼ିକୁ ସଫାକରନ୍ତୁ"
#: ../js/ui/messageTray.js:1657
#: ../js/ui/messageTray.js:1655
msgid "Notification Settings"
msgstr "ବିଜ୍ଞପ୍ତି ବିନ୍ୟାସ"
#: ../js/ui/messageTray.js:1710
#: ../js/ui/messageTray.js:1708
msgid "Tray Menu"
msgstr "ଟ୍ରେ ତାଲିକା"
#: ../js/ui/messageTray.js:1934
#: ../js/ui/messageTray.js:1925
msgid "No Messages"
msgstr "କୌଣସି ସନ୍ଦେଶ ନାହିଁ"
#: ../js/ui/messageTray.js:1979
#: ../js/ui/messageTray.js:1963
msgid "Message Tray"
msgstr "ସନ୍ଦେଶ ଟ୍ରେ"
#: ../js/ui/messageTray.js:2992
#: ../js/ui/messageTray.js:2966
msgid "System Information"
msgstr "ତନ୍ତ୍ର ସୂଚନା"
@ -1276,7 +1308,7 @@ msgstr "ସମୀକ୍ଷା"
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters. */
#: ../js/ui/overview.js:246
#: ../js/ui/overview.js:250
msgid "Type to search…"
msgstr "ସନ୍ଧାନ କରିବା ପାଇଁ ଲେଖନ୍ତୁ…"
@ -1307,6 +1339,7 @@ msgid "Close"
msgstr "ବନ୍ଦକରନ୍ତୁ"
#: ../js/ui/runDialog.js:277
#| msgid "Estimating…"
msgid "Restarting…"
msgstr "ପୁନଃଚାଳନ କରୁଅଛି…"
@ -1339,27 +1372,27 @@ msgstr "ତାଲା ପକାଇବାରେ ଅସମର୍ଥ"
msgid "Lock was blocked by an application"
msgstr "ତାଲାଟି ଏକ ପ୍ରୟୋଗ ଦ୍ୱାରା ଅଟକ ହୋଇଛି"
#: ../js/ui/search.js:594
#: ../js/ui/search.js:606
msgid "Searching…"
msgstr "ସନ୍ଧାନ କରୁଅଛି…"
#: ../js/ui/search.js:596
#: ../js/ui/search.js:652
msgid "No results."
msgstr "କୌଣସି ଫଳାଫଳ ନାହିଁ।"
#: ../js/ui/shellEntry.js:25
#: ../js/ui/shellEntry.js:27
msgid "Copy"
msgstr "ନକଲ କରନ୍ତୁ"
#: ../js/ui/shellEntry.js:30
#: ../js/ui/shellEntry.js:32
msgid "Paste"
msgstr "ଲଗାନ୍ତୁ"
#: ../js/ui/shellEntry.js:97
#: ../js/ui/shellEntry.js:99
msgid "Show Text"
msgstr "ପାଠ୍ୟ ଦର୍ଶାନ୍ତୁ"
#: ../js/ui/shellEntry.js:99
#: ../js/ui/shellEntry.js:101
msgid "Hide Text"
msgstr "ପାଠ୍ଯ ଲୁଚାନ୍ତୁ"
@ -1432,12 +1465,14 @@ msgstr "ବ୍ଲୁଟୁଥ ସଂରଚନାଗୁଡ଼ିକ"
#: ../js/ui/status/bluetooth.js:104
#, javascript-format
#| msgid "Connected (private)"
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d ଟି ସଂଯୁକ୍ତ ଉପକରଣ"
msgstr[1] "%d ଟି ସଂଯୁକ୍ତ ଉପକରଣଗୁଡ଼ିକ"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309
#| msgid "Connect"
msgid "Not Connected"
msgstr "ସଂଯୁକ୍ତ ହୋଇନାହିଁ"
@ -1445,28 +1480,26 @@ msgstr "ସଂଯୁକ୍ତ ହୋଇନାହିଁ"
msgid "Brightness"
msgstr "ଉଜ୍ଜ୍ବଳତା"
#: ../js/ui/status/keyboard.js:547
#: ../js/ui/status/keyboard.js:406
msgid "Show Keyboard Layout"
msgstr "କି-ବୋର୍ଡ ବିନ୍ଯାସ ଦର୍ଶାନ୍ତୁ"
#: ../js/ui/status/location.js:65
#: ../js/ui/status/location.js:56
#| msgid "Notifications"
msgid "Location"
msgstr "ଅବସ୍ଥାନ"
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177
#: ../js/ui/status/location.js:63 ../js/ui/status/location.js:167
#| msgid "Disabled"
msgid "Disable"
msgstr "ନିଷ୍କ୍ରିୟ"
#: ../js/ui/status/location.js:73
#| msgid "Power Settings"
msgid "Privacy Settings"
msgstr "ଗୋପନୀୟତା ସେଟିଙ୍ଗ"
#: ../js/ui/status/location.js:176
#: ../js/ui/status/location.js:166
msgid "In Use"
msgstr "ବ୍ଯବହୃତ ହେଉଅଛି"
#: ../js/ui/status/location.js:180
#: ../js/ui/status/location.js:170
#| msgid "Enabled"
msgid "Enable"
msgstr "ସକ୍ରିୟ"
@ -1476,35 +1509,42 @@ msgstr "<unknown>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307
#: ../js/ui/status/network.js:1511
#| msgid "Offline"
msgid "Off"
msgstr "ଅଫ"
#: ../js/ui/status/network.js:459
#| msgid "Connect"
msgid "Connected"
msgstr "ସଂଯୁକ୍ତ"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:463
#| msgid "unmanaged"
msgid "Unmanaged"
msgstr "ଅପରିଚାଳିତ"
#: ../js/ui/status/network.js:465
#| msgid "disconnecting..."
msgid "Disconnecting"
msgstr "ସଂଯୋଗ ବିଚ୍ଛିନ୍ନ କରୁଅଛି"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301
#| msgid "Connection"
msgid "Connecting"
msgstr "ସଂଯୋଗ କରୁଅଛି"
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:474
#| msgid "authentication required"
msgid "Authentication required"
msgstr "ବୈଧିକରଣ ଆବଶ୍ଯକ"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:482
#| msgid "firmware missing"
msgid "Firmware missing"
msgstr "ଫର୍ମୱେର ଅନୁପସ୍ଥିତ ଅଛି"
@ -1519,14 +1559,17 @@ msgid "Connection failed"
msgstr "ସଂଯୋଗ ବିଫଳ ହୋଇଛି"
#: ../js/ui/status/network.js:504
#| msgid "Settings"
msgid "Wired Settings"
msgstr "ତାରମୟ ସଂରଚନା"
#: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624
#| msgid "Mobile broadband"
msgid "Mobile Broadband Settings"
msgstr "ମୋବାଇଲ ବ୍ରୋଡ଼ବ୍ୟାଣ୍ଡ ସଂରଚନା"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
#| msgid "hardware disabled"
msgid "Hardware Disabled"
msgstr "ହାର୍ଡୱେର ନିଷ୍କ୍ରିୟ ଅଛି"
@ -1563,6 +1606,7 @@ msgid "Wi-Fi Networks"
msgstr "ୱାଇ-ଫାଇ ନେଟୱର୍କଗୁଡ଼ିକ"
#: ../js/ui/status/network.js:853
#| msgid "Enable networking"
msgid "Select a network"
msgstr "ଗୋଟିଏ ନେଟୱର୍କ ବାଛନ୍ତୁ"
@ -1579,6 +1623,7 @@ msgid "Select Network"
msgstr "ନେଟୱର୍କ ବାଛନ୍ତୁ"
#: ../js/ui/status/network.js:1179
#| msgid "Settings"
msgid "Wi-Fi Settings"
msgstr "ୱାଇ-ଫାଇ ସଂରଚନା"
@ -1608,6 +1653,7 @@ msgid "Network Settings"
msgstr "ନେଟୱର୍କ ସଂରଚନା"
#: ../js/ui/status/network.js:1482
#| msgid "Settings"
msgid "VPN Settings"
msgstr "VPN ସଂରଚନା"
@ -1658,6 +1704,7 @@ msgid "Airplane Mode"
msgstr "ବିମାନ ଧାରା"
#: ../js/ui/status/rfkill.js:85
#| msgid "Open"
msgid "On"
msgstr "ଅନ୍‌"
@ -1701,16 +1748,17 @@ msgstr "ଅନ୍ୟ ଏକ ଚାଳକ ଭାବରେ ଲଗଇନ କରନ
msgid "Unlock Window"
msgstr "ୱିଣ୍ଡୋକୁ ଖୋଲନ୍ତୁ"
#: ../js/ui/viewSelector.js:158
#: ../js/ui/viewSelector.js:232
msgid "Applications"
msgstr "ପ୍ରୟୋଗଗୁଡ଼ିକ"
#: ../js/ui/viewSelector.js:162
#: ../js/ui/viewSelector.js:236
msgid "Search"
msgstr "ସନ୍ଧାନ କରନ୍ତୁ"
#: ../js/ui/windowAttentionHandler.js:19
#, javascript-format
#| msgid "'%s' is ready"
msgid "“%s” is ready"
msgstr "“%s” ପ୍ରସ୍ତୁତ ଅଛି"
@ -1722,6 +1770,7 @@ msgstr "ଆପଣ ଏହି ପ୍ରଦର୍ଶନୀ ସଂରଚନାକୁ
#. to avoid ellipsizing the labels.
#. */
#: ../js/ui/windowManager.js:84
#| msgid "Power Settings"
msgid "Revert Settings"
msgstr "ସଂରଚନାକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"
@ -1802,24 +1851,25 @@ msgstr[1] "%u ନିବେଶଗୁଡ଼ିକ"
msgid "System Sounds"
msgstr "ତନ୍ତ୍ର ଧ୍ୱନି"
#: ../src/main.c:373
#: ../src/main.c:371
msgid "Print version"
msgstr "ମୁଦ୍ରଣ ସଂସ୍କରଣ"
#: ../src/main.c:379
#: ../src/main.c:377
msgid "Mode used by GDM for login screen"
msgstr "ଲଗଇନ ପରଦା ପାଇଁ ବ୍ୟବହୃତ GDM"
#: ../src/main.c:385
#: ../src/main.c:383
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ଧାରା ବ୍ୟବହାର କରନ୍ତୁ, ଯେପରିକି ଲଗଇନ ପରଦା ପାଇଁ \"gdm\""
#: ../src/main.c:391
#: ../src/main.c:389
msgid "List possible modes"
msgstr "ସମ୍ଭାବ୍ୟ ଧାରାଗୁଡ଼ିକୁ ତାଲିକାଭୁକ୍ତ କରନ୍ତୁ"
#: ../src/shell-app.c:666
#, c-format
#| msgid "Failed to launch '%s'"
msgid "Failed to launch “%s”"
msgstr "“%s” କୁ ଆରମ୍ଭ କରିବାରେ ବିଫଳ"

443
po/pa.po

File diff suppressed because it is too large Load Diff

280
po/pl.po
View File

@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-09-12 23:49+0200\n"
"PO-Revision-Date: 2014-09-12 23:50+0200\n"
"POT-Creation-Date: 2014-09-03 16:10+0200\n"
"PO-Revision-Date: 2014-09-03 16:15+0200\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <gnomepl@aviary.pl>\n"
"Language: pl\n"
@ -312,18 +312,18 @@ msgstr ""
msgid "Captive Portal"
msgstr "Brama przechwytująca"
#: ../js/extensionPrefs/main.js:123
#: ../js/extensionPrefs/main.js:127
#, javascript-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr ""
"Wystąpił błąd podczas wczytywania okna preferencji dla rozszerzenia %s:"
#: ../js/extensionPrefs/main.js:155
#: ../js/extensionPrefs/main.js:159
msgid "GNOME Shell Extensions"
msgstr "Rozszerzenia powłoki GNOME"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915
msgid "Cancel"
@ -347,23 +347,15 @@ msgstr "Zaloguj"
msgid "Choose Session"
msgstr "Wybór sesji"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:429
msgid "Not listed?"
msgstr "Inny użytkownik?"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:614
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(np. użytkownik lub %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287
msgid "Username: "
@ -377,11 +369,6 @@ msgstr "Okno logowania"
msgid "Authentication error"
msgstr "Błąd uwierzytelniania"
#. We don't show fingerprint messages directly since it's
#. not the main auth service. Instead we use the messages
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:453
msgid "(or swipe finger)"
msgstr "(lub przeciągnięcie palca)"
@ -390,8 +377,6 @@ msgstr "(lub przeciągnięcie palca)"
msgid "Command not found"
msgstr "Nie odnaleziono polecenia"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:148
msgid "Could not parse command:"
msgstr "Nie można przetworzyć polecenia:"
@ -401,8 +386,6 @@ msgstr "Nie można przetworzyć polecenia:"
msgid "Execution of “%s” failed:"
msgstr "Wykonanie polecenia \"%s\" się nie powiodło:"
#. TRANSLATORS: this is the title of the wifi captive portal login
#. window, until we know the title of the actual login page
#: ../js/portalHelper/main.js:85
msgid "Web Authentication Redirect"
msgstr "Przekierowanie uwierzytelniania WWW"
@ -419,19 +402,19 @@ msgstr "Często używane"
msgid "All"
msgstr "Wszystkie"
#: ../js/ui/appDisplay.js:1789
#: ../js/ui/appDisplay.js:1788
msgid "New Window"
msgstr "Nowe okno"
#: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1814 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Usuń z ulubionych"
#: ../js/ui/appDisplay.js:1821
#: ../js/ui/appDisplay.js:1820
msgid "Add to Favorites"
msgstr "Dodaj do ulubionych"
#: ../js/ui/appDisplay.js:1830
#: ../js/ui/appDisplay.js:1829
msgid "Show Details"
msgstr "Wyświetl szczegóły"
@ -456,14 +439,14 @@ msgstr "Zmień tło…"
#. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters
#.
#. */
#: ../js/ui/calendar.js:67
msgctxt "event list time"
msgid "All Day"
msgstr "Cały dzień"
#. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to :
#. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:73
msgctxt "event list time"
msgid "%H%M"
@ -471,7 +454,7 @@ msgstr "%H%M"
#. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space
#. a thin space */
#: ../js/ui/calendar.js:82
msgctxt "event list time"
msgid "%l%M%p"
@ -481,43 +464,43 @@ msgstr "%l%M%p"
#. *
#. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S".
#.
#. */
#: ../js/ui/calendar.js:113
msgctxt "grid sunday"
msgid "S"
msgstr "N"
#. Translators: Calendar grid abbreviation for Monday
#. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:115
msgctxt "grid monday"
msgid "M"
msgstr "P"
#. Translators: Calendar grid abbreviation for Tuesday
#. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:117
msgctxt "grid tuesday"
msgid "T"
msgstr "W"
#. Translators: Calendar grid abbreviation for Wednesday
#. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:119
msgctxt "grid wednesday"
msgid "W"
msgstr "Ś"
#. Translators: Calendar grid abbreviation for Thursday
#. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:121
msgctxt "grid thursday"
msgid "T"
msgstr "C"
#. Translators: Calendar grid abbreviation for Friday
#. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:123
msgctxt "grid friday"
msgid "F"
msgstr "P"
#. Translators: Calendar grid abbreviation for Saturday
#. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:125
msgctxt "grid saturday"
msgid "S"
@ -528,43 +511,43 @@ msgstr "S"
#. * NOTE: These list abbreviations are normally not shown together
#. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T').
#.
#. */
#: ../js/ui/calendar.js:138
msgctxt "list sunday"
msgid "Su"
msgstr "N"
#. Translators: Event list abbreviation for Monday
#. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:140
msgctxt "list monday"
msgid "M"
msgstr "Po"
#. Translators: Event list abbreviation for Tuesday
#. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:142
msgctxt "list tuesday"
msgid "T"
msgstr "W"
#. Translators: Event list abbreviation for Wednesday
#. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:144
msgctxt "list wednesday"
msgid "W"
msgstr "Ś"
#. Translators: Event list abbreviation for Thursday
#. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:146
msgctxt "list thursday"
msgid "Th"
msgstr "C"
#. Translators: Event list abbreviation for Friday
#. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:148
msgctxt "list friday"
msgid "F"
msgstr "Pi"
#. Translators: Event list abbreviation for Saturday
#. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:150
msgctxt "list saturday"
msgid "S"
@ -578,18 +561,18 @@ msgstr "Poprzedni miesiąc"
msgid "Next month"
msgstr "Następny miesiąc"
#. Translators: Text to show if there are no events
#. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:781
msgid "Nothing Scheduled"
msgstr "Nic nie zaplanowano"
#. Translators: Shown on calendar heading when selected day occurs on current year
#. Translators: Shown on calendar heading when selected day occurs on current year */
#: ../js/ui/calendar.js:799
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %e %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#. Translators: Shown on calendar heading when selected day occurs on different year */
#: ../js/ui/calendar.js:802
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
@ -632,11 +615,11 @@ msgstr "Otwórz za pomocą %s"
msgid "Eject"
msgstr "Wysuń"
#: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285
#: ../js/ui/components/keyring.js:93 ../js/ui/components/polkitAgent.js:285
msgid "Password:"
msgstr "Hasło:"
#: ../js/ui/components/keyring.js:120
#: ../js/ui/components/keyring.js:113
msgid "Type again:"
msgstr "Proszę wpisać ponownie:"
@ -645,7 +628,6 @@ msgstr "Proszę wpisać ponownie:"
msgid "Connect"
msgstr "Połącz"
#. Cisco LEAP
#: ../js/ui/components/networkAgent.js:231
#: ../js/ui/components/networkAgent.js:243
#: ../js/ui/components/networkAgent.js:271
@ -654,7 +636,6 @@ msgstr "Połącz"
msgid "Password: "
msgstr "Hasło: "
#. static WEP
#: ../js/ui/components/networkAgent.js:236
msgid "Key: "
msgstr "Klucz: "
@ -732,23 +713,19 @@ msgstr "Uwierzytelnij"
#. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#. * for instance. */
#: ../js/ui/components/polkitAgent.js:271 ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again."
msgstr "To nie zadziałało. Proszę spróbować ponownie."
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
#: ../js/ui/components/telepathyClient.js:240
msgid "Invitation"
msgstr "Zaproszenie"
#. We got the TpContact
#: ../js/ui/components/telepathyClient.js:300
msgid "Call"
msgstr "Rozmowa"
#. We got the TpContact
#: ../js/ui/components/telepathyClient.js:316
msgid "File Transfer"
msgstr "Przesłanie pliku"
@ -765,85 +742,77 @@ msgstr "Anuluj wyciszenie"
msgid "Mute"
msgstr "Wycisz"
#. Translators: Time in 24h format
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:953
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30"
#. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:960
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "Wczoraj o %H%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30"
#. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:967
#, no-c-format
msgid "%A, %H%M"
msgstr "%A, %H%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30"
#. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:974
#, no-c-format
msgid "%B %d, %H%M"
msgstr "%d %B, %H%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30"
#. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:980
#, no-c-format
msgid "%B %d %Y, %H%M"
msgstr "%d %B %Y, %H%M"
#. Translators: Time in 24h format
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:986
msgid "%l%M %p"
msgstr "%l%M%p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:993
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "Wczoraj o %l%M %p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm"
#. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1000
#, no-c-format
msgid "%A, %l%M %p"
msgstr "%A, %l%M%p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm"
#. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1007
#, no-c-format
msgid "%B %d, %l%M %p"
msgstr "%d %B, %l%M %p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"
#. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1013
#, no-c-format
msgid "%B %d %Y, %l%M %p"
msgstr "%d %B %Y, %l%M %p"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#. IM name. */
#: ../js/ui/components/telepathyClient.js:1045
#, javascript-format
msgid "%s is now known as %s"
msgstr "Użytkownik %s jest teraz znany jako %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1149
#, javascript-format
msgid "Invitation to %s"
@ -851,7 +820,7 @@ msgstr "Zaproszenie do pokoju %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1157
#, javascript-format
msgid "%s is inviting you to join %s"
@ -870,19 +839,19 @@ msgstr "Odmów"
msgid "Accept"
msgstr "Zaakceptuj"
#. translators: argument is a contact name like Alice for example.
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1184
#, javascript-format
msgid "Video call from %s"
msgstr "Wideorozmowa z użytkownikiem %s"
#. translators: argument is a contact name like Alice for example.
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1187
#, javascript-format
msgid "Call from %s"
msgstr "Rozmowa z użytkownikiem %s"
#. translators: this is a button label (verb), not a noun
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1201
msgid "Answer"
msgstr "Odbierz"
@ -891,13 +860,13 @@ msgstr "Odbierz"
#. * the contact's alias and the second one is the
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#. */
#: ../js/ui/components/telepathyClient.js:1222
#, javascript-format
msgid "%s is sending you %s"
msgstr "Użytkownik %s przysyła plik %s"
#. To translators: The parameter is the contact's alias
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1251
#, javascript-format
msgid "%s would like permission to see when you are online"
@ -1009,7 +978,7 @@ msgid "Internal error"
msgstr "Błąd wewnętrzny"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1393
#, javascript-format
msgid "Unable to connect to %s"
@ -1023,7 +992,7 @@ msgstr "Wyświetl konto"
msgid "Unknown reason"
msgstr "Nieznana przyczyna"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:159
msgid "Windows"
msgstr "Okna"
@ -1031,8 +1000,6 @@ msgstr "Okna"
msgid "Show Applications"
msgstr "Wyświetl programy"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:445
msgid "Dash"
msgstr "Ulubione"
@ -1051,23 +1018,23 @@ msgstr "Ustawienia daty i czasu"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#. */
#: ../js/ui/dateMenu.js:204
msgid "%A %B %e, %Y"
msgstr "%A, %e %B %Y"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:66
#, javascript-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Wylogowanie użytkownika %s"
#: ../js/ui/endSessionDialog.js:65
#: ../js/ui/endSessionDialog.js:67
msgctxt "title"
msgid "Log Out"
msgstr "Wylogowanie"
#: ../js/ui/endSessionDialog.js:67
#: ../js/ui/endSessionDialog.js:69
#, javascript-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
@ -1075,7 +1042,7 @@ msgstr[0] "Użytkownik %s zostanie wylogowany za %d sekundę."
msgstr[1] "Użytkownik %s zostanie wylogowany za %d sekundy."
msgstr[2] "Użytkownik %s zostanie wylogowany za %d sekund."
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:74
#, javascript-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
@ -1083,22 +1050,22 @@ msgstr[0] "Wylogowanie nastąpi za %d sekundę."
msgstr[1] "Wylogowanie nastąpi za %d sekundy."
msgstr[2] "Wylogowanie nastąpi za %d sekund."
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:80
msgctxt "button"
msgid "Log Out"
msgstr "Wyloguj"
#: ../js/ui/endSessionDialog.js:84
#: ../js/ui/endSessionDialog.js:86
msgctxt "title"
msgid "Power Off"
msgstr "Wyłączenie komputera"
#: ../js/ui/endSessionDialog.js:85
#: ../js/ui/endSessionDialog.js:87
msgctxt "title"
msgid "Install Updates & Power Off"
msgstr "Instalacja aktualizacji i wyłączenie komputera"
#: ../js/ui/endSessionDialog.js:87
#: ../js/ui/endSessionDialog.js:89
#, javascript-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
@ -1106,27 +1073,27 @@ msgstr[0] "Wyłączenie komputera nastąpi za %d sekundę."
msgstr[1] "Wyłączenie komputera nastąpi za %d sekundy."
msgstr[2] "Wyłączenie komputera nastąpi za %d sekund."
#: ../js/ui/endSessionDialog.js:91
#: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox"
msgid "Install pending software updates"
msgstr "Instalowanie oczekujących aktualizacji oprogramowania"
#: ../js/ui/endSessionDialog.js:94 ../js/ui/endSessionDialog.js:111
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
msgctxt "button"
msgid "Restart"
msgstr "Uruchom ponownie"
#: ../js/ui/endSessionDialog.js:96
#: ../js/ui/endSessionDialog.js:98
msgctxt "button"
msgid "Power Off"
msgstr "Wyłącz komputer"
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:105
msgctxt "title"
msgid "Restart"
msgstr "Ponowne uruchomienie"
#: ../js/ui/endSessionDialog.js:105
#: ../js/ui/endSessionDialog.js:107
#, javascript-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
@ -1134,12 +1101,12 @@ msgstr[0] "Ponowne uruchomienie systemu nastąpi za %d sekundę."
msgstr[1] "Ponowne uruchomienie systemu nastąpi za %d sekundy."
msgstr[2] "Ponowne uruchomienie systemu nastąpi za %d sekund."
#: ../js/ui/endSessionDialog.js:119
#: ../js/ui/endSessionDialog.js:121
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Ponowne uruchomienie i instalacja aktualizacji"
#: ../js/ui/endSessionDialog.js:121
#: ../js/ui/endSessionDialog.js:123
#, javascript-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
@ -1151,43 +1118,43 @@ msgstr[1] ""
msgstr[2] ""
"Ponowne uruchomienie systemu i instalacja aktualizacji nastąpi za %d sekund."
#: ../js/ui/endSessionDialog.js:127
#: ../js/ui/endSessionDialog.js:129
msgctxt "button"
msgid "Restart &amp; Install"
msgstr "Uruchom ponownie i zainstaluj"
#: ../js/ui/endSessionDialog.js:128
#: ../js/ui/endSessionDialog.js:130
msgctxt "button"
msgid "Install &amp; Power Off"
msgstr "Zainstaluj i wyłącz komputer"
#: ../js/ui/endSessionDialog.js:129
#: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox"
msgid "Power off after updates are installed"
msgstr "Wyłączenie komputera po zainstalowaniu aktualizacji"
#: ../js/ui/endSessionDialog.js:338
#: ../js/ui/endSessionDialog.js:315
msgid "Running on battery power: please plug in before installing updates."
msgstr ""
"Działanie na zasilaniu z akumulatora: proszę podłączyć komputer do prądu "
"przed instalowaniem aktualizacji."
#: ../js/ui/endSessionDialog.js:355
#: ../js/ui/endSessionDialog.js:332
msgid "Some applications are busy or have unsaved work."
msgstr "Niektóre programy są używane lub posiadają niezapisane dane."
#: ../js/ui/endSessionDialog.js:362
#: ../js/ui/endSessionDialog.js:339
msgid "Other users are logged in."
msgstr "Inni użytkownicy są zalogowani."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/endSessionDialog.js:640
#. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:619
#, javascript-format
msgid "%s (remote)"
msgstr "%s (zdalnie)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/endSessionDialog.js:643
#. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:622
#, javascript-format
msgid "%s (console)"
msgstr "%s (konsola)"
@ -1202,7 +1169,7 @@ msgid "Download and install “%s” from extensions.gnome.org?"
msgstr ""
"Pobrać i zainstalować rozszerzenie \"%s\" z witryny extensions.gnome.org?"
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:339
msgid "Keyboard"
msgstr "Klawiatura"
@ -1210,7 +1177,7 @@ msgstr "Klawiatura"
msgid "No extensions installed"
msgstr "Nie zainstalowano rozszerzeń"
#. Translators: argument is an extension UUID.
#. Translators: argument is an extension UUID. */
#: ../js/ui/lookingGlass.js:697
#, javascript-format
msgid "%s has not emitted any errors."
@ -1224,16 +1191,16 @@ msgstr "Ukryj błędy"
msgid "Show Errors"
msgstr "Wyświetl błędy"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71
#: ../js/ui/status/location.js:176
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:166
msgid "Enabled"
msgstr "Włączone"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode)
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:169
#: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Wyłączone"
@ -1318,8 +1285,8 @@ msgstr "Podgląd"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters.
#: ../js/ui/overview.js:246
#. characters. */
#: ../js/ui/overview.js:250
msgid "Type to search…"
msgstr "Wyszukiwanie…"
@ -1328,7 +1295,7 @@ msgid "Quit"
msgstr "Zakończ"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#. in your language, you can use the word for "Overview". */
#: ../js/ui/panel.js:567
msgid "Activities"
msgstr "Podgląd"
@ -1337,11 +1304,6 @@ msgstr "Podgląd"
msgid "Top Bar"
msgstr "Górny pasek"
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:269
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1359,7 +1321,7 @@ msgid "Restarting…"
msgstr "Ponowne uruchamianie…"
#. Translators: This is a time format for a date in
#. long format
#. long format */
#: ../js/ui/screenShield.js:88
msgid "%A, %B %d"
msgstr "%A, %e %B"
@ -1380,13 +1342,6 @@ msgstr "Zablokuj ekran"
msgid "GNOME needs to lock the screen"
msgstr "Środowisko GNOME musi zablokować ekran"
#. We could not become modal, so we can't activate the
#. screenshield. The user is probably very upset at this
#. point, but any application using global grabs is broken
#. Just tell him to stop using this app
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304
msgid "Unable to lock"
msgstr "Nie można zablokować"
@ -1395,27 +1350,27 @@ msgstr "Nie można zablokować"
msgid "Lock was blocked by an application"
msgstr "Blokowanie zostało zablokowane przez program"
#: ../js/ui/search.js:594
#: ../js/ui/search.js:557
msgid "Searching…"
msgstr "Wyszukiwanie…"
#: ../js/ui/search.js:596
#: ../js/ui/search.js:598
msgid "No results."
msgstr "Brak wyników."
#: ../js/ui/shellEntry.js:25
#: ../js/ui/shellEntry.js:27
msgid "Copy"
msgstr "Skopiuj"
#: ../js/ui/shellEntry.js:30
#: ../js/ui/shellEntry.js:32
msgid "Paste"
msgstr "Wklej"
#: ../js/ui/shellEntry.js:97
#: ../js/ui/shellEntry.js:99
msgid "Show Text"
msgstr "Wyświetl tekst"
#: ../js/ui/shellEntry.js:99
#: ../js/ui/shellEntry.js:101
msgid "Hide Text"
msgstr "Ukryj tekst"
@ -1471,8 +1426,6 @@ msgstr "Wysoki kontrast"
msgid "Large Text"
msgstr "Duży tekst"
#. The Bluetooth menu only appears when Bluetooth is in use,
#. so just statically build it with a "Turn Off" menu item.
#: ../js/ui/status/bluetooth.js:49
msgid "Bluetooth"
msgstr "Bluetooth"
@ -1504,27 +1457,23 @@ msgstr "Nie połączono"
msgid "Brightness"
msgstr "Jasność"
#: ../js/ui/status/keyboard.js:547
#: ../js/ui/status/keyboard.js:406
msgid "Show Keyboard Layout"
msgstr "Wyświetl układ klawiatury"
#: ../js/ui/status/location.js:65
#: ../js/ui/status/location.js:56
msgid "Location"
msgstr "Położenie"
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177
#: ../js/ui/status/location.js:63 ../js/ui/status/location.js:167
msgid "Disable"
msgstr "Wyłącz"
#: ../js/ui/status/location.js:73
msgid "Privacy Settings"
msgstr "Ustawienia prywatności"
#: ../js/ui/status/location.js:176
#: ../js/ui/status/location.js:166
msgid "In Use"
msgstr "Używane"
#: ../js/ui/status/location.js:180
#: ../js/ui/status/location.js:170
msgid "Enable"
msgstr "Włącz"
@ -1542,7 +1491,7 @@ msgid "Connected"
msgstr "Połączono"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:463
msgid "Unmanaged"
msgstr "Niezarządzane"
@ -1555,19 +1504,19 @@ msgstr "Rozłączanie"
msgid "Connecting"
msgstr "Łączenie"
#. 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:474
msgid "Authentication required"
msgstr "Wymagane jest uwierzytelnienie"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#. module, which is missing */
#: ../js/ui/status/network.js:482
msgid "Firmware missing"
msgstr "Brak oprogramowania sprzętowego"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:486
msgid "Unavailable"
msgstr "Niedostępne"
@ -1652,7 +1601,7 @@ msgstr "Hotspot jest aktywny"
msgid "connecting..."
msgstr "łączenie…"
#. 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:1412
msgid "authentication required"
msgstr "wymagane jest uwierzytelnienie"
@ -1689,19 +1638,15 @@ msgstr "Ustawienia zasilania"
msgid "Fully Charged"
msgstr "Naładowany"
#. 0 is reported when UPower does not have enough data
#. to estimate battery life
#: ../js/ui/status/power.js:72 ../js/ui/status/power.js:78
msgid "Estimating…"
msgstr "Obliczanie…"
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
#: ../js/ui/status/power.js:86
#, javascript-format
msgid "%d%02d Remaining (%d%%)"
msgstr "Pozostało: %d%02d (%d%%)"
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
#: ../js/ui/status/power.js:91
#, javascript-format
msgid "%d%02d Until Full (%d%%)"
@ -1715,9 +1660,6 @@ msgstr "Urządzenie UPS"
msgid "Battery"
msgstr "Akumulator"
#. The menu only appears when airplane mode is on, so just
#. statically build it as if it was on, rather than dynamically
#. changing the menu contents.
#: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode"
msgstr "Tryb samolotowy"
@ -1766,11 +1708,11 @@ msgstr "Zaloguj jako inny użytkownik"
msgid "Unlock Window"
msgstr "Okno odblokowania"
#: ../js/ui/viewSelector.js:158
#: ../js/ui/viewSelector.js:163
msgid "Applications"
msgstr "Programy"
#: ../js/ui/viewSelector.js:162
#: ../js/ui/viewSelector.js:167
msgid "Search"
msgstr "Wyszukiwanie"
@ -1785,7 +1727,7 @@ msgstr "Zachować te ustawienia ekranu?"
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#. */
#: ../js/ui/windowManager.js:84
msgid "Revert Settings"
msgstr "Przywróć ustawienia"
@ -1870,19 +1812,19 @@ msgstr[2] "%u wejść"
msgid "System Sounds"
msgstr "Dźwięki systemowe"
#: ../src/main.c:373
#: ../src/main.c:371
msgid "Print version"
msgstr "Wyświetla wersję"
#: ../src/main.c:379
#: ../src/main.c:377
msgid "Mode used by GDM for login screen"
msgstr "Tryb używany przez GDM dla ekranu logowania"
#: ../src/main.c:385
#: ../src/main.c:383
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Używa podanego trybu, np. \"gdm\" dla ekranu logowania"
#: ../src/main.c:391
#: ../src/main.c:389
msgid "List possible modes"
msgstr "Wyświetla listę możliwych trybów"

File diff suppressed because it is too large Load Diff

444
po/ru.po

File diff suppressed because it is too large Load Diff

942
po/sk.po

File diff suppressed because it is too large Load Diff

513
po/sl.po

File diff suppressed because it is too large Load Diff

650
po/sv.po

File diff suppressed because it is too large Load Diff

1445
po/ta.po

File diff suppressed because it is too large Load Diff

491
po/tr.po

File diff suppressed because it is too large Load Diff

1063
po/uk.po

File diff suppressed because it is too large Load Diff

View File

@ -102,6 +102,7 @@ shell_public_headers_h = \
shell-util.h \
shell-window-tracker.h \
shell-wm.h \
shell-wobbly-effect.h \
$(NULL)
if HAVE_NETWORKMANAGER
@ -167,6 +168,7 @@ libgnome_shell_sources = \
shell-util.c \
shell-window-tracker.c \
shell-wm.c \
shell-wobbly-effect.c \
$(NULL)
libgnome_shell_built_sources = \

View File

@ -424,10 +424,7 @@ main (int argc, char **argv)
meta_set_wm_name (WM_NAME);
meta_set_gnome_wm_keybindings (GNOME_WM_KEYBINDINGS);
/* Prevent meta_init() from causing gtk to load the atk-bridge*/
g_setenv ("NO_AT_BRIDGE", "1", TRUE);
meta_init ();
g_unsetenv ("NO_AT_BRIDGE");
/* FIXME: Add gjs API to set this stuff and don't depend on the
* environment. These propagate to child processes.

View File

@ -735,21 +735,14 @@ shell_global_get_display (ShellGlobal *global)
*
* Gets the list of #MetaWindowActor for the plugin's screen
*
* Return value: (element-type Meta.WindowActor) (transfer container): the list of windows
* Return value: (element-type Meta.WindowActor) (transfer none): the list of windows
*/
GList *
shell_global_get_window_actors (ShellGlobal *global)
{
GList *filtered = NULL;
GList *l;
g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL);
for (l = meta_get_window_actors (global->meta_screen); l; l = l->next)
if (!meta_window_actor_is_destroyed (l->data))
filtered = g_list_prepend (filtered, l->data);
return g_list_reverse (filtered);
return meta_get_window_actors (global->meta_screen);
}
static void

216
src/shell-wobbly-effect.c Normal file
View File

@ -0,0 +1,216 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2014 Endless Mobile
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Written by:
* Jasper St. Pierre <jstpierre@mecheye.net>
*/
#include "config.h"
#include "shell-wobbly-effect.h"
struct _ShellWobblyEffectPrivate
{
int bend_x;
int tex_width, tex_height;
CoglPipeline *pipeline;
int tex_width_uniform;
int bend_x_uniform;
};
typedef struct _ShellWobblyEffectPrivate ShellWobblyEffectPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (ShellWobblyEffect, shell_wobbly_effect, CLUTTER_TYPE_OFFSCREEN_EFFECT);
static const gchar *wobbly_decls =
"uniform int tex_width;\n"
"uniform int bend_x;\n";
static const gchar *wobbly_pre =
"float bend_x_coord = (float(bend_x) / tex_width);\n"
"float interp = (1 - cos(cogl_tex_coord.y * 3.1415926)) / 2;\n"
"cogl_tex_coord.x -= (interp * bend_x_coord);\n";
/* XXX - clutter_effect_get_paint_volume is fucking terrible
* and I want to kill myself */
static gboolean
shell_wobbly_effect_get_paint_volume (ClutterEffect *effect,
ClutterPaintVolume *volume)
{
ShellWobblyEffect *self = SHELL_WOBBLY_EFFECT (effect);
ShellWobblyEffectPrivate *priv = shell_wobbly_effect_get_instance_private (self);
float cur_width;
cur_width = clutter_paint_volume_get_width (volume);
cur_width += ABS (priv->bend_x);
clutter_paint_volume_set_width (volume, cur_width);
/* Also modify the origin if it bends to the left. */
if (priv->bend_x < 0)
{
ClutterVertex origin;
clutter_paint_volume_get_origin (volume, &origin);
origin.x += priv->bend_x;
clutter_paint_volume_set_origin (volume, &origin);
}
return TRUE;
}
static gboolean
shell_wobbly_effect_pre_paint (ClutterEffect *effect)
{
ShellWobblyEffect *self = SHELL_WOBBLY_EFFECT (effect);
ShellWobblyEffectPrivate *priv = shell_wobbly_effect_get_instance_private (self);
if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (effect)))
return FALSE;
/* If we're not doing any bending, we're not needed. */
if (priv->bend_x == 0)
return FALSE;
if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
{
/* if we don't have support for GLSL shaders then we
* forcibly disable the ActorMeta
*/
g_warning ("Unable to use the ShellWobblyEffect: the "
"graphics hardware or the current GL driver does not "
"implement support for the GLSL shading language. The "
"effect will be disabled.");
clutter_actor_meta_set_enabled (CLUTTER_ACTOR_META (effect), FALSE);
return FALSE;
}
if (!CLUTTER_EFFECT_CLASS (shell_wobbly_effect_parent_class)->pre_paint (effect))
return FALSE;
ClutterOffscreenEffect *offscreen_effect = CLUTTER_OFFSCREEN_EFFECT (effect);
CoglObject *texture;
texture = clutter_offscreen_effect_get_texture (offscreen_effect);
cogl_pipeline_set_layer_texture (priv->pipeline, 0, texture);
priv->tex_width = cogl_texture_get_width (texture);
priv->tex_height = cogl_texture_get_height (texture);
cogl_pipeline_set_uniform_1i (priv->pipeline, priv->tex_width_uniform, priv->tex_width);
return TRUE;
}
static void
shell_wobbly_effect_paint_target (ClutterOffscreenEffect *effect)
{
ShellWobblyEffect *self = SHELL_WOBBLY_EFFECT (effect);
ShellWobblyEffectPrivate *priv = shell_wobbly_effect_get_instance_private (self);
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
ClutterActor *actor;
guint8 paint_opacity;
actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (effect));
paint_opacity = clutter_actor_get_paint_opacity (actor);
cogl_pipeline_set_color4ub (priv->pipeline,
paint_opacity,
paint_opacity,
paint_opacity,
paint_opacity);
cogl_framebuffer_draw_rectangle (fb, priv->pipeline,
0, 0, priv->tex_width, priv->tex_height);
}
static void
shell_wobbly_effect_dispose (GObject *object)
{
ShellWobblyEffect *self = SHELL_WOBBLY_EFFECT (object);
ShellWobblyEffectPrivate *priv = shell_wobbly_effect_get_instance_private (self);
g_clear_pointer (&priv->pipeline, cogl_object_unref);
G_OBJECT_CLASS (shell_wobbly_effect_parent_class)->dispose (object);
}
static void
shell_wobbly_effect_class_init (ShellWobblyEffectClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
ClutterEffectClass *effect_class = CLUTTER_EFFECT_CLASS (klass);
ClutterOffscreenEffectClass *offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
offscreen_class->paint_target = shell_wobbly_effect_paint_target;
effect_class->pre_paint = shell_wobbly_effect_pre_paint;
effect_class->get_paint_volume = shell_wobbly_effect_get_paint_volume;
object_class->dispose = shell_wobbly_effect_dispose;
}
static void
update_uniforms (ShellWobblyEffect *self)
{
ShellWobblyEffectPrivate *priv = shell_wobbly_effect_get_instance_private (self);
cogl_pipeline_set_uniform_1i (priv->pipeline, priv->bend_x_uniform, priv->bend_x);
}
static void
shell_wobbly_effect_init (ShellWobblyEffect *self)
{
static CoglPipeline *pipeline_template;
ShellWobblyEffectPrivate *priv = shell_wobbly_effect_get_instance_private (self);
if (G_UNLIKELY (pipeline_template == NULL))
{
CoglSnippet *snippet;
CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
pipeline_template = cogl_pipeline_new (ctx);
snippet = cogl_snippet_new (COGL_SNIPPET_HOOK_TEXTURE_LOOKUP, wobbly_decls, NULL);
cogl_snippet_set_pre (snippet, wobbly_pre);
cogl_pipeline_add_layer_snippet (pipeline_template, 0, snippet);
cogl_object_unref (snippet);
cogl_pipeline_set_layer_null_texture (pipeline_template,
0, /* layer number */
COGL_TEXTURE_TYPE_2D);
}
priv->pipeline = cogl_pipeline_copy (pipeline_template);
priv->tex_width_uniform = cogl_pipeline_get_uniform_location (priv->pipeline, "tex_width");
priv->bend_x_uniform = cogl_pipeline_get_uniform_location (priv->pipeline, "bend_x");
update_uniforms (self);
}
void
shell_wobbly_effect_set_bend_x (ShellWobblyEffect *self,
int bend_x)
{
ShellWobblyEffectPrivate *priv = shell_wobbly_effect_get_instance_private (self);
if (priv->bend_x == bend_x)
return;
priv->bend_x = bend_x;
update_uniforms (self);
clutter_effect_queue_repaint (CLUTTER_EFFECT (self));
}

55
src/shell-wobbly-effect.h Normal file
View File

@ -0,0 +1,55 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2014 Endless Mobile
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Written by:
* Jasper St. Pierre <jstpierre@mecheye.net>
*/
#include <clutter/clutter.h>
#ifndef __SHELL_WOBBLY_EFFECT_H__
#define __SHELL_WOBBLY_EFFECT_H__
#define SHELL_TYPE_WOBBLY_EFFECT (shell_wobbly_effect_get_type ())
#define SHELL_WOBBLY_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_WOBBLY_EFFECT, ShellWobblyEffect))
#define SHELL_WOBBLY_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_WOBBLY_EFFECT, ShellWobblyEffectClass))
#define SHELL_IS_WOBBLY_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_WOBBLY_EFFECT))
#define SHELL_IS_WOBBLY_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_WOBBLY_EFFECT))
#define SHELL_WOBBLY_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_WOBBLY_EFFECT, ShellWobblyEffectClass))
typedef struct _ShellWobblyEffect ShellWobblyEffect;
typedef struct _ShellWobblyEffectClass ShellWobblyEffectClass;
struct _ShellWobblyEffect
{
ClutterOffscreenEffect parent;
};
struct _ShellWobblyEffectClass
{
ClutterOffscreenEffectClass parent_class;
};
GType shell_wobbly_effect_get_type (void) G_GNUC_CONST;
void shell_wobbly_effect_set_bend_x (ShellWobblyEffect *self,
int bend_x);
#endif /* __SHELL_WOBBLY_EFFECT_H__ */

View File

@ -495,10 +495,6 @@ st_box_layout_get_paint_volume (ClutterActor *actor,
ClutterActorBox content_box;
ClutterVertex origin;
/* Setting the paint volume does not make sense when we don't have any allocation */
if (!clutter_actor_has_allocation (actor))
return FALSE;
/* When have an adjustment we are clipped to the content box, so base
* our paint volume on that. */
if (priv->hadjustment || priv->vadjustment)

View File

@ -893,19 +893,11 @@ load_gicon_with_colors (StTextureCache *cache,
GtkIconTheme *theme;
GtkIconInfo *info;
StTextureCachePolicy policy;
GtkIconLookupFlags lookup_flags;
/* Do theme lookups in the main thread to avoid thread-unsafety */
theme = cache->priv->icon_theme;
lookup_flags = GTK_ICON_LOOKUP_USE_BUILTIN;
if (clutter_get_default_text_direction () == CLUTTER_TEXT_DIRECTION_RTL)
lookup_flags |= GTK_ICON_LOOKUP_DIR_RTL;
else
lookup_flags |= GTK_ICON_LOOKUP_DIR_LTR;
info = gtk_icon_theme_lookup_by_gicon_for_scale (theme, icon, size, scale, lookup_flags);
info = gtk_icon_theme_lookup_by_gicon_for_scale (theme, icon, size, scale, GTK_ICON_LOOKUP_USE_BUILTIN);
if (info == NULL)
return NULL;