Compare commits

..

1 Commits

Author SHA1 Message Date
Owen W. Taylor
ef200512cd Adapt to Mutter background changes
The rewrite of Mutter's background code (see bug 735637) requires
corresponding changes here - we no longer need to layer multiple
MetaBackgroundActors together.

The general strategy is that a BackgroundSource object is created
per GSettings schema, and keeps either one Background/MetaBackground pair,
or, for animation, a Background/Metabackground pair for each monitor.

https://bugzilla.gnome.org/show_bug.cgi?id=735638
2014-08-28 16:38:12 -04:00
81 changed files with 15610 additions and 21032 deletions

69
NEWS
View File

@@ -1,72 +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]
* Add gesture to summon message tray [Carlos G.; #735625]
* Accept scrolls/swipes either way on the screen shield [Jasper; #734874]
* Animate opening the app picker and improve app folder animations
[Carlos S.; #734726]
* Animate app icons on launching a new window [Carlos S., Florian; #734726]
* Show the on-screen keyboard when touch input is being used [David; #702015]
* Misc. bug fixes [Bastien, Owen, Florian, Carlos G.; #735190, #735385,
#735608, #735681]
Contributors:
Carlos Garnacho, David King, Kalev Lember, Florian Müllner, Bastien Nocera,
Carlos Soriano, Jasper St. Pierre, Owen W. Taylor
Translations:
Fran Diéguez [gl], Sweta Kothari [gu], Manoj Kumar Giri [or],
Alain Lojewski [fr], Praveen Illa [te], Arash Mousavi [fa],
Andika Triwidada [id]
3.13.90 3.13.90
======= =======
* Make use of GLSL optional [Adel; #733623] * Make use of GLSL optional [Adel; #733623]

View File

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

View File

@@ -31,7 +31,7 @@
</_description> </_description>
</key> </key>
<key name="favorite-apps" type="as"> <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> <_summary>List of desktop file IDs for favorite applications</_summary>
<_description> <_description>
The applications corresponding to these identifiers The applications corresponding to these identifiers

View File

@@ -1159,7 +1159,6 @@ StScrollBar StButton#vhandle:active {
.show-apps:checked > .overview-icon, .show-apps:checked > .overview-icon,
.show-apps:active > .overview-icon, .show-apps:active > .overview-icon,
.search-provider-icon:active, .search-provider-icon:active,
.grid-search-result:active .overview-icon,
.list-search-result:active { .list-search-result:active {
background-gradient-start: rgba(255, 255, 255, .05); background-gradient-start: rgba(255, 255, 255, .05);
background-gradient-end: rgba(255, 255, 255, .15); background-gradient-end: rgba(255, 255, 255, .15);

View File

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

View File

@@ -16,9 +16,7 @@
<file>misc/fileUtils.js</file> <file>misc/fileUtils.js</file>
<file>misc/gnomeSession.js</file> <file>misc/gnomeSession.js</file>
<file>misc/history.js</file> <file>misc/history.js</file>
<file>misc/ibusManager.js</file>
<file>misc/jsParse.js</file> <file>misc/jsParse.js</file>
<file>misc/keyboardManager.js</file>
<file>misc/loginManager.js</file> <file>misc/loginManager.js</file>
<file>misc/modemManager.js</file> <file>misc/modemManager.js</file>
<file>misc/objectManager.js</file> <file>misc/objectManager.js</file>
@@ -44,7 +42,6 @@
<file>ui/dash.js</file> <file>ui/dash.js</file>
<file>ui/dateMenu.js</file> <file>ui/dateMenu.js</file>
<file>ui/dnd.js</file> <file>ui/dnd.js</file>
<file>ui/edgeDragAction.js</file>
<file>ui/endSessionDialog.js</file> <file>ui/endSessionDialog.js</file>
<file>ui/environment.js</file> <file>ui/environment.js</file>
<file>ui/extensionDownloader.js</file> <file>ui/extensionDownloader.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._currentWindow = -1;
this.thumbnailsVisible = false; 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) { _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) { _initialSelection: function(backward, binding) {
if (binding == 'switch-group') { if (binding == 'switch-group') {
if (backward) { if (backward) {
@@ -359,18 +365,9 @@ const WindowSwitcherPopup = new Lang.Class({
Name: 'WindowSwitcherPopup', Name: 'WindowSwitcherPopup',
Extends: SwitcherPopup.SwitcherPopup, Extends: SwitcherPopup.SwitcherPopup,
_init: function() { _init: function(items) {
this.parent(); this.parent(items);
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' }); 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() { _getWindowList: function() {
@@ -378,6 +375,31 @@ const WindowSwitcherPopup = new Lang.Class({
return global.display.get_tab_list(Meta.TabList.NORMAL, workspace); 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) { _keyPressHandler: function(keysym, action) {
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS) { if (action == Meta.KeyBindingAction.SWITCH_WINDOWS) {
this._select(this._next()); this._select(this._next());

View File

@@ -34,9 +34,7 @@ const MIN_COLUMNS = 4;
const MIN_ROWS = 4; const MIN_ROWS = 4;
const INACTIVE_GRID_OPACITY = 77; const INACTIVE_GRID_OPACITY = 77;
// This time needs to be less than IconGrid.EXTRA_SPACE_ANIMATION_TIME const INACTIVE_GRID_OPACITY_ANIMATION_TIME = 0.40;
// to not clash with other animations
const INACTIVE_GRID_OPACITY_ANIMATION_TIME = 0.24;
const FOLDER_SUBICON_FRACTION = .4; const FOLDER_SUBICON_FRACTION = .4;
const MIN_FREQUENT_APPS_COUNT = 3; const MIN_FREQUENT_APPS_COUNT = 3;
@@ -45,16 +43,6 @@ const INDICATORS_BASE_TIME = 0.25;
const INDICATORS_ANIMATION_DELAY = 0.125; const INDICATORS_ANIMATION_DELAY = 0.125;
const INDICATORS_ANIMATION_MAX_TIME = 0.75; const INDICATORS_ANIMATION_MAX_TIME = 0.75;
// Follow iconGrid animations approach and divide by 2 to animate out to
// not annoy the user when the user wants to quit appDisplay.
// Also, make sure we don't exceed iconGrid animation total time or
// views switch time.
const INDICATORS_BASE_TIME_OUT = 0.125;
const INDICATORS_ANIMATION_DELAY_OUT = 0.0625;
const INDICATORS_ANIMATION_MAX_TIME_OUT =
Math.min (VIEWS_SWITCH_TIME,
IconGrid.ANIMATION_TIME_OUT + IconGrid.ANIMATION_MAX_DELAY_OUT_FOR_ITEM);
const PAGE_SWITCH_TIME = 0.3; const PAGE_SWITCH_TIME = 0.3;
const VIEWS_SWITCH_TIME = 0.4; const VIEWS_SWITCH_TIME = 0.4;
@@ -189,57 +177,6 @@ const BaseAppView = new Lang.Class({
this.selectApp(id); this.selectApp(id);
})); }));
} }
},
_doSpringAnimation: function(animationDirection) {
this._grid.actor.opacity = 255;
this._grid.animateSpring(animationDirection,
Main.overview.getShowAppsButton());
},
animate: function(animationDirection, onComplete) {
if (animationDirection == IconGrid.AnimationDirection.IN) {
let toAnimate = this._grid.actor.connect('notify::allocation', Lang.bind(this,
function() {
this._grid.actor.disconnect(toAnimate);
// We need to hide the grid temporary to not flash it
// for a frame
this._grid.actor.opacity = 0;
Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
Lang.bind(this, function() {
this._doSpringAnimation(animationDirection)
}));
}));
} else {
this._doSpringAnimation(animationDirection);
}
if (onComplete) {
let animationDoneId = this._grid.connect('animation-done', Lang.bind(this,
function () {
this._grid.disconnect(animationDoneId);
onComplete();
}));
}
},
animateSwitch: function(animationDirection) {
Tweener.removeTweens(this.actor);
Tweener.removeTweens(this._grid.actor);
let params = { time: VIEWS_SWITCH_TIME,
transition: 'easeOutQuad' };
if (animationDirection == IconGrid.AnimationDirection.IN) {
this.actor.show();
params.opacity = 255;
params.delay = VIEWS_SWITCH_ANIMATION_DELAY;
} else {
params.opacity = 0;
params.delay = 0;
params.onComplete = Lang.bind(this, function() { this.actor.hide() });
}
Tweener.addTween(this._grid.actor, params);
} }
}); });
Signals.addSignalMethods(BaseAppView.prototype); Signals.addSignalMethods(BaseAppView.prototype);
@@ -277,10 +214,7 @@ const PageIndicators = new Lang.Class({
this._currentPage = undefined; this._currentPage = undefined;
this.actor.connect('notify::mapped', this.actor.connect('notify::mapped',
Lang.bind(this, function() { Lang.bind(this, this._animateIndicators));
this.animateIndicators(IconGrid.AnimationDirection.IN);
})
);
}, },
setNPages: function(nPages) { setNPages: function(nPages) {
@@ -321,7 +255,7 @@ const PageIndicators = new Lang.Class({
children[i].set_checked(i == this._currentPage); children[i].set_checked(i == this._currentPage);
}, },
animateIndicators: function(animationDirection) { _animateIndicators: function() {
if (!this.actor.mapped) if (!this.actor.mapped)
return; return;
@@ -329,32 +263,24 @@ const PageIndicators = new Lang.Class({
if (children.length == 0) if (children.length == 0)
return; return;
for (let i = 0; i < this._nPages; i++)
Tweener.removeTweens(children[i]);
let offset; let offset;
if (this.actor.get_text_direction() == Clutter.TextDirection.RTL) if (this.actor.get_text_direction() == Clutter.TextDirection.RTL)
offset = -children[0].width; offset = -children[0].width;
else else
offset = children[0].width; offset = children[0].width;
let isAnimationIn = animationDirection == IconGrid.AnimationDirection.IN; let delay = INDICATORS_ANIMATION_DELAY;
let delay = isAnimationIn ? INDICATORS_ANIMATION_DELAY : let totalAnimationTime = INDICATORS_BASE_TIME + INDICATORS_ANIMATION_DELAY * this._nPages;
INDICATORS_ANIMATION_DELAY_OUT; if (totalAnimationTime > INDICATORS_ANIMATION_MAX_TIME)
let baseTime = isAnimationIn ? INDICATORS_BASE_TIME : INDICATORS_BASE_TIME_OUT; delay -= (totalAnimationTime - INDICATORS_ANIMATION_MAX_TIME) / this._nPages;
let totalAnimationTime = baseTime + delay * this._nPages;
let maxTime = isAnimationIn ? INDICATORS_ANIMATION_MAX_TIME :
INDICATORS_ANIMATION_MAX_TIME_OUT;
if (totalAnimationTime > maxTime)
delay -= (totalAnimationTime - maxTime) / this._nPages;
for (let i = 0; i < this._nPages; i++) { for (let i = 0; i < this._nPages; i++) {
children[i].translation_x = isAnimationIn ? offset : 0; children[i].translation_x = offset;
Tweener.addTween(children[i], Tweener.addTween(children[i],
{ translation_x: isAnimationIn ? 0 : offset, { translation_x: 0,
time: baseTime + delay * i, time: INDICATORS_BASE_TIME + delay * i,
transition: 'easeInOutQuad', transition: 'easeInOutQuad',
delay: isAnimationIn ? VIEWS_SWITCH_ANIMATION_DELAY : 0 delay: VIEWS_SWITCH_ANIMATION_DELAY
}); });
} }
} }
@@ -397,7 +323,7 @@ const AllView = new Lang.Class({
this._stack = new St.Widget({ layout_manager: new Clutter.BinLayout() }); this._stack = new St.Widget({ layout_manager: new Clutter.BinLayout() });
let box = new St.BoxLayout({ vertical: true }); let box = new St.BoxLayout({ vertical: true });
this._grid.currentPage = 0; this._currentPage = 0;
this._stack.add_actor(this._grid.actor); this._stack.add_actor(this._grid.actor);
this._eventBlocker = new St.Widget({ x_expand: true, y_expand: true }); this._eventBlocker = new St.Widget({ x_expand: true, y_expand: true });
this._stack.add_actor(this._eventBlocker); this._stack.add_actor(this._eventBlocker);
@@ -529,52 +455,14 @@ const AllView = new Lang.Class({
this._refilterApps(); this._refilterApps();
}, },
// Overriden from BaseAppView
animate: function (animationDirection, onComplete) {
if (animationDirection == IconGrid.AnimationDirection.OUT &&
this._displayingPopup && this._currentPopup) {
this._currentPopup.popdown();
let spaceClosedId = this._grid.connect('space-closed', Lang.bind(this,
function() {
this._grid.disconnect(spaceClosedId);
// Given that we can't call this.parent() inside the
// signal handler, call again animate which will
// call the parent given that popup is already
// closed.
this.animate(animationDirection, onComplete);
}));
} else {
this.parent(animationDirection, onComplete);
if (animationDirection == IconGrid.AnimationDirection.OUT)
this._pageIndicators.animateIndicators(animationDirection);
}
},
animateSwitch: function(animationDirection) {
this.parent(animationDirection);
if (this._currentPopup && this._displayingPopup &&
animationDirection == IconGrid.AnimationDirection.OUT)
Tweener.addTween(this._currentPopup.actor,
{ time: VIEWS_SWITCH_TIME,
transition: 'easeOutQuad',
opacity: 0,
onComplete: function() {
this.opacity = 255;
} });
if (animationDirection == IconGrid.AnimationDirection.OUT)
this._pageIndicators.animateIndicators(animationDirection);
},
getCurrentPageY: function() { getCurrentPageY: function() {
return this._grid.getPageY(this._grid.currentPage); return this._grid.getPageY(this._currentPage);
}, },
goToPage: function(pageNumber) { goToPage: function(pageNumber) {
pageNumber = clamp(pageNumber, 0, this._grid.nPages() - 1); pageNumber = clamp(pageNumber, 0, this._grid.nPages() - 1);
if (this._grid.currentPage == pageNumber && this._displayingPopup && this._currentPopup) if (this._currentPage == pageNumber && this._displayingPopup && this._currentPopup)
return; return;
if (this._displayingPopup && this._currentPopup) if (this._displayingPopup && this._currentPopup)
this._currentPopup.popdown(); this._currentPopup.popdown();
@@ -594,7 +482,7 @@ const AllView = new Lang.Class({
let time; let time;
// Only take the velocity into account on page changes, otherwise // Only take the velocity into account on page changes, otherwise
// return smoothly to the current page using the default velocity // return smoothly to the current page using the default velocity
if (this._grid.currentPage != pageNumber) { if (this._currentPage != pageNumber) {
let minVelocity = totalHeight / (PAGE_SWITCH_TIME * 1000); let minVelocity = totalHeight / (PAGE_SWITCH_TIME * 1000);
velocity = Math.max(minVelocity, velocity); velocity = Math.max(minVelocity, velocity);
time = (diffToPage / velocity) / 1000; time = (diffToPage / velocity) / 1000;
@@ -605,9 +493,9 @@ const AllView = new Lang.Class({
// longer than PAGE_SWITCH_TIME // longer than PAGE_SWITCH_TIME
time = Math.min(time, PAGE_SWITCH_TIME); time = Math.min(time, PAGE_SWITCH_TIME);
this._grid.currentPage = pageNumber; this._currentPage = pageNumber;
Tweener.addTween(this._adjustment, Tweener.addTween(this._adjustment,
{ value: this._grid.getPageY(this._grid.currentPage), { value: this._grid.getPageY(this._currentPage),
time: time, time: time,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
this._pageIndicators.setCurrentPage(pageNumber); this._pageIndicators.setCurrentPage(pageNumber);
@@ -636,9 +524,9 @@ const AllView = new Lang.Class({
let direction = event.get_scroll_direction(); let direction = event.get_scroll_direction();
if (direction == Clutter.ScrollDirection.UP) if (direction == Clutter.ScrollDirection.UP)
this.goToPage(this._grid.currentPage - 1); this.goToPage(this._currentPage - 1);
else if (direction == Clutter.ScrollDirection.DOWN) else if (direction == Clutter.ScrollDirection.DOWN)
this.goToPage(this._grid.currentPage + 1); this.goToPage(this._currentPage + 1);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, },
@@ -678,10 +566,10 @@ const AllView = new Lang.Class({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
if (event.get_key_symbol() == Clutter.Page_Up) { if (event.get_key_symbol() == Clutter.Page_Up) {
this.goToPage(this._grid.currentPage - 1); this.goToPage(this._currentPage - 1);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} else if (event.get_key_symbol() == Clutter.Page_Down) { } else if (event.get_key_symbol() == Clutter.Page_Down) {
this.goToPage(this._grid.currentPage + 1); this.goToPage(this._currentPage + 1);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
@@ -742,7 +630,7 @@ const AllView = new Lang.Class({
if (this._availWidth != availWidth || this._availHeight != availHeight || oldNPages != this._grid.nPages()) { if (this._availWidth != availWidth || this._availHeight != availHeight || oldNPages != this._grid.nPages()) {
this._adjustment.value = 0; this._adjustment.value = 0;
this._grid.currentPage = 0; this._currentPage = 0;
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
function() { function() {
this._pageIndicators.setNPages(this._grid.nPages()); this._pageIndicators.setNPages(this._grid.nPages());
@@ -904,19 +792,6 @@ const AppDisplay = new Lang.Class({
let layout = new ControlsBoxLayout({ homogeneous: true }); let layout = new ControlsBoxLayout({ homogeneous: true });
this._controls = new St.Widget({ style_class: 'app-view-controls', this._controls = new St.Widget({ style_class: 'app-view-controls',
layout_manager: layout }); layout_manager: layout });
this._controls.connect('notify::mapped', Lang.bind(this,
function() {
// controls are faded either with their parent or
// explicitly in animate(); we can't know how they'll be
// shown next, so make sure to restore their opacity
// when they are hidden
if (this._controls.mapped)
return;
Tweener.removeTweens(this._controls);
this._controls.opacity = 255;
}));
layout.hookup_style(this._controls); layout.hookup_style(this._controls);
this.actor.add_actor(new St.Bin({ child: this._controls })); this.actor.add_actor(new St.Bin({ child: this._controls }));
@@ -940,39 +815,23 @@ const AppDisplay = new Lang.Class({
this._updateFrequentVisibility(); this._updateFrequentVisibility();
}, },
animate: function(animationDirection, onComplete) {
let currentView = this._views[global.settings.get_uint('app-picker-view')].view;
// Animate controls opacity using iconGrid animation time, since
// it will be the time the AllView or FrequentView takes to show
// it entirely.
let finalOpacity;
if (animationDirection == IconGrid.AnimationDirection.IN) {
this._controls.opacity = 0;
finalOpacity = 255;
} else {
finalOpacity = 0
}
Tweener.addTween(this._controls,
{ time: IconGrid.ANIMATION_TIME_IN,
transition: 'easeInOutQuad',
opacity: finalOpacity,
});
currentView.animate(animationDirection, onComplete);
},
_showView: function(activeIndex) { _showView: function(activeIndex) {
for (let i = 0; i < this._views.length; i++) { for (let i = 0; i < this._views.length; i++) {
let actor = this._views[i].view.actor;
let params = { time: VIEWS_SWITCH_TIME,
opacity: (i == activeIndex) ? 255 : 0,
delay: (i == activeIndex) ? VIEWS_SWITCH_ANIMATION_DELAY : 0 };
if (i == activeIndex)
actor.visible = true;
else
params.onComplete = function() { actor.hide(); };
Tweener.addTween(actor, params);
if (i == activeIndex) if (i == activeIndex)
this._views[i].control.add_style_pseudo_class('checked'); this._views[i].control.add_style_pseudo_class('checked');
else else
this._views[i].control.remove_style_pseudo_class('checked'); this._views[i].control.remove_style_pseudo_class('checked');
let animationDirection = i == activeIndex ? IconGrid.AnimationDirection.IN :
IconGrid.AnimationDirection.OUT;
this._views[i].view.animateSwitch(animationDirection);
} }
}, },
@@ -1054,6 +913,26 @@ const AppSearchProvider = new Lang.Class({
this.getInitialResultSet(terms, callback, cancellable); this.getInitialResultSet(terms, callback, cancellable);
}, },
activateResult: function(result) {
let app = this._appSys.lookup_app(result);
let event = Clutter.get_current_event();
let modifiers = event ? event.get_state() : 0;
let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK;
if (openNewWindow)
app.open_new_window(-1);
else
app.activate();
},
dragActivateResult: function(id, params) {
params = Params.parse(params, { workspace: -1,
timestamp: 0 });
let app = this._appSys.lookup_app(id);
app.open_new_window(workspace);
},
createResultObject: function (resultMeta) { createResultObject: function (resultMeta) {
let app = this._appSys.lookup_app(resultMeta['id']); let app = this._appSys.lookup_app(resultMeta['id']);
return new AppIcon(app); return new AppIcon(app);
@@ -1085,11 +964,6 @@ const FolderView = new Lang.Class({
Util.ensureActorVisibleInScrollView(this.actor, actor); Util.ensureActorVisibleInScrollView(this.actor, actor);
}, },
// Overriden from BaseAppView
animate: function(animationDirection) {
this._grid.animatePulse(animationDirection);
},
createFolderIcon: function(size) { createFolderIcon: function(size) {
let layout = new Clutter.GridLayout(); let layout = new Clutter.GridLayout();
let icon = new St.Widget({ layout_manager: layout, let icon = new St.Widget({ layout_manager: layout,
@@ -1267,7 +1141,6 @@ const FolderIcon = new Lang.Class({
addAppId(appInfo.get_id()); addAppId(appInfo.get_id());
}); });
this.actor.visible = this.view.getAllItems().length > 0;
this.view.loadGrid(); this.view.loadGrid();
this.emit('apps-changed'); this.emit('apps-changed');
}, },
@@ -1466,17 +1339,8 @@ const AppFolderPopup = new Lang.Class({
this.actor.show(); this.actor.show();
this._boxPointer.setArrowActor(this._source.actor); this._boxPointer.setArrowActor(this._source.actor);
// We need to hide the icons of the view until the boxpointer animation
// is completed so we can animate the icons after as we like without
// showing them while boxpointer is animating.
this._view.actor.opacity = 0;
this._boxPointer.show(BoxPointer.PopupAnimation.FADE | this._boxPointer.show(BoxPointer.PopupAnimation.FADE |
BoxPointer.PopupAnimation.SLIDE, BoxPointer.PopupAnimation.SLIDE);
Lang.bind(this,
function() {
this._view.actor.opacity = 255;
this._view.animate(IconGrid.AnimationDirection.IN);
}));
this.emit('open-state-changed', true); this.emit('open-state-changed', true);
}, },
@@ -1631,7 +1495,13 @@ const AppIcon = new Lang.Class({
_onClicked: function(actor, button) { _onClicked: function(actor, button) {
this._removeMenuTimeout(); this._removeMenuTimeout();
this.activate(button);
if (button == 0 || button == 1) {
this._onActivate(Clutter.get_current_event());
} else if (button == 2) {
this.app.open_new_window(-1);
Main.overview.hide();
}
}, },
_onKeyboardPopupMenu: function() { _onKeyboardPopupMenu: function() {
@@ -1685,29 +1555,19 @@ const AppIcon = new Lang.Class({
this.emit('menu-state-changed', false); this.emit('menu-state-changed', false);
}, },
activate: function (button) { _onActivate: function (event) {
let event = Clutter.get_current_event(); let modifiers = event.get_state();
let modifiers = event ? event.get_state() : 0;
let openNewWindow = this.app.can_open_new_window () &&
modifiers & Clutter.ModifierType.CONTROL_MASK &&
this.app.state == Shell.AppState.RUNNING ||
button && button == 2;
if (this.app.state == Shell.AppState.STOPPED || openNewWindow) if (modifiers & Clutter.ModifierType.CONTROL_MASK
this.animateLaunch(); && this.app.state == Shell.AppState.RUNNING) {
if (openNewWindow)
this.app.open_new_window(-1); this.app.open_new_window(-1);
else } else {
this.app.activate(); this.app.activate();
}
Main.overview.hide(); Main.overview.hide();
}, },
animateLaunch: function() {
this.icon.animateZoomOut();
},
shellWorkspaceLaunch : function(params) { shellWorkspaceLaunch : function(params) {
params = Params.parse(params, { workspace: -1, params = Params.parse(params, { workspace: -1,
timestamp: 0 }); timestamp: 0 });
@@ -1789,9 +1649,6 @@ const AppIconMenu = new Lang.Class({
if (this._source.app.can_open_new_window()) { if (this._source.app.can_open_new_window()) {
this._newWindowMenuItem = this._appendMenuItem(_("New Window")); this._newWindowMenuItem = this._appendMenuItem(_("New Window"));
this._newWindowMenuItem.connect('activate', Lang.bind(this, function() { this._newWindowMenuItem.connect('activate', Lang.bind(this, function() {
if (this._source.app.state == Shell.AppState.STOPPED)
this._source.animateLaunch();
this._source.app.open_new_window(-1); this._source.app.open_new_window(-1);
this.emit('activate-window', null); this.emit('activate-window', null);
})); }));

View File

@@ -14,13 +14,7 @@ const RENAMED_DESKTOP_IDS = {
'gcalctool.desktop': 'gnome-calculator.desktop', 'gcalctool.desktop': 'gnome-calculator.desktop',
'gedit.desktop': 'org.gnome.gedit.desktop', 'gedit.desktop': 'org.gnome.gedit.desktop',
'glchess.desktop': 'gnome-chess.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-clocks.desktop': 'org.gnome.clocks.desktop',
'gnome-contacts.desktop': 'org.gnome.Contacts.desktop',
'gnome-documents.desktop': 'org.gnome.Documents.desktop', 'gnome-documents.desktop': 'org.gnome.Documents.desktop',
'gnome-font-viewer.desktop': 'org.gnome.font-viewer.desktop', 'gnome-font-viewer.desktop': 'org.gnome.font-viewer.desktop',
'gnome-photos.desktop': 'org.gnome.Photos.desktop', 'gnome-photos.desktop': 'org.gnome.Photos.desktop',
@@ -28,12 +22,8 @@ const RENAMED_DESKTOP_IDS = {
'gnome-software.desktop': 'org.gnome.Software.desktop', 'gnome-software.desktop': 'org.gnome.Software.desktop',
'gnome-weather.desktop': 'org.gnome.Weather.Application.desktop', 'gnome-weather.desktop': 'org.gnome.Weather.Application.desktop',
'gnomine.desktop': 'gnome-mines.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', 'nautilus.desktop': 'org.gnome.Nautilus.desktop',
'polari.desktop': 'org.gnome.Polari.desktop', 'polari.desktop': 'org.gnome.Polari.desktop',
'totem.desktop': 'org.gnome.Totem.desktop',
}; };
const AppFavorites = new Lang.Class({ const AppFavorites = new Lang.Class({

View File

@@ -41,6 +41,9 @@
// MetaBackgroundActor // MetaBackgroundActor
// An actor that draws the background for a single monitor // An actor that draws the background for a single monitor
// //
// BackgroundActor
// JS delegate object for MetaBackgroundActor.
//
// BackgroundCache // BackgroundCache
// A cache of Settings schema => BackgroundSource and of a single Animation. // A cache of Settings schema => BackgroundSource and of a single Animation.
// Also used to share file monitors. // Also used to share file monitors.
@@ -51,17 +54,17 @@
// object, which provides a single Background and correspondingly a single // object, which provides a single Background and correspondingly a single
// MetaBackground object. // MetaBackground object.
// //
// BackgroundManager BackgroundManager // BackgroundManager--- ----- BackgroundManager
// | \ / | // BackgroundActor \./ BackgroundActor
// | BackgroundSource | looked up in BackgroundCache // | | \ | / | |
// | | | // | | BackgroundSource | | looked up in BackgroundCache
// | Background | // | \ | / |
// | | | // | `-------Background-------` |
// MetaBackgroundActor | MetaBackgroundActor // MetaBackgroundActor | MetaBackgroundActor
// \ | / // \ | /
// `------- MetaBackground ------' // `--------- MetaBackground-------`
// | // |
// MetaBackgroundImage looked up in MetaBackgroundImageCache // MetaBackgroundImage looked up in MetaBackgroundImageCache
// //
// The animated case is tricker because the animation XML file can specify different // The animated case is tricker because the animation XML file can specify different
// files for different monitor resolutions and aspect ratios. For this reason, // files for different monitor resolutions and aspect ratios. For this reason,
@@ -71,27 +74,29 @@
// same filename and look up the *same* MetaBackgroundImage object, so there is // same filename and look up the *same* MetaBackgroundImage object, so there is
// little wasted memory: // little wasted memory:
// //
// BackgroundManager BackgroundManager // BackgroundManager--- ----- BackgroundManager
// | \ / | // BackgroundActor \./ BackgroundActor
// | BackgroundSource | looked up in BackgroundCache // | | \ | / | |
// | / \ | // | | BackgroundSource | | looked up in BackgroundCache
// | Background Background | // | \ / \ / |
// | | \ / | | // | Background Background |
// | | Animation | | looked up in BackgroundCache // | | \ / | |
// MetaBackgroundA|tor Me|aBackgroundActor // | | Animation | | looked up in BackgroundCache
// \ | | / // MetaBackg|oundActor MetaB|ckgroundActor
// MetaBackground MetaBackground // | | | |
// \ / // | | | |
// MetaBackgroundImage looked up in MetaBackgroundImageCache // MetaBackground MetaBackground
// MetaBackgroundImage // \ /
// MetaBackgroundImage looked up in MetaBackgroundImageCache
// MetaBackgroundImage
// //
// But the case of different filenames and different background images // But the case of different filenames and different background images
// is possible as well: // is possible as well:
// .... // ....
// MetaBackground MetaBackground // MetaBackground MetaBackground
// | | // | |
// MetaBackgroundImage MetaBackgroundImage // MetaBackgroundImage MetaBackgroundImage
// MetaBackgroundImage MetaBackgroundImage // MetaBackgroundImage MetaBackgroundImage
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const GDesktopEnums = imports.gi.GDesktopEnums; const GDesktopEnums = imports.gi.GDesktopEnums;
@@ -221,8 +226,7 @@ const Background = new Lang.Class({
filename: null, filename: null,
style: null }); style: null });
this.background = new Meta.Background({ meta_screen: global.screen }); this.background = new Meta.Background({ 'meta-screen': global.screen });
this.background._delegate = this;
this._settings = params.settings; this._settings = params.settings;
this._filename = params.filename; this._filename = params.filename;
@@ -242,7 +246,11 @@ const Background = new Lang.Class({
destroy: function() { destroy: function() {
this._cancellable.cancel(); this._cancellable.cancel();
this._removeAnimationTimeout();
if (this._updateAnimationTimeoutId) {
GLib.source_remove (this._updateAnimationTimeoutId);
this._updateAnimationTimeoutId = 0;
}
let i; let i;
let keys = Object.keys(this._fileWatches); let keys = Object.keys(this._fileWatches);
@@ -256,13 +264,6 @@ const Background = new Lang.Class({
this._settingsChangedSignalId = 0; this._settingsChangedSignalId = 0;
}, },
updateResolution: function() {
if (this._animation) {
this._removeAnimationTimeout();
this._updateAnimation();
}
},
_setLoaded: function() { _setLoaded: function() {
if (this.isLoaded) if (this.isLoaded)
return; return;
@@ -306,13 +307,6 @@ const Background = new Lang.Class({
this._fileWatches[filename] = signalId; this._fileWatches[filename] = signalId;
}, },
_removeAnimationTimeout: function() {
if (this._updateAnimationTimeoutId) {
GLib.source_remove(this._updateAnimationTimeoutId);
this._updateAnimationTimeoutId = 0;
}
},
_updateAnimation: function() { _updateAnimation: function() {
this._updateAnimationTimeoutId = 0; this._updateAnimationTimeoutId = 0;
@@ -440,6 +434,72 @@ const Background = new Lang.Class({
}); });
Signals.addSignalMethods(Background.prototype); Signals.addSignalMethods(Background.prototype);
const BackgroundActor = new Lang.Class({
Name: 'Background',
_init: function(params) {
params = Params.parse(params, { background: null,
monitorIndex: 0,
vignette: false });
this.actor = new Meta.BackgroundActor({ 'meta-screen': global.screen,
'monitor': params.monitorIndex,
'background': params.background.background });
this.actor._delegate = this;
this._vignette = params.vignette;
this._brightness = 1.0;
this._vignetteSharpness = 0.2;
if (this._vignette)
this.actor.add_vignette(this._vignetteSharpness, this._brightness);
if (params.background.isLoaded) {
this._setLoaded();
} else {
let loadedSignalId = params.background.connect('loaded',
Lang.bind(this, function() {
params.background.disconnect(loadedSignalId);
this._setLoaded();
}));
}
},
_setLoaded: function() {
if (this.isLoaded)
return;
this.isLoaded = true;
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
this.emit('loaded');
return GLib.SOURCE_REMOVE;
}));
GLib.Source.set_name_by_id(id, '[gnome-shell] this.emit');
},
get brightness() {
return this._brightness;
},
set brightness(factor) {
this._brightness = factor;
if (this._vignette)
this.actor.add_vignette(this._brightness, this._vignetteSharpness);
},
get vignetteSharpness() {
return this._vignetteSharpness;
},
set vignetteSharpness(sharpness) {
this._vignetteSharpness = sharpness;
if (this._vignette)
this.actor.add_vignette(this._brightness, this._vignetteSharpness);
}
});
Signals.addSignalMethods(BackgroundActor.prototype);
let _systemBackground; let _systemBackground;
const SystemBackground = new Lang.Class({ const SystemBackground = new Lang.Class({
@@ -449,13 +509,13 @@ const SystemBackground = new Lang.Class({
let filename = global.datadir + '/theme/noise-texture.png'; let filename = global.datadir + '/theme/noise-texture.png';
if (_systemBackground == null) { if (_systemBackground == null) {
_systemBackground = new Meta.Background({ meta_screen: global.screen }); _systemBackground = new Meta.Background({ 'meta-screen': global.screen });
_systemBackground.set_filename(filename, GDesktopEnums.BackgroundStyle.WALLPAPER); _systemBackground.set_filename(filename, GDesktopEnums.BackgroundStyle.WALLPAPER);
} }
this.actor = new Meta.BackgroundActor({ meta_screen: global.screen, this.actor = new Meta.BackgroundActor({ 'meta-screen': global.screen,
monitor: 0, 'monitor': 0,
background: _systemBackground }); 'background': _systemBackground });
let cache = Meta.BackgroundImageCache.get_default(); let cache = Meta.BackgroundImageCache.get_default();
let image = cache.load(filename); let image = cache.load(filename);
@@ -487,23 +547,6 @@ const BackgroundSource = new Lang.Class({
this._overrideImage = GLib.getenv('SHELL_BACKGROUND_IMAGE'); this._overrideImage = GLib.getenv('SHELL_BACKGROUND_IMAGE');
this._settings = new Gio.Settings({ schema_id: settingsSchema }); this._settings = new Gio.Settings({ schema_id: settingsSchema });
this._backgrounds = []; 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) { getBackground: function(monitorIndex) {
@@ -540,8 +583,8 @@ const BackgroundSource = new Lang.Class({
style: style style: style
}); });
background._changedId = background.connect('changed', Lang.bind(this, function() { let changedId = background.connect('changed', Lang.bind(this, function() {
background.disconnect(background._changedId); background.disconnect(changedId);
background.destroy(); background.destroy();
delete this._backgrounds[monitorIndex]; delete this._backgrounds[monitorIndex];
})); }));
@@ -553,13 +596,8 @@ const BackgroundSource = new Lang.Class({
}, },
destroy: function() { destroy: function() {
global.screen.disconnect(this._monitorsChangedId); for (let monitorIndex in this._backgrounds)
this._backgrounds[monitorIndex].destroy();
for (let monitorIndex in this._backgrounds) {
let background = this._backgrounds[monitorIndex];
background.disconnect(background._changedId);
background.destroy();
}
this._backgrounds = null; this._backgrounds = null;
} }
@@ -636,8 +674,8 @@ const BackgroundManager = new Lang.Class({
this._monitorIndex = params.monitorIndex; this._monitorIndex = params.monitorIndex;
this._controlPosition = params.controlPosition; this._controlPosition = params.controlPosition;
this.backgroundActor = this._createBackgroundActor(); this.background = this._createBackground();
this._newBackgroundActor = null; this._newBackground = null;
}, },
destroy: function() { destroy: function() {
@@ -645,95 +683,78 @@ const BackgroundManager = new Lang.Class({
cache.releaseBackgroundSource(this._settingsSchema); cache.releaseBackgroundSource(this._settingsSchema);
this._backgroundSource = null; this._backgroundSource = null;
if (this._newBackgroundActor) { if (this._newBackground) {
this._newBackgroundActor.destroy(); this._newBackground.actor.destroy();
this._newBackgroundActor = null; this._newBackground = null;
} }
if (this.backgroundActor) { if (this.background) {
this.backgroundActor.destroy(); this.background.actor.destroy();
this.backgroundActor = null; this.background = null;
} }
}, },
_swapBackgroundActor: function() { _updateBackground: function() {
let oldBackgroundActor = this.backgroundActor; let newBackground = this._createBackground();
this.backgroundActor = this._newBackgroundActor; newBackground.vignetteSharpness = this.background.vignetteSharpness;
this._newBackgroundActor = null; newBackground.brightness = this.background.brightness;
this.emit('changed'); newBackground.visible = this.background.visible;
Tweener.addTween(oldBackgroundActor, newBackground.loadedSignalId = newBackground.connect('loaded',
{ opacity: 0, Lang.bind(this, function() {
time: FADE_ANIMATION_TIME, newBackground.disconnect(newBackground.loadedSignalId);
transition: 'easeOutQuad', newBackground.loadedSignalId = 0;
onComplete: function() {
oldBackgroundActor.destroy(); if (this._newBackground != newBackground) {
} /* Not interesting, we queued another load */
}); newBackground.actor.destroy();
return;
}
Tweener.addTween(this.background.actor,
{ opacity: 0,
time: FADE_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() {
this.background.actor.destroy();
this.background = newBackground;
this._newBackground = null;
this.emit('changed');
})
});
}));
this._newBackground = newBackground;
}, },
_updateBackgroundActor: function() { _createBackground: function() {
if (this._newBackgroundActor) {
/* Skip displaying existing background queued for load */
this._newBackgroundActor.destroy();
this._newBackgroundActor = null;
}
let newBackgroundActor = this._createBackgroundActor();
newBackgroundActor.vignette_sharpness = this.backgroundActor.vignette_sharpness;
newBackgroundActor.brightness = this.backgroundActor.brightness;
newBackgroundActor.visible = this.backgroundActor.visible;
this._newBackgroundActor = newBackgroundActor;
let background = newBackgroundActor.background._delegate;
if (background.isLoaded) {
this._swapBackgroundActor();
} else {
newBackgroundActor.loadedSignalId = background.connect('loaded',
Lang.bind(this, function() {
background.disconnect(newBackgroundActor.loadedSignalId);
newBackgroundActor.loadedSignalId = 0;
this._swapBackgroundActor();
}));
}
},
_createBackgroundActor: function() {
let background = this._backgroundSource.getBackground(this._monitorIndex); let background = this._backgroundSource.getBackground(this._monitorIndex);
let backgroundActor = new Meta.BackgroundActor({ meta_screen: global.screen, let backgroundActor = new BackgroundActor({ background: background,
monitor: this._monitorIndex, monitorIndex: this._monitorIndex,
background: background.background, vignette: this._vignette });
vignette: this._vignette, this._container.add_child(backgroundActor.actor);
vignette_sharpness: 0.5,
brightness: 0.5,
});
this._container.add_child(backgroundActor);
let monitor = this._layoutManager.monitors[this._monitorIndex]; let monitor = this._layoutManager.monitors[this._monitorIndex];
backgroundActor.set_size(monitor.width, monitor.height); backgroundActor.actor.set_size(monitor.width, monitor.height);
if (this._controlPosition) { if (this._controlPosition) {
backgroundActor.set_position(monitor.x, monitor.y); backgroundActor.actor.set_position(monitor.x, monitor.y);
backgroundActor.lower_bottom(); backgroundActor.actor.lower_bottom();
} }
let changeSignalId = background.connect('changed', Lang.bind(this, function() { let changeSignalId = background.connect('changed', Lang.bind(this, function() {
background.disconnect(changeSignalId); background.disconnect(changeSignalId);
changeSignalId = null; changeSignalId = null;
this._updateBackgroundActor(); this._updateBackground();
})); }));
backgroundActor.connect('destroy', Lang.bind(this, function() { backgroundActor.actor.connect('destroy', Lang.bind(this, function() {
if (changeSignalId) if (changeSignalId)
background.disconnect(changeSignalId); background.disconnect(changeSignalId);
if (backgroundActor.loadedSignalId) if (backgroundActor.loadedSignalId)
background.disconnect(backgroundActor.loadedSignalId); background.disconnect(loadedSignalId);
})); }));
return backgroundActor; return backgroundActor;

View File

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

View File

@@ -1,78 +0,0 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Signals = imports.signals;
const Meta = imports.gi.Meta;
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
const EDGE_THRESHOLD = 20;
const DRAG_DISTANCE = 80;
const EdgeDragAction = new Lang.Class({
Name: 'EdgeDragAction',
Extends: Clutter.GestureAction,
_init : function(side) {
this.parent();
this._side = side;
this.set_n_touch_points(1);
global.display.connect('grab-op-begin', Lang.bind(this, function() {
this.cancel();
}));
},
_getMonitorRect : function (x, y) {
let rect = new Meta.Rectangle({ x: x - 1, y: y - 1, width: 1, height: 1 });
let monitorIndex = global.screen.get_monitor_index_for_rect(rect);
return global.screen.get_monitor_geometry(monitorIndex);
},
vfunc_gesture_prepare : function(action, actor) {
if (this.get_n_current_points() == 0)
return false;
let [x, y] = this.get_press_coords(0);
let monitorRect = this._getMonitorRect(x, y);
return ((this._side == St.Side.LEFT && x < monitorRect.x + EDGE_THRESHOLD) ||
(this._side == St.Side.RIGHT && x > monitorRect.x + monitorRect.width - EDGE_THRESHOLD) ||
(this._side == St.Side.TOP && y < monitorRect.y + EDGE_THRESHOLD) ||
(this._side == St.Side.BOTTOM && y > monitorRect.y + monitorRect.height - EDGE_THRESHOLD));
},
vfunc_gesture_progress : function (action, actor) {
let [startX, startY] = this.get_press_coords(0);
let [x, y] = this.get_motion_coords(0);
let offsetX = Math.abs (x - startX);
let offsetY = Math.abs (y - startY);
if (offsetX < EDGE_THRESHOLD && offsetY < EDGE_THRESHOLD)
return true;
if ((offsetX > offsetY &&
(this._side == St.Side.TOP || this._side == St.Side.BOTTOM)) ||
(offsetY > offsetX &&
(this._side == St.Side.LEFT || this._side == St.Side.RIGHT))) {
this.cancel();
return false;
}
return true;
},
vfunc_gesture_end : function (action, actor) {
let [startX, startY] = this.get_press_coords(0);
let [x, y] = this.get_motion_coords(0);
let monitorRect = this._getMonitorRect(startX, startY);
if ((this._side == St.Side.TOP && y > monitorRect.y + DRAG_DISTANCE) ||
(this._side == St.Side.BOTTOM && y < monitorRect.y + monitorRect.height - DRAG_DISTANCE) ||
(this._side == St.Side.LEFT && x > monitorRect.x + DRAG_DISTANCE) ||
(this._side == St.Side.RIGHT && x < monitorRect.x + monitorRect.width - DRAG_DISTANCE))
this.emit('activated');
}
});
Signals.addSignalMethods(EdgeDragAction.prototype);

View File

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

View File

@@ -271,17 +271,10 @@ function onEnabledExtensionsChanged() {
} }
function _onVersionValidationChanged() { 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) { if (Main.sessionMode.allowExtensions) {
enabledExtensions.forEach(function(uuid) { enabledExtensions.forEach(function(uuid) {
enableExtension(uuid); if (ExtensionUtils.extensions[uuid])
reloadExtension(ExtensionUtils.extensions[uuid]);
}); });
} }
} }

View File

@@ -56,7 +56,7 @@ const GrabHelper = new Lang.Class({
this._grabStack = []; this._grabStack = [];
this._actors = []; this._actors = [];
this._ignoreUntilRelease = false; this._ignoreRelease = false;
this._modalCount = 0; this._modalCount = 0;
}, },
@@ -215,7 +215,7 @@ const GrabHelper = new Lang.Class({
_popGrabHelper(this); _popGrabHelper(this);
this._ignoreUntilRelease = false; this._ignoreRelease = false;
Main.popModal(this._owner); Main.popModal(this._owner);
global.sync_pointer(); global.sync_pointer();
@@ -228,7 +228,7 @@ const GrabHelper = new Lang.Class({
// like the ComboBoxMenu that go away on press, but need to eat // like the ComboBoxMenu that go away on press, but need to eat
// the next release event. // the next release event.
ignoreRelease: function() { ignoreRelease: function() {
this._ignoreUntilRelease = true; this._ignoreRelease = true;
}, },
// ungrab: // ungrab:

View File

@@ -10,29 +10,12 @@ const St = imports.gi.St;
const Lang = imports.lang; const Lang = imports.lang;
const Params = imports.misc.params; const Params = imports.misc.params;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const Main = imports.ui.main;
const ICON_SIZE = 96; const ICON_SIZE = 96;
const MIN_ICON_SIZE = 16; const MIN_ICON_SIZE = 16;
const EXTRA_SPACE_ANIMATION_TIME = 0.25; const EXTRA_SPACE_ANIMATION_TIME = 0.25;
const ANIMATION_TIME_IN = 0.350;
const ANIMATION_TIME_OUT = 1/2 * ANIMATION_TIME_IN;
const ANIMATION_MAX_DELAY_FOR_ITEM = 2/3 * ANIMATION_TIME_IN;
const ANIMATION_MAX_DELAY_OUT_FOR_ITEM = 2/3 * ANIMATION_TIME_OUT;
const ANIMATION_FADE_IN_TIME_FOR_ITEM = 1/4 * ANIMATION_TIME_IN;
const ANIMATION_BOUNCE_ICON_SCALE = 1.1;
const AnimationDirection = {
IN: 0,
OUT: 1
};
const APPICON_ANIMATION_OUT_SCALE = 3;
const APPICON_ANIMATION_OUT_TIME = 0.25;
const BaseIcon = new Lang.Class({ const BaseIcon = new Lang.Class({
Name: 'BaseIcon', Name: 'BaseIcon',
@@ -190,55 +173,9 @@ const BaseIcon = new Lang.Class({
_onIconThemeChanged: function() { _onIconThemeChanged: function() {
this._createIconTexture(this.iconSize); this._createIconTexture(this.iconSize);
},
animateZoomOut: function() {
// Animate only the child instead of the entire actor, so the
// styles like hover and running are not applied while
// animating.
zoomOutActor(this.actor.child);
} }
}); });
function clamp(value, min, max) {
return Math.max(Math.min(value, max), min);
};
function zoomOutActor(actor) {
let actorClone = new Clutter.Clone({ source: actor,
reactive: false });
let [width, height] = actor.get_transformed_size();
let [x, y] = actor.get_transformed_position();
actorClone.set_size(width, height);
actorClone.set_position(x, y);
actorClone.opacity = 255;
actorClone.set_pivot_point(0.5, 0.5);
Main.uiGroup.add_actor(actorClone);
// Avoid monitor edges to not zoom outside the current monitor
let monitor = Main.layoutManager.findMonitorForActor(actor);
let scaledWidth = width * APPICON_ANIMATION_OUT_SCALE;
let scaledHeight = height * APPICON_ANIMATION_OUT_SCALE;
let scaledX = x - (scaledWidth - width) / 2;
let scaledY = y - (scaledHeight - height) / 2;
let containedX = clamp(scaledX, monitor.x, monitor.x + monitor.width - scaledWidth);
let containedY = clamp(scaledY, monitor.y, monitor.y + monitor.height - scaledHeight);
Tweener.addTween(actorClone,
{ time: APPICON_ANIMATION_OUT_TIME,
scale_x: APPICON_ANIMATION_OUT_SCALE,
scale_y: APPICON_ANIMATION_OUT_SCALE,
translation_x: containedX - scaledX,
translation_y: containedY - scaledY,
opacity: 0,
transition: 'easeOutQuad',
onComplete: function() {
actorClone.destroy();
}
});
}
const IconGrid = new Lang.Class({ const IconGrid = new Lang.Class({
Name: 'IconGrid', Name: 'IconGrid',
@@ -401,208 +338,15 @@ const IconGrid = new Lang.Class({
} }
}, },
/**
* Intended to be override by subclasses if they need a different
* set of items to be animated.
*/
_getChildrenToAnimate: function() {
return this._getVisibleChildren();
},
_animationDone: function() {
this._animating = false;
this.emit('animation-done');
},
animatePulse: function(animationDirection) {
if (animationDirection != AnimationDirection.IN)
throw new Error("Pulse animation only implements 'in' animation direction");
if (this._animating)
return;
this._animating = true;
let actors = this._getChildrenToAnimate();
if (actors.length == 0) {
this._animationDone();
return;
}
for (let index = 0; index < actors.length; index++) {
let actor = actors[index];
actor.opacity = 0;
actor.reactive = false;
let delay = index / actors.length * ANIMATION_MAX_DELAY_FOR_ITEM;
let [originalX, originalY] = actor.get_transformed_position();
let [originalWidth, originalHeight,,] = this._getAllocatedChildSizeAndSpacing(actor);
let actorClone = new Clutter.Clone({ source: actor });
Main.uiGroup.add_actor(actorClone);
actorClone.set_position(originalX, originalY);
actorClone.set_scale(0, 0);
actorClone.set_pivot_point(0.5, 0.5);
actorClone.set_size(originalWidth, originalHeight);
let bounceUpTime = ANIMATION_TIME_IN / 4;
let isLastItem = index == actors.length - 1;
Tweener.addTween(actorClone,
{ time: bounceUpTime,
transition: 'easeInOutQuad',
delay: delay,
scale_x: ANIMATION_BOUNCE_ICON_SCALE,
scale_y: ANIMATION_BOUNCE_ICON_SCALE,
onComplete: Lang.bind(this, function() {
Tweener.addTween(actorClone,
{ time: ANIMATION_TIME_IN - bounceUpTime,
transition: 'easeInOutQuad',
scale_x: 1,
scale_y: 1,
onComplete: Lang.bind(this, function() {
if (isLastItem)
this._animationDone();
actor.opacity = 255;
actor.reactive = true;
actorClone.destroy();
})
});
})
});
}
},
animateSpring: function(animationDirection, sourceActor) {
if (this._animating)
return;
this._animating = true;
let actors = this._getChildrenToAnimate();
if (actors.length == 0) {
this._animationDone();
return;
}
let [sourceX, sourceY] = sourceActor.get_transformed_position();
let [sourceWidth, sourceHeight] = sourceActor.get_size();
// Get the center
let [sourceCenterX, sourceCenterY] = [sourceX + sourceWidth / 2, sourceY + sourceHeight / 2];
// Design decision, 1/2 of the source actor size.
let [sourceScaledWidth, sourceScaledHeight] = [sourceWidth / 2, sourceHeight / 2];
actors.forEach(function(actor) {
let [actorX, actorY] = actor._transformedPosition = actor.get_transformed_position();
let [x, y] = [actorX - sourceX, actorY - sourceY];
actor._distance = Math.sqrt(x * x + y * y);
});
let maxDist = actors.reduce(function(prev, cur) {
return Math.max(prev, cur._distance);
}, 0);
let minDist = actors.reduce(function(prev, cur) {
return Math.min(prev, cur._distance);
}, Infinity);
let normalization = maxDist - minDist;
for (let index = 0; index < actors.length; index++) {
let actor = actors[index];
actor.opacity = 0;
actor.reactive = false;
let actorClone = new Clutter.Clone({ source: actor });
Main.uiGroup.add_actor(actorClone);
let [width, height,,] = this._getAllocatedChildSizeAndSpacing(actor);
actorClone.set_size(width, height);
let scaleX = sourceScaledWidth / width;
let scaleY = sourceScaledHeight / height;
let [adjustedSourcePositionX, adjustedSourcePositionY] = [sourceCenterX - sourceScaledWidth / 2, sourceCenterY - sourceScaledHeight / 2];
let movementParams, fadeParams;
if (animationDirection == AnimationDirection.IN) {
let isLastItem = actor._distance == minDist;
actorClone.opacity = 0;
actorClone.set_scale(scaleX, scaleY);
actorClone.set_position(adjustedSourcePositionX, adjustedSourcePositionY);
let delay = (1 - (actor._distance - minDist) / normalization) * ANIMATION_MAX_DELAY_FOR_ITEM;
let [finalX, finalY] = actor._transformedPosition;
movementParams = { time: ANIMATION_TIME_IN,
transition: 'easeInOutQuad',
delay: delay,
x: finalX,
y: finalY,
scale_x: 1,
scale_y: 1,
onComplete: Lang.bind(this, function() {
if (isLastItem)
this._animationDone();
actor.opacity = 255;
actor.reactive = true;
actorClone.destroy();
})};
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
transition: 'easeInOutQuad',
delay: delay,
opacity: 255 };
} else {
let isLastItem = actor._distance == maxDist;
let [startX, startY] = actor._transformedPosition;
actorClone.set_position(startX, startY);
let delay = (actor._distance - minDist) / normalization * ANIMATION_MAX_DELAY_OUT_FOR_ITEM;
movementParams = { time: ANIMATION_TIME_OUT,
transition: 'easeInOutQuad',
delay: delay,
x: adjustedSourcePositionX,
y: adjustedSourcePositionY,
scale_x: scaleX,
scale_y: scaleY,
onComplete: Lang.bind(this, function() {
if (isLastItem) {
this._animationDone();
this._restoreItemsOpacity();
}
actor.reactive = true;
actorClone.destroy();
})};
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
transition: 'easeInOutQuad',
delay: ANIMATION_TIME_OUT + delay - ANIMATION_FADE_IN_TIME_FOR_ITEM,
opacity: 0 };
}
Tweener.addTween(actorClone, movementParams);
Tweener.addTween(actorClone, fadeParams);
}
},
_restoreItemsOpacity: function() {
for (let index = 0; index < this._items.length; index++) {
this._items[index].actor.opacity = 255;
}
},
_getAllocatedChildSizeAndSpacing: function(child) {
let [,, natWidth, natHeight] = child.get_preferred_size();
let width = Math.min(this._getHItemSize(), natWidth);
let xSpacing = Math.max(0, width - natWidth) / 2;
let height = Math.min(this._getVItemSize(), natHeight);
let ySpacing = Math.max(0, height - natHeight) / 2;
return [width, height, xSpacing, ySpacing];
},
_calculateChildBox: function(child, x, y, box) { _calculateChildBox: function(child, x, y, box) {
let [childMinWidth, childMinHeight, childNaturalWidth, childNaturalHeight] =
child.get_preferred_size();
/* Center the item in its allocation horizontally */ /* Center the item in its allocation horizontally */
let [width, height, childXSpacing, childYSpacing] = let width = Math.min(this._getHItemSize(), childNaturalWidth);
this._getAllocatedChildSizeAndSpacing(child); let childXSpacing = Math.max(0, width - childNaturalWidth) / 2;
let height = Math.min(this._getVItemSize(), childNaturalHeight);
let childYSpacing = Math.max(0, height - childNaturalHeight) / 2;
let childBox = new Clutter.ActorBox(); let childBox = new Clutter.ActorBox();
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) { if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) {
@@ -802,7 +546,6 @@ const PaginatedIconGrid = new Lang.Class({
_init: function(params) { _init: function(params) {
this.parent(params); this.parent(params);
this._nPages = 0; this._nPages = 0;
this.currentPage = 0;
this._rowsPerPage = 0; this._rowsPerPage = 0;
this._spaceBetweenPages = 0; this._spaceBetweenPages = 0;
this._childrenPerPage = 0; this._childrenPerPage = 0;
@@ -866,15 +609,6 @@ const PaginatedIconGrid = new Lang.Class({
} }
}, },
// Overriden from IconGrid
_getChildrenToAnimate: function() {
let children = this._getVisibleChildren();
let firstIndex = this._childrenPerPage * this.currentPage;
let lastIndex = firstIndex + this._childrenPerPage;
return children.slice(firstIndex, lastIndex);
},
_computePages: function (availWidthPerPage, availHeightPerPage) { _computePages: function (availWidthPerPage, availHeightPerPage) {
let [nColumns, usedWidth] = this._computeLayout(availWidthPerPage); let [nColumns, usedWidth] = this._computeLayout(availWidthPerPage);
let nRows; let nRows;

View File

@@ -23,12 +23,6 @@ const KEYBOARD_TYPE = 'keyboard-type';
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications'; const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
const SHOW_KEYBOARD = 'screen-keyboard-enabled'; const SHOW_KEYBOARD = 'screen-keyboard-enabled';
const CURSOR_BUS_NAME = 'org.gnome.SettingsDaemon.Cursor';
const CURSOR_OBJECT_PATH = '/org/gnome/SettingsDaemon/Cursor';
const CARIBOU_BUS_NAME = 'org.gnome.Caribou.Daemon';
const CARIBOU_OBJECT_PATH = '/org/gnome/Caribou/Daemon';
const CaribouKeyboardIface = '<node> \ const CaribouKeyboardIface = '<node> \
<interface name="org.gnome.Caribou.Keyboard"> \ <interface name="org.gnome.Caribou.Keyboard"> \
<method name="Show"> \ <method name="Show"> \
@@ -53,22 +47,6 @@ const CaribouKeyboardIface = '<node> \
</interface> \ </interface> \
</node>'; </node>';
const CaribouDaemonIface = '<node> \
<interface name="org.gnome.Caribou.Daemon"> \
<method name="Run" /> \
<method name="Quit" /> \
</interface> \
</node>';
const CursorManagerIface = '<node> \
<interface name="org.gnome.SettingsDaemon.Cursor"> \
<property name="ShowOSK" type="b" access="read" /> \
</interface> \
</node>';
const CaribouDaemonProxy = Gio.DBusProxy.makeProxyWrapper(CaribouDaemonIface);
const CursorManagerProxy = Gio.DBusProxy.makeProxyWrapper(CursorManagerIface);
const Key = new Lang.Class({ const Key = new Lang.Class({
Name: 'Key', Name: 'Key',
@@ -112,6 +90,25 @@ const Key = new Lang.Class({
key.release(); key.release();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
})); }));
button.connect('touch-event', Lang.bind(this,
function (actor, event) {
let device = event.get_device();
let sequence = event.get_event_sequence();
if (!this._touchPressed &&
event.type() == Clutter.EventType.TOUCH_BEGIN) {
device.sequence_grab(sequence, actor);
this._touchPressed = true;
key.press();
} else if (this._touchPressed &&
event.type() == Clutter.EventType.TOUCH_END &&
device.sequence_get_grabbed_actor(sequence) == actor) {
device.sequence_ungrab(sequence);
this._touchPressed = false;
key.release();
}
return Clutter.EVENT_PROPAGATE;
}));
return button; return button;
}, },
@@ -173,32 +170,10 @@ const Keyboard = new Lang.Class({
this._timestamp = global.display.get_current_time_roundtrip(); this._timestamp = global.display.get_current_time_roundtrip();
this._keyboardSettings = new Gio.Settings({ schema_id: KEYBOARD_SCHEMA }); this._keyboardSettings = new Gio.Settings({ schema_id: KEYBOARD_SCHEMA });
this._keyboardSettings.connect('changed', Lang.bind(this, this._sync)); this._keyboardSettings.connect('changed', Lang.bind(this, this._settingsChanged));
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA }); this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._sync)); this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._settingsChanged));
this._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, CURSOR_BUS_NAME, 0, this._settingsChanged();
Lang.bind(this, this._sync),
Lang.bind(this, this._sync));
this._daemonProxy = new CaribouDaemonProxy(Gio.DBus.session, CARIBOU_BUS_NAME,
CARIBOU_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
}));
this._cursorProxy = new CursorManagerProxy(Gio.DBus.session, CURSOR_BUS_NAME,
CURSOR_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
this._cursorProxy.connect('g-properties-changed',
Lang.bind(this, this._sync));
this._sync();
}));
this._sync();
this._showIdleId = 0; this._showIdleId = 0;
this._subkeysBoxPointer = null; this._subkeysBoxPointer = null;
@@ -216,9 +191,8 @@ const Keyboard = new Lang.Class({
this._redraw(); this._redraw();
}, },
_sync: function () { _settingsChanged: function (settings, key) {
this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD) || this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD);
this._cursorProxy.ShowOSK;
if (!this._enableKeyboard && !this._keyboard) if (!this._enableKeyboard && !this._keyboard)
return; return;
if (this._enableKeyboard && this._keyboard && if (this._enableKeyboard && this._keyboard &&
@@ -248,22 +222,9 @@ const Keyboard = new Lang.Class({
this.actor = null; this.actor = null;
this._destroySource(); this._destroySource();
this._daemonProxy.QuitRemote(function (result, error) {
if (error) {
log(error.message);
return;
}
});
}, },
_setupKeyboard: function() { _setupKeyboard: function() {
this._daemonProxy.RunRemote(function (result, error) {
if (error) {
log(error.message);
return;
}
});
this.actor = new St.BoxLayout({ name: 'keyboard', vertical: true, reactive: true }); this.actor = new St.BoxLayout({ name: 'keyboard', vertical: true, reactive: true });
Main.layoutManager.keyboardBox.add_actor(this.actor); Main.layoutManager.keyboardBox.add_actor(this.actor);
Main.layoutManager.trackChrome(this.actor); Main.layoutManager.trackChrome(this.actor);

View File

@@ -361,7 +361,7 @@ const LayoutManager = new Lang.Class({
}, },
_addBackgroundMenu: function(bgManager) { _addBackgroundMenu: function(bgManager) {
BackgroundMenu.addBackgroundMenu(bgManager.backgroundActor, this); BackgroundMenu.addBackgroundMenu(bgManager.background.actor, this);
}, },
_createBackgroundManager: function(monitorIndex) { _createBackgroundManager: function(monitorIndex) {
@@ -378,10 +378,10 @@ const LayoutManager = new Lang.Class({
_showSecondaryBackgrounds: function() { _showSecondaryBackgrounds: function() {
for (let i = 0; i < this.monitors.length; i++) { for (let i = 0; i < this.monitors.length; i++) {
if (i != this.primaryIndex) { if (i != this.primaryIndex) {
let backgroundActor = this._bgManagers[i].backgroundActor; let background = this._bgManagers[i].background;
backgroundActor.show(); background.actor.show();
backgroundActor.opacity = 0; background.actor.opacity = 0;
Tweener.addTween(backgroundActor, Tweener.addTween(background.actor,
{ opacity: 255, { opacity: 255,
time: BACKGROUND_FADE_ANIMATION_TIME, time: BACKGROUND_FADE_ANIMATION_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
@@ -404,7 +404,7 @@ const LayoutManager = new Lang.Class({
this._bgManagers.push(bgManager); this._bgManagers.push(bgManager);
if (i != this.primaryIndex && this._startingUp) if (i != this.primaryIndex && this._startingUp)
bgManager.backgroundActor.hide(); bgManager.background.actor.hide();
} }
}, },

View File

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

View File

@@ -15,7 +15,6 @@ const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
const Tp = imports.gi.TelepathyGLib; const Tp = imports.gi.TelepathyGLib;
const EdgeDragAction = imports.ui.edgeDragAction;
const BoxPointer = imports.ui.boxpointer; const BoxPointer = imports.ui.boxpointer;
const CtrlAltTab = imports.ui.ctrlAltTab; const CtrlAltTab = imports.ui.ctrlAltTab;
const GnomeSession = imports.misc.gnomeSession; const GnomeSession = imports.misc.gnomeSession;
@@ -27,7 +26,6 @@ const PopupMenu = imports.ui.popupMenu;
const Params = imports.misc.params; const Params = imports.misc.params;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const Util = imports.misc.util; const Util = imports.misc.util;
const ViewSelector = imports.ui.viewSelector;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
@@ -1812,13 +1810,6 @@ const MessageTray = new Lang.Class({
y_expand: true }); y_expand: true });
this.actor.add_actor(this._summary); 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._summaryMotionId = 0;
this._summaryBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM, this._summaryBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM,
@@ -1942,13 +1933,6 @@ const MessageTray = new Lang.Class({
this._messageTrayMenuButton = new MessageTrayMenuButton(this); this._messageTrayMenuButton = new MessageTrayMenuButton(this);
this.actor.add_actor(this._messageTrayMenuButton.actor); 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);
}, },
close: function() { close: function() {
@@ -2041,16 +2025,6 @@ const MessageTray = new Lang.Class({
return GLib.SOURCE_REMOVE; 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) { _onNotificationKeyRelease: function(actor, event) {
if (event.get_key_symbol() == Clutter.KEY_Escape && event.get_state() == 0) { if (event.get_key_symbol() == Clutter.KEY_Escape && event.get_state() == 0) {
this._expireNotification(); this._expireNotification();

View File

@@ -193,9 +193,11 @@ const Overview = new Lang.Class({
_unshadeBackgrounds: function() { _unshadeBackgrounds: function() {
let backgrounds = this._backgroundGroup.get_children(); let backgrounds = this._backgroundGroup.get_children();
for (let i = 0; i < backgrounds.length; i++) { for (let i = 0; i < backgrounds.length; i++) {
Tweener.addTween(backgrounds[i], let background = backgrounds[i]._delegate;
Tweener.addTween(background,
{ brightness: 1.0, { brightness: 1.0,
vignette_sharpness: 0.0, vignetteSharpness: 0.0,
time: SHADE_ANIMATION_TIME, time: SHADE_ANIMATION_TIME,
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
@@ -205,9 +207,11 @@ const Overview = new Lang.Class({
_shadeBackgrounds: function() { _shadeBackgrounds: function() {
let backgrounds = this._backgroundGroup.get_children(); let backgrounds = this._backgroundGroup.get_children();
for (let i = 0; i < backgrounds.length; i++) { for (let i = 0; i < backgrounds.length; i++) {
Tweener.addTween(backgrounds[i], let background = backgrounds[i]._delegate;
Tweener.addTween(background,
{ brightness: Lightbox.VIGNETTE_BRIGHTNESS, { brightness: Lightbox.VIGNETTE_BRIGHTNESS,
vignette_sharpness: Lightbox.VIGNETTE_SHARPNESS, vignetteSharpness: Lightbox.VIGNETTE_SHARPNESS,
time: SHADE_ANIMATION_TIME, time: SHADE_ANIMATION_TIME,
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
@@ -435,17 +439,17 @@ const Overview = new Lang.Class({
this._inDrag = false; this._inDrag = false;
}, },
beginWindowDrag: function(window) { beginWindowDrag: function(clone) {
this.emit('window-drag-begin', window); this.emit('window-drag-begin', clone);
this._inDrag = true; this._inDrag = true;
}, },
cancelledWindowDrag: function(window) { cancelledWindowDrag: function(clone) {
this.emit('window-drag-cancelled', window); this.emit('window-drag-cancelled', clone);
}, },
endWindowDrag: function(window) { endWindowDrag: function(clone) {
this.emit('window-drag-end', window); this.emit('window-drag-end', clone);
this._inDrag = false; this._inDrag = false;
}, },
@@ -671,10 +675,6 @@ const Overview = new Lang.Class({
this.hide(); this.hide();
else else
this.show(); this.show();
},
getShowAppsButton: function() {
return this._dash.showAppsButton;
} }
}); });
Signals.addSignalMethods(Overview.prototype); Signals.addSignalMethods(Overview.prototype);

View File

@@ -36,7 +36,7 @@ const SlideLayout = new Lang.Class({
_init: function(params) { _init: function(params) {
this._slideX = 1; this._slideX = 1;
this._translationX = undefined; this._translationX = 0;
this._direction = SlideDirection.LEFT; this._direction = SlideDirection.LEFT;
this.parent(params); this.parent(params);
@@ -161,8 +161,7 @@ const SlidingControl = new Lang.Class({
let translationEnd = 0; let translationEnd = 0;
let translation = this._getTranslation(); let translation = this._getTranslation();
let shouldShow = (this._getSlide() > 0); if (this._visible) {
if (shouldShow) {
translationStart = translation; translationStart = translation;
} else { } else {
translationEnd = translation; translationEnd = translation;
@@ -178,8 +177,8 @@ const SlidingControl = new Lang.Class({
}, },
_onOverviewHiding: function() { _onOverviewHiding: function() {
// We need to explicitly slideOut since showing pages // We need to explicitily slideOut since showing pages
// doesn't imply sliding out, instead, hiding the overview does. // doesn't implies to slide out, instead, hiding the overview does.
this.slideOut(); this.slideOut();
}, },
@@ -193,7 +192,7 @@ const SlidingControl = new Lang.Class({
_onDragBegin: function() { _onDragBegin: function() {
this._inDrag = true; this._inDrag = true;
this._updateTranslation(); this.layout.translationX = 0;
this._updateSlide(); this._updateSlide();
}, },
@@ -218,6 +217,7 @@ const SlidingControl = new Lang.Class({
slideIn: function() { slideIn: function() {
this._visible = true; this._visible = true;
this._updateTranslation();
// we will update slideX and the translation from pageEmpty // we will update slideX and the translation from pageEmpty
}, },

View File

@@ -101,6 +101,7 @@ const Button = new Lang.Class({
accessible_role: Atk.Role.MENU }); accessible_role: Atk.Role.MENU });
this.actor.connect('event', Lang.bind(this, this._onEvent)); this.actor.connect('event', Lang.bind(this, this._onEvent));
this.actor.connect('key-press-event', Lang.bind(this, this._onSourceKeyPress));
this.actor.connect('notify::visible', Lang.bind(this, this._onVisibilityChanged)); this.actor.connect('notify::visible', Lang.bind(this, this._onVisibilityChanged));
if (dontCreateMenu) if (dontCreateMenu)
@@ -139,6 +140,26 @@ const Button = new Lang.Class({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, },
_onSourceKeyPress: function(actor, event) {
if (!this.menu)
return Clutter.EVENT_PROPAGATE;
let symbol = event.get_key_symbol();
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
this.menu.toggle();
return Clutter.EVENT_STOP;
} else if (symbol == Clutter.KEY_Escape && this.menu.isOpen) {
this.menu.close();
return Clutter.EVENT_STOP;
} else if (symbol == Clutter.KEY_Down) {
if (!this.menu.isOpen)
this.menu.toggle();
this.menu.actor.navigate_focus(this.actor, Gtk.DirectionType.DOWN, false);
return Clutter.EVENT_STOP;
} else
return Clutter.EVENT_PROPAGATE;
},
_onVisibilityChanged: function() { _onVisibilityChanged: function() {
if (!this.menu) if (!this.menu)
return; return;

View File

@@ -731,10 +731,6 @@ const PopupMenu = new Lang.Class({
global.focus_manager.add_group(this.actor); global.focus_manager.add_group(this.actor);
this.actor.reactive = true; this.actor.reactive = true;
if (this.sourceActor)
this._keyPressId = this.sourceActor.connect('key-press-event',
Lang.bind(this, this._onKeyPress));
this._openedSubMenu = null; this._openedSubMenu = null;
}, },
@@ -745,40 +741,6 @@ const PopupMenu = new Lang.Class({
this._openedSubMenu = submenu; this._openedSubMenu = submenu;
}, },
_onKeyPress: function(actor, event) {
let navKey;
switch (this._boxPointer.arrowSide) {
case St.Side.TOP:
navKey = Clutter.KEY_Down;
break;
case St.Side.BOTTOM:
navKey = Clutter.KEY_Up;
break;
case St.Side.LEFT:
navKey = Clutter.KEY_Right;
break;
case St.Side.RIGHT:
navKey = Clutter.KEY_Left;
break;
}
let symbol = event.get_key_symbol();
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
this.toggle();
return Clutter.EVENT_STOP;
} else if (symbol == Clutter.KEY_Escape && this.isOpen) {
this.close();
return Clutter.EVENT_STOP;
} else if (symbol == navKey) {
if (!this.isOpen)
this.toggle();
this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
return Clutter.EVENT_STOP;
} else
return Clutter.EVENT_PROPAGATE;
},
setArrowOrigin: function(origin) { setArrowOrigin: function(origin) {
this._boxPointer.setArrowOrigin(origin); this._boxPointer.setArrowOrigin(origin);
}, },
@@ -819,12 +781,6 @@ const PopupMenu = new Lang.Class({
this.isOpen = false; this.isOpen = false;
this.emit('open-state-changed', false); this.emit('open-state-changed', false);
},
destroy: function() {
if (this._keyPressId)
this.sourceActor.disconnect(this._keyPressId);
this.parent();
} }
}); });
@@ -918,14 +874,12 @@ const PopupSubMenu = new Lang.Class({
if (animate && needsScrollbar) if (animate && needsScrollbar)
animate = false; animate = false;
let targetAngle = this.actor.text_direction == Clutter.TextDirection.RTL ? -90 : 90;
if (animate) { if (animate) {
let [minHeight, naturalHeight] = this.actor.get_preferred_height(-1); let [minHeight, naturalHeight] = this.actor.get_preferred_height(-1);
this.actor.height = 0; this.actor.height = 0;
this.actor._arrowRotation = this._arrow.rotation_angle_z; this.actor._arrowRotation = this._arrow.rotation_angle_z;
Tweener.addTween(this.actor, Tweener.addTween(this.actor,
{ _arrowRotation: targetAngle, { _arrowRotation: this.actor._arrowRotation + 90,
height: naturalHeight, height: naturalHeight,
time: 0.25, time: 0.25,
onUpdateScope: this, onUpdateScope: this,
@@ -938,7 +892,7 @@ const PopupSubMenu = new Lang.Class({
} }
}); });
} else { } else {
this._arrow.rotation_angle_z = targetAngle; this._arrow.rotation_angle_z = this.actor._arrowRotation + 90;
} }
}, },
@@ -958,7 +912,7 @@ const PopupSubMenu = new Lang.Class({
if (animate) { if (animate) {
this.actor._arrowRotation = this._arrow.rotation_angle_z; this.actor._arrowRotation = this._arrow.rotation_angle_z;
Tweener.addTween(this.actor, Tweener.addTween(this.actor,
{ _arrowRotation: 0, { _arrowRotation: this.actor._arrowRotation - 90,
height: 0, height: 0,
time: 0.25, time: 0.25,
onUpdateScope: this, onUpdateScope: this,
@@ -972,7 +926,7 @@ const PopupSubMenu = new Lang.Class({
}, },
}); });
} else { } else {
this._arrow.rotation_angle_z = 0; this._arrow.rotation_angle_z = this.actor._arrowRotation - 90;
this.actor.hide(); this.actor.hide();
} }
}, },
@@ -1050,6 +1004,8 @@ const PopupSubMenuMenuItem = new Lang.Class({
this._triangleBin = new St.Widget({ y_expand: true, this._triangleBin = new St.Widget({ y_expand: true,
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
this._triangleBin.add_child(this._triangle); 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_child(this._triangleBin);
this.actor.add_accessible_state (Atk.StateType.EXPANDABLE); this.actor.add_accessible_state (Atk.StateType.EXPANDABLE);

View File

@@ -687,10 +687,10 @@ const ScreenShield = new Lang.Class({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
let delta = 0; let delta = 0;
if (event.get_scroll_direction() == Clutter.ScrollDirection.SMOOTH) if (event.get_scroll_direction() == Clutter.ScrollDirection.UP)
delta = Math.abs(event.get_scroll_delta()[0]);
else
delta = 5; delta = 5;
else if (event.get_scroll_direction() == Clutter.ScrollDirection.SMOOTH)
delta = Math.max(0, event.get_scroll_delta()[0]);
this._lockScreenScrollCounter += delta; this._lockScreenScrollCounter += delta;

View File

@@ -2,12 +2,10 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Lang = imports.lang; const Lang = imports.lang;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Signals = imports.signals; const Signals = imports.signals;
const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
const Atk = imports.gi.Atk; const Atk = imports.gi.Atk;
@@ -25,6 +23,108 @@ const SEARCH_PROVIDERS_SCHEMA = 'org.gnome.desktop.search-providers';
const MAX_LIST_SEARCH_RESULTS_ROWS = 3; const MAX_LIST_SEARCH_RESULTS_ROWS = 3;
const MAX_GRID_SEARCH_RESULTS_ROWS = 1; 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({ const MaxWidthBin = new Lang.Class({
Name: 'MaxWidthBin', Name: 'MaxWidthBin',
Extends: St.Bin, Extends: St.Bin,
@@ -64,6 +164,13 @@ const SearchResult = new Lang.Class({
activate: function() { activate: function() {
this.emit('activate', this.metaInfo.id); this.emit('activate', this.metaInfo.id);
},
setSelected: function(selected) {
if (selected)
this.actor.add_style_pseudo_class('selected');
else
this.actor.remove_style_pseudo_class('selected');
} }
}); });
Signals.addSignalMethods(SearchResult.prototype); Signals.addSignalMethods(SearchResult.prototype);
@@ -124,11 +231,59 @@ const GridSearchResult = new Lang.Class({
this.actor.style_class = 'grid-search-result'; this.actor.style_class = 'grid-search-result';
this.icon = new IconGrid.BaseIcon(this.metaInfo['name'], let content = provider.createResultObject(metaInfo);
{ createIcon: this.metaInfo['createIcon'] }); let dragSource = null;
let content = new St.Bin({ child: this.icon.actor });
this.actor.set_child(content); if (content == null) {
this.actor.label_actor = this.icon.label; let actor = new St.Bin();
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
{ createIcon: this.metaInfo['createIcon'] });
actor.set_child(icon.actor);
actor.label_actor = icon.label;
dragSource = icon.icon;
content = { actor: actor, icon: icon };
} else {
if (content.getDragActorSource)
dragSource = content.getDragActorSource();
}
this.actor.set_child(content.actor);
this.actor.label_actor = content.actor.label_actor;
this.icon = content.icon;
let draggable = DND.makeDraggable(this.actor);
draggable.connect('drag-begin',
Lang.bind(this, function() {
Main.overview.beginItemDrag(this);
}));
draggable.connect('drag-cancelled',
Lang.bind(this, function() {
Main.overview.cancelledItemDrag(this);
}));
draggable.connect('drag-end',
Lang.bind(this, function() {
Main.overview.endItemDrag(this);
}));
if (!dragSource)
// not exactly right, but alignment problems are hard to notice
dragSource = content.actor;
this._dragActorSource = dragSource;
},
getDragActorSource: function() {
return this._dragActorSource;
},
getDragActor: function() {
return this.metaInfo['createIcon'](Main.overview.dashIconSize);
},
shellWorkspaceLaunch: function(params) {
if (this.provider.dragActivateResult)
this.provider.dragActivateResult(this.metaInfo.id, params);
else
this.provider.activateResult(this.metaInfo.id, this.terms);
} }
}); });
@@ -160,11 +315,7 @@ const SearchResultsBase = new Lang.Class({
this._terms = []; this._terms = [];
}, },
_createResultDisplay: function(meta) { _clearResultDisplay: function() {
if (this.provider.createResultObject)
return this.provider.createResultObject(meta);
return null;
}, },
clear: function() { clear: function() {
@@ -234,10 +385,9 @@ const SearchResultsBase = new Lang.Class({
let hasMoreResults = results.length < providerResults.length; let hasMoreResults = results.length < providerResults.length;
this._ensureResultActors(results, Lang.bind(this, function(successful) { this._ensureResultActors(results, Lang.bind(this, function(successful) {
if (!successful) { this._clearResultDisplay();
this._clearResultDisplay(); if (!successful)
return; return;
}
// To avoid CSS transitions causing flickering when // To avoid CSS transitions causing flickering when
// the first search result stays the same, we hide the // the first search result stays the same, we hide the
@@ -267,7 +417,6 @@ const ListSearchResults = new Lang.Class({
this.providerIcon.connect('key-focus-in', Lang.bind(this, this._keyFocusIn)); this.providerIcon.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
this.providerIcon.connect('clicked', Lang.bind(this, this.providerIcon.connect('clicked', Lang.bind(this,
function() { function() {
this.providerIcon.animateLaunch();
provider.launchSearch(this._terms); provider.launchSearch(this._terms);
Main.overview.toggle(); Main.overview.toggle();
})); }));
@@ -297,7 +446,7 @@ const ListSearchResults = new Lang.Class({
}, },
_createResultDisplay: function(meta) { _createResultDisplay: function(meta) {
return this.parent(meta) || new ListSearchResult(this.provider, meta); return new ListSearchResult(this.provider, meta);
}, },
_addItem: function(display) { _addItem: function(display) {
@@ -345,7 +494,7 @@ const GridSearchResults = new Lang.Class({
}, },
_createResultDisplay: function(meta) { _createResultDisplay: function(meta) {
return this.parent(meta) || new GridSearchResult(this.provider, meta); return new GridSearchResult(this.provider, meta);
}, },
_addItem: function(display) { _addItem: function(display) {
@@ -397,120 +546,16 @@ const SearchResults = new Lang.Class({
this._statusText = new St.Label({ style_class: 'search-statustext' }); this._statusText = new St.Label({ style_class: 'search-statustext' });
this._statusBin = new St.Bin({ x_align: St.Align.MIDDLE, this._statusBin = new St.Bin({ x_align: St.Align.MIDDLE,
y_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._statusBin.add_actor(this._statusText);
this._highlightDefault = false; this._highlightDefault = false;
this._defaultResult = null; this._defaultResult = null;
this._startingSearch = false;
this._terms = []; this._searchSystem = new SearchSystem();
this._results = {}; this._searchSystem.connect('search-updated', Lang.bind(this, this._updateResults));
this._searchSystem.connect('providers-changed', Lang.bind(this, this._updateProviderDisplays));
this._providers = []; this._updateProviderDisplays();
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));
}, },
_onPan: function(action) { _onPan: function(action) {
@@ -532,23 +577,44 @@ const SearchResults = new Lang.Class({
if (provider.appInfo) if (provider.appInfo)
providerDisplay = new ListSearchResults(provider); providerDisplay = new ListSearchResults(provider);
else else
providerDisplay = new GridSearchResults(provider, this.actor); providerDisplay = new GridSearchResults(provider, this._content);
providerDisplay.connect('key-focus-in', Lang.bind(this, this._keyFocusIn)); providerDisplay.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
this._content.add(providerDisplay.actor); this._content.add(providerDisplay.actor);
provider.display = providerDisplay; provider.display = providerDisplay;
}, },
_updateProviderDisplays: function() {
this._searchSystem.getProviders().forEach(Lang.bind(this, this._ensureProviderDisplay));
},
_clearDisplay: function() { _clearDisplay: function() {
this._providers.forEach(function(provider) { this._searchSystem.getProviders().forEach(function(provider) {
provider.display.clear(); 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() { _maybeSetInitialSelection: function() {
let newDefaultResult = null; let newDefaultResult = null;
let providers = this._providers; let providers = this._searchSystem.getProviders();
for (let i = 0; i < providers.length; i++) { for (let i = 0; i < providers.length; i++) {
let provider = providers[i]; let provider = providers[i];
let display = provider.display; let display = provider.display;
@@ -564,64 +630,54 @@ const SearchResults = new Lang.Class({
} }
if (newDefaultResult != this._defaultResult) { if (newDefaultResult != this._defaultResult) {
this._setSelected(this._defaultResult, false); if (this._defaultResult)
this._setSelected(newDefaultResult, this._highlightDefault); this._defaultResult.setSelected(false);
if (newDefaultResult) {
newDefaultResult.setSelected(this._highlightDefault);
if (this._highlightDefault)
Util.ensureActorVisibleInScrollView(this._scrollView, newDefaultResult.actor);
}
this._defaultResult = newDefaultResult; this._defaultResult = newDefaultResult;
} }
}, },
get searchInProgress() { _updateStatusText: function () {
if (this._startingSearch) let haveResults = this._searchSystem.getProviders().some(function(provider) {
return true;
return this._providers.some(function(provider) {
return provider.searchInProgress;
});
},
_updateSearchProgress: function () {
let haveResults = this._providers.some(function(provider) {
let display = provider.display; let display = provider.display;
return (display.getFirstResult() != null); return (display.getFirstResult() != null);
}); });
this._scrollView.visible = haveResults;
this._statusBin.visible = !haveResults;
if (!haveResults) { if (!haveResults) {
if (this.searchInProgress) { this._statusText.set_text(_("No results."));
this._statusText.set_text(_("Searching…")); this._statusBin.show();
} else { } else {
this._statusText.set_text(_("No results.")); this._statusBin.hide();
}
} }
}, },
_updateResults: function(provider, results) { _updateResults: function(searchSystem, provider, results) {
let terms = this._terms; let terms = searchSystem.getTerms();
let display = provider.display; let display = provider.display;
display.updateSearch(results, terms, Lang.bind(this, function() { display.updateSearch(results, terms, Lang.bind(this, function() {
provider.searchInProgress = false;
this._maybeSetInitialSelection(); this._maybeSetInitialSelection();
this._updateSearchProgress(); this._updateStatusText();
})); }));
}, },
activateDefault: function() { activateDefault: function() {
// If we have a search queued up, force the search now.
if (this._searchTimeoutId > 0)
this._doSearch();
if (this._defaultResult) if (this._defaultResult)
this._defaultResult.activate(); this._defaultResult.activate();
}, },
highlightDefault: function(highlight) { highlightDefault: function(highlight) {
this._highlightDefault = highlight; this._highlightDefault = highlight;
this._setSelected(this._defaultResult, highlight); if (this._defaultResult) {
this._defaultResult.setSelected(highlight);
if (highlight)
Util.ensureActorVisibleInScrollView(this._scrollView, this._defaultResult.actor);
}
}, },
navigateFocus: function(direction) { navigateFocus: function(direction) {
@@ -636,18 +692,6 @@ const SearchResults = new Lang.Class({
let from = this._defaultResult ? this._defaultResult.actor : null; let from = this._defaultResult ? this._defaultResult.actor : null;
this.actor.navigate_focus(from, direction, false); this.actor.navigate_focus(from, direction, false);
},
_setSelected: function(result, selected) {
if (!result)
return;
if (selected) {
result.actor.add_style_pseudo_class('selected');
Util.ensureActorVisibleInScrollView(this._scrollView, result.actor);
} else {
result.actor.remove_style_pseudo_class('selected');
}
} }
}); });
@@ -681,12 +725,5 @@ const ProviderIcon = new Lang.Class({
gicon: provider.appInfo.get_icon() }); gicon: provider.appInfo.get_icon() });
this._content.add_actor(icon); this._content.add_actor(icon);
this._content.add_actor(this.moreIcon); this._content.add_actor(this.moreIcon);
},
animateLaunch: function() {
let appSys = Shell.AppSystem.get_default();
let app = appSys.lookup_app(this.provider.appInfo.get_id());
if (app.state == Shell.AppState.STOPPED)
IconGrid.zoomOutActor(this._content);
} }
}); });

View File

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

View File

@@ -2,6 +2,8 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GnomeDesktop = imports.gi.GnomeDesktop;
const Lang = imports.lang; const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@@ -9,9 +11,16 @@ const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
const Gettext = imports.gettext; const Gettext = imports.gettext;
const IBus = imports.misc.ibusManager.IBus; try {
const IBusManager = imports.misc.ibusManager; var IBus = imports.gi.IBus;
const KeyboardManager = imports.misc.keyboardManager; 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 Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
@@ -19,12 +28,173 @@ const SwitcherPopup = imports.ui.switcherPopup;
const Util = imports.misc.util; const Util = imports.misc.util;
const DESKTOP_INPUT_SOURCES_SCHEMA = 'org.gnome.desktop.input-sources'; const DESKTOP_INPUT_SOURCES_SCHEMA = 'org.gnome.desktop.input-sources';
const KEY_CURRENT_INPUT_SOURCE = 'current';
const KEY_INPUT_SOURCES = 'sources'; const KEY_INPUT_SOURCES = 'sources';
const KEY_KEYBOARD_OPTIONS = 'xkb-options';
const INPUT_SOURCE_TYPE_XKB = 'xkb'; const INPUT_SOURCE_TYPE_XKB = 'xkb';
const INPUT_SOURCE_TYPE_IBUS = 'ibus'; 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({ const LayoutMenuItem = new Lang.Class({
Name: 'LayoutMenuItem', Name: 'LayoutMenuItem',
Extends: PopupMenu.PopupBaseMenuItem, Extends: PopupMenu.PopupBaseMenuItem,
@@ -50,9 +220,16 @@ const InputSource = new Lang.Class({
this._shortName = shortName; this._shortName = shortName;
this.index = index; 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() { get shortName() {
@@ -61,23 +238,21 @@ const InputSource = new Lang.Class({
set shortName(v) { set shortName(v) {
this._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() { activate: function() {
this.emit('activate'); 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); Signals.addSignalMethods(InputSource.prototype);
@@ -90,8 +265,22 @@ const InputSourcePopup = new Lang.Class({
this._action = action; this._action = action;
this._actionBackward = actionBackward; this._actionBackward = actionBackward;
},
_createSwitcher: function() {
this._switcherList = new InputSourceSwitcher(this._items); 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) { _keyPressHandler: function(keysym, action) {
@@ -142,10 +331,25 @@ const InputSourceSwitcher = new Lang.Class({
} }
}); });
const InputSourceManager = new Lang.Class({ const InputSourceIndicator = new Lang.Class({
Name: 'InputSourceManager', Name: 'InputSourceIndicator',
Extends: PanelMenu.Button,
_init: function() { _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 // All valid input sources currently in the gsettings
// KEY_INPUT_SOURCES list indexed by their index there // KEY_INPUT_SOURCES list indexed by their index there
this._inputSources = {}; this._inputSources = {};
@@ -172,20 +376,38 @@ const InputSourceManager = new Lang.Class({
Shell.KeyBindingMode.ALL, Shell.KeyBindingMode.ALL,
Lang.bind(this, this._switchInputSource)); Lang.bind(this, this._switchInputSource));
this._settings = new Gio.Settings({ schema_id: DESKTOP_INPUT_SOURCES_SCHEMA }); 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_INPUT_SOURCES, Lang.bind(this, this._inputSourcesChanged));
this._settings.connect('changed::' + KEY_KEYBOARD_OPTIONS, Lang.bind(this, this._keyboardOptionsChanged));
this._xkbInfo = KeyboardManager.getXkbInfo(); this._xkbInfo = new GnomeDesktop.XkbInfo();
this._keyboardManager = KeyboardManager.getKeyboardManager();
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._ibusReady = false;
this._ibusManager = IBusManager.getIBusManager(); this._ibusManager = new IBusManager(Lang.bind(this, this._ibusReadyCallback));
this._ibusManager.connect('ready', Lang.bind(this, this._ibusReadyCallback));
this._ibusManager.connect('properties-registered', Lang.bind(this, this._ibusPropertiesRegistered)); this._ibusManager.connect('properties-registered', Lang.bind(this, this._ibusPropertiesRegistered));
this._ibusManager.connect('property-updated', Lang.bind(this, this._ibusPropertyUpdated)); 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)); 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._sourcesPerWindow = false;
this._focusWindowNotifyId = 0; this._focusWindowNotifyId = 0;
this._overviewShowingId = 0; this._overviewShowingId = 0;
@@ -194,12 +416,15 @@ const InputSourceManager = new Lang.Class({
this._sourcesPerWindowChanged(); this._sourcesPerWindowChanged();
}, },
reload: function() { _sessionUpdated: function() {
this._keyboardManager.setKeyboardOptions(this._settings.get_strv(KEY_KEYBOARD_OPTIONS)); // re-using "allowSettings" for the keyboard layout is a bit shady,
this._inputSourcesChanged(); // 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) if (this._ibusReady == ready)
return; return;
@@ -211,7 +436,7 @@ const InputSourceManager = new Lang.Class({
_modifiersSwitcher: function() { _modifiersSwitcher: function() {
let sourceIndexes = Object.keys(this._inputSources); let sourceIndexes = Object.keys(this._inputSources);
if (sourceIndexes.length == 0) { if (sourceIndexes.length == 0) {
KeyboardManager.releaseKeyboard(); releaseKeyboard();
return true; return true;
} }
@@ -246,20 +471,42 @@ const InputSourceManager = new Lang.Class({
} }
let popup = new InputSourcePopup(this._mruSources, this._keybindingAction, this._keybindingActionBackward); 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())) if (!popup.show(binding.is_reversed(), binding.get_name(), binding.get_mask()))
popup.destroy(); popup.destroy();
}, },
_keyboardOptionsChanged: function() { _currentInputSourceChanged: function() {
this._keyboardManager.setKeyboardOptions(this._settings.get_strv(KEY_KEYBOARD_OPTIONS)); let nVisibleSources = Object.keys(this._inputSources).length;
this._keyboardManager.reapply(); let newSourceIndex = this._settings.get_uint(KEY_CURRENT_INPUT_SOURCE);
}, let newSource = this._inputSources[newSourceIndex];
_currentInputSourceChanged: function(newSource) {
let oldSource; let oldSource;
[oldSource, this._currentSource] = [this._currentSource, newSource]; [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) for (let i = 1; i < this._mruSources.length; ++i)
if (this._mruSources[i] == newSource) { if (this._mruSources[i] == newSource) {
@@ -271,32 +518,16 @@ const InputSourceManager = new Lang.Class({
this._changePerWindowSource(); 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() { _inputSourcesChanged: function() {
let sources = this._settings.get_value(KEY_INPUT_SOURCES); let sources = this._settings.get_value(KEY_INPUT_SOURCES);
let nSources = sources.n_children(); let nSources = sources.n_children();
for (let i in this._inputSources)
this._inputSources[i].destroy();
this._inputSources = {}; this._inputSources = {};
this._ibusSources = {}; this._ibusSources = {};
this._currentSource = null;
let inputSourcesByShortName = {}; let inputSourcesByShortName = {};
@@ -328,7 +559,10 @@ const InputSourceManager = new Lang.Class({
let is = new InputSource(type, id, displayName, shortName, i); 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)) if (!(is.shortName in inputSourcesByShortName))
inputSourcesByShortName[is.shortName] = []; inputSourcesByShortName[is.shortName] = [];
@@ -340,22 +574,24 @@ const InputSourceManager = new Lang.Class({
this._ibusSources[is.id] = is; this._ibusSources[is.id] = is;
} }
let menuIndex = 0;
for (let i in this._inputSources) { for (let i in this._inputSources) {
let is = this._inputSources[i]; let is = this._inputSources[i];
if (inputSourcesByShortName[is.shortName].length > 1) { if (inputSourcesByShortName[is.shortName].length > 1) {
let sub = inputSourcesByShortName[is.shortName].indexOf(is) + 1; let sub = inputSourcesByShortName[is.shortName].indexOf(is) + 1;
is.shortName += String.fromCharCode(0x2080 + sub); 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 = []; let sourcesList = [];
for (let i in this._inputSources) for (let i in this._inputSources)
sourcesList.push(this._inputSources[i]); sourcesList.push(this._inputSources[i]);
this._keyboardManager.setUserLayouts(sourcesList.map(function(x) { return x.xkbId; }));
let mruSources = []; let mruSources = [];
for (let i = 0; i < this._mruSources.length; i++) { for (let i = 0; i < this._mruSources.length; i++) {
for (let j = 0; j < sourcesList.length; j++) for (let j = 0; j < sourcesList.length; j++)
@@ -367,8 +603,34 @@ const InputSourceManager = new Lang.Class({
} }
this._mruSources = mruSources.concat(sourcesList); this._mruSources = mruSources.concat(sourcesList);
if (this._mruSources.length > 0) this._currentInputSourceChanged();
this._mruSources[0].activate(); },
_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) { _makeEngineShortName: function(engineDesc) {
@@ -391,7 +653,7 @@ const InputSourceManager = new Lang.Class({
source.properties = props; source.properties = props;
if (source == this._currentSource) if (source == this._currentSource)
this.emit('current-source-changed', null); this._currentInputSourceChanged();
}, },
_ibusPropertyUpdated: function(im, engineName, prop) { _ibusPropertyUpdated: function(im, engineName, prop) {
@@ -401,7 +663,7 @@ const InputSourceManager = new Lang.Class({
if (this._updateSubProperty(source.properties, prop) && if (this._updateSubProperty(source.properties, prop) &&
source == this._currentSource) source == this._currentSource)
this.emit('current-source-changed', null); this._currentInputSourceChanged();
}, },
_updateSubProperty: function(props, prop) { _updateSubProperty: function(props, prop) {
@@ -421,6 +683,116 @@ const InputSourceManager = new Lang.Class({
return false; 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) { _getNewInputSource: function(current) {
for (let i in this._inputSources) { for (let i in this._inputSources) {
let is = this._inputSources[i]; let is = this._inputSources[i];
@@ -497,279 +869,15 @@ const InputSourceManager = new Lang.Class({
window._currentSource = this._currentSource; 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) { _containerGetPreferredWidth: function(container, for_height, alloc) {
// Here, and in _containerGetPreferredHeight, we need to query // Here, and in _containerGetPreferredHeight, we need to query
// for the height of all children, but we ignore the results // for the height of all children, but we ignore the results
// for those we don't actually display. // for those we don't actually display.
let max_min_width = 0, max_natural_width = 0; let max_min_width = 0, max_natural_width = 0;
for (let i in this._inputSourceManager.inputSources) { for (let i in this._inputSources) {
let label = this._indicatorLabels[i]; let is = this._inputSources[i];
let [min_width, natural_width] = label.get_preferred_width(for_height); let [min_width, natural_width] = is.indicatorLabel.get_preferred_width(for_height);
max_min_width = Math.max(max_min_width, min_width); max_min_width = Math.max(max_min_width, min_width);
max_natural_width = Math.max(max_natural_width, natural_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) { _containerGetPreferredHeight: function(container, for_width, alloc) {
let max_min_height = 0, max_natural_height = 0; let max_min_height = 0, max_natural_height = 0;
for (let i in this._inputSourceManager.inputSources) { for (let i in this._inputSources) {
let label = this._indicatorLabels[i]; let is = this._inputSources[i];
let [min_height, natural_height] = label.get_preferred_height(for_width); let [min_height, natural_height] = is.indicatorLabel.get_preferred_height(for_width);
max_min_height = Math.max(max_min_height, min_height); max_min_height = Math.max(max_min_height, min_height);
max_natural_height = Math.max(max_natural_height, natural_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.y2 -= box.y1;
box.y1 = 0; box.y1 = 0;
for (let i in this._inputSourceManager.inputSources) { for (let i in this._inputSources) {
let label = this._indicatorLabels[i]; let is = this._inputSources[i];
label.allocate_align_fill(box, 0.5, 0.5, false, false, flags); 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 MAX_ACCURACY_LEVEL = 'max-accuracy-level';
const ENABLED = 'enabled'; const ENABLED = 'enabled';
const GeoclueAccuracyLevel = {
NONE: 0,
COUNTRY: 1,
CITY: 4,
NEIGHBORHOOD: 5,
STREET: 6,
EXACT: 8
};
var GeoclueIface = '<node> \ var GeoclueIface = '<node> \
<interface name="org.freedesktop.GeoClue2.Manager"> \ <interface name="org.freedesktop.GeoClue2.Manager"> \
<property name="InUse" type="b" access="read"/> \ <property name="InUse" type="b" access="read"/> \
@@ -70,7 +61,6 @@ const Indicator = new Lang.Class({
this._item.status.text = _("Enabled"); this._item.status.text = _("Enabled");
this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction)); 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); this.menu.addMenuItem(this._item);
@@ -191,14 +181,10 @@ const Indicator = new Lang.Class({
}, },
_getMaxAccuracyLevel: function() { _getMaxAccuracyLevel: function() {
if (this._settings.get_boolean(ENABLED)) { if (this._settings.get_boolean(ENABLED))
let level = this._settings.get_string(MAX_ACCURACY_LEVEL); return this._settings.get_enum(MAX_ACCURACY_LEVEL);
else
return GeoclueAccuracyLevel[level.toUpperCase()] || return 0;
GeoclueAccuracyLevel.NONE;
} else {
return GeoclueAccuracyLevel.NONE;
}
}, },
_notifyMaxAccuracyLevel: function() { _notifyMaxAccuracyLevel: function() {

View File

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

View File

@@ -19,8 +19,6 @@ const Search = imports.ui.search;
const ShellEntry = imports.ui.shellEntry; const ShellEntry = imports.ui.shellEntry;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const WorkspacesView = imports.ui.workspacesView; const WorkspacesView = imports.ui.workspacesView;
const EdgeDragAction = imports.ui.edgeDragAction;
const IconGrid = imports.ui.iconGrid;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
@@ -51,6 +49,77 @@ function getTermsForSearchString(searchString) {
return terms; return terms;
} }
const EDGE_THRESHOLD = 20;
const DRAG_DISTANCE = 80;
const EdgeDragAction = new Lang.Class({
Name: 'EdgeDragAction',
Extends: Clutter.GestureAction,
_init : function(side) {
this.parent();
this._side = side;
this.set_n_touch_points(1);
global.display.connect('grab-op-begin', Lang.bind(this, function() {
this.cancel();
}));
},
_getMonitorRect : function (x, y) {
let rect = new Meta.Rectangle({ x: x - 1, y: y - 1, width: 1, height: 1 });
let monitorIndex = global.screen.get_monitor_index_for_rect(rect);
return global.screen.get_monitor_geometry(monitorIndex);
},
vfunc_gesture_prepare : function(action, actor) {
if (this.get_n_current_points() == 0)
return false;
let [x, y] = this.get_press_coords(0);
let monitorRect = this._getMonitorRect(x, y);
return ((this._side == St.Side.LEFT && x < monitorRect.x + EDGE_THRESHOLD) ||
(this._side == St.Side.RIGHT && x > monitorRect.x + monitorRect.width - EDGE_THRESHOLD) ||
(this._side == St.Side.TOP && y < monitorRect.y + EDGE_THRESHOLD) ||
(this._side == St.Side.BOTTOM && y > monitorRect.y + monitorRect.height - EDGE_THRESHOLD));
},
vfunc_gesture_progress : function (action, actor) {
let [startX, startY] = this.get_press_coords(0);
let [x, y] = this.get_motion_coords(0);
let offsetX = Math.abs (x - startX);
let offsetY = Math.abs (y - startY);
if (offsetX < EDGE_THRESHOLD && offsetY < EDGE_THRESHOLD)
return true;
if ((offsetX > offsetY &&
(this._side == St.Side.TOP || this._side == St.Side.BOTTOM)) ||
(offsetY > offsetX &&
(this._side == St.Side.LEFT || this._side == St.Side.RIGHT))) {
this.cancel();
return false;
}
return true;
},
vfunc_gesture_end : function (action, actor) {
let [startX, startY] = this.get_press_coords(0);
let [x, y] = this.get_motion_coords(0);
let monitorRect = this._getMonitorRect(startX, startY);
if ((this._side == St.Side.TOP && y > monitorRect.y + DRAG_DISTANCE) ||
(this._side == St.Side.BOTTOM && y < monitorRect.y + monitorRect.height - DRAG_DISTANCE) ||
(this._side == St.Side.LEFT && x > monitorRect.x + DRAG_DISTANCE) ||
(this._side == St.Side.RIGHT && x < monitorRect.x + monitorRect.width - DRAG_DISTANCE))
this.emit('activated');
}
});
Signals.addSignalMethods(EdgeDragAction.prototype);
const ShowOverviewAction = new Lang.Class({ const ShowOverviewAction = new Lang.Class({
Name: 'ShowOverviewAction', Name: 'ShowOverviewAction',
Extends: Clutter.GestureAction, Extends: Clutter.GestureAction,
@@ -125,6 +194,7 @@ const ViewSelector = new Lang.Class({
this._activePage = null; this._activePage = null;
this._searchActive = false; this._searchActive = false;
this._searchTimeoutId = 0;
this._entry = searchEntry; this._entry = searchEntry;
ShellEntry.addContextMenu(this._entry); ShellEntry.addContextMenu(this._entry);
@@ -143,8 +213,12 @@ const ViewSelector = new Lang.Class({
this._entry.set_primary_icon(new St.Icon({ style_class: 'search-entry-icon', this._entry.set_primary_icon(new St.Icon({ style_class: 'search-entry-icon',
icon_name: 'edit-find-symbolic' })); icon_name: 'edit-find-symbolic' }));
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon', if (this._entry.get_text_direction() == Clutter.TextDirection.RTL)
icon_name: 'edit-clear-symbolic' }); 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._iconClickedId = 0;
this._capturedEventId = 0; this._capturedEventId = 0;
@@ -213,7 +287,7 @@ const ViewSelector = new Lang.Class({
let gesture; let gesture;
gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT); gesture = new EdgeDragAction(St.Side.LEFT);
gesture.connect('activated', Lang.bind(this, function() { gesture.connect('activated', Lang.bind(this, function() {
if (Main.overview.visible) if (Main.overview.visible)
Main.overview.hide(); Main.overview.hide();
@@ -297,55 +371,18 @@ const ViewSelector = new Lang.Class({
return page; return page;
}, },
_fadePageIn: function() { _fadePageIn: function(oldPage) {
Tweener.addTween(this._activePage,
{ opacity: 255,
time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME,
transition: 'easeOutQuad'
});
},
_fadePageOut: function(page) {
let oldPage = page;
Tweener.addTween(page,
{ opacity: 0,
time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() {
this._animateIn(oldPage);
})
});
},
_animateIn: function(oldPage) {
if (oldPage) if (oldPage)
oldPage.hide(); oldPage.hide();
this.emit('page-empty'); this.emit('page-empty');
this._activePage.show(); this._activePage.show();
Tweener.addTween(this._activePage,
if (this._activePage == this._appsPage && oldPage == this._workspacesPage) { { opacity: 255,
// Restore opacity, in case we animated via _fadePageOut time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME,
this._activePage.opacity = 255; transition: 'easeOutQuad'
this.appDisplay.animate(IconGrid.AnimationDirection.IN); });
} else {
this._fadePageIn();
}
},
_animateOut: function(page) {
let oldPage = page;
if (page == this._appsPage &&
this._activePage == this._workspacesPage &&
!Main.overview.animationInProgress) {
this.appDisplay.animate(IconGrid.AnimationDirection.OUT, Lang.bind(this,
function() {
this._animateIn(oldPage)
}));
} else {
this._fadePageOut(page);
}
}, },
_showPage: function(page) { _showPage: function(page) {
@@ -360,9 +397,17 @@ const ViewSelector = new Lang.Class({
this.emit('page-changed'); this.emit('page-changed');
if (oldPage) if (oldPage)
this._animateOut(oldPage) Tweener.addTween(oldPage,
{ opacity: 0,
time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this,
function() {
this._fadePageIn(oldPage);
})
});
else else
this._animateIn(); this._fadePageIn();
}, },
_a11yFocusPage: function(page) { _a11yFocusPage: function(page) {
@@ -484,23 +529,36 @@ const ViewSelector = new Lang.Class({
_onTextChanged: function (se, prop) { _onTextChanged: function (se, prop) {
let terms = getTermsForSearchString(this._entry.get_text()); let terms = getTermsForSearchString(this._entry.get_text());
let searchPreviouslyActive = this._searchActive;
this._searchActive = (terms.length > 0); this._searchActive = (terms.length > 0);
this._searchResults.setTerms(terms);
let startSearch = this._searchActive && !searchPreviouslyActive;
if (startSearch)
this._searchResults.startingSearch();
if (this._searchActive) { if (this._searchActive) {
this._showPage(this._searchPage);
this._entry.set_secondary_icon(this._clearIcon); this._entry.set_secondary_icon(this._clearIcon);
if (this._iconClickedId == 0) if (this._iconClickedId == 0)
this._iconClickedId = this._entry.connect('secondary-icon-clicked', this._iconClickedId = this._entry.connect('secondary-icon-clicked',
Lang.bind(this, this.reset)); 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 { } else {
if (this._iconClickedId > 0) { if (this._iconClickedId > 0) {
this._entry.disconnect(this._iconClickedId); this._entry.disconnect(this._iconClickedId);
this._iconClickedId = 0; this._iconClickedId = 0;
} }
if (this._searchTimeoutId > 0) {
Mainloop.source_remove(this._searchTimeoutId);
this._searchTimeoutId = 0;
}
this._entry.set_secondary_icon(null); this._entry.set_secondary_icon(null);
this._searchCancelled(); this._searchCancelled();
} }
@@ -538,6 +596,12 @@ const ViewSelector = new Lang.Class({
this._searchResults.navigateFocus(nextDirection); this._searchResults.navigateFocus(nextDirection);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} else if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) { } 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(); this._searchResults.activateDefault();
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
@@ -560,6 +624,17 @@ const ViewSelector = new Lang.Class({
return Clutter.EVENT_PROPAGATE; 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() { getActivePage: function() {
if (this._activePage == this._workspacesPage) if (this._activePage == this._workspacesPage)
return ViewPage.WINDOWS; return ViewPage.WINDOWS;

View File

@@ -526,11 +526,6 @@ const AppSwitchAction = new Lang.Class({
}, },
vfunc_gesture_prepare : function(action, actor) { vfunc_gesture_prepare : function(action, actor) {
if (Main.overview.visible) {
this.cancel();
return false;
}
return this.get_n_current_points() <= 4; return this.get_n_current_points() <= 4;
}, },

View File

@@ -1209,18 +1209,14 @@ const Workspace = new Lang.Class({
return this._windows.length == 0; return this._windows.length == 0;
}, },
setReservedSlot: function(metaWindow) { setReservedSlot: function(clone) {
if (this._reservedSlotWindow == metaWindow) if (this._reservedSlot == clone)
return; return;
if (!metaWindow || this.containsMetaWindow(metaWindow)) { if (clone && this.containsMetaWindow(clone.metaWindow))
this._reservedSlotWindow = null; clone = null;
this._reservedSlot = null;
} else {
this._reservedSlotWindow = metaWindow;
this._reservedSlot = this._windows[this._lookupIndex(metaWindow)];
}
this._reservedSlot = clone;
this._recalculateWindowPositions(WindowPositionFlags.ANIMATE); this._recalculateWindowPositions(WindowPositionFlags.ANIMATE);
}, },
@@ -1421,6 +1417,10 @@ const Workspace = new Lang.Class({
if (index == -1) if (index == -1)
return; return;
// Check if window still should be here
if (win && this._isMyWindow(win))
return;
let clone = this._windows[index]; let clone = this._windows[index];
this._windows.splice(index, 1); this._windows.splice(index, 1);
@@ -1818,16 +1818,16 @@ const Workspace = new Lang.Class({
Lang.bind(this, this._onCloneSelected)); Lang.bind(this, this._onCloneSelected));
clone.connect('drag-begin', clone.connect('drag-begin',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.beginWindowDrag(clone.metaWindow); Main.overview.beginWindowDrag(clone);
overlay.hide(); overlay.hide();
})); }));
clone.connect('drag-cancelled', clone.connect('drag-cancelled',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.cancelledWindowDrag(clone.metaWindow); Main.overview.cancelledWindowDrag(clone);
})); }));
clone.connect('drag-end', clone.connect('drag-end',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.endWindowDrag(clone.metaWindow); Main.overview.endWindowDrag(clone);
overlay.show(); overlay.show();
})); }));
clone.connect('size-changed', clone.connect('size-changed',

View File

@@ -332,7 +332,7 @@ const WorkspaceThumbnail = new Lang.Class({
let clone = this._windows[i]; let clone = this._windows[i];
let metaWindow = clone.metaWindow; let metaWindow = clone.metaWindow;
if (i == 0) { if (i == 0) {
clone.setStackAbove(this._bgManager.backgroundActor); clone.setStackAbove(this._bgManager.background.actor);
} else { } else {
let previousClone = this._windows[i - 1]; let previousClone = this._windows[i - 1];
clone.setStackAbove(previousClone.actor); clone.setStackAbove(previousClone.actor);
@@ -367,6 +367,10 @@ const WorkspaceThumbnail = new Lang.Class({
if (index == -1) if (index == -1)
return; return;
// Check if window still should be here
if (win && this._isMyWindow(win) && this._isOverviewWindow(win))
return;
let clone = this._windows[index]; let clone = this._windows[index];
this._windows.splice(index, 1); this._windows.splice(index, 1);
@@ -518,20 +522,20 @@ const WorkspaceThumbnail = new Lang.Class({
})); }));
clone.connect('drag-begin', clone.connect('drag-begin',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.beginWindowDrag(clone.metaWindow); Main.overview.beginWindowDrag(clone);
})); }));
clone.connect('drag-cancelled', clone.connect('drag-cancelled',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.cancelledWindowDrag(clone.metaWindow); Main.overview.cancelledWindowDrag(clone);
})); }));
clone.connect('drag-end', clone.connect('drag-end',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.endWindowDrag(clone.metaWindow); Main.overview.endWindowDrag(clone);
})); }));
this._contents.add_actor(clone.actor); this._contents.add_actor(clone.actor);
if (this._windows.length == 0) if (this._windows.length == 0)
clone.setStackAbove(this._bgManager.backgroundActor); clone.setStackAbove(this._bgManager.background.actor);
else else
clone.setStackAbove(this._windows[this._windows.length - 1].actor); clone.setStackAbove(this._windows[this._windows.length - 1].actor);

View File

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

View File

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

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

View File

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

597
po/id.po

File diff suppressed because it is too large Load Diff

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

443
po/pa.po

File diff suppressed because it is too large Load Diff

1003
po/pl.po

File diff suppressed because it is too large Load Diff

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

@@ -101,8 +101,7 @@ shell_public_headers_h = \
shell-tray-manager.h \ shell-tray-manager.h \
shell-util.h \ shell-util.h \
shell-window-tracker.h \ shell-window-tracker.h \
shell-wm.h \ shell-wm.h
$(NULL)
if HAVE_NETWORKMANAGER if HAVE_NETWORKMANAGER
shell_public_headers_h += shell-network-agent.h shell_public_headers_h += shell-network-agent.h

View File

@@ -260,8 +260,6 @@ shell_perf_log_init (void)
static void static void
shell_a11y_init (void) shell_a11y_init (void)
{ {
cally_accessibility_init ();
if (clutter_get_accessibility_enabled () == FALSE) if (clutter_get_accessibility_enabled () == FALSE)
{ {
g_warning ("Accessibility: clutter has no accessibility enabled" g_warning ("Accessibility: clutter has no accessibility enabled"
@@ -424,7 +422,7 @@ main (int argc, char **argv)
meta_set_wm_name (WM_NAME); meta_set_wm_name (WM_NAME);
meta_set_gnome_wm_keybindings (GNOME_WM_KEYBINDINGS); meta_set_gnome_wm_keybindings (GNOME_WM_KEYBINDINGS);
/* Prevent meta_init() from causing gtk to load the atk-bridge*/ /* Prevent meta_init() from causing gtk to load gail and at-bridge */
g_setenv ("NO_AT_BRIDGE", "1", TRUE); g_setenv ("NO_AT_BRIDGE", "1", TRUE);
meta_init (); meta_init ();
g_unsetenv ("NO_AT_BRIDGE"); g_unsetenv ("NO_AT_BRIDGE");

View File

@@ -735,21 +735,14 @@ shell_global_get_display (ShellGlobal *global)
* *
* Gets the list of #MetaWindowActor for the plugin's screen * 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 * GList *
shell_global_get_window_actors (ShellGlobal *global) shell_global_get_window_actors (ShellGlobal *global)
{ {
GList *filtered = NULL;
GList *l;
g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL); g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL);
for (l = meta_get_window_actors (global->meta_screen); l; l = l->next) return meta_get_window_actors (global->meta_screen);
if (!meta_window_actor_is_destroyed (l->data))
filtered = g_list_prepend (filtered, l->data);
return g_list_reverse (filtered);
} }
static void static void

View File

@@ -23,13 +23,6 @@ struct _ShellGLSLQuadPrivate
CoglPipeline *pipeline; CoglPipeline *pipeline;
}; };
static gboolean
shell_glsl_quad_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume)
{
return clutter_paint_volume_set_from_allocation (volume, actor);
}
static void static void
shell_glsl_quad_paint (ClutterActor *actor) shell_glsl_quad_paint (ClutterActor *actor)
{ {
@@ -158,7 +151,6 @@ shell_glsl_quad_class_init (ShellGLSLQuadClass *klass)
gobject_class->constructed = shell_glsl_quad_constructed; gobject_class->constructed = shell_glsl_quad_constructed;
gobject_class->dispose = shell_glsl_quad_dispose; gobject_class->dispose = shell_glsl_quad_dispose;
actor_class->get_paint_volume = shell_glsl_quad_get_paint_volume;
actor_class->paint = shell_glsl_quad_paint; actor_class->paint = shell_glsl_quad_paint;
g_type_class_add_private (klass, sizeof (ShellGLSLQuadPrivate)); g_type_class_add_private (klass, sizeof (ShellGLSLQuadPrivate));

View File

@@ -495,10 +495,6 @@ st_box_layout_get_paint_volume (ClutterActor *actor,
ClutterActorBox content_box; ClutterActorBox content_box;
ClutterVertex origin; 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 /* When have an adjustment we are clipped to the content box, so base
* our paint volume on that. */ * our paint volume on that. */
if (priv->hadjustment || priv->vadjustment) if (priv->hadjustment || priv->vadjustment)

View File

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