Compare commits

..

1 Commits

Author SHA1 Message Date
Jasper St. Pierre
d8009fd826 Fix most of the Cogl deprecation warnings 2013-09-11 15:26:44 -04:00
76 changed files with 7423 additions and 8047 deletions

5
.gitignore vendored
View File

@@ -19,8 +19,6 @@ configure
data/50-gnome-shell-*.xml
data/gnome-shell.desktop
data/gnome-shell.desktop.in
data/gnome-shell-wayland.desktop
data/gnome-shell-wayland.desktop.in
data/gnome-shell-extension-prefs.desktop
data/gnome-shell-extension-prefs.desktop.in
data/gschemas.compiled
@@ -73,14 +71,13 @@ src/calendar-server/evolution-calendar.desktop.in
src/calendar-server/org.gnome.Shell.CalendarServer.service
src/gnome-shell
src/gnome-shell-calendar-server
src/gnome-shell-extension-prefs
src/gnome-shell-extension-tool
src/gnome-shell-extension-prefs
src/gnome-shell-hotplug-sniffer
src/gnome-shell-jhbuild
src/gnome-shell-perf-helper
src/gnome-shell-perf-tool
src/gnome-shell-real
src/gnome-shell-wayland
src/hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service
src/run-js-test
src/test-recorder

39
NEWS
View File

@@ -1,42 +1,3 @@
3.9.92
======
* Don't show page indicators if there's only one page [Florian; #707363]
* Make :active style of app and non-app results consistent [Jakub; #704714]
* Fade app pages when scrolled [Florian; #707409]
* Don't block scrolling on page indicators [Carlos; #707609]
* Tweak visual appearance of folder views [Florian; #707662]
* Don't put minimized apps at the end of the app switcher [Florian; #707663]
* Merge the wayland branch [Giovanni, Neil; #707467]
* Make search entry behave better in RTL locales [Matthias, Florian; #705779]
* Allow to change app pages with pageUp/pageDown keys [Carlos; #707979]
* Set approriate a11y states on expandable menu items [Alejandro; #708038]
* Improve page indicator animation [Carlos; #707565]
* Misc bug fixes and cleanups [Florian, Olivier, Jasper, Giovanni, Magdalen,
Adel, Carlos, Rico, Joanmarie; #707308, #707430, #707508, #707557, #707600,
#707614, #707666, #707814, #707806, #707801, #707889, #707892, #707935,
#707842, #707940, #707996, #708007, #708009, #708020, #707580, #708080]
Contributors:
Magdalen Berns, Olivier Blin, Giovanni Campagna, Matthias Clasen,
Joanmarie Diggs, Adel Gadllah, Florian Müllner, Alejandro Piñeiro,
Neil Roberts, Carlos Soriano, Jasper St. Pierre, Jakub Steiner,
Rico Tzschichholz
Translations:
Rafael Ferreira [pt_BR], Fran Diéguez [gl], Daniel Mustieles [es],
Aurimas Černius [lt], Luca Ferretti [it], Piotr Drąg [pl],
Chao-Hsiung Liao [zh_HK, zh_TW], Timo Jyrinki [fi], Daniel Korostil [uk],
Dušan Kazik [sk], Adam Matoušek [cs], Marek Černocký [cs],
Jiro Matsuzawa [ja], Yuri Myasoedov [ru], Tobias Endrigkeit [de],
Kjartan Maraas [nb], Victor Ibragimov [tg], Мирослав Николић [sr, sr@latin],
A S Alam [pa], Khaled Hosny [ar], Andika Triwidada [id],
Nilamdyuti Goswami [as], Ihar Hrachyshka [be], Rūdolfs Mazurs [lv],
Mattias Põldaru [et], Gabor Kelemen [hu], Bruce Cowan [en_GB],
Matej Urbančič [sl], Enrico Nicoletto [pt_BR], Benjamin Steinwender [de],
Changwoo Ryu [ko], Kris Thomsen [da], Alexandre Franke [fr],
Evgeny Bobkin [ru], Baurzhan Muftakhidinov [kk], Peter Mráz [sk],
Inaki Larranaga Murgoitio [eu], Yosef Or Boczko [he]
3.9.91
======
* Improve submenu styling [Jakub; #706037]

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.9.92],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.9.91],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -60,7 +60,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.13.4
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.35.4
MUTTER_MIN_VERSION=3.9.92
MUTTER_MIN_VERSION=3.9.91
GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3

View File

@@ -3,10 +3,6 @@ dist_wanda_DATA = wanda.png
desktopdir=$(datadir)/applications
desktop_DATA = gnome-shell.desktop gnome-shell-extension-prefs.desktop
if HAVE_MUTTER_WAYLAND
desktop_DATA += gnome-shell-wayland.desktop
endif HAVE_MUTTER_WAYLAND
# We substitute in bindir so it works as an autostart
# file when built in a non-system prefix
@@ -87,7 +83,6 @@ convert_DATA = gnome-shell-overrides.convert
EXTRA_DIST = \
gnome-shell.desktop.in.in \
gnome-shell-wayland.desktop.in.in \
gnome-shell-extension-prefs.desktop.in.in \
$(introspection_DATA) \
$(menu_DATA) \
@@ -97,7 +92,6 @@ EXTRA_DIST = \
CLEANFILES = \
gnome-shell.desktop.in \
gnome-shell-wayland.desktop.in \
gnome-shell-extension-prefs.in \
$(desktop_DATA) \
$(keys_DATA) \

View File

@@ -1,15 +0,0 @@
[Desktop Entry]
Type=Application
_Name=GNOME Shell (wayland compositor)
_Comment=Window management and application launching
Exec=@bindir@/mutter-launch -- gnome-shell-wayland --wayland
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-shell
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=@VERSION@
Categories=GNOME;GTK;Core;
OnlyShowIn=GNOME;
NoDisplay=true
X-GNOME-Autostart-Phase=DisplayServer
X-GNOME-Autostart-Notify=true
X-GNOME-AutoRestart=false

View File

@@ -918,6 +918,7 @@ StScrollBar StButton#vhandle:active {
}
.app-display {
padding: 8px;
spacing: 20px;
}
@@ -941,7 +942,7 @@ StScrollBar StButton#vhandle:active {
}
.page-indicator {
padding: 15px 20px;
padding: 15px 30px;
}
.page-indicator .page-indicator-icon {

View File

@@ -2,7 +2,6 @@
const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const St = imports.gi.St;
const Main = imports.ui.main;
@@ -190,57 +189,28 @@ function insertSorted(array, val, cmp) {
return pos;
}
const CloseButton = new Lang.Class({
Name: 'CloseButton',
Extends: St.Button,
function makeCloseButton() {
let closeButton = new St.Button({ style_class: 'notification-close'});
_init: function(boxpointer) {
this.parent({ style_class: 'notification-close'});
// This is a bit tricky. St.Bin has its own x-align/y-align properties
// that compete with Clutter's properties. This should be fixed for
// Clutter 2.0. Since St.Bin doesn't define its own setters, the
// setters are a workaround to get Clutter's version.
closeButton.set_x_align(Clutter.ActorAlign.END);
closeButton.set_y_align(Clutter.ActorAlign.START);
// This is a bit tricky. St.Bin has its own x-align/y-align properties
// that compete with Clutter's properties. This should be fixed for
// Clutter 2.0. Since St.Bin doesn't define its own setters, the
// setters are a workaround to get Clutter's version.
this.set_x_align(Clutter.ActorAlign.END);
this.set_y_align(Clutter.ActorAlign.START);
// XXX Clutter 2.0 workaround: ClutterBinLayout needs expand
// to respect the alignments.
closeButton.set_x_expand(true);
closeButton.set_y_expand(true);
// XXX Clutter 2.0 workaround: ClutterBinLayout needs expand
// to respect the alignments.
this.set_x_expand(true);
this.set_y_expand(true);
closeButton.connect('style-changed', function() {
let themeNode = closeButton.get_theme_node();
closeButton.translation_x = themeNode.get_length('-shell-close-overlap-x');
closeButton.translation_y = themeNode.get_length('-shell-close-overlap-y');
});
this._boxPointer = boxpointer;
if (boxpointer)
this._boxPointer.connect('arrow-side-changed', Lang.bind(this, this._sync));
},
_computeBoxPointerOffset: function() {
if (!this._boxPointer || !this._boxPointer.actor.get_stage())
return 0;
let side = this._boxPointer.arrowSide;
if (side == St.Side.TOP)
return this._boxPointer.getArrowHeight();
else
return 0;
},
_sync: function() {
let themeNode = this.get_theme_node();
let offY = this._computeBoxPointerOffset();
this.translation_x = themeNode.get_length('-shell-close-overlap-x')
this.translation_y = themeNode.get_length('-shell-close-overlap-y') + offY;
},
vfunc_style_changed: function() {
this._sync();
this.parent();
},
});
function makeCloseButton(boxpointer) {
return new CloseButton(boxpointer);
return closeButton;
}
function ensureActorVisibleInScrollView(scrollView, actor) {

View File

@@ -39,9 +39,12 @@ const FOLDER_SUBICON_FRACTION = .4;
const MIN_FREQUENT_APPS_COUNT = 3;
const INDICATORS_BASE_TIME = 0.25;
const INDICATORS_ANIMATION_DELAY = 0.125;
const INDICATORS_ANIMATION_MAX_TIME = 0.75;
const INDICATORS_ANIMATION_TIME = 0.5;
// 100% means indicators wait for be animated until the previous one
// is animated completely. 0% means all animators are animated
// at once without delay
const INDICATORS_ANIMATION_DELAY_PERCENTAGE = 50;
// Fraction of page height the finger or mouse must reach
// to change page
const PAGE_SWITCH_TRESHOLD = 0.2;
@@ -227,23 +230,24 @@ const PageIndicators = new Lang.Class({
if (children.length == 0)
return;
let offset;
if (this.actor.get_text_direction() == Clutter.TextDirection.RTL)
offset = -children[0].width;
else
offset = children[0].width;
let timePerChild = INDICATORS_ANIMATION_TIME / this._nPages;
let delay = INDICATORS_ANIMATION_DELAY_PERCENTAGE / 100 * timePerChild;
let delay = INDICATORS_ANIMATION_DELAY;
let totalAnimationTime = INDICATORS_BASE_TIME + INDICATORS_ANIMATION_DELAY * this._nPages;
if (totalAnimationTime > INDICATORS_ANIMATION_MAX_TIME)
delay -= (totalAnimationTime - INDICATORS_ANIMATION_MAX_TIME) / this._nPages;
let [stageX, ] = children[0].get_transformed_position();
let offset;
let monitor = Main.layoutManager.primaryMonitor;
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
offset = monitor.x - stageX - children[0].width;
else
offset = monitor.x + monitor.width - stageX;
for (let i = 0; i < this._nPages; i++) {
children[i].translation_x = offset;
Tweener.addTween(children[i],
{ translation_x: 0,
time: INDICATORS_BASE_TIME + delay * i,
transition: 'easeInOutQuad'
time: timePerChild,
delay: delay * i,
transition: 'easeOutQuad'
});
}
}
@@ -333,19 +337,6 @@ const AllView = new Lang.Class({
function() {
this._displayingPopup = false;
}));
this.actor.connect('notify::mapped', Lang.bind(this,
function() {
if (this.actor.mapped) {
this._keyPressEventId =
global.stage.connect('key-press-event',
Lang.bind(this, this._onKeyPressEvent));
} else {
if (this._keyPressEventId)
global.stage.disconnect(this._keyPressEventId);
this._keyPressEventId = 0;
}
}));
},
getCurrentPageY: function() {
@@ -353,8 +344,6 @@ const AllView = new Lang.Class({
},
goToPage: function(pageNumber) {
if(pageNumber < 0 || pageNumber > this._grid.nPages() - 1)
return;
if (this._currentPage == pageNumber && this._displayingPopup && this._currentPopup)
return;
if (this._displayingPopup && this._currentPopup)
@@ -416,13 +405,16 @@ const AllView = new Lang.Class({
_onScroll: function(actor, event) {
if (this._displayingPopup)
return true;
let direction = event.get_scroll_direction();
if (direction == Clutter.ScrollDirection.UP)
this.goToPage(this._currentPage - 1);
else if (direction == Clutter.ScrollDirection.DOWN)
this.goToPage(this._currentPage + 1);
if (direction == Clutter.ScrollDirection.UP) {
if (this._currentPage > 0)
this.goToPage(this._currentPage - 1);
} else {
if (direction == Clutter.ScrollDirection.DOWN) {
if (this._currentPage < (this._grid.nPages() - 1))
this.goToPage(this._currentPage + 1);
}
}
return true;
},
@@ -442,9 +434,9 @@ const AllView = new Lang.Class({
return;
let diffCurrentPage = this._diffToPage(this._currentPage);
if (diffCurrentPage > this._scrollView.height * PAGE_SWITCH_TRESHOLD) {
if (action.get_velocity(0)[2] > 0)
if (action.get_velocity(0)[2] > 0 && this._currentPage > 0)
this.goToPage(this._currentPage - 1);
else
else if (this._currentPage < this._grid.nPages() - 1)
this.goToPage(this._currentPage + 1);
} else {
this.goToPage(this._currentPage);
@@ -452,21 +444,6 @@ const AllView = new Lang.Class({
this._panning = false;
},
_onKeyPressEvent: function(actor, event) {
if (this._displayingPopup)
return true;
if (event.get_key_symbol() == Clutter.Page_Up) {
this.goToPage(this._currentPage - 1);
return true;
} else if (event.get_key_symbol() == Clutter.Page_Down) {
this.goToPage(this._currentPage + 1);
return true;
}
return false;
},
_getItemId: function(item) {
if (item instanceof Shell.App)
return item.get_id();
@@ -1180,7 +1157,7 @@ const AppFolderPopup = new Lang.Class({
this.actor.add_actor(this._boxPointer.actor);
this._boxPointer.bin.set_child(this._view.actor);
this.closeButton = Util.makeCloseButton(this._boxPointer);
this.closeButton = Util.makeCloseButton();
this.closeButton.connect('clicked', Lang.bind(this, this.popdown));
this.actor.add_actor(this.closeButton);

View File

@@ -3,9 +3,8 @@
const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
@@ -62,10 +61,6 @@ const BoxPointer = new Lang.Class({
this._muteInput();
},
get arrowSide() {
return this._arrowSide;
},
_muteInput: function() {
if (this._capturedEventId == 0)
this._capturedEventId = this.actor.connect('captured-event',
@@ -617,8 +612,6 @@ const BoxPointer = new Lang.Class({
this._container.queue_relayout();
return false;
}));
this.emit('arrow-side-changed');
}
},
@@ -651,8 +644,6 @@ const BoxPointer = new Lang.Class({
updateArrowSide: function(side) {
this._arrowSide = side;
this._border.queue_repaint();
this.emit('arrow-side-changed');
},
getPadding: function(side) {
@@ -663,4 +654,3 @@ const BoxPointer = new Lang.Class({
return this.actor.get_theme_node().get_length('-arrow-rise');
}
});
Signals.addSignalMethods(BoxPointer.prototype);

View File

@@ -5,7 +5,6 @@ const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const St = imports.gi.St;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const Tweener = imports.ui.tweener;
@@ -28,9 +27,9 @@ const DragMotionResult = {
};
const DRAG_CURSOR_MAP = {
0: Meta.Cursor.DND_UNSUPPORTED_TARGET,
1: Meta.Cursor.DND_COPY,
2: Meta.Cursor.DND_MOVE
0: Shell.Cursor.DND_UNSUPPORTED_TARGET,
1: Shell.Cursor.DND_COPY,
2: Shell.Cursor.DND_MOVE
};
const DragDropResult = {
@@ -86,6 +85,11 @@ const _Draggable = new Lang.Class({
this.actor.connect('destroy', Lang.bind(this, function() {
this._actorDestroyed = true;
// If the drag actor is destroyed and we were going to fix
// up its hover state, fix up the parent hover state instead
if (this.actor == this._firstLeaveActor)
this._firstLeaveActor = this._dragOrigParent;
if (this._dragInProgress && this._dragCancellable)
this._cancelDrag(global.get_current_time());
this.disconnectAll();
@@ -101,6 +105,12 @@ const _Draggable = new Lang.Class({
this._animationInProgress = false; // The drag is over and the item is in the process of animating to its original position (snapping back or reverting).
this._dragCancellable = true;
// During the drag, we eat enter/leave events so that actors don't prelight.
// But we remember the actors that we first left/last entered so we can
// fix up the hover state after the drag ends.
this._firstLeaveActor = null;
this._lastEnterActor = null;
this._eventsGrabbed = false;
},
@@ -186,6 +196,11 @@ const _Draggable = new Lang.Class({
this._cancelDrag(event.get_time());
return true;
}
} else if (event.type() == Clutter.EventType.LEAVE) {
if (this._firstLeaveActor == null)
this._firstLeaveActor = event.get_source();
} else if (event.type() == Clutter.EventType.ENTER) {
this._lastEnterActor = event.get_source();
}
return false;
@@ -229,7 +244,7 @@ const _Draggable = new Lang.Class({
if (this._onEventId)
this._ungrabActor();
this._grabEvents();
global.screen.set_cursor(Meta.Cursor.DND_IN_DRAG);
global.set_cursor(Shell.Cursor.DND_IN_DRAG);
this._dragX = this._dragStartX = stageX;
this._dragY = this._dragStartY = stageY;
@@ -359,7 +374,7 @@ const _Draggable = new Lang.Class({
if (motionFunc) {
let result = motionFunc(dragEvent);
if (result != DragMotionResult.CONTINUE) {
global.screen.set_cursor(DRAG_CURSOR_MAP[result]);
global.set_cursor(DRAG_CURSOR_MAP[result]);
return false;
}
}
@@ -377,13 +392,13 @@ const _Draggable = new Lang.Class({
targY,
0);
if (result != DragMotionResult.CONTINUE) {
global.screen.set_cursor(DRAG_CURSOR_MAP[result]);
global.set_cursor(DRAG_CURSOR_MAP[result]);
return false;
}
}
target = target.get_parent();
}
global.screen.set_cursor(Meta.Cursor.DND_IN_DRAG);
global.set_cursor(Shell.Cursor.DND_IN_DRAG);
return false;
},
@@ -455,7 +470,7 @@ const _Draggable = new Lang.Class({
}
this._dragInProgress = false;
global.screen.set_cursor(Meta.Cursor.DEFAULT);
global.unset_cursor();
this.emit('drag-end', event.get_time(), true);
this._dragComplete();
return true;
@@ -507,7 +522,7 @@ const _Draggable = new Lang.Class({
let [snapBackX, snapBackY, snapBackScale] = this._getRestoreLocation();
if (this._actorDestroyed) {
global.screen.set_cursor(Meta.Cursor.DEFAULT);
global.unset_cursor();
if (!this._buttonDown)
this._dragComplete();
this.emit('drag-end', eventTime, false);
@@ -561,7 +576,7 @@ const _Draggable = new Lang.Class({
} else {
dragActor.destroy();
}
global.screen.set_cursor(Meta.Cursor.DEFAULT);
global.unset_cursor();
this.emit('drag-end', eventTime, false);
this._animationInProgress = false;
@@ -569,12 +584,33 @@ const _Draggable = new Lang.Class({
this._dragComplete();
},
// Actor is an actor we have entered or left during the drag; call
// st_widget_sync_hover on all StWidget ancestors
_syncHover: function(actor) {
while (actor) {
let parent = actor.get_parent();
if (actor instanceof St.Widget)
actor.sync_hover();
actor = parent;
}
},
_dragComplete: function() {
if (!this._actorDestroyed)
Shell.util_set_hidden_from_pick(this._dragActor, false);
this._ungrabEvents();
global.sync_pointer();
if (this._firstLeaveActor) {
this._syncHover(this._firstLeaveActor);
this._firstLeaveActor = null;
}
if (this._lastEnterActor) {
this._syncHover(this._lastEnterActor);
this._lastEnterActor = null;
}
if (this._updateHoverId) {
GLib.source_remove(this._updateHoverId);

View File

@@ -1072,15 +1072,15 @@ const LookingGlass = new Lang.Class({
let myWidth = primary.width * 0.7;
let availableHeight = primary.height - Main.layoutManager.keyboardBox.height;
let myHeight = Math.min(primary.height * 0.7, availableHeight * 0.9);
this.actor.x = primary.x + (primary.width - myWidth) / 2;
this._hiddenY = primary.y + Main.layoutManager.panelBox.height - myHeight - 4; // -4 to hide the top corners
this.actor.x = (primary.width - myWidth) / 2;
this._hiddenY = Main.layoutManager.panelBox.height - myHeight - 4; // -4 to hide the top corners
this._targetY = this._hiddenY + myHeight;
this.actor.y = this._hiddenY;
this.actor.width = myWidth;
this.actor.height = myHeight;
this._objInspector.actor.set_size(Math.floor(myWidth * 0.8), Math.floor(myHeight * 0.8));
this._objInspector.actor.set_position(this.actor.x + Math.floor(myWidth * 0.1),
this._targetY + Math.floor(myHeight * 0.1));
this._objInspector.actor.set_position(primary.x + this.actor.x + Math.floor(myWidth * 0.1),
primary.y + this._targetY + Math.floor(myHeight * 0.1));
},
insertObject: function(obj) {

View File

@@ -57,20 +57,6 @@ const Magnifier = new Lang.Class({
// Magnifier is a manager of ZoomRegions.
this._zoomRegions = [];
// Export to dbus.
magDBusService = new MagnifierDBus.ShellMagnifier();
let showAtLaunch = this._settingsInit();
this.setActive(showAtLaunch);
},
_initialize: function() {
if (this._initialized)
return;
this._initialized = true;
this._settingsInitLate();
// Create small clutter tree for the magnified mouse.
let cursorTracker = Meta.CursorTracker.get_for_screen(global.screen);
this._mouseSprite = new Clutter.Texture();
@@ -86,11 +72,15 @@ const Magnifier = new Lang.Class({
let aZoomRegion = new ZoomRegion(this, this._cursorRoot);
this._zoomRegions.push(aZoomRegion);
this._settingsInitRegion(aZoomRegion);
let showAtLaunch = this._settingsInit(aZoomRegion);
aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse);
cursorTracker.connect('cursor-changed', Lang.bind(this, this._updateMouseSprite));
this._cursorTracker = cursorTracker;
// Export to dbus.
magDBusService = new MagnifierDBus.ShellMagnifier();
this.setActive(showAtLaunch);
},
/**
@@ -98,7 +88,7 @@ const Magnifier = new Lang.Class({
* Show the system mouse pointer.
*/
showSystemCursor: function() {
this._cursorTracker.set_pointer_visible(true);
global.stage.show_cursor();
},
/**
@@ -106,7 +96,7 @@ const Magnifier = new Lang.Class({
* Hide the system mouse pointer.
*/
hideSystemCursor: function() {
this._cursorTracker.set_pointer_visible(false);
global.stage.hide_cursor();
},
/**
@@ -115,12 +105,6 @@ const Magnifier = new Lang.Class({
* @activate: Boolean to activate or de-activate the magnifier.
*/
setActive: function(activate) {
if (activate == this.isActive())
return;
if (activate)
this._initialize();
this._zoomRegions.forEach (function(zoomRegion, index, array) {
zoomRegion.setActive(activate);
});
@@ -133,7 +117,7 @@ const Magnifier = new Lang.Class({
// Make sure system mouse pointer is shown when all zoom regions are
// invisible.
if (!activate)
this._cursorTracker.set_pointer_visible(true);
global.stage.show_cursor();
// Notify interested parties of this change
this.emit('active-changed', activate);
@@ -448,68 +432,64 @@ const Magnifier = new Lang.Class({
this._mouseSprite.set_anchor_point(xHot, yHot);
},
_settingsInitRegion: function(zoomRegion) {
// Mag factor is accurate to two decimal places.
let aPref = parseFloat(this._settings.get_double(MAG_FACTOR_KEY).toFixed(2));
if (aPref != 0.0)
zoomRegion.setMagFactor(aPref, aPref);
aPref = this._settings.get_enum(SCREEN_POSITION_KEY);
if (aPref)
zoomRegion.setScreenPosition(aPref);
zoomRegion.setLensMode(this._settings.get_boolean(LENS_MODE_KEY));
zoomRegion.setClampScrollingAtEdges(!this._settings.get_boolean(CLAMP_MODE_KEY));
aPref = this._settings.get_enum(MOUSE_TRACKING_KEY);
if (aPref)
zoomRegion.setMouseTrackingMode(aPref);
aPref = this._settings.get_enum(FOCUS_TRACKING_KEY);
if (aPref)
zoomRegion.setFocusTrackingMode(aPref);
aPref = this._settings.get_enum(CARET_TRACKING_KEY);
if (aPref)
zoomRegion.setCaretTrackingMode(aPref);
aPref = this._settings.get_boolean(INVERT_LIGHTNESS_KEY);
if (aPref)
zoomRegion.setInvertLightness(aPref);
aPref = this._settings.get_double(COLOR_SATURATION_KEY);
if (aPref)
zoomRegion.setColorSaturation(aPref);
let bc = {};
bc.r = this._settings.get_double(BRIGHT_RED_KEY);
bc.g = this._settings.get_double(BRIGHT_GREEN_KEY);
bc.b = this._settings.get_double(BRIGHT_BLUE_KEY);
zoomRegion.setBrightness(bc);
bc.r = this._settings.get_double(CONTRAST_RED_KEY);
bc.g = this._settings.get_double(CONTRAST_GREEN_KEY);
bc.b = this._settings.get_double(CONTRAST_BLUE_KEY);
zoomRegion.setContrast(bc);
},
_settingsInit: function() {
_settingsInit: function(zoomRegion) {
this._appSettings = new Gio.Settings({ schema: APPLICATIONS_SCHEMA });
this._settings = new Gio.Settings({ schema: MAGNIFIER_SCHEMA });
this._appSettings.connect('changed::' + SHOW_KEY, Lang.bind(this, function() {
let active = this._appSettings.get_boolean(SHOW_KEY);
this.setActive(active);
}));
if (zoomRegion) {
// Mag factor is accurate to two decimal places.
let aPref = parseFloat(this._settings.get_double(MAG_FACTOR_KEY).toFixed(2));
if (aPref != 0.0)
zoomRegion.setMagFactor(aPref, aPref);
return this._appSettings.get_boolean(SHOW_KEY);
},
aPref = this._settings.get_enum(SCREEN_POSITION_KEY);
if (aPref)
zoomRegion.setScreenPosition(aPref);
zoomRegion.setLensMode(this._settings.get_boolean(LENS_MODE_KEY));
zoomRegion.setClampScrollingAtEdges(!this._settings.get_boolean(CLAMP_MODE_KEY));
aPref = this._settings.get_enum(MOUSE_TRACKING_KEY);
if (aPref)
zoomRegion.setMouseTrackingMode(aPref);
aPref = this._settings.get_enum(FOCUS_TRACKING_KEY);
if (aPref)
zoomRegion.setFocusTrackingMode(aPref);
aPref = this._settings.get_enum(CARET_TRACKING_KEY);
if (aPref)
zoomRegion.setCaretTrackingMode(aPref);
aPref = this._settings.get_boolean(INVERT_LIGHTNESS_KEY);
if (aPref)
zoomRegion.setInvertLightness(aPref);
aPref = this._settings.get_double(COLOR_SATURATION_KEY);
if (aPref)
zoomRegion.setColorSaturation(aPref);
let bc = {};
bc.r = this._settings.get_double(BRIGHT_RED_KEY);
bc.g = this._settings.get_double(BRIGHT_GREEN_KEY);
bc.b = this._settings.get_double(BRIGHT_BLUE_KEY);
zoomRegion.setBrightness(bc);
bc.r = this._settings.get_double(CONTRAST_RED_KEY);
bc.g = this._settings.get_double(CONTRAST_GREEN_KEY);
bc.b = this._settings.get_double(CONTRAST_BLUE_KEY);
zoomRegion.setContrast(bc);
}
_settingsInitLate: function() {
let showCrosshairs = this._settings.get_boolean(SHOW_CROSS_HAIRS_KEY);
this.addCrosshairs();
this.setCrosshairsVisible(showCrosshairs);
this._appSettings.connect('changed::' + SHOW_KEY,
Lang.bind(this, function() {
this.setActive(this._appSettings.get_boolean(SHOW_KEY));
}));
this._settings.connect('changed::' + SCREEN_POSITION_KEY,
Lang.bind(this, this._updateScreenPosition));
this._settings.connect('changed::' + MAG_FACTOR_KEY,
@@ -573,6 +553,8 @@ const Magnifier = new Lang.Class({
Lang.bind(this, function() {
this.setCrosshairsClip(this._settings.get_boolean(CROSS_HAIRS_CLIP_KEY));
}));
return this._appSettings.get_boolean(SHOW_KEY);
},
_updateScreenPosition: function() {
@@ -750,17 +732,14 @@ const ZoomRegion = new Lang.Class({
* @activate: Boolean to show/hide the ZoomRegion.
*/
setActive: function(activate) {
if (activate == this.isActive())
return;
if (activate) {
if (activate && !this.isActive()) {
this._createActors();
if (this._isMouseOverRegion())
this._magnifier.hideSystemCursor();
this._updateMagViewGeometry();
this._updateCloneGeometry();
this._updateMousePosition();
} else {
} else if (!activate && this.isActive()) {
this._destroyActors();
}
},

View File

@@ -215,10 +215,10 @@ const URLHighlighter = new Lang.Class({
let urlId = this._findUrlAtPos(event);
if (urlId != -1 && !this._cursorChanged) {
global.screen.set_cursor(Meta.Cursor.POINTING_HAND);
global.set_cursor(Shell.Cursor.POINTING_HAND);
this._cursorChanged = true;
} else if (urlId == -1) {
global.screen.set_cursor(Meta.Cursor.DEFAULT);
global.unset_cursor();
this._cursorChanged = false;
}
return false;
@@ -229,7 +229,7 @@ const URLHighlighter = new Lang.Class({
if (this._cursorChanged) {
this._cursorChanged = false;
global.screen.set_cursor(Meta.Cursor.DEFAULT);
global.unset_cursor();
}
}));
},

View File

@@ -504,17 +504,6 @@ const MessagesIndicator = new Lang.Class({
}
});
const ControlsLayout = new Lang.Class({
Name: 'ControlsLayout',
Extends: Clutter.BinLayout,
Signals: { 'allocation-changed': { flags: GObject.SignalFlags.RUN_LAST } },
vfunc_allocate: function(container, box, flags) {
this.parent(container, box, flags);
this.emit('allocation-changed');
}
});
const ControlsManager = new Lang.Class({
Name: 'ControlsManager',
@@ -535,8 +524,7 @@ const ControlsManager = new Lang.Class({
this._indicator = new MessagesIndicator(this.viewSelector);
this.indicatorActor = this._indicator.actor;
let layout = new ControlsLayout();
this.actor = new St.Widget({ layout_manager: layout,
this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout(),
reactive: true,
x_expand: true, y_expand: true,
clip_to_allocation: true });
@@ -551,7 +539,7 @@ const ControlsManager = new Lang.Class({
expand: true });
this._group.add_actor(this._thumbnailsSlider.actor);
layout.connect('allocation-changed', Lang.bind(this, this._updateWorkspacesGeometry));
this._group.connect('notify::allocation', Lang.bind(this, this._updateWorkspacesGeometry));
Main.overview.connect('showing', Lang.bind(this, this._updateSpacerVisibility));
Main.overview.connect('item-drag-begin', Lang.bind(this,

View File

@@ -804,7 +804,7 @@ const AggregateMenu = new Lang.Class({
Extends: PanelMenu.Button,
_init: function() {
this.parent(0.0, _("Settings"), false);
this.parent(0.0, _("Settings Menu"), false);
this.menu.actor.add_style_class_name('aggregate-menu');
this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });

View File

@@ -969,7 +969,6 @@ const PopupSubMenuMenuItem = new Lang.Class({
this._triangleBin.set_scale(-1.0, 1.0);
this.actor.add_child(this._triangleBin);
this.actor.add_accessible_state (Atk.StateType.EXPANDABLE);
this.menu = new PopupSubMenu(this.actor, this._triangle);
this.menu.connect('open-state-changed', Lang.bind(this, this._subMenuOpenStateChanged));
@@ -991,11 +990,9 @@ const PopupSubMenuMenuItem = new Lang.Class({
if (open) {
this.actor.add_style_pseudo_class('open');
this._getTopMenu()._setOpenedSubMenu(this.menu);
this.actor.add_accessible_state (Atk.StateType.EXPANDED);
} else {
this.actor.remove_style_pseudo_class('open');
this._getTopMenu()._setOpenedSubMenu(null);
this.actor.remove_accessible_state (Atk.StateType.EXPANDED);
}
},

View File

@@ -584,7 +584,6 @@ const ScreenShield = new Lang.Class({
this._shortLightbox.connect('shown', Lang.bind(this, this._onShortLightboxShown));
this.idleMonitor = Meta.IdleMonitor.get_core();
this._cursorTracker = Meta.CursorTracker.get_for_screen(global.screen);
},
_createBackground: function(monitorIndex) {
@@ -954,7 +953,7 @@ const ScreenShield = new Lang.Class({
this._hideLockScreenComplete();
}
this._cursorTracker.set_pointer_visible(true);
global.stage.show_cursor();
},
_ensureUnlockDialog: function(onPrimary, allowCancel) {
@@ -1087,15 +1086,15 @@ const ScreenShield = new Lang.Class({
this._checkArrowAnimation();
let motionId = global.stage.connect('captured-event', Lang.bind(this, function(stage, event) {
let motionId = global.stage.connect('captured-event', function(stage, event) {
if (event.type() == Clutter.EventType.MOTION) {
this._cursorTracker.set_pointer_visible(true);
global.stage.show_cursor();
global.stage.disconnect(motionId);
}
return false;
}));
this._cursorTracker.set_pointer_visible(false);
});
global.stage.hide_cursor();
this._lockScreenState = MessageTray.State.SHOWN;
this._lockScreenGroup.fixed_position_set = false;

View File

@@ -6,7 +6,6 @@ const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const St = imports.gi.St;
@@ -168,7 +167,7 @@ const SelectArea = new Lang.Class({
if (!Main.pushModal(this._group) || this._group.visible)
return;
global.screen.set_cursor(Meta.Cursor.CROSSHAIR);
global.set_cursor(Shell.Cursor.CROSSHAIR);
this._group.visible = true;
},
@@ -239,7 +238,7 @@ const SelectArea = new Lang.Class({
function() {
Main.popModal(this._group);
this._group.destroy();
global.screen.set_cursor(Meta.Cursor.DEFAULT);
global.unset_cursor();
this.emit('finished', geometry);
})

View File

@@ -3,7 +3,6 @@
const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const Main = imports.ui.main;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const DND = imports.ui.dnd;
@@ -21,8 +20,7 @@ const XdndHandler = new Lang.Class({
Main.uiGroup.add_actor(this._dummy);
this._dummy.hide();
if (!Meta.is_wayland_compositor())
global.init_xdnd();
global.init_xdnd();
global.connect('xdnd-enter', Lang.bind(this, this._onEnter));
global.connect('xdnd-position-changed', Lang.bind(this, this._onPositionChanged));

View File

@@ -4,7 +4,6 @@
data/50-gnome-shell-system.xml.in
data/gnome-shell.desktop.in.in
data/gnome-shell-extension-prefs.desktop.in.in
data/gnome-shell-wayland.desktop.in.in
data/org.gnome.shell.gschema.xml.in.in
js/extensionPrefs/main.js
js/gdm/authPrompt.js

View File

@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-12 17:36+0000\n"
"PO-Revision-Date: 2013-09-13 15:09+0530\n"
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
"PO-Revision-Date: 2013-09-10 20:47+0530\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
"Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
"Language: as_IN\n"
@@ -49,7 +49,6 @@ msgid "GNOME Shell"
msgstr "GNOME শ্বেল"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "উইন্ডো ব্যৱস্থাপনা আৰু এপ্লিকেচনৰ লঞ্চ"
@@ -62,10 +61,6 @@ msgstr "GNOME শ্বেল সম্প্ৰসাৰন পছন্দস
msgid "Configure GNOME Shell Extensions"
msgstr "GNOME শ্বেল সম্প্ৰসাৰনসমূহ সংৰূপণ কৰক"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME শ্বেল (wayland compositor)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -192,10 +187,12 @@ msgstr ""
"কাৰ্য্যসমূহ অভাৰভিউৰ \"এপ্লিকেচনসমূহ দেখুৱাওক\" দৰ্শন খোলিবলে কি'বাইণ্ডিং।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the overview"
msgstr "অভাৰভিউ খোলিবলে কি'বাইণ্ডিং"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the Activities Overview."
msgstr "কাৰ্য্যসমূহ অভাৰভিউ খোলিবলে কি'বাইণ্ডিং"
@@ -306,6 +303,7 @@ msgid "Sign In"
msgstr "ছাইন ইন কৰক"
#: ../js/gdm/loginDialog.js:294
#| msgid "Switch Session"
msgid "Choose Session"
msgstr "অধিবেশন বাছক"
@@ -348,42 +346,42 @@ msgstr "প্ৰমাণীকৰণ ত্ৰুটি"
msgid "(or swipe finger)"
msgstr "(অথবা আঙুলি স্বাইপ কৰক)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "কমান্ড পোৱা নগল"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "কমান্ড বিশ্লেষন কৰিব নোৱাৰি:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "'%s' ৰ প্ৰেৰণ ব্যৰ্থ হল:"
#: ../js/ui/appDisplay.js:573
#: ../js/ui/appDisplay.js:578
msgid "Frequently used applications will appear here"
msgstr "সঘনে ব্যৱহাৰ কৰা এপ্লিকেচনসমূহ ইয়াত উপস্থিত হব"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:694
msgid "Frequent"
msgstr "সঘন"
#: ../js/ui/appDisplay.js:696
#: ../js/ui/appDisplay.js:701
msgid "All"
msgstr "সকলো"
#: ../js/ui/appDisplay.js:1491
#: ../js/ui/appDisplay.js:1488
msgid "New Window"
msgstr "নতুন উইন্ডো"
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1491 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "পছন্দৰ পৰা আতৰাওক"
#: ../js/ui/appDisplay.js:1495
#: ../js/ui/appDisplay.js:1492
msgid "Add to Favorites"
msgstr "পছন্দলে যোগ কৰক"
@@ -928,7 +926,7 @@ msgstr "একাওন্ট দৰ্শন কৰক"
msgid "Unknown reason"
msgstr "অজ্ঞাত কাৰণ"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "উইন্ডোসমূহ"
@@ -1026,12 +1024,15 @@ msgstr[0] "চিস্টেম %d ছেকেণ্ডত স্বচাল
msgstr[1] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।"
#: ../js/ui/endSessionDialog.js:112
#| msgid "Install Updates & Restart"
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "পুনাৰম্ভ কৰক আৰু আপডেইটসমূহ ইনস্টল কৰক"
#: ../js/ui/endSessionDialog.js:114
#, c-format
#| msgid "The system will restart automatically in %d second."
#| msgid_plural "The system will restart automatically in %d seconds."
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
@@ -1076,7 +1077,7 @@ msgstr "ইনস্টল কৰক"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "extensions.gnome.org ৰ পৰা '%s' ক ডাউনল'ড আৰু ইনস্টল কৰিব নে?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "কিবৰ্ড"
@@ -1156,7 +1157,7 @@ msgstr "কোনো বাৰ্তা নাই"
msgid "Message Tray"
msgstr "বাৰ্তা ট্ৰে"
#: ../js/ui/messageTray.js:2787
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "চিস্টেম তথ্য"
@@ -1188,21 +1189,22 @@ msgstr "অভাৰভিউ"
msgid "Type to search…"
msgstr "সন্ধান কৰিবলে টাইপ কৰক…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "প্ৰস্থান কৰক"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "কাৰ্য্যসমূহ"
#: ../js/ui/panel.js:807
#: ../js/ui/panel.js:805
#| msgid "Settings"
msgid "Settings Menu"
msgstr "সংহতিসমূহ মেনু"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:892
msgid "Top Bar"
msgstr "উপৰৰ বাৰ"
@@ -1211,7 +1213,7 @@ msgstr "উপৰৰ বাৰ"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
@@ -1240,7 +1242,7 @@ msgstr[1] "%d নতুন অধিসূচনাসমূহ"
msgid "Lock"
msgstr "লক কৰক"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME এ পৰ্দা লক কৰিব লাগিব"
@@ -1251,11 +1253,11 @@ msgstr "GNOME এ পৰ্দা লক কৰিব লাগিব"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "লক কৰিবলে অক্ষম"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "লক কাৰ্য্য এটা এপ্লিকেচন দ্বাৰা প্ৰতিৰোধ কৰা হৈছিল"
@@ -1354,6 +1356,7 @@ msgstr "ব্লুটুথ সংহতিসমূহ"
#: ../js/ui/status/bluetooth.js:57
#, c-format
#| msgid "Connected (private)"
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d সংযুক্ত ডিভাইচ"
@@ -1403,6 +1406,7 @@ msgstr "%s ৰ কাৰণে যোৰ প্ৰতিশ্ৰুতি"
#: ../js/ui/status/bluetooth.js:172
#, c-format
#| msgid "Please confirm whether the PIN '%06d' matches the one on the device."
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
msgstr "অনুগ্ৰহ কৰি সুনিশ্চিত কৰক যে পাছকি '%06d' ডিভাইচত থকাটোৰ সৈতে মিল খায়।"
@@ -1433,7 +1437,7 @@ msgstr "ঠিক আছে"
msgid "Brightness"
msgstr "উজ্জ্বলতা"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "কিবৰ্ড বিন্যাস দেখুৱাওক"
@@ -1442,6 +1446,7 @@ msgid "<unknown>"
msgstr "<unknown>"
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
#| msgid "Offline"
msgid "Off"
msgstr "অফ"
@@ -1486,18 +1491,22 @@ msgid "connection failed"
msgstr "সংযোগ ব্যৰ্থ"
#: ../js/ui/status/network.js:654
#| msgid "Network"
msgid "Wi-Fi Networks"
msgstr "Wi-Fi নেটৱাৰ্কসমূহ"
#: ../js/ui/status/network.js:656
#| msgid "Enable networking"
msgid "Select a network"
msgstr "এটা নেটৱাৰ্ক বাছক"
#: ../js/ui/status/network.js:680
#| msgid "Network"
msgid "No Networks"
msgstr "কোনো নেটৱাৰ্ক নাই"
#: ../js/ui/status/network.js:949
#| msgid "Network"
msgid "Select Network"
msgstr "নেটৱাৰ্ক বাছক"
@@ -1560,6 +1569,7 @@ msgid "Airplane Mode"
msgstr "বিমান অৱস্থা"
#: ../js/ui/status/rfkill.js:45
#| msgid "Open"
msgid "On"
msgstr "অন"
@@ -1603,11 +1613,11 @@ msgstr "অন্য ব্যৱহাৰকাৰী হিচাপে লগ
msgid "Unlock Window"
msgstr "উইন্ডো আনলক কৰক"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "এপ্লিকেচনসমূহ"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "সন্ধান কৰক"
@@ -1638,6 +1648,7 @@ msgstr "আপুনি এই প্ৰদৰ্শন সংহতিসমূ
#. to avoid ellipsizing the labels.
#.
#: ../js/ui/windowManager.js:75
#| msgid "Power Settings"
msgid "Revert Settings"
msgstr "সংহতিসমূহক পূৰ্ব অৱস্থালৈ নিয়ক"

View File

@@ -12,16 +12,16 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-12 17:36+0000\n"
"PO-Revision-Date: 2013-09-13 08:49+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"POT-Creation-Date: 2013-09-06 09:50+0000\n"
"PO-Revision-Date: 2013-08-31 11:54+0100\n"
"Last-Translator: Adam Matoušek <adamatousek@gmail.com>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Gtranslator 2.91.6\n"
"X-Generator: Poedit 1.5.4\n"
"X-Project-Style: gnome\n"
#: ../data/50-gnome-shell-system.xml.in.h:1
@@ -53,7 +53,6 @@ msgid "GNOME Shell"
msgstr "Prostředí GNOME Shell"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Správa oken a spouštění aplikací"
@@ -66,10 +65,6 @@ msgstr "Předvolby rozšíření GNOME Shell"
msgid "Configure GNOME Shell Extensions"
msgstr "Nastavit rozšíření GNOME Shell"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME Shell (kompozitor Waylandu)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "Povolit přes Alt-F2 vnitřní nástroje určené pro vývojáře a testery"
@@ -344,17 +339,17 @@ msgstr "Chyba ověření"
msgid "(or swipe finger)"
msgstr "(nebo otiskněte prst)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Příkaz nenalezen"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Nelze analyzovat příkaz:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Vykonání „%s“ selhalo:"
@@ -371,15 +366,15 @@ msgstr "Časté"
msgid "All"
msgstr "Všechny"
#: ../js/ui/appDisplay.js:1491
#: ../js/ui/appDisplay.js:1487
msgid "New Window"
msgstr "Nové okno"
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1490 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Odstranit z oblíbených"
#: ../js/ui/appDisplay.js:1495
#: ../js/ui/appDisplay.js:1491
msgid "Add to Favorites"
msgstr "Přidat mezi oblíbené"
@@ -923,7 +918,7 @@ msgstr "Zobrazit účet"
msgid "Unknown reason"
msgstr "Neznámý důvod"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Okna"
@@ -1079,7 +1074,7 @@ msgstr "Instalovat"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Stáhnout a nainstalovat „%s“ z extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Klávesnice"
@@ -1192,21 +1187,21 @@ msgstr "Přehled"
msgid "Type to search…"
msgstr "Vyhledávejte psaním…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Ukončit"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Činnosti"
#: ../js/ui/panel.js:807
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Nabídka Nastavení"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:901
msgid "Top Bar"
msgstr "Horní lišta"
@@ -1215,7 +1210,7 @@ msgstr "Horní lišta"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1245,7 +1240,7 @@ msgstr[2] "%d nových upozornění"
msgid "Lock"
msgstr "Uzamknout"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME potřebuje uzamknout obrazovku"
@@ -1256,11 +1251,11 @@ msgstr "GNOME potřebuje uzamknout obrazovku"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Nelze uzamknout obrazovku"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Zamknutí bylo zablokováno některou z aplikací"
@@ -1439,7 +1434,7 @@ msgstr "Budiž"
msgid "Brightness"
msgstr "Jas"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Zobrazit rozložení klávesnice"
@@ -1609,11 +1604,11 @@ msgstr "Přihlásit se jako jiný uživatel"
msgid "Unlock Window"
msgstr "Odemykací okno"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Aplikace"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Hledat"

1469
po/da.po

File diff suppressed because it is too large Load Diff

View File

@@ -20,16 +20,16 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-12 17:36+0000\n"
"PO-Revision-Date: 2013-09-13 19:29+0100\n"
"Last-Translator: Benjamin Steinwender <b@stbe.at>\n"
"POT-Creation-Date: 2013-09-07 19:18+0000\n"
"PO-Revision-Date: 2013-09-08 00:01+0200\n"
"Last-Translator: Tobias Endrigkeit <tobiasendrigkeit@outlook.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.7\n"
"X-Generator: Gtranslator 2.91.6\n"
#: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System"
@@ -60,7 +60,6 @@ msgid "GNOME Shell"
msgstr "GNOME-Shell"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Fenster verwalten und Anwendungen starten"
@@ -73,10 +72,6 @@ msgstr "Einstellungen für Erweiterungen der GNOME-Shell"
msgid "Configure GNOME Shell Extensions"
msgstr "Erweiterungen der GNOME-Shell einrichten"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME-Shell (Wayland Composition)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "Interne Werkzeuge für Entwickler und Tester mit Alt+F2 aktivieren"
@@ -359,17 +354,17 @@ msgstr "Legitimationsfehler"
msgid "(or swipe finger)"
msgstr "(oder benutzen Sie den Fingerabdruckleser)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Befehl nicht gefunden"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Befehl konnte nicht verarbeitet werden:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Ausführung von »%s« ist gescheitert:"
@@ -945,7 +940,7 @@ msgstr "Konto anzeigen"
msgid "Unknown reason"
msgstr "Unbekannter Grund"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Fenster"
@@ -1093,7 +1088,7 @@ msgstr "Installieren"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "»%s« von extensions.gnome.org herunterladen und installieren?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Tastatur"
@@ -1205,21 +1200,21 @@ msgstr "Übersicht"
msgid "Type to search…"
msgstr "Suchbegriff eingeben …"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Beenden"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Aktivitäten"
#: ../js/ui/panel.js:807
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Einstellungsmenü"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:901
msgid "Top Bar"
msgstr "Oberes Panel"
@@ -1228,7 +1223,7 @@ msgstr "Oberes Panel"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1260,7 +1255,7 @@ msgstr[1] "%d neue Benachrichtigungen"
msgid "Lock"
msgstr "Sperren"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME muss den Bildschirm sperren"
@@ -1271,11 +1266,11 @@ msgstr "GNOME muss den Bildschirm sperren"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Sperrung fehlgeschlagen"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Sperrung wurde von einer Anwendung blockiert"
@@ -1454,7 +1449,7 @@ msgstr "OK"
msgid "Brightness"
msgstr "Helligkeit"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Tastaturbelegung zeigen"
@@ -1624,11 +1619,11 @@ msgstr "Als anderer Benutzer anmelden"
msgid "Unlock Window"
msgstr "Fenster entsperren"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Anwendungen"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Suchen"

1606
po/el.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-12 17:36+0000\n"
"PO-Revision-Date: 2013-09-13 12:41+0200\n"
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
"PO-Revision-Date: 2013-09-03 16:07+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: es\n"
@@ -50,7 +50,6 @@ msgid "GNOME Shell"
msgstr "GNOME Shell"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Gestión de ventanas e inicio de aplicaciones"
@@ -63,10 +62,6 @@ msgstr "Preferencias de las extensiones de GNOME Shell"
msgid "Configure GNOME Shell Extensions"
msgstr "Configurar las extensiones de GNOME Shell"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME Shell (composición wayland)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -349,42 +344,42 @@ msgstr "Error de autenticación"
msgid "(or swipe finger)"
msgstr "(o pase el dedo)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Comando no encontrado"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "No se pudo analizar el comando:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Falló la ejecución de «%s»:"
#: ../js/ui/appDisplay.js:573
#: ../js/ui/appDisplay.js:578
msgid "Frequently used applications will appear here"
msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:694
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:696
#: ../js/ui/appDisplay.js:701
msgid "All"
msgstr "Todas"
#: ../js/ui/appDisplay.js:1491
#: ../js/ui/appDisplay.js:1488
msgid "New Window"
msgstr "Ventana nueva"
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1491 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Quitar de los favoritos"
#: ../js/ui/appDisplay.js:1495
#: ../js/ui/appDisplay.js:1492
msgid "Add to Favorites"
msgstr "Añadir a los favoritos"
@@ -931,7 +926,7 @@ msgstr "Ver cuenta"
msgid "Unknown reason"
msgstr "Razón desconocida"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Ventanas"
@@ -1079,7 +1074,7 @@ msgstr "Instalar"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Teclado"
@@ -1159,7 +1154,7 @@ msgstr "No hay mensajes"
msgid "Message Tray"
msgstr "Bandeja de mensajes"
#: ../js/ui/messageTray.js:2787
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Información del sistema"
@@ -1191,21 +1186,21 @@ msgstr "Vista general"
msgid "Type to search…"
msgstr "Escribir para buscar…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Salir"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Actividades"
#: ../js/ui/panel.js:807
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Menú de configuración"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:892
msgid "Top Bar"
msgstr "Barra superior"
@@ -1214,7 +1209,7 @@ msgstr "Barra superior"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1243,7 +1238,7 @@ msgstr[1] "%d notificaciones nuevas"
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME necesita bloquear la pantalla"
@@ -1254,11 +1249,11 @@ msgstr "GNOME necesita bloquear la pantalla"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "No se pudo bloquear"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Una aplicación impidió el bloqueo"
@@ -1437,7 +1432,7 @@ msgstr "Aceptar"
msgid "Brightness"
msgstr "Brillo"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Mostrar la distribución del teclado"
@@ -1607,11 +1602,11 @@ msgstr "Iniciar sesión como otro usuario"
msgid "Unlock Window"
msgstr "Desbloquear ventana"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Aplicaciones"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Buscar"

832
po/et.po

File diff suppressed because it is too large Load Diff

1493
po/eu.po

File diff suppressed because it is too large Load Diff

1500
po/fr.po

File diff suppressed because it is too large Load Diff

View File

@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-13 10:27+0200\n"
"PO-Revision-Date: 2013-09-13 10:27+0200\n"
"POT-Creation-Date: 2013-09-03 12:56+0200\n"
"PO-Revision-Date: 2013-09-03 12:57+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\n"
@@ -52,7 +52,6 @@ msgid "GNOME Shell"
msgstr "GNOME Shell"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Xestor de xanelas e inicio de aplicativos"
@@ -65,10 +64,6 @@ msgstr "Preferencias das extensións de GNOME Shell"
msgid "Configure GNOME Shell Extensions"
msgstr "Configure as extensións de GNOME Shell"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME Shell (compositor de wayland)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -348,42 +343,42 @@ msgstr "Erro de autenticación"
msgid "(or swipe finger)"
msgstr "(ou pase o dedo)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Orde non atopada"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Non foi posíbel analizar a orde:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Produciuse un fallo na execución de «%s»:"
#: ../js/ui/appDisplay.js:573
#: ../js/ui/appDisplay.js:579
msgid "Frequently used applications will appear here"
msgstr "Os aplicativos usados recentemente aparecerán aquí"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:695
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:696
#: ../js/ui/appDisplay.js:702
msgid "All"
msgstr "Todos"
#: ../js/ui/appDisplay.js:1491
#: ../js/ui/appDisplay.js:1489
msgid "New Window"
msgstr "Xanela nova"
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1492 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Retirar dos marcadores"
#: ../js/ui/appDisplay.js:1495
#: ../js/ui/appDisplay.js:1493
msgid "Add to Favorites"
msgstr "Engadir aos favoritos"
@@ -930,7 +925,7 @@ msgstr "Ver conta"
msgid "Unknown reason"
msgstr "Razón descoñecida"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Xanelas"
@@ -1078,7 +1073,7 @@ msgstr "Instalar"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Desexa descargar e instalar «%s» desde extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Teclado"
@@ -1158,7 +1153,7 @@ msgstr "Non hai mensaxes"
msgid "Message Tray"
msgstr "Bandexa de mensaxes"
#: ../js/ui/messageTray.js:2787
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Información do sistema"
@@ -1190,21 +1185,21 @@ msgstr "Vista xeral"
msgid "Type to search…"
msgstr "Escriba para buscar…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Saír"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Actividades"
#: ../js/ui/panel.js:807
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Menú de preferencias"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:892
msgid "Top Bar"
msgstr "Barra superior"
@@ -1213,7 +1208,7 @@ msgstr "Barra superior"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1242,7 +1237,7 @@ msgstr[1] "%d notificacións novas"
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME precisa bloquear a pantalla"
@@ -1253,11 +1248,11 @@ msgstr "GNOME precisa bloquear a pantalla"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Non foi posíbel bloquear"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Un aplicativo impediu o bloqueo"
@@ -1436,7 +1431,7 @@ msgstr "Aceptar"
msgid "Brightness"
msgstr "Brillo"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Mostrar a distribución do teclado"
@@ -1606,11 +1601,11 @@ msgstr "Iniciar sesión como outro usuario"
msgid "Unlock Window"
msgstr "Desbloquear xanela"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Aplicativos"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Buscar"

1151
po/he.po

File diff suppressed because it is too large Load Diff

879
po/hu.po

File diff suppressed because it is too large Load Diff

342
po/it.po
View File

@@ -8,12 +8,12 @@
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 3.7.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-16 14:29+0200\n"
"PO-Revision-Date: 2013-09-15 18:48+0200\n"
"Project-Id-Version: gnome-shell 3.9.x\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-06 17:26+0000\n"
"PO-Revision-Date: 2013-09-06 22:14+0200\n"
"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
"Language-Team: Italiano <tp@lists.linux.it>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -51,7 +51,6 @@ msgid "GNOME Shell"
msgstr "GNOME Shell"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Gestisce finestre e avvia applicazioni"
@@ -64,10 +63,6 @@ msgstr "Preferenze estensioni di GNOME Shell"
msgid "Configure GNOME Shell Extensions"
msgstr "Configura le estensioni di GNOME Shell"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME Shell (compositor wayland)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -353,42 +348,42 @@ msgstr "Errore di autenticazione"
msgid "(or swipe finger)"
msgstr "(o passare il dito)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Comando non trovato"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Impossibile analizzare il comando:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Esecuzione di «%s» non riuscita:"
#: ../js/ui/appDisplay.js:598
#: ../js/ui/appDisplay.js:573
msgid "Frequently used applications will appear here"
msgstr "Qui saranno mostrate le applicazioni usate frequentemente"
#: ../js/ui/appDisplay.js:714
#: ../js/ui/appDisplay.js:689
msgid "Frequent"
msgstr "Frequenti"
#: ../js/ui/appDisplay.js:721
#: ../js/ui/appDisplay.js:696
msgid "All"
msgstr "Tutte"
#: ../js/ui/appDisplay.js:1516
#: ../js/ui/appDisplay.js:1487
msgid "New Window"
msgstr "Nuova finestra"
#: ../js/ui/appDisplay.js:1519 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1490 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Rimuovi dai preferiti"
#: ../js/ui/appDisplay.js:1520
#: ../js/ui/appDisplay.js:1491
msgid "Add to Favorites"
msgstr "Aggiungi ai preferiti"
@@ -404,8 +399,7 @@ msgstr "%s è stato aggiunto ai preferiti."
msgid "%s has been removed from your favorites."
msgstr "%s è stato rimosso dai preferiti."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:807
#: ../js/ui/status/system.js:325
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Impostazioni"
@@ -434,7 +428,7 @@ msgstr "%H.%M"
#: ../js/ui/calendar.js:77
msgctxt "event list time"
msgid "%l\\u2236%M\\u2009%p"
msgstr "%l.%M\\u2009%p"
msgstr "%l.%M\\u2009%p"
#. Translators: Calendar grid abbreviation for Sunday.
#. *
@@ -942,7 +936,7 @@ msgstr "Visualizza account"
msgid "Unknown reason"
msgstr "Motivo sconosciuto"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Finestre"
@@ -1064,7 +1058,7 @@ msgstr "Riavvia e installa"
#: ../js/ui/endSessionDialog.js:271
msgid "Some applications are busy or have unsaved work."
msgstr "Alcune applicazioni risultano occupate o con lavoro non salvato."
msgstr ""
#: ../js/ui/endSessionDialog.js:277
msgid "Other users are logged in."
@@ -1091,7 +1085,7 @@ msgstr "Installa"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Scaricare e installare «%s» da extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Tastiera"
@@ -1205,17 +1199,21 @@ msgstr "Panoramica"
msgid "Type to search…"
msgstr "Digita per cercare…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Esci"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Attività"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Menu impostazioni"
#: ../js/ui/panel.js:901
msgid "Top Bar"
msgstr "Barra superiore"
@@ -1224,7 +1222,7 @@ msgstr "Barra superiore"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
@@ -1253,7 +1251,7 @@ msgstr[1] "%d nuove notifiche"
msgid "Lock"
msgstr "Blocca"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME deve bloccare lo schermo"
@@ -1264,11 +1262,11 @@ msgstr "GNOME deve bloccare lo schermo"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Impossibile bloccare"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Il blocco è stato impedito da un'applicazione."
@@ -1448,7 +1446,7 @@ msgstr "OK"
msgid "Brightness"
msgstr "Luminosità"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Mostra disposizione tastiera"
@@ -1560,9 +1558,8 @@ msgstr "In stima…"
#: ../js/ui/status/power.js:77
#, c-format
msgid "%d\\u2236%02d Remaining (%d%%)"
msgstr "%d.%02d rimanente (%d%%)"
msgstr "%d\\u2236%02d rimanente (%d%%)"
# in stile MacOS sarebbe "al pieno" :P
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
#: ../js/ui/status/power.js:82
#, c-format
@@ -1620,11 +1617,11 @@ msgstr "Accedi come altro utente"
msgid "Unlock Window"
msgstr "Sblocca finestra"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Applicazioni"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Cerca"
@@ -1730,3 +1727,274 @@ msgstr "La password non può essere vuota"
#: ../src/shell-polkit-authentication-agent.c:343
msgid "Authentication dialog was dismissed by the user"
msgstr "Il dialogo di autenticazione è stato annullato dall'utente"
#~ msgid "Screenshots"
#~ msgstr "Schermate"
#~ msgid "Record a screencast"
#~ msgstr "Registra uno screencast"
#~ msgid ""
#~ "Internally used to store the last IM presence explicitly set by the user. "
#~ "The value here is from the TpConnectionPresenceType enumeration."
#~ msgstr ""
#~ "Usato internamente per memorizzare l'ultimo stato di presenza IM "
#~ "impostato esplicitamente dall'utente. Il valore corrisponde alla "
#~ "enumerazione TpConnectionPresenceType."
#~ msgid ""
#~ "Internally used to store the last session presence status for the user. "
#~ "The value here is from the GsmPresenceStatus enumeration."
#~ msgstr ""
#~ "Usato internamente per memorizzare lo stato di presenza dell'ultima "
#~ "sessione per l'utente. Il valore corrisponde alla enumerazione "
#~ "GsmPresenceStatus."
#~ msgid "Keybinding to toggle the screen recorder"
#~ msgstr "Associazione tasti per commutare registrazione schermo"
#~ msgid "Keybinding to start/stop the builtin screen recorder."
#~ msgstr ""
#~ "Associazione di tasti per avviare/fermare il registratore di schermo "
#~ "incorporato."
#~ msgid "Framerate used for recording screencasts."
#~ msgstr "Framerate per la registrazione di screencast."
#~ msgid ""
#~ "The framerate of the resulting screencast recordered by GNOME Shell's "
#~ "screencast recorder in frames-per-second."
#~ msgstr ""
#~ "Il framerate in fotogrammi al secondo dello screencast registrato "
#~ "attraverso il registratore della GNOME Shell."
#~ msgid "The gstreamer pipeline used to encode the screencast"
#~ msgstr "La pipeline di gstreamer utilizzata per codificare lo screencast"
#~ msgid ""
#~ "Sets the GStreamer pipeline used to encode recordings. It follows the "
#~ "syntax used for gst-launch. The pipeline should have an unconnected sink "
#~ "pad where the recorded video is recorded. It will normally have a "
#~ "unconnected source pad; output from that pad will be written into the "
#~ "output file. However the pipeline can also take care of its own output - "
#~ "this might be used to send the output to an icecast server via shout2send "
#~ "or similar. When unset or set to an empty value, the default pipeline "
#~ "will be used. This is currently 'vp8enc min_quantizer=13 max_quantizer=13 "
#~ "cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' and records to "
#~ "WEBM using the VP8 codec. %T is used as a placeholder for a guess at the "
#~ "optimal thread count on the system."
#~ msgstr ""
#~ "Imposta la pipeline di GStreamer utilizzata per codificare le "
#~ "registrazioni, seguendo la sintassi di gst-launch. La pipeline dovrebbe "
#~ "presentare un pad sink scollegato dove il video viene effettivamente "
#~ "registrato. Dispone normalmente di un pad sorgente scollegato: l'output "
#~ "da quel pad viene scritto nel file di uscita. La pipeline può comunque "
#~ "gestire autonomamente il proprio output: questo può essere utile per "
#~ "inviare l'output verso un server icecast attraverso shout2send o simili. "
#~ "Quando non impostata o senza alcun valore, viene usata la pipeline "
#~ "predefinita il cui valore è \"min_quantizer=13 max_quantizer=13 cpu-"
#~ "used=5 deadline=1000000 threads=%T ! queue ! webmmux\" e che registra nel "
#~ "formato WEBM usando il codec VP8. %T è usato come un segnaposto per una "
#~ "stima del valore di thread ottimale per il sistema in uso."
#~ msgid "File extension used for storing the screencast"
#~ msgstr "Estensione del file utilizzato per salvare lo screencast"
#~ msgid ""
#~ "The filename for recorded screencasts will be a unique filename based on "
#~ "the current date, and use this extension. It should be changed when "
#~ "recording to a different container format."
#~ msgstr ""
#~ "Il nome del file degli screencast registrati è un nome unico basato sulla "
#~ "data corrente e utilizza questa estensione. Dovrebbe essere modificato "
#~ "quando si registra utilizzando un diverso formato contenitore."
#~ msgid "Session"
#~ msgstr "Sessione"
#~ msgid "Power"
#~ msgstr "Risparmio energetico"
#~ msgid "Restart"
#~ msgstr "Riavvia"
#~ msgid "Screencast from %d %t"
#~ msgstr "Screencast da %d %t"
# oddio... abbandonare il sistema sembra la nave che affonda... (LF)
#~ msgid "Click Log Out to quit these applications and log out of the system."
#~ msgstr ""
#~ "Fare clic su «Termina sessione» per chiudere queste applicazioni e "
#~ "abbandonare il sistema."
#~ msgid "Logging out of the system."
#~ msgstr "Chiusura della sessione."
#~ msgid "Click Power Off to quit these applications and power off the system."
#~ msgstr ""
#~ "Fare clic su «Spegni» per chiudere queste applicazioni e spegnere il "
#~ "sistema."
#~ msgid "Powering off the system."
#~ msgstr "Spegnimento del sistema."
#~ msgid "Click Restart to quit these applications and restart the system."
#~ msgstr ""
#~ "Fare clic su «Riavvia» per chiudere queste applicazioni e riavviare il "
#~ "sistema."
#~ msgid "Restarting the system."
#~ msgstr "Riavvio del sistema."
#~ msgid "Universal Access Settings"
#~ msgstr "Impostazioni accesso universale"
# su Android è Rilevabile :P
#~ msgid "Visibility"
#~ msgstr "Visibile"
#~ msgid "Send Files to Device…"
#~ msgstr "Invia file al dispositivo…"
#~ msgid "Set Up a New Device…"
#~ msgstr "Imposta un nuovo dispositivo…"
#~ msgid "hardware disabled"
#~ msgstr "hardware disabilitato"
# indica lo stato del device BT, per esempio gli auricolari
# credo sia meglio l'aggettivo che il sostantivo
#~ msgid "Connection"
#~ msgstr "Collegato"
#~ msgid "Send Files…"
#~ msgstr "Invia file…"
#~ msgid "Keyboard Settings"
#~ msgstr "Impostazioni tastiera"
#~ msgid "Mouse Settings"
#~ msgstr "Impostazioni mouse"
#~ msgid "Sound Settings"
#~ msgstr "Impostazioni audio"
#~ msgid "Region & Language Settings"
#~ msgstr "Impostazioni regione e lingua"
#~ msgid "Volume, network, battery"
#~ msgstr "Volume, rete, batteria"
#~ msgid "Wi-Fi"
#~ msgstr "Wi-Fi"
#~ msgid "disabled"
#~ msgstr "disabilitata"
#~ msgid "More…"
#~ msgstr "Altro…"
#~ msgid "Wired"
#~ msgstr "Via cavo"
#~ msgid "Mobile broadband"
#~ msgstr "Banda larga mobile"
#~ msgid "Networking is disabled"
#~ msgstr "Rete disabilitata"
#~ msgid "%d hour remaining"
#~ msgid_plural "%d hours remaining"
#~ msgstr[0] "%d ora rimanente"
#~ msgstr[1] "%d ore rimanenti"
#~ msgid "%d %s %d %s remaining"
#~ msgstr "%d %s e %d %s rimanenti"
#~ msgid "hour"
#~ msgid_plural "hours"
#~ msgstr[0] "ora"
#~ msgstr[1] "ore"
#~ msgid "minute"
#~ msgid_plural "minutes"
#~ msgstr[0] "minuto"
#~ msgstr[1] "minuti"
#~ msgid "%d minute remaining"
#~ msgid_plural "%d minutes remaining"
#~ msgstr[0] "%d minuto rimanente"
#~ msgstr[1] "%d minuti rimanenti"
#~ msgctxt "percent of battery remaining"
#~ msgid "%d%%"
#~ msgstr "%d%%"
#~ msgid "AC Adapter"
#~ msgstr "Alimentatore di corrente"
#~ msgid "Laptop Battery"
#~ msgstr "Batteria del portatile"
#~ msgid "UPS"
#~ msgstr "UPS"
#~ msgid "Monitor"
#~ msgstr "Monitor"
#~ msgid "Mouse"
#~ msgstr "Mouse"
#~ msgid "PDA"
#~ msgstr "PDS"
# c'era una discussione su tp...
#~ msgid "Cell Phone"
#~ msgstr "Cellulare"
#~ msgid "Media Player"
#~ msgstr "Lettore multimediale"
#~ msgid "Tablet"
#~ msgstr "Tablet"
#~ msgid "Computer"
#~ msgstr "Computer"
#~ msgctxt "device"
#~ msgid "Unknown"
#~ msgstr "Sconosciuto"
#~ msgid "Available"
#~ msgstr "Disponibile"
#~ msgid "Busy"
#~ msgstr "Non disponibile"
#~ msgid "Invisible"
#~ msgstr "Invisibile"
#~ msgid "Away"
#~ msgstr "Assente"
#~ msgid "Idle"
#~ msgstr "Inattivo"
#~ msgid "Notifications"
#~ msgstr "Notifiche"
# accorciato, altrimenti non si legge...
#~ msgid "Your chat status will be set to busy"
#~ msgstr "Stato per chat impostato a non disponibile"
#~ msgid ""
#~ "Notifications are now disabled, including chat messages. Your online "
#~ "status has been adjusted to let others know that you might not see their "
#~ "messages."
#~ msgstr ""
#~ "Le notifiche sono ora disabilitate, inclusi i messaggi di chat. Lo stato "
#~ "online è stato modificato in modo che gli altri sappiano che i loro "
#~ "messaggi potrebbero non essere notati."
#~ msgid "Shutting down might cause them to lose unsaved work."
#~ msgstr "L'arresto potrebbe causare la perdita del loro lavoro non salvato."

143
po/kk.po
View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-14 18:10+0000\n"
"PO-Revision-Date: 2013-09-15 13:44+0600\n"
"POT-Creation-Date: 2013-08-30 14:46+0000\n"
"PO-Revision-Date: 2013-08-31 19:43+0600\n"
"Last-Translator: Baurzhan Muftakhidinov <baurthefirst@gmail.com>\n"
"Language-Team: Kazakh <kk_KZ@googlegroups.com>\n"
"Language: kk\n"
@@ -48,7 +48,6 @@ msgid "GNOME Shell"
msgstr "GNOME Shell"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Терезелерді басқару мен қолданбаларды жөнелту"
@@ -61,10 +60,6 @@ msgstr "GNOME Shell кеңейту баптаулары"
msgid "Configure GNOME Shell Extensions"
msgstr "GNOME Shell кеңейтулерін баптау"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME Shell (wayland үйлестіргіші)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -90,10 +85,6 @@ msgid ""
"list. You can also manipulate this list with the EnableExtension and "
"DisableExtension DBus methods on org.gnome.Shell."
msgstr ""
"GNOME Shell кеңейтулерінде uuid қасиеті бар; бұл кілт жүктелетін кеңейтулер "
"тізімін сақтайды. Жүйеге кірген кезде жүктелем дейтін кеңейту осы тізімде "
"болуы тиіс. Бұл тізімді org.gnome.Shell ішіндегі EnableExtension және "
"DisableExtension DBus тәсілдерімен де өзгертуге болады."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "List of desktop file IDs for favorite applications"
@@ -104,8 +95,6 @@ msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr ""
"Осы анықтағыштарға сәйкес келетін қолданбалар таңдамалылар аймағында "
"көрсетілетін болады."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of categories that should be displayed as folders"
@@ -116,8 +105,6 @@ msgid ""
"Each category name in this list will be represented as folder in the "
"application view, rather than being displayed inline in the main view."
msgstr ""
"Бұл тізімдегі әрбір санат аты басты көріністе қатарынан көрсетілудің орнына "
"қолданбалар көрінісінде бума ретінде көрсетіледі."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "History for command (Alt-F2) dialog"
@@ -136,8 +123,6 @@ msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Бұл кілт бір пайдаланушы, бір сессия бар кезінде 'Жүйеден шығу' "
"мүмкіндігінің автоматты түрде жасыруын алмастырады."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
@@ -153,10 +138,6 @@ msgid ""
"'Remember Password' checkbox will be present. This key sets the default "
"state of the checkbox."
msgstr ""
"Қоршам шифрленген құрылғы немесе қашықтағы файлдық жүйе тіркелген кезде "
"парольді сұрайды. Егер парольді болашақтағы қолданулар үшін сақтау керек "
"болса, 'Парольді еске сақтау' жалаушасые орнатыңыз. Бұл кілт жалаушаның "
"бастапқы күйін орнатады."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
@@ -226,13 +207,10 @@ msgid ""
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'."
msgstr ""
"Терезелер ауыстырғышта қалай көрсетілетінін сипаттайды. Мүмкін мәндері "
"'thumbnail-only' (терезенің кіші көрінісі көрсетіледі), 'app-icon-only' (тек "
"қолданба таңбашасы көрсетіледі) немесе 'both' (екеуі де)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Attach modal dialog to the parent window"
msgstr "Модальды сұхбатты аталық терезесіне жалғау"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
@@ -256,8 +234,6 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Терезелерді экран шеттеріне апарған кезде олардың өлшемдерін өзгертуді іске "
"қосу"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
@@ -283,7 +259,7 @@ msgstr "Жоғарыдағы ашылмалы тізімнен баптау үш
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:351
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:679
msgid "Cancel"
msgstr "Бас тарту"
@@ -344,42 +320,38 @@ msgstr "Аутентификация қатесі"
msgid "(or swipe finger)"
msgstr "(немесе саусағыңызды өткізіңіз)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Команда табылмады"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Команданы талдау мүмкін емес:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "'%s' жөнелту сәтсіз:"
#: ../js/ui/appDisplay.js:598
msgid "Frequently used applications will appear here"
msgstr "Жиі қолданылатын қолданбалар осында көрінеді"
#: ../js/ui/appDisplay.js:714
#: ../js/ui/appDisplay.js:386
msgid "Frequent"
msgstr "Жиі"
#: ../js/ui/appDisplay.js:721
#: ../js/ui/appDisplay.js:393
msgid "All"
msgstr "Барлық"
#: ../js/ui/appDisplay.js:1516
#: ../js/ui/appDisplay.js:991
msgid "New Window"
msgstr "Жаңа терезе"
#: ../js/ui/appDisplay.js:1519 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:994 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Таңдамалылардан өшіру"
#: ../js/ui/appDisplay.js:1520
#: ../js/ui/appDisplay.js:995
msgid "Add to Favorites"
msgstr "Таңдамалыларға қосу"
@@ -393,8 +365,7 @@ msgstr "%s таңдамалыларыңызға қосылды."
msgid "%s has been removed from your favorites."
msgstr "%s таңдамалыларыңыздан өшірілді."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:807
#: ../js/ui/status/system.js:325
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Баптаулар"
@@ -549,7 +520,7 @@ msgstr "Бүгін"
#: ../js/ui/calendar.js:789
msgid "Tomorrow"
msgstr "Ертең"
msgstr "Ертен"
#: ../js/ui/calendar.js:800
msgid "This week"
@@ -589,7 +560,7 @@ msgid "Type again:"
msgstr "Қайтадан енгізіңіз:"
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
msgid "Connect"
msgstr "Байланысу"
@@ -609,7 +580,7 @@ msgstr "Кілт:"
#: ../js/ui/components/networkAgent.js:261
msgid "Identity: "
msgstr "Анықтағыш:"
msgstr ""
#: ../js/ui/components/networkAgent.js:263
msgid "Private key password: "
@@ -922,7 +893,7 @@ msgstr "Тіркелгіні қарап шығу"
msgid "Unknown reason"
msgstr "Себебі белгісіз"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Терезелер"
@@ -932,7 +903,7 @@ msgstr "Қолданбаларды көрсету"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:442
#: ../js/ui/dash.js:439
msgid "Dash"
msgstr "Dash"
@@ -1016,12 +987,15 @@ msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "Жүйе %d секундтан кейін автоматты түрде қайта қосылады."
#: ../js/ui/endSessionDialog.js:112
#| msgid "Install Updates & Restart"
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Қайта қосу және жаңартуларды орнату"
#: ../js/ui/endSessionDialog.js:114
#, c-format
#| msgid "The system will restart automatically in %d second."
#| msgid_plural "The system will restart automatically in %d seconds."
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
@@ -1063,7 +1037,7 @@ msgstr "Орнату"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "extensions.gnome.org адресінен '%s' жүктеп алып, орнату керек пе?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Пернетақта"
@@ -1143,7 +1117,7 @@ msgstr "Хабарламалар жоқ"
msgid "Message Tray"
msgstr "Жүйелік трей"
#: ../js/ui/messageTray.js:2787
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Жүйелік ақпарат"
@@ -1174,17 +1148,21 @@ msgstr "Шолу"
msgid "Type to search…"
msgstr "Іздеу үшін теріңіз..."
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Шығу"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Көрініс"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Баптаулар мәзірі"
#: ../js/ui/panel.js:892
msgid "Top Bar"
msgstr "Үстідегі панель"
@@ -1193,7 +1171,7 @@ msgstr "Үстідегі панель"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1221,7 +1199,7 @@ msgstr[0] "%d жаңа ескерту"
msgid "Lock"
msgstr "Блоктау"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME экранды блоктау керек"
@@ -1232,19 +1210,19 @@ msgstr "GNOME экранды блоктау керек"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Блоктау мүмкін емес"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Блоктауды басқа қолданба болдырмады"
#: ../js/ui/searchDisplay.js:447
#: ../js/ui/searchDisplay.js:445
msgid "Searching…"
msgstr "Іздеу..."
#: ../js/ui/searchDisplay.js:491
#: ../js/ui/searchDisplay.js:489
msgid "No results."
msgstr "Нәтижелер жоқ."
@@ -1325,7 +1303,7 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
msgid "Turn Off"
msgstr "Сөндіру"
@@ -1413,7 +1391,7 @@ msgstr "ОК"
msgid "Brightness"
msgstr "Жарықтылығы"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Пернетақта жаймасын көрсету"
@@ -1421,83 +1399,83 @@ msgstr "Пернетақта жаймасын көрсету"
msgid "<unknown>"
msgstr "<белгісіз>"
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
msgid "Off"
msgstr "Сөнд."
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
#: ../js/ui/status/rfkill.js:49
msgid "Network Settings"
msgstr "Желі баптаулары"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:364
#: ../js/ui/status/network.js:357
msgid "unmanaged"
msgstr "басқарылмайтын"
#: ../js/ui/status/network.js:366
#: ../js/ui/status/network.js:359
msgid "disconnecting..."
msgstr "байланысты үзу..."
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
msgid "connecting..."
msgstr "байланысты орнату..."
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
msgid "authentication required"
msgstr "аутентификация керек"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:383
#: ../js/ui/status/network.js:376
msgid "firmware missing"
msgstr "бинарлы кодтары жоқ"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:387
#: ../js/ui/status/network.js:380
msgid "unavailable"
msgstr "қолжетерсіз"
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
msgid "connection failed"
msgstr "байланысты орнату сәтсіз"
#: ../js/ui/status/network.js:654
#: ../js/ui/status/network.js:647
msgid "Wi-Fi Networks"
msgstr "Wi-Fi желілері"
#: ../js/ui/status/network.js:656
#: ../js/ui/status/network.js:649
msgid "Select a network"
msgstr "Желіні таңдаңыз"
#: ../js/ui/status/network.js:680
#: ../js/ui/status/network.js:673
msgid "No Networks"
msgstr "Желілер жоқ"
#: ../js/ui/status/network.js:949
#: ../js/ui/status/network.js:942
msgid "Select Network"
msgstr "Желіні таңдаңыз"
#: ../js/ui/status/network.js:1034
#: ../js/ui/status/network.js:1027
msgid "Turn On"
msgstr "Іске қосу"
#: ../js/ui/status/network.js:1167
#: ../js/ui/status/network.js:1160
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1306
#: ../js/ui/status/network.js:1299
msgid "Network Manager"
msgstr "Желілер басқарушысы"
#: ../js/ui/status/network.js:1345
#: ../js/ui/status/network.js:1338
msgid "Connection failed"
msgstr "Байланыс орнату сәтсіз"
#: ../js/ui/status/network.js:1346
#: ../js/ui/status/network.js:1339
msgid "Activation of network connection failed"
msgstr "Желілік байланысты белсендіру сәтсіз"
@@ -1583,11 +1561,11 @@ msgstr "Басқа пайдаланушы ретінде жүйеге кіру"
msgid "Unlock Window"
msgstr "Блоктауды алу терезесі"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Қолданбалар"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Іздеу"
@@ -1603,7 +1581,7 @@ msgstr ""
#: ../js/ui/wanda.js:81
#, c-format
msgid "%s the Oracle says"
msgstr "Болжаушы айтады: %s"
msgstr ""
#: ../js/ui/windowAttentionHandler.js:19
#, c-format
@@ -1687,6 +1665,3 @@ msgstr "Пароль бос болуы мүмкін емес"
#: ../src/shell-polkit-authentication-agent.c:343
msgid "Authentication dialog was dismissed by the user"
msgstr "Аутентификация терезесін пайдаланушы тайдырды"
#~ msgid "Settings Menu"
#~ msgstr "Баптаулар мәзірі"

1480
po/ko.po

File diff suppressed because it is too large Load Diff

View File

@@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-12 17:36+0000\n"
"PO-Revision-Date: 2013-09-12 22:40+0300\n"
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
"PO-Revision-Date: 2013-09-04 00:33+0300\n"
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
"Language: lt\n"
@@ -53,7 +53,6 @@ msgid "GNOME Shell"
msgstr "GNOME Shell aplinka"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Langų valdymas ir programų paleidimas"
@@ -66,10 +65,6 @@ msgstr "GNOME Shell plėtinių nustatymai"
msgid "Configure GNOME Shell Extensions"
msgstr "Konfigūruoti GNOME Shell plėtinius"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME Shell (wayland kompozitorius)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -346,42 +341,42 @@ msgstr "Tapatybės patvirtinimo klaida"
msgid "(or swipe finger)"
msgstr "(arba perbraukite pirštu)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Komanda nerasta"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Nepavyko perskaityti komandos:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Nepavyko įvykdyti „%s“:"
#: ../js/ui/appDisplay.js:573
#: ../js/ui/appDisplay.js:578
msgid "Frequently used applications will appear here"
msgstr "Čia bus matomos dažnai naudojamos programos"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:694
msgid "Frequent"
msgstr "Dažnai naudojamos"
#: ../js/ui/appDisplay.js:696
#: ../js/ui/appDisplay.js:701
msgid "All"
msgstr "Visos"
#: ../js/ui/appDisplay.js:1491
#: ../js/ui/appDisplay.js:1488
msgid "New Window"
msgstr "Naujas langas"
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1491 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Pašalinti iš mėgstamų"
#: ../js/ui/appDisplay.js:1495
#: ../js/ui/appDisplay.js:1492
msgid "Add to Favorites"
msgstr "Pridėti prie mėgstamų"
@@ -925,7 +920,7 @@ msgstr "Rodyti paskyrą"
msgid "Unknown reason"
msgstr "Nežinoma priežastis"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Langai"
@@ -1077,7 +1072,7 @@ msgstr "Įdiegti"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Atsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Klaviatūra"
@@ -1157,7 +1152,7 @@ msgstr "Nėra pranešimų"
msgid "Message Tray"
msgstr "Pranešimų juosta"
#: ../js/ui/messageTray.js:2787
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Sistemos informacija"
@@ -1190,21 +1185,21 @@ msgstr "Apžvalga"
msgid "Type to search…"
msgstr "Rašykite, ko ieškote…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Užverti"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Apžvalga"
#: ../js/ui/panel.js:807
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Nustatymų meniu"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:892
msgid "Top Bar"
msgstr "Viršutinė juosta"
@@ -1213,7 +1208,7 @@ msgstr "Viršutinė juosta"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1243,7 +1238,7 @@ msgstr[2] "%d naujų pranešimų"
msgid "Lock"
msgstr "Užrakinti"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME aplinkai reikia užrakinti ekraną"
@@ -1254,11 +1249,11 @@ msgstr "GNOME aplinkai reikia užrakinti ekraną"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Nepavyksta užrakinti"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Programa užblokavo užrakinimą"
@@ -1437,7 +1432,7 @@ msgstr "Gerai"
msgid "Brightness"
msgstr "Ryškumas"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Rodyti klaviatūros išdėstymą"
@@ -1607,11 +1602,11 @@ msgstr "Prisijungti kitu naudotoju"
msgid "Unlock Window"
msgstr "Atrakinimo langas"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Programos"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Ieškoti"
@@ -1717,3 +1712,4 @@ msgstr "Slaptažodis negali būti tuščias"
#: ../src/shell-polkit-authentication-agent.c:343
msgid "Authentication dialog was dismissed by the user"
msgstr "Naudotojas užvėrė tapatybės patvirtinimo dialogą"

View File

@@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-15 01:20+0000\n"
"PO-Revision-Date: 2013-09-15 01:21+0200\n"
"POT-Creation-Date: 2013-09-04 02:07+0200\n"
"PO-Revision-Date: 2013-09-04 02:08+0200\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <gnomepl@aviary.pl>\n"
"Language: pl\n"
@@ -54,7 +54,6 @@ msgid "GNOME Shell"
msgstr "Powłoka środowiska GNOME"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Zarządzanie oknami i uruchamianiem programów"
@@ -67,10 +66,6 @@ msgstr "Preferencje rozszerzenia powłoki GNOME"
msgid "Configure GNOME Shell Extensions"
msgstr "Konfiguracja rozszerzeń powłoki GNOME"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "Powłoka środowiska GNOME (Wayland)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -355,42 +350,42 @@ msgstr "Błąd uwierzytelniania"
msgid "(or swipe finger)"
msgstr "(lub przeciągnięcie palca)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Nie odnaleziono polecenia"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Nie można przetworzyć polecenia:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Wykonanie polecenia \"%s\" się nie powiodło:"
#: ../js/ui/appDisplay.js:598
#: ../js/ui/appDisplay.js:580
msgid "Frequently used applications will appear here"
msgstr "W tym miejscu pojawią się często używane programy"
#: ../js/ui/appDisplay.js:714
#: ../js/ui/appDisplay.js:696
msgid "Frequent"
msgstr "Często używane"
#: ../js/ui/appDisplay.js:721
#: ../js/ui/appDisplay.js:703
msgid "All"
msgstr "Wszystkie"
#: ../js/ui/appDisplay.js:1516
#: ../js/ui/appDisplay.js:1490
msgid "New Window"
msgstr "Nowe okno"
#: ../js/ui/appDisplay.js:1519 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1493 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Usuń z ulubionych"
#: ../js/ui/appDisplay.js:1520
#: ../js/ui/appDisplay.js:1494
msgid "Add to Favorites"
msgstr "Dodaj do ulubionych"
@@ -404,8 +399,7 @@ msgstr "Program %s został dodany do ulubionych."
msgid "%s has been removed from your favorites."
msgstr "Program %s został usunięty z ulubionych."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:807
#: ../js/ui/status/system.js:325
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Ustawienia"
@@ -936,7 +930,7 @@ msgstr "Wyświetl konto"
msgid "Unknown reason"
msgstr "Nieznana przyczyna"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Okna"
@@ -1089,7 +1083,7 @@ msgid "Download and install '%s' from extensions.gnome.org?"
msgstr ""
"Pobrać i zainstalować rozszerzenie \"%s\" z witryny extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Klawiatura"
@@ -1169,7 +1163,7 @@ msgstr "Brak wiadomości"
msgid "Message Tray"
msgstr "Obszar powiadamiania"
#: ../js/ui/messageTray.js:2787
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Informacje systemowe"
@@ -1202,17 +1196,21 @@ msgstr "Podgląd"
msgid "Type to search…"
msgstr "Wyszukiwanie…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Zakończ"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Podgląd"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Menu ustawień"
#: ../js/ui/panel.js:892
msgid "Top Bar"
msgstr "Górny pasek"
@@ -1221,7 +1219,7 @@ msgstr "Górny pasek"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1251,7 +1249,7 @@ msgstr[2] "%d nowych powiadomień"
msgid "Lock"
msgstr "Zablokuj ekran"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "Środowisko GNOME musi zablokować ekran"
@@ -1262,11 +1260,11 @@ msgstr "Środowisko GNOME musi zablokować ekran"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Nie można zablokować"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Blokowanie zostało zablokowane przez program"
@@ -1445,7 +1443,7 @@ msgstr "OK"
msgid "Brightness"
msgstr "Jasność"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Wyświetl układ klawiatury"
@@ -1511,7 +1509,7 @@ msgstr "Brak sieci"
#: ../js/ui/status/network.js:949
msgid "Select Network"
msgstr "Wybierz sieć"
msgstr "Wybór sieci"
#: ../js/ui/status/network.js:1034
msgid "Turn On"
@@ -1543,7 +1541,7 @@ msgstr "Ustawienia zasilania"
#: ../js/ui/status/power.js:63
msgid "Fully Charged"
msgstr "Naładowany"
msgstr "W pełni naładowany"
#. 0 is reported when UPower does not have enough data
#. to estimate battery life
@@ -1562,7 +1560,7 @@ msgstr "Pozostało: %d\\u2236%02d (%d%%)"
#: ../js/ui/status/power.js:82
#, c-format
msgid "%d\\u2236%02d Until Full (%d%%)"
msgstr "Do naładowania: %d\\u2236%02d (%d%%)"
msgstr "Do pełnego naładowania: %d\\u2236%02d (%d%%)"
#. The menu only appears when airplane mode is on, so just
#. statically build it as if it was on, rather than dynamically
@@ -1615,11 +1613,11 @@ msgstr "Zaloguj jako inny użytkownik"
msgid "Unlock Window"
msgstr "Okno odblokowania"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Programy"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Wyszukiwanie"

View File

@@ -19,9 +19,9 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-12 17:39+0000\n"
"PO-Revision-Date: 2013-09-12 14:59-0300\n"
"Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n"
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
"PO-Revision-Date: 2013-09-02 20:50-0300\n"
"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
@@ -60,7 +60,6 @@ msgid "GNOME Shell"
msgstr "GNOME Shell"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Gerenciamento de janelas e lançador de aplicativos"
@@ -73,11 +72,6 @@ msgstr "Preferências de extensões do GNOME Shell"
msgid "Configure GNOME Shell Extensions"
msgstr "Configurar extensões do GNOME Shell"
# Traduções do Xfce e da Microsoft usam compositor --Enrico
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME Shell (compositor wayland)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -361,42 +355,42 @@ msgstr "Erro de autenticação"
msgid "(or swipe finger)"
msgstr "(ou deslize o dedo)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Comando não encontrado"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Não foi possível analisar comando:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "A execução de \"%s\" falhou:"
#: ../js/ui/appDisplay.js:573
#: ../js/ui/appDisplay.js:578
msgid "Frequently used applications will appear here"
msgstr "Aplicativos usados frequentemente vão aparecer aqui"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:694
msgid "Frequent"
msgstr "Frequente"
#: ../js/ui/appDisplay.js:696
#: ../js/ui/appDisplay.js:701
msgid "All"
msgstr "Todos"
#: ../js/ui/appDisplay.js:1491
#: ../js/ui/appDisplay.js:1488
msgid "New Window"
msgstr "Nova janela"
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1491 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Remover dos favoritos"
#: ../js/ui/appDisplay.js:1495
#: ../js/ui/appDisplay.js:1492
msgid "Add to Favorites"
msgstr "Adicionar aos favoritos"
@@ -940,7 +934,7 @@ msgstr "Visualizar conta"
msgid "Unknown reason"
msgstr "Razão desconhecida"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Janelas"
@@ -1089,7 +1083,7 @@ msgstr "Instalar"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Baixar e instalar \"%s\" de extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Teclado"
@@ -1169,7 +1163,7 @@ msgstr "Sem mensagens"
msgid "Message Tray"
msgstr "Área de notificação"
#: ../js/ui/messageTray.js:2787
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Informações do sistema"
@@ -1201,21 +1195,21 @@ msgstr "Panorama"
msgid "Type to search…"
msgstr "Digite para pesquisar…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Sair"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Atividades"
#: ../js/ui/panel.js:807
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Menu de configurações"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:892
msgid "Top Bar"
msgstr "Barra superior"
@@ -1224,7 +1218,7 @@ msgstr "Barra superior"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1253,7 +1247,7 @@ msgstr[1] "%d novas notificações"
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME precisa bloquear a tela"
@@ -1264,11 +1258,11 @@ msgstr "GNOME precisa bloquear a tela"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Não foi possível bloquear"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "O bloqueio foi impedido por um aplicativo"
@@ -1448,7 +1442,7 @@ msgstr "OK"
msgid "Brightness"
msgstr "Brilho"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Exibir disposição de teclado"
@@ -1618,11 +1612,11 @@ msgstr "Iniciar sessão como outro usuário"
msgid "Unlock Window"
msgstr "Desbloquear janela"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Aplicativos"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Pesquisar"

332
po/ru.po
View File

@@ -13,19 +13,17 @@
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-14 20:54+0200\n"
"PO-Revision-Date: 2013-09-13 08:43+0600\n"
"Last-Translator: Dmitriy S. Seregin <dseregin@59.ru>\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
"PO-Revision-Date: 2013-09-07 23:11+0300\n"
"Last-Translator: Yuri Myasoedov <omerta13@yandex.ru>\n"
"Language-Team: русский <gnome-cyr@gnome.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 1.5.5\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"X-Generator: Gtranslator 2.91.6\n"
#: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System"
@@ -56,7 +54,6 @@ msgid "GNOME Shell"
msgstr "GNOME Shell"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Управление окнами и запуск приложений"
@@ -69,48 +66,29 @@ msgstr "Параметры расширений GNOME Shell"
msgid "Configure GNOME Shell Extensions"
msgstr "Настроить расширения GNOME Shell"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME Shell (компоновщик wayland)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "Включить внутренние инструменты из Alt-F2 для разработчиков и тестеров"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:2
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
"dialog."
msgstr ""
"Разрешает доступ к внутренней отладке и инструментам наблюдения, используя "
"диалог Alt-F2."
msgid "Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
msgstr "Разрешает доступ к внутренней отладке и инструментам наблюдения, используя диалог Alt-F2."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
msgid "Uuids of extensions to enable"
msgstr "Uuid включенных расширений"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should be loaded. Any extension that wants to be loaded needs to be in this "
"list. You can also manipulate this list with the EnableExtension and "
"DisableExtension DBus methods on org.gnome.Shell."
msgstr ""
"У расширений GNOME Shell есть свойство uuid; в этом ключе перечислены "
"расширения, которые должны быть загружены. Этим список также можно управлять "
"через методы DBus EnableExtension и DisableExtension сервиса org.gnome.Shell."
msgid "GNOME Shell extensions have a uuid property; this key lists extensions which should be loaded. Any extension that wants to be loaded needs to be in this list. You can also manipulate this list with the EnableExtension and DisableExtension DBus methods on org.gnome.Shell."
msgstr "У расширений GNOME Shell есть свойство uuid; в этом ключе перечислены расширения, которые должны быть загружены. Этим список также можно управлять через методы DBus EnableExtension и DisableExtension сервиса org.gnome.Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "List of desktop file IDs for favorite applications"
msgstr "Список идентификаторов desktop-файлов для избранных приложений"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr ""
"Приложения, соответствующие этих идентификаторам, будут показаны в области "
"избранных приложений."
msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
msgstr "Приложения, соответствующие этих идентификаторам, будут показаны в области избранных приложений."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of categories that should be displayed as folders"
@@ -118,12 +96,8 @@ msgstr "Список категорий, которые должны отобр
# Перевод лучше усечь, так он лучше воспринимается
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
msgid ""
"Each category name in this list will be represented as folder in the "
"application view, rather than being displayed inline in the main view."
msgstr ""
"Каждая категория из этого списка будет представлена в виде папки в режиме "
"просмотра приложений."
msgid "Each category name in this list will be represented as folder in the application view, rather than being displayed inline in the main view."
msgstr "Каждая категория из этого списка будет представлена в виде папки в режиме просмотра приложений."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "History for command (Alt-F2) dialog"
@@ -138,31 +112,16 @@ msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Всегда показывать в меню пункт «Завершить сеанс»."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Этот ключ переопределяет автоматическое скрытие пункта «Завершить сеанс» при "
"использовании одиночного сеанса."
msgid "This key overrides the automatic hiding of the 'Log out' menuitem in single-user, single-session situations."
msgstr "Этот ключ переопределяет автоматическое скрытие пункта «Завершить сеанс» при использовании одиночного сеанса."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Запоминать ли пароль для подключения зашифрованных или удалённых файловых "
"систем"
msgid "Whether to remember password for mounting encrypted or remote filesystems"
msgstr "Запоминать ли пароль для подключения зашифрованных или удалённых файловых систем"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
"'Remember Password' checkbox will be present. This key sets the default "
"state of the checkbox."
msgstr ""
"GNOME Shell запрашивает пароль при подключении зашифрованных или удалённых "
"файловых систем. Если пароль можно сохранить для последующего использования, "
"для этого действия будет доступна соответствующая флаговая кнопка. Этот ключ "
"устанавливает состояние по умолчание для этой флаговой кнопки."
msgid "The shell will request a password when an encrypted device or a remote filesystem is mounted. If the password can be saved for future use a 'Remember Password' checkbox will be present. This key sets the default state of the checkbox."
msgstr "GNOME Shell запрашивает пароль при подключении зашифрованных или удалённых файловых систем. Если пароль можно сохранить для последующего использования, для этого действия будет доступна соответствующая флаговая кнопка. Этот ключ устанавливает состояние по умолчание для этой флаговой кнопки."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
@@ -185,8 +144,7 @@ msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Комбинация клавиш для перехода в режим просмотра приложений"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgid "Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr "Комбинация клавиш для перехода в режим просмотра приложений."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
@@ -226,42 +184,28 @@ msgid "The application icon mode."
msgstr "Режим значка приложения."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'."
msgstr ""
"Управляет способом отображения окон в переключателе. Доступные значения: "
"«thumbnail-only» (показывать миниатюру окна), «app-icon-only» (показывать "
"только значок приложения), «both» (показывать миниатюру и значок)."
msgid "Configures how the windows are shown in the switcher. Valid possibilities are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only' (shows only the application icon) or 'both'."
msgstr "Управляет способом отображения окон в переключателе. Доступные значения: «thumbnail-only» (показывать миниатюру окна), «app-icon-only» (показывать только значок приложения), «both» (показывать миниатюру и значок)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Attach modal dialog to the parent window"
msgstr "Прикреплять модальное диалоговое окно к родительскому окну"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Этот ключ переопределяет ключ в org.gnome.mutter при запуске GNOME Shell."
msgid "This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "Этот ключ переопределяет ключ в org.gnome.mutter при запуске GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Arrangement of buttons on the titlebar"
msgstr "Расположение кнопок в заголовке окна"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Этот ключ переопределяет ключ в org.gnome.desktop.wm.preferences при запуске "
"GNOME Shell."
msgid "This key overrides the key in org.gnome.desktop.wm.preferences when running GNOME Shell."
msgstr "Этот ключ переопределяет ключ в org.gnome.desktop.wm.preferences при запуске GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Включить автоматическое изменение размеров окон при перемещении окон к краям "
"экрана"
msgstr "Включить автоматическое изменение размеров окон при перемещении окон к краям экрана"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
@@ -284,18 +228,24 @@ msgstr "Расширение"
msgid "Select an extension to configure using the combobox above."
msgstr "Выберите расширение из выпадающего списка."
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:351
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
#: ../js/gdm/authPrompt.js:145
#: ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161
#: ../js/ui/endSessionDialog.js:351
#: ../js/ui/extensionDownloader.js:195
#: ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:221
#: ../js/ui/status/network.js:686
msgid "Cancel"
msgstr "Отмена"
#: ../js/gdm/authPrompt.js:167 ../js/gdm/authPrompt.js:215
#: ../js/gdm/authPrompt.js:167
#: ../js/gdm/authPrompt.js:215
msgid "Next"
msgstr "Далее"
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
#: ../js/gdm/authPrompt.js:211
#: ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59
msgid "Unlock"
msgstr "Разблокировать"
@@ -326,7 +276,8 @@ msgstr "(например, пользователь или %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:627 ../js/ui/components/networkAgent.js:255
#: ../js/gdm/loginDialog.js:627
#: ../js/ui/components/networkAgent.js:255
#: ../js/ui/components/networkAgent.js:273
msgid "Username: "
msgstr "Имя пользователя: "
@@ -348,42 +299,43 @@ msgstr "Ошибка проверки подлинности"
msgid "(or swipe finger)"
msgstr "(или проведите пальцем по считывающему устройству)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Команда не найдена"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Не удалось разобрать команду:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Не удалось выполнить «%s»:"
#: ../js/ui/appDisplay.js:598
#: ../js/ui/appDisplay.js:578
msgid "Frequently used applications will appear here"
msgstr "Здесь появляются часто используемые приложения"
#: ../js/ui/appDisplay.js:714
#: ../js/ui/appDisplay.js:694
msgid "Frequent"
msgstr "Популярные"
#: ../js/ui/appDisplay.js:721
#: ../js/ui/appDisplay.js:701
msgid "All"
msgstr "Все"
#: ../js/ui/appDisplay.js:1516
#: ../js/ui/appDisplay.js:1488
msgid "New Window"
msgstr "Новое окно"
#: ../js/ui/appDisplay.js:1519 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1491
#: ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Удалить из избранного"
#: ../js/ui/appDisplay.js:1520
#: ../js/ui/appDisplay.js:1492
msgid "Add to Favorites"
msgstr "Добавить в избранное"
@@ -397,7 +349,7 @@ msgstr "Приложение %s добавлено в избранное."
msgid "%s has been removed from your favorites."
msgstr "Приложение %s удалено из избранного."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:807
#: ../js/ui/backgroundMenu.js:19
#: ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Параметры"
@@ -584,7 +536,8 @@ msgstr "Открыть с помощью %s"
msgid "Eject"
msgstr "Извлечь"
#: ../js/ui/components/keyring.js:88 ../js/ui/components/polkitAgent.js:280
#: ../js/ui/components/keyring.js:88
#: ../js/ui/components/polkitAgent.js:280
msgid "Password:"
msgstr "Пароль:"
@@ -592,8 +545,10 @@ msgstr "Пароль:"
msgid "Type again:"
msgstr "Введите ещё раз:"
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
#: ../js/ui/components/networkAgent.js:127
#: ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:275
#: ../js/ui/status/network.js:689
msgid "Connect"
msgstr "Соединиться"
@@ -629,11 +584,8 @@ msgstr "Беспроводная сеть требует подтвержден
#: ../js/ui/components/networkAgent.js:305
#, c-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"'%s'."
msgstr ""
"Для доступа к беспроводной сети «%s» требуются пароли или ключи шифрования."
msgid "Passwords or encryption keys are required to access the wireless network '%s'."
msgstr "Для доступа к беспроводной сети «%s» требуются пароли или ключи шифрования."
#: ../js/ui/components/networkAgent.js:309
msgid "Wired 802.1X authentication"
@@ -684,7 +636,8 @@ msgstr "Подтвердить"
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: ../js/ui/components/polkitAgent.js:266 ../js/ui/shellMountOperation.js:383
#: ../js/ui/components/polkitAgent.js:266
#: ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again."
msgstr "Не удалось подтвердить подлинность. Попробуйте снова."
@@ -877,8 +830,7 @@ msgid "This account is already connected to the server"
msgstr "Эта учётная запись уже подключена к серверу"
#: ../js/ui/components/telepathyClient.js:1335
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgid "Connection has been replaced by a new connection using the same resource"
msgstr "Соединение было заменено новым, используя тот же источник"
#: ../js/ui/components/telepathyClient.js:1337
@@ -887,27 +839,19 @@ msgstr "Учётная запись уже существует на серве
#: ../js/ui/components/telepathyClient.js:1339
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Сервер в настоящее время сильно перегружен, чтобы обработать соединение"
msgstr "Сервер в настоящее время сильно перегружен, чтобы обработать соединение"
#: ../js/ui/components/telepathyClient.js:1341
msgid "Certificate has been revoked"
msgstr "Сертификат аннулирован"
#: ../js/ui/components/telepathyClient.js:1343
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Сертификат использует небезопасный алгоритм шифрования или он "
"криптографически нестоек"
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "Сертификат использует небезопасный алгоритм шифрования или он криптографически нестоек"
#: ../js/ui/components/telepathyClient.js:1345
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
msgstr ""
"Длина сертификата сервера, или глубина цепочки сертификатов сервера, "
"превышает пределы, установленные библиотекой криптографии"
msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
msgstr "Длина сертификата сервера, или глубина цепочки сертификатов сервера, превышает пределы, установленные библиотекой криптографии"
#: ../js/ui/components/telepathyClient.js:1347
msgid "Internal error"
@@ -928,11 +872,13 @@ msgstr "Показать учётную запись"
msgid "Unknown reason"
msgstr "Неизвестная причина"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29
#: ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Окна"
#: ../js/ui/dash.js:248 ../js/ui/dash.js:286
#: ../js/ui/dash.js:248
#: ../js/ui/dash.js:286
msgid "Show Applications"
msgstr "Показать приложения"
@@ -976,10 +922,8 @@ msgstr "Выйти из системы"
#, c-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] ""
"Сеанс пользователя %s будет автоматически завершён через %d секунду."
msgstr[1] ""
"Сеанс пользователя %s будет автоматически завершён через %d секунды."
msgstr[0] "Сеанс пользователя %s будет автоматически завершён через %d секунду."
msgstr[1] "Сеанс пользователя %s будет автоматически завершён через %d секунды."
msgstr[2] "Сеанс пользователя %s будет автоматически завершён через %d секунд."
#: ../js/ui/endSessionDialog.js:70
@@ -1008,7 +952,8 @@ msgstr[0] "Система будет автоматически выключен
msgstr[1] "Система будет автоматически выключена через %d секунды."
msgstr[2] "Система будет автоматически выключена через %d секунд."
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
#: ../js/ui/endSessionDialog.js:88
#: ../js/ui/endSessionDialog.js:104
msgctxt "button"
msgid "Restart"
msgstr "Перезапустить"
@@ -1032,21 +977,20 @@ msgstr[1] "Система будет автоматически перезапу
msgstr[2] "Система будет автоматически перезапущена через %d секунд."
#: ../js/ui/endSessionDialog.js:112
#| msgid "Install Updates & Restart"
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Перезапустить и установить обновления"
#: ../js/ui/endSessionDialog.js:114
#, c-format
#| msgid "The system will restart automatically in %d second."
#| msgid_plural "The system will restart automatically in %d seconds."
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
msgstr[0] ""
"Система автоматически перезапустится и установит обновления через %d секунду."
msgstr[1] ""
"Система автоматически перезапустится и установит обновления через %d секунды."
msgstr[2] ""
"Система автоматически перезапустится и установит обновления через %d секунд."
msgid_plural "The system will automatically restart and install updates in %d seconds."
msgstr[0] "Система автоматически перезапустится и установит обновления через %d секунду."
msgstr[1] "Система автоматически перезапустится и установит обновления через %d секунды."
msgstr[2] "Система автоматически перезапустится и установит обновления через %d секунд."
#: ../js/ui/endSessionDialog.js:119
msgctxt "button"
@@ -1082,7 +1026,8 @@ msgstr "Установить"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Загрузить и установить расширение «%s» с extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619
#: ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Клавиатура"
@@ -1100,7 +1045,8 @@ msgstr "%s не сообщал о каких-либо ошибках."
msgid "Hide Errors"
msgstr "Скрыть ошибки"
#: ../js/ui/lookingGlass.js:753 ../js/ui/lookingGlass.js:813
#: ../js/ui/lookingGlass.js:753
#: ../js/ui/lookingGlass.js:813
msgid "Show Errors"
msgstr "Показать ошибки"
@@ -1110,7 +1056,8 @@ msgstr "Включено"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:765 ../src/gvc/gvc-mixer-control.c:1830
#: ../js/ui/lookingGlass.js:765
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Выключено"
@@ -1162,16 +1109,18 @@ msgstr "Нет сообщений"
msgid "Message Tray"
msgstr "Панель сообщений"
#: ../js/ui/messageTray.js:2787
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Системная информация"
#: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:396
#: ../js/ui/notificationDaemon.js:629
#: ../src/shell-app.c:396
msgctxt "program"
msgid "Unknown"
msgstr "Неизвестно"
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:152
#: ../js/ui/overviewControls.js:491
#: ../js/ui/screenShield.js:152
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@@ -1195,17 +1144,22 @@ msgstr "Обзор"
msgid "Type to search…"
msgstr "Найти…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Закрыть"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Обзор"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:805
#| msgid "Settings"
msgid "Settings Menu"
msgstr "Меню параметров"
#: ../js/ui/panel.js:892
msgid "Top Bar"
msgstr "Верхняя панель"
@@ -1214,7 +1168,7 @@ msgstr "Верхняя панель"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1240,11 +1194,12 @@ msgstr[0] "%d новое уведомление"
msgstr[1] "%d новых уведомления"
msgstr[2] "%d новых уведомлений"
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
#: ../js/ui/screenShield.js:477
#: ../js/ui/status/system.js:333
msgid "Lock"
msgstr "Заблокировать"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME необходимо заблокировать экран"
@@ -1255,11 +1210,13 @@ msgstr "GNOME необходимо заблокировать экран"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830
#: ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Не удалось заблокировать"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831
#: ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Блокировке помешало приложение"
@@ -1341,14 +1298,19 @@ msgstr "Крупный текст"
#. The Bluetooth menu only appears when Bluetooth is in use,
#. so just statically build it with a "Turn Off" menu item.
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:62
#: ../js/ui/status/bluetooth.js:99 ../js/ui/status/bluetooth.js:127
#: ../js/ui/status/bluetooth.js:163 ../js/ui/status/bluetooth.js:194
#: ../js/ui/status/bluetooth.js:28
#: ../js/ui/status/bluetooth.js:62
#: ../js/ui/status/bluetooth.js:99
#: ../js/ui/status/bluetooth.js:127
#: ../js/ui/status/bluetooth.js:163
#: ../js/ui/status/bluetooth.js:194
msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
#: ../js/ui/status/bluetooth.js:30
#: ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:1034
#: ../js/ui/status/rfkill.js:46
msgid "Turn Off"
msgstr "Выключить"
@@ -1364,12 +1326,14 @@ msgstr[0] "Подключено %d устройство"
msgstr[1] "Подключено %d устройства"
msgstr[2] "Подключено %d устройств"
#: ../js/ui/status/bluetooth.js:100 ../js/ui/status/bluetooth.js:128
#: ../js/ui/status/bluetooth.js:100
#: ../js/ui/status/bluetooth.js:128
#, c-format
msgid "Authorization request from %s"
msgstr "Запрос авторизации от %s"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/bluetooth.js:171
#: ../js/ui/status/bluetooth.js:106
#: ../js/ui/status/bluetooth.js:171
#: ../js/ui/status/bluetooth.js:202
#, c-format
msgid "Device %s wants to pair with this computer"
@@ -1408,8 +1372,7 @@ msgstr "Подтверждение на сопряжение с %s"
#: ../js/ui/status/bluetooth.js:172
#, c-format
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
msgid "Please confirm whether the Passkey '%06d' matches the one on the device."
msgstr "Подтвердите, совпадает ли ключ доступа «%06d» с кодом на устройстве."
#. Translators: this is the verb, not the noun
@@ -1438,7 +1401,7 @@ msgstr "OK"
msgid "Brightness"
msgstr "Яркость"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Показать раскладку клавиатуры"
@@ -1446,11 +1409,13 @@ msgstr "Показать раскладку клавиатуры"
msgid "<unknown>"
msgstr "<неизвестно>"
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
#: ../js/ui/status/network.js:203
#: ../js/ui/status/network.js:1049
msgid "Off"
msgstr "Выключена"
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
#: ../js/ui/status/network.js:276
#: ../js/ui/status/network.js:955
#: ../js/ui/status/rfkill.js:49
msgid "Network Settings"
msgstr "Настроить сеть"
@@ -1465,12 +1430,14 @@ msgstr "не управляется"
msgid "disconnecting..."
msgstr "отключение…"
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
#: ../js/ui/status/network.js:372
#: ../js/ui/status/network.js:1100
msgid "connecting..."
msgstr "подключение…"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
#: ../js/ui/status/network.js:375
#: ../js/ui/status/network.js:1103
msgid "authentication required"
msgstr "требуется подтверждение подлинности"
@@ -1486,7 +1453,8 @@ msgstr "отсутствует прошивка"
msgid "unavailable"
msgstr "недоступное"
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
#: ../js/ui/status/network.js:389
#: ../js/ui/status/network.js:1105
msgid "connection failed"
msgstr "сбой подключения"
@@ -1499,6 +1467,7 @@ msgid "Select a network"
msgstr "Выберите сеть"
#: ../js/ui/status/network.js:680
#| msgid "Wi-Fi Networks"
msgid "No Networks"
msgstr "Сети отсутствуют"
@@ -1541,19 +1510,22 @@ msgstr "Полностью заряжена"
#. 0 is reported when UPower does not have enough data
#. to estimate battery life
#. state is one of PENDING_CHARGING, PENDING_DISCHARGING
#: ../js/ui/status/power.js:69 ../js/ui/status/power.js:86
#: ../js/ui/status/power.js:69
#: ../js/ui/status/power.js:86
msgid "Estimating…"
msgstr "Выполняется подсчёт…"
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
#: ../js/ui/status/power.js:77
#, c-format
#| msgid "%d\\u2236%d Remaining (%d%%)"
msgid "%d\\u2236%02d Remaining (%d%%)"
msgstr "Осталось %d\\u2236%02d (%d%%)"
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
#: ../js/ui/status/power.js:82
#, c-format
#| msgid "%d\\u2236%d Until Full (%d%%)"
msgid "%d\\u2236%02d Until Full (%d%%)"
msgstr "До полного заряда %d\\u2236%02d (%d%%)"
@@ -1565,6 +1537,7 @@ msgid "Airplane Mode"
msgstr "Режим перелёта"
#: ../js/ui/status/rfkill.js:45
#| msgid "Open"
msgid "On"
msgstr "Включено"
@@ -1608,11 +1581,11 @@ msgstr "Войти от имени другого пользователя"
msgid "Unlock Window"
msgstr "Разблокировать окно"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Приложения"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Поиск"
@@ -1643,6 +1616,7 @@ msgstr "Хотите сохранить эти параметры дисплея
#. to avoid ellipsizing the labels.
#.
#: ../js/ui/windowManager.js:75
#| msgid "Power Settings"
msgid "Revert Settings"
msgstr "Вернуть параметры"
@@ -1696,8 +1670,7 @@ msgstr "Режим, используемый GDM для окна входа в
#: ../src/main.c:365
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
"Использовать для экрана входа в систему определённый режим, например «gdm»"
msgstr "Использовать для экрана входа в систему определённый режим, например «gdm»"
#: ../src/main.c:371
msgid "List possible modes"
@@ -1720,9 +1693,6 @@ msgstr "Пароль не может быть пустым"
msgid "Authentication dialog was dismissed by the user"
msgstr "Аутентификация отклонена пользователем"
#~ msgid "Settings Menu"
#~ msgstr "Меню параметров"
#~ msgid "Screenshots"
#~ msgstr "Снимки экрана"
@@ -1932,6 +1902,7 @@ msgstr "Аутентификация отклонена пользователе
#~ msgstr "Сеть отключена"
#~ msgid "%d hour remaining"
#~ msgid_plural "%d hours remaining"
#~ msgstr[0] "Остался %d час"
#~ msgstr[1] "Осталось %d часа"
@@ -1941,24 +1912,27 @@ msgstr "Аутентификация отклонена пользователе
#~ msgstr "Осталось %d %s %d %s"
#~ msgid "hour"
#~ msgid_plural "hours"
#~ msgstr[0] "час"
#~ msgstr[1] "часа"
#~ msgstr[2] "часов"
#~ msgid "minute"
#~ msgid_plural "minutes"
#~ msgstr[0] "минута"
#~ msgstr[1] "минуты"
#~ msgstr[2] "минут"
#~ msgid "%d minute remaining"
#~ msgid_plural "%d minutes remaining"
#~ msgstr[0] "Осталась %d минута"
#~ msgstr[1] "Осталось %d минуты"
#~ msgstr[2] "Осталось %d минут"
#~ msgctxt "percent of battery remaining"
#~ msgid "%d%%"
#~ msgstr "%d%%"
@@ -1991,8 +1965,8 @@ msgstr "Аутентификация отклонена пользователе
#~ msgid "Computer"
#~ msgstr "Компьютер"
#~ msgctxt "device"
#~ msgid "Unknown"
#~ msgstr "Неизвестно"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-15 08:19+0000\n"
"POT-Creation-Date: 2013-09-04 09:34+0000\n"
"PO-Revision-Date: 2013-08-29 20:44+0100\n"
"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
"Language-Team: Slovak <gnome-sk-list@gnome.org>\n"
@@ -56,7 +56,6 @@ msgid "GNOME Shell"
msgstr "Shell prostredia GNOME"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Správa okien a spúšťanie aplikácií"
@@ -69,10 +68,6 @@ msgstr "Nastavenia rozšírení pre Shell prostredia GNOME"
msgid "Configure GNOME Shell Extensions"
msgstr "Nastavenie rozšírení pre Shell prostredia GNOME"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "Shell prostredia GNOME (kompozitor pre wayland)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -360,42 +355,42 @@ msgstr "Chyba pri overovaní totožnosti"
msgid "(or swipe finger)"
msgstr "(alebo prejdite prstom)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Príkaz nebol nájdený"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Nepodarilo sa analyzovať príkaz:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Spustenie „%s“ zlyhalo:"
#: ../js/ui/appDisplay.js:598
#: ../js/ui/appDisplay.js:580
msgid "Frequently used applications will appear here"
msgstr "Tu sa objavia často používané aplikácie"
#: ../js/ui/appDisplay.js:714
#: ../js/ui/appDisplay.js:696
msgid "Frequent"
msgstr "Často používané"
#: ../js/ui/appDisplay.js:721
#: ../js/ui/appDisplay.js:703
msgid "All"
msgstr "Všetky"
#: ../js/ui/appDisplay.js:1516
#: ../js/ui/appDisplay.js:1490
msgid "New Window"
msgstr "Nové okno"
#: ../js/ui/appDisplay.js:1519 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1493 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Odstrániť z obľúbených"
#: ../js/ui/appDisplay.js:1520
#: ../js/ui/appDisplay.js:1494
msgid "Add to Favorites"
msgstr "Pridať do obľúbených"
@@ -409,8 +404,7 @@ msgstr "Program %s bol pridaný medzi obľúbené."
msgid "%s has been removed from your favorites."
msgstr "Program %s bol odstránený z obľúbených."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:807
#: ../js/ui/status/system.js:325
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Nastavenia"
@@ -942,7 +936,7 @@ msgstr "Zobraziť účet"
msgid "Unknown reason"
msgstr "Neznámy dôvod"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Okná"
@@ -1095,7 +1089,7 @@ msgstr "Inštalovať"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Stiahnuť a nainštalovať „%s“ z extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Klávesnica"
@@ -1179,7 +1173,7 @@ msgstr "Žiadne správy"
msgid "Message Tray"
msgstr "Lišta správ"
#: ../js/ui/messageTray.js:2787
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Informácie o systéme"
@@ -1213,17 +1207,21 @@ msgstr "Prehľad"
msgid "Type to search…"
msgstr "Zadajte text na vyhľadanie…"
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Ukončiť"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Aktivity"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Ponuka nastavení"
#: ../js/ui/panel.js:901
msgid "Top Bar"
msgstr "Horná lišta"
@@ -1232,7 +1230,7 @@ msgstr "Horná lišta"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1265,7 +1263,7 @@ msgstr[2] "%d nové oznámenia"
msgid "Lock"
msgstr "Uzamknúť"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "Prostredie GNOME vyžaduje uzamknutie obrazovky"
@@ -1276,11 +1274,11 @@ msgstr "Prostredie GNOME vyžaduje uzamknutie obrazovky"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Nepodarilo sa uzamknúť obrazovku"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Uzamknutie bolo zablokované aplikáciou"
@@ -1464,7 +1462,7 @@ msgstr "Ok"
msgid "Brightness"
msgstr "Jas"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Zobraziť rozloženie klávesnice"
@@ -1639,11 +1637,11 @@ msgstr "Prihlásiť ako iný používateľ"
msgid "Unlock Window"
msgstr "Odomykacie okno"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Aplikácie"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Hľadať"
@@ -1753,9 +1751,6 @@ msgstr "Heslo nemôže byť prázdne"
msgid "Authentication dialog was dismissed by the user"
msgstr "Dialógové okno overenia totožnosti bolo zatvorené používateľom"
#~ msgid "Settings Menu"
#~ msgstr "Ponuka nastavení"
#~ msgid "Session"
#~ msgstr "Relácia"

View File

@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-12 17:39+0000\n"
"PO-Revision-Date: 2013-09-12 20:25+0100\n"
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
"PO-Revision-Date: 2013-09-02 22:41+0100\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: Slovenian\n"
@@ -51,7 +51,6 @@ msgid "GNOME Shell"
msgstr "Gnome lupina"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Upravljanje oken in zaganjanje programov"
@@ -64,10 +63,6 @@ msgstr "Možnosti razširitev lupine GNOME"
msgid "Configure GNOME Shell Extensions"
msgstr "Nastavitve razširitev lupine Gnome"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "Lupina GNOME (wayland)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -344,42 +339,42 @@ msgstr "Napaka overitve"
msgid "(or swipe finger)"
msgstr "(ali pa povlecite prst)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Ukaz ni mogoče najti"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Ukaza ni mogoče razčleniti:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Izvedba '%s' je spodletela:"
#: ../js/ui/appDisplay.js:573
#: ../js/ui/appDisplay.js:578
msgid "Frequently used applications will appear here"
msgstr "Pogosto uporabljeni programi bodo prikazani tu"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:694
msgid "Frequent"
msgstr "Pogosto"
#: ../js/ui/appDisplay.js:696
#: ../js/ui/appDisplay.js:701
msgid "All"
msgstr "Vse"
#: ../js/ui/appDisplay.js:1491
#: ../js/ui/appDisplay.js:1488
msgid "New Window"
msgstr "Novo okno"
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1491 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Odstrani iz priljubljenih"
#: ../js/ui/appDisplay.js:1495
#: ../js/ui/appDisplay.js:1492
msgid "Add to Favorites"
msgstr "Dodaj med priljubljene"
@@ -922,7 +917,7 @@ msgstr "Poglej račun"
msgid "Unknown reason"
msgstr "Neznan vzrok"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Okna"
@@ -1082,7 +1077,7 @@ msgid "Download and install '%s' from extensions.gnome.org?"
msgstr ""
"Ali naj se razširitev '%s' namesti preko povezave z extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Tipkovnica"
@@ -1162,7 +1157,7 @@ msgstr "Ni sporočil"
msgid "Message Tray"
msgstr "Sporočilna vrstica"
#: ../js/ui/messageTray.js:2787
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Podrobnosti sistema"
@@ -1196,21 +1191,21 @@ msgstr "Pregled"
msgid "Type to search…"
msgstr "Vnos niza za iskanje ..."
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Končaj"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Dejavnosti"
#: ../js/ui/panel.js:807
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Meni nastavitev"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:892
msgid "Top Bar"
msgstr "Vrhnja vrstica"
@@ -1219,7 +1214,7 @@ msgstr "Vrhnja vrstica"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1250,7 +1245,7 @@ msgstr[3] "%d nova obvestila"
msgid "Lock"
msgstr "Zakleni"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "Zakleniti je treba zaslon"
@@ -1261,11 +1256,11 @@ msgstr "Zakleniti je treba zaslon"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Zaklep ni mogoč"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Zaklep je preprečil program"
@@ -1445,7 +1440,7 @@ msgstr "V redu"
msgid "Brightness"
msgstr "Svetlost"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Pokaži razporeditev tipkovnice"
@@ -1615,11 +1610,11 @@ msgstr "Prijava kot drug uporabnik"
msgid "Unlock Window"
msgstr "Odkleni okno"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Programi"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Poišči"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Tajik Gnome\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-12 17:36+0000\n"
"PO-Revision-Date: 2013-09-13 13:13+0500\n"
"POT-Creation-Date: 2013-09-08 10:42+0000\n"
"PO-Revision-Date: 2013-09-08 15:44+0500\n"
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
"Language-Team: \n"
"Language: Tajik\n"
@@ -48,7 +48,6 @@ msgid "GNOME Shell"
msgstr "Восити GNOME"
#: ../data/gnome-shell.desktop.in.in.h:2
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Идоракунии равзанаҳо ва оғозидани барномаҳо"
@@ -61,10 +60,6 @@ msgstr "Хусусиятҳои пасвандҳои восити GNOME"
msgid "Configure GNOME Shell Extensions"
msgstr "Танзимоти пасвандҳои восити GNOME"
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)"
msgstr "Восити GNOME (созандаи wayland)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
@@ -350,17 +345,17 @@ msgstr "Хатои санҷиши ҳаққоният"
msgid "(or swipe finger)"
msgstr "(ё бо ангут ламс кунед)"
#: ../js/misc/util.js:98
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Фармон ёфт нашудааст"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:131
#: ../js/misc/util.js:130
msgid "Could not parse command:"
msgstr "Фармон иҷро нашудааст:"
#: ../js/misc/util.js:139
#: ../js/misc/util.js:138
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Иҷрокунии '%s' қатъ шудааст:"
@@ -929,7 +924,7 @@ msgstr "Намоиш додани ҳисоб"
msgid "Unknown reason"
msgstr "Сабаби номаълум"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:100
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows"
msgstr "Равзанаҳо"
@@ -1077,7 +1072,7 @@ msgstr "Насб кардан"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "\"%s\"-ро аз extensions.gnome.org боргирӣ ва насб мекунед?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:334
msgid "Keyboard"
msgstr "Клавиатура"
@@ -1189,21 +1184,21 @@ msgstr "Хулоса"
msgid "Type to search…"
msgstr "Ҷустуҷӯ кардан..."
#: ../js/ui/panel.js:518
#: ../js/ui/panel.js:516
msgid "Quit"
msgstr "Баромад"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:570
#: ../js/ui/panel.js:568
msgid "Activities"
msgstr "Фаъолиятҳо"
#: ../js/ui/panel.js:807
#: ../js/ui/panel.js:805
msgid "Settings Menu"
msgstr "Менюи танзимот"
#: ../js/ui/panel.js:903
#: ../js/ui/panel.js:901
msgid "Top Bar"
msgstr "Панели боло"
@@ -1212,7 +1207,7 @@ msgstr "Панели боло"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:233
#: ../js/ui/popupMenu.js:226
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
@@ -1241,7 +1236,7 @@ msgstr[1] "%d огоҳии нав"
msgid "Lock"
msgstr "Қулф кардан"
#: ../js/ui/screenShield.js:704
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME бояд экранро қулф кунад"
@@ -1252,11 +1247,11 @@ msgstr "GNOME бояд экранро қулф кунад"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Қулф карда намешавад"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1298
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Қулф аз тарави барнома баста шудааст"
@@ -1436,7 +1431,7 @@ msgstr "OK"
msgid "Brightness"
msgstr "Дурахшонӣ"
#: ../js/ui/status/keyboard.js:403
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Намоиш додани тарҳбандии клавиатура"
@@ -1606,11 +1601,11 @@ msgstr "Ворид шудан бо корбари дигар"
msgid "Unlock Window"
msgstr "Кушодани равзана"
#: ../js/ui/viewSelector.js:104
#: ../js/ui/viewSelector.js:100
msgid "Applications"
msgstr "Барномаҳо"
#: ../js/ui/viewSelector.js:108
#: ../js/ui/viewSelector.js:104
msgid "Search"
msgstr "Ҷустуҷӯ"

View File

@@ -1,4 +1,7 @@
st_cflags = \
-DCLUTTER_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_2_0_API \
-I$(top_srcdir)/src \
-DPREFIX=\""$(prefix)"\" \
-DLIBDIR=\""$(libdir)"\" \

View File

@@ -68,6 +68,9 @@ include Makefile-calendar-server.am
include Makefile-hotplug-sniffer.am
gnome_shell_cflags = \
-DCLUTTER_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_2_0_API \
$(GNOME_SHELL_CFLAGS) \
-I$(srcdir)/tray \
-DVERSION=\"$(VERSION)\" \

View File

@@ -28,14 +28,11 @@
#include <stdlib.h>
#include <string.h>
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#define COGL_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
#include <clutter/x11/clutter-x11.h>
#include <gjs/gjs.h>
#include <meta/display.h>
#include <meta/meta-plugin.h>
#include <meta/util.h>
#include "shell-global-private.h"
#include "shell-perf-log.h"
@@ -344,13 +341,8 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
}
#endif
#ifdef HAVE_WAYLAND
if (meta_is_wayland_compositor ())
return FALSE;
#endif
/*
* Pass the event to shell-global for XDND
* Pass the event to shell-global
*/
if (_shell_global_check_xdnd_event (shell_plugin->global, xev))
return TRUE;

View File

@@ -217,7 +217,7 @@ typedef struct {
ClutterTextDirection direction;
} CreateFadedIconData;
static CoglHandle
static CoglTexture *
shell_app_create_faded_icon_cpu (StTextureCache *cache,
const char *key,
void *datap,
@@ -227,7 +227,7 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
ShellApp *app;
GdkPixbuf *pixbuf;
int size;
CoglHandle texture;
CoglTexture *texture;
gint width, height, rowstride;
guint8 n_channels;
gboolean have_alpha;
@@ -263,13 +263,13 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
}
if (info == NULL)
return COGL_INVALID_HANDLE;
return NULL;
pixbuf = gtk_icon_info_load_icon (info, NULL);
g_object_unref (info);
if (pixbuf == NULL)
return COGL_INVALID_HANDLE;
return NULL;
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
@@ -338,7 +338,7 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
ClutterActor *
shell_app_get_faded_icon (ShellApp *app, int size, ClutterTextDirection direction)
{
CoglHandle texture;
CoglTexture *texture;
ClutterActor *result;
char *cache_key;
CreateFadedIconData data;
@@ -367,7 +367,7 @@ shell_app_get_faded_icon (ShellApp *app, int size, ClutterTextDirection directio
NULL);
g_free (cache_key);
if (texture != COGL_INVALID_HANDLE)
if (texture != NULL)
{
result = clutter_texture_new ();
clutter_texture_set_cogl_texture (CLUTTER_TEXTURE (result), texture);

View File

@@ -27,7 +27,6 @@
#include <meta/display.h>
#include <meta/util.h>
#include <meta/meta-shaped-texture.h>
#include <meta/meta-cursor-tracker.h>
/* Memory report bits */
#ifdef HAVE_MALLINFO
@@ -52,7 +51,7 @@ struct _ShellGlobal {
ClutterStage *stage;
Window stage_xwindow;
GdkWindow *ibus_window;
GdkWindow *stage_gdk_window;
MetaDisplay *meta_display;
GdkDisplay *gdk_display;
@@ -600,6 +599,91 @@ sync_input_region (ShellGlobal *global)
meta_set_stage_input_region (screen, global->input_region);
}
/**
* shell_global_set_cursor:
* @global: A #ShellGlobal
* @type: the type of the cursor
*
* Set the cursor on the stage window.
*/
void
shell_global_set_cursor (ShellGlobal *global,
ShellCursor type)
{
const char *name;
GdkCursor *cursor;
switch (type)
{
case SHELL_CURSOR_DND_IN_DRAG:
name = "dnd-none";
break;
case SHELL_CURSOR_DND_MOVE:
name = "dnd-move";
break;
case SHELL_CURSOR_DND_COPY:
name = "dnd-copy";
break;
case SHELL_CURSOR_DND_UNSUPPORTED_TARGET:
name = "dnd-none";
break;
case SHELL_CURSOR_POINTING_HAND:
name = "hand";
break;
case SHELL_CURSOR_CROSSHAIR:
name = "crosshair";
break;
default:
g_return_if_reached ();
}
cursor = gdk_cursor_new_from_name (global->gdk_display, name);
if (!cursor)
{
GdkCursorType cursor_type;
switch (type)
{
case SHELL_CURSOR_DND_IN_DRAG:
cursor_type = GDK_FLEUR;
break;
case SHELL_CURSOR_DND_MOVE:
cursor_type = GDK_TARGET;
break;
case SHELL_CURSOR_DND_COPY:
cursor_type = GDK_PLUS;
break;
case SHELL_CURSOR_POINTING_HAND:
cursor_type = GDK_HAND2;
break;
case SHELL_CURSOR_CROSSHAIR:
cursor_type = GDK_CROSSHAIR;
break;
case SHELL_CURSOR_DND_UNSUPPORTED_TARGET:
cursor_type = GDK_X_CURSOR;
break;
default:
g_return_if_reached ();
}
cursor = gdk_cursor_new (cursor_type);
}
gdk_window_set_cursor (global->stage_gdk_window, cursor);
g_object_unref (cursor);
}
/**
* shell_global_unset_cursor:
* @global: A #ShellGlobal
*
* Unset the cursor on the stage window.
*/
void
shell_global_unset_cursor (ShellGlobal *global)
{
gdk_window_set_cursor (global->stage_gdk_window, NULL);
}
/**
* shell_global_set_stage_input_region:
* @global: the #ShellGlobal
@@ -793,9 +877,13 @@ gnome_shell_gdk_event_handler (GdkEvent *event_gdk,
{
if (event_gdk->type == GDK_KEY_PRESS || event_gdk->type == GDK_KEY_RELEASE)
{
ShellGlobal *global = data;
ClutterActor *stage;
Window stage_xwindow;
if (event_gdk->key.window == global->ibus_window)
stage = CLUTTER_ACTOR (data);
stage_xwindow = clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
if (GDK_WINDOW_XID (event_gdk->key.window) == stage_xwindow)
{
ClutterDeviceManager *device_manager = clutter_device_manager_get_default ();
ClutterInputDevice *keyboard = clutter_device_manager_get_core_device (device_manager,
@@ -805,7 +893,7 @@ gnome_shell_gdk_event_handler (GdkEvent *event_gdk,
CLUTTER_KEY_PRESS : CLUTTER_KEY_RELEASE);
event_clutter->key.time = event_gdk->key.time;
event_clutter->key.flags = CLUTTER_EVENT_NONE;
event_clutter->key.stage = CLUTTER_STAGE (global->stage);
event_clutter->key.stage = CLUTTER_STAGE (stage);
event_clutter->key.source = NULL;
/* This depends on ClutterModifierType and GdkModifierType being
@@ -828,16 +916,6 @@ gnome_shell_gdk_event_handler (GdkEvent *event_gdk,
gtk_main_do_event (event_gdk);
}
static void
entry_cursor_func (StEntry *entry,
gboolean use_ibeam,
gpointer user_data)
{
ShellGlobal *global = user_data;
meta_screen_set_cursor (global->meta_screen, use_ibeam ? META_CURSOR_IBEAM : META_CURSOR_DEFAULT);
}
void
_shell_global_set_plugin (ShellGlobal *global,
MetaPlugin *plugin)
@@ -857,38 +935,9 @@ _shell_global_set_plugin (ShellGlobal *global,
meta_screen_get_screen_number (global->meta_screen));
global->stage = CLUTTER_STAGE (meta_get_stage_for_screen (global->meta_screen));
#ifdef HAVE_WAYLAND
if (meta_is_wayland_compositor ())
{
/* When Mutter is acting as its own display server then the
stage does not have a window, so create a different window
which we use to communicate with IBus, and leave stage_xwindow
as None.
*/
GdkWindowAttr attributes;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.width = 100;
attributes.height = 100;
attributes.window_type = GDK_WINDOW_TOPLEVEL;
global->ibus_window = gdk_window_new (NULL,
&attributes,
0 /* attributes_mask */);
global->stage_xwindow = None;
}
else
#endif
{
global->stage_xwindow = clutter_x11_get_stage_window (global->stage);
global->ibus_window = gdk_x11_window_foreign_new_for_display (global->gdk_display,
global->stage_xwindow);
}
st_im_text_set_event_window (global->ibus_window);
st_entry_set_cursor_func (entry_cursor_func, global);
global->stage_xwindow = clutter_x11_get_stage_window (global->stage);
global->stage_gdk_window = gdk_x11_window_foreign_new_for_display (global->gdk_display,
global->stage_xwindow);
g_signal_connect (global->stage, "notify::width",
G_CALLBACK (global_stage_notify_width), global);
@@ -917,7 +966,7 @@ _shell_global_set_plugin (ShellGlobal *global,
g_signal_connect (global->meta_display, "notify::focus-window",
G_CALLBACK (focus_window_changed), global);
gdk_event_handler_set (gnome_shell_gdk_event_handler, global, NULL);
gdk_event_handler_set (gnome_shell_gdk_event_handler, global->stage, NULL);
global->focus_manager = st_focus_manager_get_for_stage (global->stage);
}
@@ -992,8 +1041,7 @@ void
shell_global_freeze_keyboard (ShellGlobal *global,
guint32 timestamp)
{
if (global->stage_xwindow != None)
meta_display_freeze_keyboard (global->meta_display, global->stage_xwindow, timestamp);
meta_display_freeze_keyboard (global->meta_display, global->stage_xwindow, timestamp);
}
/* Code to close all file descriptors before we exec; copied from gspawn.c in GLib.
@@ -1243,6 +1291,9 @@ void shell_global_init_xdnd (ShellGlobal *global)
* @mods: (out): the current set of modifier keys that are pressed down
*
* Gets the pointer coordinates and current modifier key state.
* This is a wrapper around gdk_display_get_pointer() that strips
* out any un-declared modifier flags, to make gjs happy; see
* https://bugzilla.gnome.org/show_bug.cgi?id=597292.
*/
void
shell_global_get_pointer (ShellGlobal *global,
@@ -1250,13 +1301,18 @@ shell_global_get_pointer (ShellGlobal *global,
int *y,
ClutterModifierType *mods)
{
ClutterModifierType raw_mods;
MetaCursorTracker *tracker;
GdkDeviceManager *gmanager;
GdkDevice *gdevice;
GdkScreen *gscreen;
GdkModifierType raw_mods;
tracker = meta_cursor_tracker_get_for_screen (global->meta_screen);
meta_cursor_tracker_get_pointer (tracker, x, y, &raw_mods);
*mods = raw_mods & CLUTTER_MODIFIER_MASK;
gmanager = gdk_display_get_device_manager (global->gdk_display);
gdevice = gdk_device_manager_get_client_pointer (gmanager);
gdk_device_get_position (gdevice, &gscreen, x, y);
gdk_device_get_state (gdevice,
gdk_screen_get_root_window (gscreen),
NULL, &raw_mods);
*mods = raw_mods & GDK_MODIFIER_MASK;
}
/**
@@ -1271,10 +1327,19 @@ void
shell_global_sync_pointer (ShellGlobal *global)
{
int x, y;
ClutterModifierType mods;
GdkModifierType mods;
GdkDeviceManager *gmanager;
GdkDevice *gdevice;
GdkScreen *gscreen;
ClutterMotionEvent event;
shell_global_get_pointer (global, &x, &y, &mods);
gmanager = gdk_display_get_device_manager (global->gdk_display);
gdevice = gdk_device_manager_get_client_pointer (gmanager);
gdk_device_get_position (gdevice, &gscreen, &x, &y);
gdk_device_get_state (gdevice,
gdk_screen_get_root_window (gscreen),
NULL, &mods);
event.type = CLUTTER_MOTION;
event.time = shell_global_get_current_time (global);

View File

@@ -50,6 +50,20 @@ void shell_global_freeze_keyboard (ShellGlobal *global,
void shell_global_set_stage_input_region (ShellGlobal *global,
GSList *rectangles);
/* X utilities */
typedef enum {
SHELL_CURSOR_DND_IN_DRAG,
SHELL_CURSOR_DND_UNSUPPORTED_TARGET,
SHELL_CURSOR_DND_MOVE,
SHELL_CURSOR_DND_COPY,
SHELL_CURSOR_POINTING_HAND,
SHELL_CURSOR_CROSSHAIR
} ShellCursor;
void shell_global_set_cursor (ShellGlobal *global,
ShellCursor type);
void shell_global_unset_cursor (ShellGlobal *global);
void shell_global_get_pointer (ShellGlobal *global,
int *x,
int *y,

View File

@@ -35,8 +35,6 @@
#define SHELL_IS_INVERT_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_INVERT_LIGHTNESS_EFFECT))
#define SHELL_INVERT_LIGHTNESS_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_INVERT_LIGHTNESS_EFFEC, ShellInvertLightnessEffectClass))
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#include "shell-invert-lightness-effect.h"
#include <cogl/cogl.h>
@@ -124,6 +122,7 @@ shell_invert_lightness_effect_paint_target (ClutterOffscreenEffect *effect)
ShellInvertLightnessEffect *self = SHELL_INVERT_LIGHTNESS_EFFECT (effect);
ClutterActor *actor;
guint8 paint_opacity;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (effect));
paint_opacity = clutter_actor_get_paint_opacity (actor);
@@ -133,11 +132,8 @@ shell_invert_lightness_effect_paint_target (ClutterOffscreenEffect *effect)
paint_opacity,
paint_opacity,
paint_opacity);
cogl_push_source (self->pipeline);
cogl_rectangle (0, 0, self->tex_width, self->tex_height);
cogl_pop_source ();
cogl_framebuffer_draw_rectangle (fb, self->pipeline,
0, 0, self->tex_width, self->tex_height);
}
static void

View File

@@ -21,7 +21,6 @@
#ifndef __SHELL_INVERT_LIGHTNESS_EFFECT_H__
#define __SHELL_INVERT_LIGHTNESS_EFFECT_H__
#define COGL_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
G_BEGIN_DECLS

View File

@@ -441,15 +441,19 @@ recorder_record_frame (ShellRecorder *recorder)
recorder->last_frame_time = now;
size = recorder->area.width * recorder->area.height * 4;
data = g_malloc (recorder->area.width * 4 * recorder->area.height);
cogl_read_pixels (recorder->area.x,
recorder->area.y,
recorder->area.width,
recorder->area.height,
COGL_READ_PIXELS_COLOR_BUFFER,
CLUTTER_CAIRO_FORMAT_ARGB32,
data);
data = g_malloc (size);
if (!cogl_framebuffer_read_pixels (cogl_get_draw_framebuffer (),
recorder->area.x,
recorder->area.y,
recorder->area.width,
recorder->area.height,
CLUTTER_CAIRO_FORMAT_ARGB32,
data))
{
g_warning ("Could not retrieve pixel data");
g_free (data);
return;
}
buffer = gst_buffer_new();
gst_buffer_insert_memory (buffer, -1,

View File

@@ -1,8 +1,5 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
#define COGL_ENABLE_EXPERIMENTAL_API
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
#include <cogl/cogl.h>
#include <meta/display.h>

View File

@@ -97,6 +97,7 @@ shell_slicer_paint_child (ShellSlicer *self)
float width, height, child_width, child_height;
StAlign x_align, y_align;
double x_align_factor, y_align_factor;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
child = st_bin_get_child (ST_BIN (self));
@@ -115,18 +116,17 @@ shell_slicer_paint_child (ShellSlicer *self)
child_width = child_box.x2 - child_box.x1;
child_height = child_box.y2 - child_box.y1;
cogl_push_matrix ();
cogl_clip_push_rectangle (0, 0, width, height);
cogl_translate ((int)(0.5 + x_align_factor * (width - child_width)),
(int)(0.5 + y_align_factor * (height - child_height)),
0);
cogl_framebuffer_push_matrix (fb);
cogl_framebuffer_push_rectangle_clip (fb, 0, 0, width, height);
cogl_framebuffer_translate (fb,
(int)(0.5 + x_align_factor * (width - child_width)),
(int)(0.5 + y_align_factor * (height - child_height)),
0);
clutter_actor_paint (child);
cogl_clip_pop ();
cogl_pop_matrix ();
cogl_framebuffer_pop_clip (fb);
cogl_framebuffer_pop_matrix (fb);
}
static void

View File

@@ -387,19 +387,20 @@ st_box_layout_paint (ClutterActor *actor)
ClutterActorBox allocation_box;
ClutterActorBox content_box;
ClutterActor *child;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
get_border_paint_offsets (self, &x, &y);
if (x != 0 || y != 0)
{
cogl_push_matrix ();
cogl_translate ((int)x, (int)y, 0);
cogl_framebuffer_push_matrix (fb);
cogl_framebuffer_translate (fb, (int)x, (int)y, 0);
}
st_widget_paint_background (ST_WIDGET (actor));
if (x != 0 || y != 0)
{
cogl_pop_matrix ();
cogl_framebuffer_pop_matrix (fb);
}
if (clutter_actor_get_n_children (actor) == 0)
@@ -417,10 +418,11 @@ st_box_layout_paint (ClutterActor *actor)
* the borders and background stay in place; after drawing the borders and
* background, we clip to the content area */
if (priv->hadjustment || priv->vadjustment)
cogl_clip_push_rectangle ((int)content_box.x1,
(int)content_box.y1,
(int)content_box.x2,
(int)content_box.y2);
cogl_framebuffer_push_rectangle_clip (fb,
(int)content_box.x1,
(int)content_box.y1,
(int)content_box.x2,
(int)content_box.y2);
for (child = clutter_actor_get_first_child (actor);
child != NULL;
@@ -428,7 +430,7 @@ st_box_layout_paint (ClutterActor *actor)
clutter_actor_paint (child);
if (priv->hadjustment || priv->vadjustment)
cogl_clip_pop ();
cogl_framebuffer_pop_clip (fb);
}
static void
@@ -442,19 +444,20 @@ st_box_layout_pick (ClutterActor *actor,
ClutterActorBox allocation_box;
ClutterActorBox content_box;
ClutterActor *child;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
get_border_paint_offsets (self, &x, &y);
if (x != 0 || y != 0)
{
cogl_push_matrix ();
cogl_translate ((int)x, (int)y, 0);
cogl_framebuffer_push_matrix (fb);
cogl_framebuffer_translate (fb, (int)x, (int)y, 0);
}
CLUTTER_ACTOR_CLASS (st_box_layout_parent_class)->pick (actor, color);
if (x != 0 || y != 0)
{
cogl_pop_matrix ();
cogl_framebuffer_pop_matrix (fb);
}
if (clutter_actor_get_n_children (actor) == 0)
@@ -469,10 +472,11 @@ st_box_layout_pick (ClutterActor *actor,
content_box.y2 += y;
if (priv->hadjustment || priv->vadjustment)
cogl_clip_push_rectangle ((int)content_box.x1,
(int)content_box.y1,
(int)content_box.x2,
(int)content_box.y2);
cogl_framebuffer_push_rectangle_clip (fb,
(int)content_box.x1,
(int)content_box.y1,
(int)content_box.x2,
(int)content_box.y2);
for (child = clutter_actor_get_first_child (actor);
child != NULL;
@@ -480,7 +484,7 @@ st_box_layout_pick (ClutterActor *actor,
clutter_actor_paint (child);
if (priv->hadjustment || priv->vadjustment)
cogl_clip_pop ();
cogl_framebuffer_pop_clip (fb);
}
static gboolean

View File

@@ -39,8 +39,8 @@
G_DEFINE_TYPE(StDrawingArea, st_drawing_area, ST_TYPE_WIDGET);
struct _StDrawingAreaPrivate {
CoglHandle texture;
CoglHandle material;
CoglTexture *texture;
CoglPipeline *pipeline;
cairo_t *context;
guint needs_repaint : 1;
guint in_repaint : 1;
@@ -61,17 +61,8 @@ st_drawing_area_dispose (GObject *object)
StDrawingArea *area = ST_DRAWING_AREA (object);
StDrawingAreaPrivate *priv = area->priv;
if (priv->material != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->material);
priv->material = COGL_INVALID_HANDLE;
}
if (priv->texture != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->texture);
priv->texture = COGL_INVALID_HANDLE;
}
g_clear_pointer (&priv->pipeline, cogl_object_unref);
g_clear_pointer (&priv->texture, cogl_object_unref);
G_OBJECT_CLASS (st_drawing_area_parent_class)->dispose (object);
}
@@ -85,8 +76,6 @@ st_drawing_area_paint (ClutterActor *self)
ClutterActorBox allocation_box;
ClutterActorBox content_box;
int width, height;
CoglColor color;
guint8 paint_opacity;
(CLUTTER_ACTOR_CLASS (st_drawing_area_parent_class))->paint (self);
@@ -96,20 +85,25 @@ st_drawing_area_paint (ClutterActor *self)
width = (int)(0.5 + content_box.x2 - content_box.x1);
height = (int)(0.5 + content_box.y2 - content_box.y1);
if (priv->material == COGL_INVALID_HANDLE)
priv->material = cogl_material_new ();
if (priv->pipeline == NULL)
{
CoglContext *ctx =
clutter_backend_get_cogl_context (clutter_get_default_backend ());
if (priv->texture != COGL_INVALID_HANDLE &&
priv->pipeline = cogl_pipeline_new (ctx);
}
if (priv->texture != NULL &&
(width != cogl_texture_get_width (priv->texture) ||
height != cogl_texture_get_height (priv->texture)))
{
cogl_handle_unref (priv->texture);
priv->texture = COGL_INVALID_HANDLE;
cogl_object_unref (priv->texture);
priv->texture = NULL;
}
if (width > 0 && height > 0)
{
if (priv->texture == COGL_INVALID_HANDLE)
if (priv->texture == NULL)
{
priv->texture = cogl_texture_new_with_size (width, height,
COGL_TEXTURE_NONE,
@@ -141,19 +135,21 @@ st_drawing_area_paint (ClutterActor *self)
}
}
cogl_material_set_layer (priv->material, 0, priv->texture);
cogl_pipeline_set_layer_texture (priv->pipeline, 0, priv->texture);
if (priv->texture)
{
paint_opacity = clutter_actor_get_paint_opacity (self);
cogl_color_set_from_4ub (&color,
paint_opacity, paint_opacity, paint_opacity, paint_opacity);
cogl_material_set_color (priv->material, &color);
CoglColor color;
guint8 paint_opacity;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
cogl_set_source (priv->material);
cogl_rectangle_with_texture_coords (content_box.x1, content_box.y1,
content_box.x2, content_box.y2,
0.0f, 0.0f, 1.0f, 1.0f);
paint_opacity = clutter_actor_get_paint_opacity (self);
cogl_color_init_from_4ub (&color, paint_opacity, paint_opacity, paint_opacity, paint_opacity);
cogl_pipeline_set_color (priv->pipeline, &color);
cogl_framebuffer_draw_rectangle (fb, priv->pipeline,
content_box.x1, content_box.y1,
content_box.x2, content_box.y2);
}
}
@@ -195,7 +191,7 @@ st_drawing_area_init (StDrawingArea *area)
{
area->priv = G_TYPE_INSTANCE_GET_PRIVATE (area, ST_TYPE_DRAWING_AREA,
StDrawingAreaPrivate);
area->priv->texture = COGL_INVALID_HANDLE;
area->priv->texture = NULL;
}
/**

View File

@@ -65,6 +65,10 @@
#include "st-clipboard.h"
#include "st-private.h"
#include <clutter/x11/clutter-x11.h>
#include <X11/Xlib.h>
#include <X11/cursorfont.h>
#include "st-widget-accessible.h"
#define HAS_FOCUS(actor) (clutter_actor_get_stage (actor) && clutter_stage_get_key_focus ((ClutterStage *) clutter_actor_get_stage (actor)) == actor)
@@ -677,28 +681,33 @@ st_entry_key_focus_in (ClutterActor *actor)
clutter_actor_grab_key_focus (priv->entry);
}
static StEntryCursorFunc cursor_func;
static gpointer cursor_func_data;
/**
* st_entry_set_cursor_func: (skip)
*
* This function is for private use by libgnome-shell.
* Do not ever use.
*/
void
st_entry_set_cursor_func (StEntryCursorFunc func,
gpointer data)
{
cursor_func = func;
cursor_func_data = data;
}
static void
st_entry_set_cursor (StEntry *entry,
gboolean use_ibeam)
{
cursor_func (entry, use_ibeam, cursor_func_data);
Display *dpy;
ClutterActor *stage, *actor = CLUTTER_ACTOR (entry);
Window wid;
static Cursor ibeam = None;
dpy = clutter_x11_get_default_display ();
stage = clutter_actor_get_stage (actor);
if (stage == NULL)
{
g_warn_if_fail (!entry->priv->has_ibeam);
return;
}
wid = clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
if (ibeam == None)
ibeam = XCreateFontCursor (dpy, XC_xterm);
if (use_ibeam)
XDefineCursor (dpy, wid, ibeam);
else
XUndefineCursor (dpy, wid);
entry->priv->has_ibeam = use_ibeam;
}

View File

@@ -86,10 +86,6 @@ void st_entry_set_primary_icon (StEntry *entry,
void st_entry_set_secondary_icon (StEntry *entry,
ClutterActor *icon);
typedef void (*StEntryCursorFunc) (StEntry *entry, gboolean use_ibeam, gpointer data);
void st_entry_set_cursor_func (StEntryCursorFunc func,
gpointer user_data);
G_END_DECLS
#endif /* __ST_ENTRY_H__ */

View File

@@ -56,7 +56,7 @@ struct _StIconPrivate
gint theme_icon_size; /* icon size from theme node */
gint icon_size; /* icon size we are using */
CoglHandle shadow_material;
CoglPipeline *shadow_pipeline;
float shadow_width;
float shadow_height;
StShadow *shadow_spec;
@@ -141,23 +141,9 @@ st_icon_dispose (GObject *gobject)
priv->pending_texture = NULL;
}
if (priv->gicon)
{
g_object_unref (priv->gicon);
priv->gicon = NULL;
}
if (priv->shadow_material)
{
cogl_handle_unref (priv->shadow_material);
priv->shadow_material = COGL_INVALID_HANDLE;
}
if (priv->shadow_spec)
{
st_shadow_unref (priv->shadow_spec);
priv->shadow_spec = NULL;
}
g_clear_object (&priv->gicon);
g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref);
g_clear_pointer (&priv->shadow_spec, st_shadow_unref);
G_OBJECT_CLASS (st_icon_parent_class)->dispose (gobject);
}
@@ -241,7 +227,7 @@ st_icon_paint (ClutterActor *actor)
if (priv->icon_texture)
{
if (priv->shadow_material)
if (priv->shadow_pipeline)
{
ClutterActorBox allocation;
float width, height;
@@ -250,7 +236,8 @@ st_icon_paint (ClutterActor *actor)
clutter_actor_box_get_size (&allocation, &width, &height);
_st_paint_shadow_with_opacity (priv->shadow_spec,
priv->shadow_material,
priv->shadow_pipeline,
cogl_get_draw_framebuffer (),
&allocation,
clutter_actor_get_paint_opacity (priv->icon_texture));
}
@@ -266,17 +253,8 @@ st_icon_style_changed (StWidget *widget)
StThemeNode *theme_node = st_widget_get_theme_node (widget);
StIconPrivate *priv = self->priv;
if (priv->shadow_spec)
{
st_shadow_unref (priv->shadow_spec);
priv->shadow_spec = NULL;
}
if (priv->shadow_material)
{
cogl_handle_unref (priv->shadow_material);
priv->shadow_material = COGL_INVALID_HANDLE;
}
g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref);
g_clear_pointer (&priv->shadow_spec, st_shadow_unref);
priv->shadow_spec = st_theme_node_get_shadow (theme_node, "icon-shadow");
@@ -343,33 +321,26 @@ st_icon_init (StIcon *self)
self->priv->icon_size = DEFAULT_ICON_SIZE;
self->priv->prop_icon_size = -1;
self->priv->shadow_material = COGL_INVALID_HANDLE;
self->priv->shadow_pipeline = NULL;
self->priv->shadow_width = -1;
self->priv->shadow_height = -1;
}
static void
st_icon_update_shadow_material (StIcon *icon)
st_icon_update_shadow_pipeline (StIcon *icon)
{
StIconPrivate *priv = icon->priv;
if (priv->shadow_material)
{
cogl_handle_unref (priv->shadow_material);
priv->shadow_material = COGL_INVALID_HANDLE;
}
g_clear_pointer (&priv->shadow_pipeline, cogl_object_unref);
if (priv->shadow_spec)
{
CoglHandle material;
gint width, height;
clutter_texture_get_base_size (CLUTTER_TEXTURE (priv->icon_texture),
&width, &height);
material = _st_create_shadow_material_from_actor (priv->shadow_spec,
priv->icon_texture);
priv->shadow_material = material;
priv->shadow_pipeline = _st_create_shadow_pipeline_from_actor (priv->shadow_spec, priv->icon_texture);
priv->shadow_width = width;
priv->shadow_height = height;
}
@@ -379,7 +350,7 @@ static void
on_pixbuf_changed (ClutterTexture *texture,
StIcon *icon)
{
st_icon_update_shadow_material (icon);
st_icon_update_shadow_pipeline (icon);
}
static void
@@ -402,7 +373,7 @@ st_icon_finish_update (StIcon *icon)
/* Remove the temporary ref we added */
g_object_unref (priv->icon_texture);
st_icon_update_shadow_material (icon);
st_icon_update_shadow_pipeline (icon);
/* "pixbuf-change" is actually a misnomer for "texture-changed" */
g_signal_connect_object (priv->icon_texture, "pixbuf-change",

View File

@@ -41,6 +41,7 @@
#endif
#include <clutter/clutter.h>
#include <clutter/x11/clutter-x11.h>
#include <glib.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
@@ -202,14 +203,25 @@ st_im_text_get_paint_volume (ClutterActor *self,
return clutter_paint_volume_set_from_allocation (volume, self);
}
static GdkWindow *event_window;
void
st_im_text_set_event_window (GdkWindow *window)
/* Returns a new reference to window */
static GdkWindow *
window_for_actor (ClutterActor *actor)
{
g_assert (event_window == NULL);
GdkDisplay *display = gdk_display_get_default ();
ClutterActor *stage;
Window xwindow;
GdkWindow *window;
event_window = window;
stage = clutter_actor_get_stage (actor);
xwindow = clutter_x11_get_stage_window ((ClutterStage *)stage);
window = gdk_x11_window_lookup_for_display (display, xwindow);
if (window)
g_object_ref (window);
else
window = gdk_x11_window_foreign_new_for_display (display, xwindow);
return window;
}
static void
@@ -217,8 +229,7 @@ st_im_text_realize (ClutterActor *actor)
{
StIMTextPrivate *priv = ST_IM_TEXT (actor)->priv;
g_assert (event_window != NULL);
priv->window = g_object_ref (event_window);
priv->window = window_for_actor (actor);
gtk_im_context_set_client_window (priv->im_context, priv->window);
}
@@ -280,8 +291,7 @@ key_event_to_gdk (ClutterKeyEvent *event_clutter)
event_gdk = (GdkEventKey *)gdk_event_new ((event_clutter->type == CLUTTER_KEY_PRESS) ?
GDK_KEY_PRESS : GDK_KEY_RELEASE);
g_assert (event_window != NULL);
event_gdk->window = g_object_ref (event_window);
event_gdk->window = window_for_actor ((ClutterActor *)event_clutter->stage);
event_gdk->send_event = FALSE;
event_gdk->time = event_clutter->time;
/* This depends on ClutterModifierType and GdkModifierType being

View File

@@ -68,8 +68,6 @@ void st_im_text_set_input_hints (StIMText *imtext,
GtkInputHints hints);
GtkInputHints st_im_text_get_input_hints (StIMText *imtext);
void st_im_text_set_event_window (GdkWindow *window);
G_END_DECLS
#endif /* __ST_IM_TEXT_H__ */

View File

@@ -60,7 +60,7 @@ struct _StLabelPrivate
{
ClutterActor *label;
CoglHandle text_shadow_material;
CoglPipeline *text_shadow_pipeline;
float shadow_width;
float shadow_height;
};
@@ -118,11 +118,7 @@ st_label_style_changed (StWidget *self)
{
StLabelPrivate *priv = ST_LABEL(self)->priv;
if (priv->text_shadow_material != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->text_shadow_material);
priv->text_shadow_material = COGL_INVALID_HANDLE;
}
g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
_st_set_text_from_style ((ClutterText *)priv->label, st_widget_get_theme_node (self));
@@ -192,11 +188,7 @@ st_label_dispose (GObject *object)
priv->label = NULL;
}
if (priv->text_shadow_material != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->text_shadow_material);
priv->text_shadow_material = COGL_INVALID_HANDLE;
}
g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
G_OBJECT_CLASS (st_label_parent_class)->dispose (object);
}
@@ -218,26 +210,21 @@ st_label_paint (ClutterActor *actor)
clutter_actor_get_allocation_box (priv->label, &allocation);
clutter_actor_box_get_size (&allocation, &width, &height);
if (priv->text_shadow_material == COGL_INVALID_HANDLE ||
if (priv->text_shadow_pipeline == NULL ||
width != priv->shadow_width ||
height != priv->shadow_height)
{
CoglHandle material;
if (priv->text_shadow_material != COGL_INVALID_HANDLE)
cogl_handle_unref (priv->text_shadow_material);
material = _st_create_shadow_material_from_actor (shadow_spec,
priv->label);
g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
priv->shadow_width = width;
priv->shadow_height = height;
priv->text_shadow_material = material;
priv->text_shadow_pipeline = _st_create_shadow_pipeline_from_actor (shadow_spec, priv->label);
}
if (priv->text_shadow_material != COGL_INVALID_HANDLE)
if (priv->text_shadow_pipeline != NULL)
_st_paint_shadow_with_opacity (shadow_spec,
priv->text_shadow_material,
priv->text_shadow_pipeline,
cogl_get_draw_framebuffer (),
&allocation,
clutter_actor_get_paint_opacity (priv->label));
}
@@ -292,7 +279,7 @@ st_label_init (StLabel *label)
label->priv->label = g_object_new (CLUTTER_TYPE_TEXT,
"ellipsize", PANGO_ELLIPSIZE_END,
NULL);
label->priv->text_shadow_material = COGL_INVALID_HANDLE;
label->priv->text_shadow_pipeline = NULL;
label->priv->shadow_width = -1.;
label->priv->shadow_height = -1.;
@@ -357,11 +344,7 @@ st_label_set_text (StLabel *label,
if (clutter_text_get_editable (ctext) ||
g_strcmp0 (clutter_text_get_text (ctext), text) != 0)
{
if (priv->text_shadow_material != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->text_shadow_material);
priv->text_shadow_material = COGL_INVALID_HANDLE;
}
g_clear_pointer (&priv->text_shadow_pipeline, cogl_object_unref);
clutter_text_set_text (ctext, text);

View File

@@ -162,47 +162,41 @@ _st_set_text_from_style (ClutterText *text,
}
/**
* _st_create_texture_material:
* @src_texture: The CoglTexture for the material
* _st_create_texture_pipeline:
* @src_texture: The CoglTexture for the pipeline
*
* Creates a simple material which contains the given texture as a
* Creates a simple pipeline which contains the given texture as a
* single layer.
*/
CoglHandle
_st_create_texture_material (CoglHandle src_texture)
CoglPipeline *
_st_create_texture_pipeline (CoglTexture *src_texture)
{
static CoglHandle texture_material_template = COGL_INVALID_HANDLE;
CoglHandle material;
static CoglPipeline *texture_pipeline_template = NULL;
CoglPipeline *pipeline;
g_return_val_if_fail (src_texture != COGL_INVALID_HANDLE,
COGL_INVALID_HANDLE);
g_return_val_if_fail (src_texture != NULL, NULL);
/* We use a material that has a dummy texture as a base for all
texture materials. The idea is that only the Cogl texture object
would be different in the children so it is likely that Cogl will
be able to share GL programs between all the textures. */
if (G_UNLIKELY (texture_material_template == COGL_INVALID_HANDLE))
/* The only state used in the pipeline that would affect the shader
generation is the texture type on the layer. Therefore we create
a template pipeline which sets this state and all texture
pipelines are created as a copy of this. That way Cogl can find
the shader state for the pipeline more quickly by looking at the
pipeline ancestry instead of resorting to the shader cache. */
if (G_UNLIKELY (texture_pipeline_template == NULL))
{
static const guint8 white_pixel[] = { 0xff, 0xff, 0xff, 0xff };
CoglHandle dummy_texture;
CoglContext *ctx =
clutter_backend_get_cogl_context (clutter_get_default_backend ());
dummy_texture =
cogl_texture_new_from_data (1, 1,
COGL_TEXTURE_NONE,
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
COGL_PIXEL_FORMAT_ANY,
4, white_pixel);
texture_material_template = cogl_material_new ();
cogl_material_set_layer (texture_material_template, 0, dummy_texture);
cogl_handle_unref (dummy_texture);
texture_pipeline_template = cogl_pipeline_new (ctx);
cogl_pipeline_set_layer_null_texture (texture_pipeline_template,
0, /* layer */
COGL_TEXTURE_TYPE_2D);
}
material = cogl_material_copy (texture_material_template);
pipeline = cogl_pipeline_copy (texture_pipeline_template);
cogl_pipeline_set_layer_texture (pipeline, 0, src_texture);
cogl_material_set_layer (material, 0, src_texture);
return material;
return pipeline;
}
/*****
@@ -345,21 +339,20 @@ blur_pixels (guchar *pixels_in,
return pixels_out;
}
CoglHandle
_st_create_shadow_material (StShadow *shadow_spec,
CoglHandle src_texture)
CoglPipeline *
_st_create_shadow_pipeline (StShadow *shadow_spec,
CoglTexture *src_texture)
{
static CoglHandle shadow_material_template = COGL_INVALID_HANDLE;
static CoglPipeline *shadow_pipeline_template = NULL;
CoglHandle material;
CoglHandle texture;
guchar *pixels_in, *pixels_out;
gint width_in, height_in, rowstride_in;
gint width_out, height_out, rowstride_out;
CoglPipeline *pipeline;
CoglTexture *texture;
guchar *pixels_in, *pixels_out;
gint width_in, height_in, rowstride_in;
gint width_out, height_out, rowstride_out;
g_return_val_if_fail (shadow_spec != NULL, COGL_INVALID_HANDLE);
g_return_val_if_fail (src_texture != COGL_INVALID_HANDLE,
COGL_INVALID_HANDLE);
g_return_val_if_fail (shadow_spec != NULL, NULL);
g_return_val_if_fail (src_texture != NULL, NULL);
width_in = cogl_texture_get_width (src_texture);
height_in = cogl_texture_get_height (src_texture);
@@ -385,84 +378,99 @@ _st_create_shadow_material (StShadow *shadow_spec,
g_free (pixels_out);
if (G_UNLIKELY (shadow_material_template == COGL_INVALID_HANDLE))
if (G_UNLIKELY (shadow_pipeline_template == NULL))
{
shadow_material_template = cogl_material_new ();
CoglContext *ctx =
clutter_backend_get_cogl_context (clutter_get_default_backend ());
/* We set up the material to blend the shadow texture with the combine
shadow_pipeline_template = cogl_pipeline_new (ctx);
/* We set up the pipeline to blend the shadow texture with the combine
* constant, but defer setting the latter until painting, so that we can
* take the actor's overall opacity into account. */
cogl_material_set_layer_combine (shadow_material_template, 0,
cogl_pipeline_set_layer_combine (shadow_pipeline_template, 0,
"RGBA = MODULATE (CONSTANT, TEXTURE[A])",
NULL);
}
material = cogl_material_copy (shadow_material_template);
cogl_material_set_layer (material, 0, texture);
cogl_handle_unref (texture);
return material;
pipeline = cogl_pipeline_copy (shadow_pipeline_template);
cogl_pipeline_set_layer_texture (pipeline, 0, texture);
cogl_object_unref (texture);
return pipeline;
}
CoglHandle
_st_create_shadow_material_from_actor (StShadow *shadow_spec,
CoglPipeline *
_st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
ClutterActor *actor)
{
CoglHandle shadow_material = COGL_INVALID_HANDLE;
CoglPipeline *shadow_pipeline = NULL;
if (CLUTTER_IS_TEXTURE (actor))
{
CoglHandle texture;
CoglTexture *texture;
texture = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (actor));
shadow_material = _st_create_shadow_material (shadow_spec, texture);
shadow_pipeline = _st_create_shadow_pipeline (shadow_spec, texture);
}
else
{
CoglHandle buffer, offscreen;
CoglTexture *buffer;
CoglOffscreen *offscreen;
CoglFramebuffer *fb;
ClutterActorBox box;
CoglColor clear_color;
float width, height;
CoglError *catch_error = NULL;
clutter_actor_get_allocation_box (actor, &box);
clutter_actor_box_get_size (&box, &width, &height);
if (width == 0 || height == 0)
return COGL_INVALID_HANDLE;
return NULL;
buffer = cogl_texture_new_with_size (width,
height,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_ANY);
if (buffer == COGL_INVALID_HANDLE)
return COGL_INVALID_HANDLE;
if (buffer == NULL)
return NULL;
offscreen = cogl_offscreen_new_to_texture (buffer);
offscreen = cogl_offscreen_new_with_texture (buffer);
fb = COGL_FRAMEBUFFER (offscreen);
if (offscreen == COGL_INVALID_HANDLE)
if (!cogl_framebuffer_allocate (fb, &catch_error))
{
cogl_handle_unref (buffer);
return COGL_INVALID_HANDLE;
cogl_error_free (catch_error);
cogl_object_unref (buffer);
return NULL;
}
cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
cogl_push_framebuffer (offscreen);
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
cogl_translate (-box.x1, -box.y1, 0);
cogl_ortho (0, width, height, 0, 0, 1.0);
cogl_color_init_from_4ub (&clear_color, 0, 0, 0, 0);
/* XXX: There's no way to render a ClutterActor to an offscreen
* as it uses the implicit API. */
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
cogl_push_framebuffer (fb);
G_GNUC_END_IGNORE_DEPRECATIONS;
cogl_framebuffer_clear (fb, COGL_BUFFER_BIT_COLOR, &clear_color);
cogl_framebuffer_translate (fb, -box.x1, -box.y1, 0);
cogl_framebuffer_orthographic (fb, 0, width, height, 0, 0, 1.0);
clutter_actor_paint (actor);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
cogl_pop_framebuffer ();
cogl_handle_unref (offscreen);
G_GNUC_END_IGNORE_DEPRECATIONS;
shadow_material = _st_create_shadow_material (shadow_spec, buffer);
cogl_object_unref (fb);
cogl_handle_unref (buffer);
shadow_pipeline = _st_create_shadow_pipeline (shadow_spec, buffer);
cogl_object_unref (buffer);
}
return shadow_material;
return shadow_pipeline;
}
/**
@@ -610,29 +618,27 @@ _st_create_shadow_cairo_pattern (StShadow *shadow_spec,
void
_st_paint_shadow_with_opacity (StShadow *shadow_spec,
CoglHandle shadow_material,
CoglPipeline *shadow_pipeline,
CoglFramebuffer *fb,
ClutterActorBox *box,
guint8 paint_opacity)
{
ClutterActorBox shadow_box;
CoglColor color;
CoglColor color;
g_return_if_fail (shadow_spec != NULL);
g_return_if_fail (shadow_material != COGL_INVALID_HANDLE);
g_return_if_fail (shadow_pipeline != NULL);
st_shadow_get_box (shadow_spec, box, &shadow_box);
cogl_color_set_from_4ub (&color,
shadow_spec->color.red * paint_opacity / 255,
shadow_spec->color.green * paint_opacity / 255,
shadow_spec->color.blue * paint_opacity / 255,
shadow_spec->color.alpha * paint_opacity / 255);
cogl_color_init_from_4ub (&color,
shadow_spec->color.red * paint_opacity / 255,
shadow_spec->color.green * paint_opacity / 255,
shadow_spec->color.blue * paint_opacity / 255,
shadow_spec->color.alpha * paint_opacity / 255);
cogl_color_premultiply (&color);
cogl_material_set_layer_combine_constant (shadow_material, 0, &color);
cogl_set_source (shadow_material);
cogl_rectangle_with_texture_coords (shadow_box.x1, shadow_box.y1,
shadow_box.x2, shadow_box.y2,
0, 0, 1, 1);
cogl_pipeline_set_layer_combine_constant (shadow_pipeline, 0, &color);
cogl_framebuffer_draw_rectangle (fb, shadow_pipeline,
shadow_box.x1, shadow_box.y1,
shadow_box.x2, shadow_box.y2);
}

View File

@@ -59,18 +59,19 @@ void _st_actor_get_preferred_height (ClutterActor *actor,
void _st_set_text_from_style (ClutterText *text,
StThemeNode *theme_node);
CoglHandle _st_create_texture_material (CoglHandle src_texture);
CoglPipeline * _st_create_texture_pipeline (CoglTexture *src_texture);
/* Helper for widgets which need to draw additional shadows */
CoglHandle _st_create_shadow_material (StShadow *shadow_spec,
CoglHandle src_texture);
CoglHandle _st_create_shadow_material_from_actor (StShadow *shadow_spec,
ClutterActor *actor);
CoglPipeline * _st_create_shadow_pipeline (StShadow *shadow_spec,
CoglTexture *src_texture);
CoglPipeline * _st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
ClutterActor *actor);
cairo_pattern_t *_st_create_shadow_cairo_pattern (StShadow *shadow_spec,
cairo_pattern_t *src_pattern);
void _st_paint_shadow_with_opacity (StShadow *shadow_spec,
CoglHandle shadow_material,
CoglPipeline *shadow_pipeline,
CoglFramebuffer *fb,
ClutterActorBox *box,
guint8 paint_opacity);

View File

@@ -142,17 +142,18 @@ st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
st_adjustment_get_values (self->vadjustment, &value, &lower, &upper, NULL, NULL, &page_size);
value = (value - lower) / (upper - page_size - lower);
clutter_shader_effect_set_uniform (shader, "fade_edges_v", G_TYPE_INT, 1, self->fade_edges ? value >= 0.0 : value > 0.0);
clutter_shader_effect_set_uniform (shader, "vvalue", G_TYPE_FLOAT, 1, value);
st_adjustment_get_values (self->hadjustment, &value, &lower, &upper, NULL, NULL, &page_size);
value = (value - lower) / (upper - page_size - lower);
clutter_shader_effect_set_uniform (shader, "fade_edges_h", G_TYPE_INT, 1, self->fade_edges ? value >= 0.0 : value > 0.0);
clutter_shader_effect_set_uniform (shader, "hvalue", G_TYPE_FLOAT, 1, value);
clutter_shader_effect_set_uniform (shader, "vfade_offset", G_TYPE_FLOAT, 1, self->vfade_offset);
clutter_shader_effect_set_uniform (shader, "hfade_offset", G_TYPE_FLOAT, 1, self->hfade_offset);
clutter_shader_effect_set_uniform (shader, "tex", G_TYPE_INT, 1, 0);
clutter_shader_effect_set_uniform (shader, "height", G_TYPE_FLOAT, 1, clutter_actor_get_height (self->actor));
clutter_shader_effect_set_uniform (shader, "width", G_TYPE_FLOAT, 1, clutter_actor_get_width (self->actor));
clutter_shader_effect_set_uniform (shader, "fade_edges", G_TYPE_INT, 1, self->fade_edges);
clutter_shader_effect_set_uniform (shader, "fade_area_topleft", CLUTTER_TYPE_SHADER_FLOAT, 2, fade_area_topleft);
clutter_shader_effect_set_uniform (shader, "fade_area_bottomright", CLUTTER_TYPE_SHADER_FLOAT, 2, fade_area_bottomright);

View File

@@ -22,8 +22,9 @@ uniform float height;
uniform float width;
uniform float vfade_offset;
uniform float hfade_offset;
uniform bool fade_edges_h;
uniform bool fade_edges_v;
uniform float vvalue;
uniform float hvalue;
uniform bool fade_edges;
uniform vec2 fade_area_topleft;
uniform vec2 fade_area_bottomright;
@@ -44,10 +45,14 @@ void main ()
float ratio = 1.0;
float fade_bottom_start = fade_area_bottomright[1] - vfade_offset;
float fade_right_start = fade_area_bottomright[0] - hfade_offset;
bool fade_top = y < vfade_offset && fade_edges_v;
bool fade_bottom = y > fade_bottom_start && fade_edges_v;
bool fade_left = x < hfade_offset && fade_edges_h;
bool fade_right = x > fade_right_start && fade_edges_h;
bool fade_top = y < vfade_offset && (fade_edges ? vvalue >= 0.0
: vvalue > 0.0);
bool fade_bottom = y > fade_bottom_start && (fade_edges ? vvalue <= 1.0
: vvalue < 1.0);
bool fade_left = x < hfade_offset && (fade_edges ? hvalue >= 0.0
: hvalue > 0.0);
bool fade_right = x > fade_right_start && (fade_edges ? hvalue <= 1.0
: hvalue < 1.0);
float vfade_scale = height / vfade_offset;
if (fade_top) {

View File

@@ -190,7 +190,7 @@ st_shadow_get_box (StShadow *shadow,
struct _StShadowHelper {
StShadow *shadow;
CoglMaterial *material;
CoglPipeline *pipeline;
gfloat width;
gfloat height;
@@ -224,14 +224,14 @@ st_shadow_helper_update (StShadowHelper *helper,
clutter_actor_get_size (source, &width, &height);
if (helper->material == NULL ||
if (helper->pipeline == NULL ||
helper->width != width ||
helper->height != height)
{
if (helper->material)
cogl_object_unref (helper->material);
if (helper->pipeline)
cogl_object_unref (helper->pipeline);
helper->material = _st_create_shadow_material_from_actor (helper->shadow, source);
helper->pipeline = _st_create_shadow_pipeline_from_actor (helper->shadow, source);
helper->width = width;
helper->height = height;
}
@@ -250,8 +250,8 @@ st_shadow_helper_copy (StShadowHelper *helper)
copy = g_slice_new (StShadowHelper);
*copy = *helper;
if (copy->material)
cogl_object_ref (copy->material);
if (copy->pipeline)
cogl_object_ref (copy->pipeline);
st_shadow_ref (copy->shadow);
return copy;
@@ -266,8 +266,8 @@ st_shadow_helper_copy (StShadowHelper *helper)
void
st_shadow_helper_free (StShadowHelper *helper)
{
if (helper->material)
cogl_object_unref (helper->material);
if (helper->pipeline)
cogl_object_unref (helper->pipeline);
st_shadow_unref (helper->shadow);
g_slice_free (StShadowHelper, helper);
@@ -293,7 +293,8 @@ st_shadow_helper_paint (StShadowHelper *helper,
clutter_actor_box_get_size (actor_box, &width, &height);
_st_paint_shadow_with_opacity (helper->shadow,
helper->material,
helper->pipeline,
cogl_get_draw_framebuffer (),
&allocation,
paint_opacity);
}

View File

@@ -60,7 +60,7 @@ static guint signals[LAST_SIGNAL] = { 0, };
G_DEFINE_TYPE(StTextureCache, st_texture_cache, G_TYPE_OBJECT);
/* We want to preserve the aspect ratio by default, also the default
* material for an empty texture is full opacity white, which we
* pipeline for an empty texture is full opacity white, which we
* definitely don't want. Skip that by setting 0 opacity.
*/
static ClutterTexture *
@@ -73,7 +73,7 @@ create_default_texture (void)
/* Reverse the opacity we added while loading */
static void
set_texture_cogl_texture (ClutterTexture *clutter_texture, CoglHandle cogl_texture)
set_texture_cogl_texture (ClutterTexture *clutter_texture, CoglTexture *cogl_texture)
{
clutter_texture_set_cogl_texture (clutter_texture, cogl_texture);
g_object_set (clutter_texture, "opacity", 255, NULL);
@@ -144,7 +144,7 @@ st_texture_cache_init (StTextureCache *self)
G_CALLBACK (on_icon_theme_changed), self);
self->priv->keyed_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, cogl_handle_unref);
g_free, cogl_object_unref);
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL);
self->priv->file_monitors = g_hash_table_new_full (g_str_hash, g_str_equal,
@@ -516,16 +516,15 @@ load_pixbuf_async_finish (StTextureCache *cache, GAsyncResult *result, GError **
return g_simple_async_result_get_op_res_gpointer (simple);
}
static CoglHandle
data_to_cogl_handle (const guchar *data,
gboolean has_alpha,
int width,
int height,
int rowstride,
gboolean add_padding)
static CoglTexture *
data_to_cogl_texture (const guchar *data,
gboolean has_alpha,
int width,
int height,
int rowstride,
gboolean add_padding)
{
CoglHandle texture, offscreen;
CoglColor clear_color;
CoglTexture *texture;
guint size;
size = MAX (width, height);
@@ -543,13 +542,6 @@ data_to_cogl_handle (const guchar *data,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_ANY);
offscreen = cogl_offscreen_new_to_texture (texture);
cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
cogl_push_framebuffer (offscreen);
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
cogl_pop_framebuffer ();
cogl_handle_unref (offscreen);
cogl_texture_set_region (texture,
0, 0,
(size - width) / 2, (size - height) / 2,
@@ -561,16 +553,16 @@ data_to_cogl_handle (const guchar *data,
return texture;
}
static CoglHandle
pixbuf_to_cogl_handle (GdkPixbuf *pixbuf,
static CoglTexture *
pixbuf_to_cogl_texture (GdkPixbuf *pixbuf,
gboolean add_padding)
{
return data_to_cogl_handle (gdk_pixbuf_get_pixels (pixbuf),
gdk_pixbuf_get_has_alpha (pixbuf),
gdk_pixbuf_get_width (pixbuf),
gdk_pixbuf_get_height (pixbuf),
gdk_pixbuf_get_rowstride (pixbuf),
add_padding);
return data_to_cogl_texture (gdk_pixbuf_get_pixels (pixbuf),
gdk_pixbuf_get_has_alpha (pixbuf),
gdk_pixbuf_get_width (pixbuf),
gdk_pixbuf_get_height (pixbuf),
gdk_pixbuf_get_rowstride (pixbuf),
add_padding);
}
static cairo_surface_t *
@@ -600,7 +592,7 @@ finish_texture_load (AsyncTextureLoadData *data,
{
GSList *iter;
StTextureCache *cache;
CoglHandle texdata = NULL;
CoglTexture *texdata = NULL;
cache = data->cache;
@@ -609,7 +601,7 @@ finish_texture_load (AsyncTextureLoadData *data,
if (pixbuf == NULL)
goto out;
texdata = pixbuf_to_cogl_handle (pixbuf, data->enforced_square);
texdata = pixbuf_to_cogl_texture (pixbuf, data->enforced_square);
if (data->policy != ST_TEXTURE_CACHE_POLICY_NONE)
{
@@ -618,7 +610,7 @@ finish_texture_load (AsyncTextureLoadData *data,
if (!g_hash_table_lookup_extended (cache->priv->keyed_cache, data->key,
&orig_key, &value))
{
cogl_handle_ref (texdata);
cogl_object_ref (texdata);
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (data->key),
texdata);
}
@@ -632,7 +624,7 @@ finish_texture_load (AsyncTextureLoadData *data,
out:
if (texdata)
cogl_handle_unref (texdata);
cogl_object_unref (texdata);
texture_load_data_free (data);
}
@@ -723,7 +715,7 @@ st_texture_cache_reset_texture (StTextureCachePropertyBind *bind,
const char *propname)
{
GdkPixbuf *pixbuf;
CoglHandle texdata;
CoglTexture *texdata;
g_object_get (bind->source, propname, &pixbuf, NULL);
@@ -731,11 +723,11 @@ st_texture_cache_reset_texture (StTextureCachePropertyBind *bind,
if (pixbuf != NULL)
{
texdata = pixbuf_to_cogl_handle (pixbuf, FALSE);
texdata = pixbuf_to_cogl_texture (pixbuf, FALSE);
g_object_unref (pixbuf);
clutter_texture_set_cogl_texture (bind->texture, texdata);
cogl_handle_unref (texdata);
cogl_object_unref (texdata);
clutter_actor_set_opacity (CLUTTER_ACTOR (bind->texture), 255);
}
@@ -778,7 +770,7 @@ st_texture_cache_free_bind (gpointer data)
*
* Create a #ClutterTexture which tracks the #GdkPixbuf value of a GObject property
* named by @property_name. Unlike other methods in StTextureCache, the underlying
* CoglHandle is not shared by default with other invocations to this method.
* #CoglTexture is not shared by default with other invocations to this method.
*
* If the source object is destroyed, the texture will continue to show the last
* value of the property.
@@ -829,7 +821,7 @@ st_texture_cache_bind_pixbuf_property (StTextureCache *cache,
*
* Returns: (transfer full): A newly-referenced handle to the texture
*/
CoglHandle
CoglTexture *
st_texture_cache_load (StTextureCache *cache,
const char *key,
StTextureCachePolicy policy,
@@ -837,7 +829,7 @@ st_texture_cache_load (StTextureCache *cache,
void *data,
GError **error)
{
CoglHandle texture;
CoglTexture *texture;
texture = g_hash_table_lookup (cache->priv->keyed_cache, key);
if (!texture)
@@ -846,9 +838,10 @@ st_texture_cache_load (StTextureCache *cache,
if (texture)
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), texture);
else
return COGL_INVALID_HANDLE;
return NULL;
}
cogl_handle_ref (texture);
cogl_object_ref (texture);
return texture;
}
@@ -873,7 +866,7 @@ ensure_request (StTextureCache *cache,
AsyncTextureLoadData **request,
ClutterActor *texture)
{
CoglHandle texdata;
CoglTexture *texdata;
AsyncTextureLoadData *pending;
gboolean had_pending;
@@ -1005,7 +998,7 @@ static ClutterActor *
load_from_pixbuf (GdkPixbuf *pixbuf)
{
ClutterTexture *texture;
CoglHandle texdata;
CoglTexture *texdata;
int width = gdk_pixbuf_get_width (pixbuf);
int height = gdk_pixbuf_get_height (pixbuf);
@@ -1013,11 +1006,11 @@ load_from_pixbuf (GdkPixbuf *pixbuf)
clutter_actor_set_size (CLUTTER_ACTOR (texture), width, height);
texdata = pixbuf_to_cogl_handle (pixbuf, FALSE);
texdata = pixbuf_to_cogl_texture (pixbuf, FALSE);
set_texture_cogl_texture (texture, texdata);
cogl_handle_unref (texdata);
cogl_object_unref (texdata);
return CLUTTER_ACTOR (texture);
}
@@ -1256,7 +1249,7 @@ st_texture_cache_load_uri_async (StTextureCache *cache,
return CLUTTER_ACTOR (texture);
}
static CoglHandle
static CoglTexture *
st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
StTextureCachePolicy policy,
const gchar *uri,
@@ -1264,7 +1257,7 @@ st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
int available_height,
GError **error)
{
CoglHandle texdata;
CoglTexture *texdata;
GdkPixbuf *pixbuf;
char *key;
@@ -1278,17 +1271,17 @@ st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
if (!pixbuf)
goto out;
texdata = pixbuf_to_cogl_handle (pixbuf, FALSE);
texdata = pixbuf_to_cogl_texture (pixbuf, FALSE);
g_object_unref (pixbuf);
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
{
cogl_handle_ref (texdata);
cogl_object_ref (texdata);
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), texdata);
}
}
else
cogl_handle_ref (texdata);
cogl_object_ref (texdata);
ensure_monitor_for_uri (cache, uri);
@@ -1339,21 +1332,21 @@ out:
}
/**
* st_texture_cache_load_file_to_cogl_texture:
* st_texture_cache_load_file_to_cogl_texture: (skip)
* @cache: A #StTextureCache
* @file_path: Path to a file in supported image format
*
* This function synchronously loads the given file path
* into a COGL texture. On error, a warning is emitted
* and %COGL_INVALID_HANDLE is returned.
* and %NULL is returned.
*
* Returns: (transfer full): a new #CoglHandle
* Returns: (transfer full): a new #CoglTexture
*/
CoglHandle
CoglTexture *
st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
const gchar *file_path)
{
CoglHandle texture;
CoglTexture *texture;
GFile *file;
char *uri;
GError *error = NULL;
@@ -1370,7 +1363,7 @@ st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
{
g_warning ("Failed to load %s: %s", file_path, error->message);
g_clear_error (&error);
return COGL_INVALID_HANDLE;
return NULL;
}
return texture;
}

View File

@@ -90,8 +90,8 @@ ClutterActor *st_texture_cache_load_uri_async (StTextureCache *cache,
int available_width,
int available_height);
CoglHandle st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
const gchar *file_path);
CoglTexture *st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
const gchar *file_path);
cairo_surface_t *st_texture_cache_load_file_to_cairo_surface (StTextureCache *cache,
const gchar *file_path);
@@ -107,13 +107,13 @@ cairo_surface_t *st_texture_cache_load_file_to_cairo_surface (StTextureCache *ca
* texture handle for the given key, or set @error.
*
*/
typedef CoglHandle (*StTextureCacheLoader) (StTextureCache *cache, const char *key, void *data, GError **error);
typedef CoglTexture * (*StTextureCacheLoader) (StTextureCache *cache, const char *key, void *data, GError **error);
CoglHandle st_texture_cache_load (StTextureCache *cache,
const char *key,
StTextureCachePolicy policy,
StTextureCacheLoader load,
void *data,
GError **error);
CoglTexture * st_texture_cache_load (StTextureCache *cache,
const char *key,
StTextureCachePolicy policy,
StTextureCacheLoader load,
void *data,
GError **error);
#endif /* __ST_TEXTURE_CACHE_H__ */

View File

@@ -66,10 +66,10 @@ elliptical_arc (cairo_t *cr,
cairo_restore (cr);
}
static CoglHandle
create_corner_material (StCornerSpec *corner)
static CoglTexture *
create_corner_texture (StCornerSpec *corner)
{
CoglHandle texture;
CoglTexture *texture;
cairo_t *cr;
cairo_surface_t *surface;
guint rowstride;
@@ -173,7 +173,7 @@ create_corner_material (StCornerSpec *corner)
rowstride,
data);
g_free (data);
g_assert (texture != COGL_INVALID_HANDLE);
g_assert (texture != NULL);
return texture;
}
@@ -190,13 +190,13 @@ corner_to_string (StCornerSpec *corner)
corner->border_width_2);
}
static CoglHandle
static CoglTexture *
load_corner (StTextureCache *cache,
const char *key,
void *datap,
GError **error)
{
return create_corner_material ((StCornerSpec *) datap);
return create_corner_texture ((StCornerSpec *) datap);
}
/* To match the CSS specification, we want the border to look like it was
@@ -337,13 +337,14 @@ st_theme_node_get_corner_border_widths (StThemeNode *node,
}
}
static CoglHandle
static CoglPipeline *
st_theme_node_lookup_corner (StThemeNode *node,
float width,
float height,
StCorner corner_id)
{
CoglHandle texture, material;
CoglTexture *texture;
CoglPipeline *pipeline;
char *key;
StTextureCache *cache;
StCornerSpec corner;
@@ -354,7 +355,7 @@ st_theme_node_lookup_corner (StThemeNode *node,
st_theme_node_reduce_border_radius (node, width, height, radius);
if (radius[corner_id] == 0)
return COGL_INVALID_HANDLE;
return NULL;
corner.radius = radius[corner_id];
corner.color = node->background_color;
@@ -385,16 +386,16 @@ st_theme_node_lookup_corner (StThemeNode *node,
if (corner.color.alpha == 0 &&
corner.border_color_1.alpha == 0 &&
corner.border_color_2.alpha == 0)
return COGL_INVALID_HANDLE;
return NULL;
key = corner_to_string (&corner);
texture = st_texture_cache_load (cache, key, ST_TEXTURE_CACHE_POLICY_NONE, load_corner, &corner, NULL);
material = _st_create_texture_material (texture);
cogl_handle_unref (texture);
pipeline = _st_create_texture_pipeline (texture);
cogl_object_unref (texture);
g_free (key);
return material;
return pipeline;
}
static void
@@ -934,13 +935,13 @@ paint_inset_box_shadow_to_cairo_context (StThemeNode *node,
* we need to use cairo. This function is a slow fallback path for those
* cases (gradients, background images, etc).
*/
static CoglHandle
static CoglTexture *
st_theme_node_prerender_background (StThemeNode *node,
float actor_width,
float actor_height)
{
StBorderImage *border_image;
CoglHandle texture;
CoglTexture *texture;
guint radius[4];
int i;
cairo_t *cr;
@@ -1268,30 +1269,17 @@ st_theme_node_prerender_background (StThemeNode *node,
return texture;
}
static void st_theme_node_paint_borders (StThemeNodePaintState *state,
const ClutterActorBox *box,
guint8 paint_opacity);
void
st_theme_node_invalidate_border_image (StThemeNode *node)
{
if (node->border_slices_texture != COGL_INVALID_HANDLE)
{
cogl_handle_unref (node->border_slices_texture);
node->border_slices_texture = COGL_INVALID_HANDLE;
}
if (node->border_slices_material != COGL_INVALID_HANDLE)
{
cogl_handle_unref (node->border_slices_material);
node->border_slices_material = COGL_INVALID_HANDLE;
}
g_clear_pointer (&node->border_slices_texture, cogl_object_unref);
g_clear_pointer (&node->border_slices_pipeline, cogl_object_unref);
}
static gboolean
st_theme_node_load_border_image (StThemeNode *node)
{
if (node->border_slices_texture == COGL_INVALID_HANDLE)
if (node->border_slices_texture == NULL)
{
StBorderImage *border_image;
@@ -1303,42 +1291,28 @@ st_theme_node_load_border_image (StThemeNode *node)
filename = st_border_image_get_filename (border_image);
node->border_slices_texture = st_texture_cache_load_file_to_cogl_texture (st_texture_cache_get_default (),
filename);
if (node->border_slices_texture == COGL_INVALID_HANDLE)
if (node->border_slices_texture == NULL)
goto out;
node->border_slices_material = _st_create_texture_material (node->border_slices_texture);
node->border_slices_pipeline = _st_create_texture_pipeline (node->border_slices_texture);
}
out:
return node->border_slices_texture != COGL_INVALID_HANDLE;
return node->border_slices_pipeline != NULL;
}
void
st_theme_node_invalidate_background_image (StThemeNode *node)
{
if (node->background_texture != COGL_INVALID_HANDLE)
{
cogl_handle_unref (node->background_texture);
node->background_texture = COGL_INVALID_HANDLE;
}
if (node->background_material != COGL_INVALID_HANDLE)
{
cogl_handle_unref (node->background_material);
node->background_material = COGL_INVALID_HANDLE;
}
if (node->background_shadow_material != COGL_INVALID_HANDLE)
{
cogl_handle_unref (node->background_shadow_material);
node->background_shadow_material = COGL_INVALID_HANDLE;
}
g_clear_pointer (&node->background_texture, cogl_object_unref);
g_clear_pointer (&node->background_pipeline, cogl_object_unref);
g_clear_pointer (&node->background_shadow_pipeline, cogl_object_unref);
}
static gboolean
st_theme_node_load_background_image (StThemeNode *node)
{
if (node->background_texture == COGL_INVALID_HANDLE)
if (node->background_texture == NULL)
{
const char *background_image;
StShadow *background_image_shadow_spec;
@@ -1350,27 +1324,38 @@ st_theme_node_load_background_image (StThemeNode *node)
background_image_shadow_spec = st_theme_node_get_background_image_shadow (node);
node->background_texture = st_texture_cache_load_file_to_cogl_texture (st_texture_cache_get_default (),
background_image);
if (node->background_texture == COGL_INVALID_HANDLE)
if (node->background_texture == NULL)
goto out;
node->background_material = _st_create_texture_material (node->background_texture);
node->background_pipeline = _st_create_texture_pipeline (node->background_texture);
if (node->background_repeat)
cogl_material_set_layer_wrap_mode (node->background_material, 0, COGL_MATERIAL_WRAP_MODE_REPEAT);
cogl_pipeline_set_layer_wrap_mode (node->background_pipeline, 0, COGL_PIPELINE_WRAP_MODE_REPEAT);
if (background_image_shadow_spec)
{
node->background_shadow_material = _st_create_shadow_material (background_image_shadow_spec,
node->background_shadow_pipeline = _st_create_shadow_pipeline (background_image_shadow_spec,
node->background_texture);
}
}
out:
return node->background_texture != COGL_INVALID_HANDLE;
return node->background_texture != NULL;
}
static void st_theme_node_prerender_shadow (StThemeNodePaintState *state);
static CoglPipeline *
get_color_pipeline (guint8 r, guint8 g, guint8 b, guint8 a)
{
CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
CoglPipeline *pipeline;
pipeline = cogl_pipeline_new (ctx);
cogl_pipeline_set_color4ub (pipeline, r, g, b, a);
return pipeline;
}
static void
st_theme_node_render_resources (StThemeNodePaintState *state,
StThemeNode *node,
@@ -1438,13 +1423,13 @@ st_theme_node_render_resources (StThemeNodePaintState *state,
}
}
state->corner_material[ST_CORNER_TOPLEFT] =
state->corner_pipeline[ST_CORNER_TOPLEFT] =
st_theme_node_lookup_corner (node, width, height, ST_CORNER_TOPLEFT);
state->corner_material[ST_CORNER_TOPRIGHT] =
state->corner_pipeline[ST_CORNER_TOPRIGHT] =
st_theme_node_lookup_corner (node, width, height, ST_CORNER_TOPRIGHT);
state->corner_material[ST_CORNER_BOTTOMRIGHT] =
state->corner_pipeline[ST_CORNER_BOTTOMRIGHT] =
st_theme_node_lookup_corner (node, width, height, ST_CORNER_BOTTOMRIGHT);
state->corner_material[ST_CORNER_BOTTOMLEFT] =
state->corner_pipeline[ST_CORNER_BOTTOMLEFT] =
st_theme_node_lookup_corner (node, width, height, ST_CORNER_BOTTOMLEFT);
/* Use cairo to prerender the node if there is a gradient, or
@@ -1463,17 +1448,17 @@ st_theme_node_render_resources (StThemeNodePaintState *state,
state->prerendered_texture = st_theme_node_prerender_background (node, width, height);
if (state->prerendered_texture)
state->prerendered_material = _st_create_texture_material (state->prerendered_texture);
state->prerendered_pipeline = _st_create_texture_pipeline (state->prerendered_texture);
else
state->prerendered_material = COGL_INVALID_HANDLE;
state->prerendered_pipeline = NULL;
if (box_shadow_spec && !has_inset_box_shadow)
{
if (st_theme_node_load_border_image (node))
state->box_shadow_material = _st_create_shadow_material (box_shadow_spec,
state->box_shadow_pipeline = _st_create_shadow_pipeline (box_shadow_spec,
node->border_slices_texture);
else if (state->prerendered_texture != COGL_INVALID_HANDLE)
state->box_shadow_material = _st_create_shadow_material (box_shadow_spec,
else if (state->prerendered_texture != NULL)
state->box_shadow_pipeline = _st_create_shadow_pipeline (box_shadow_spec,
state->prerendered_texture);
else if (node->background_color.alpha > 0 || has_border)
st_theme_node_prerender_shadow (state);
@@ -1483,7 +1468,7 @@ st_theme_node_render_resources (StThemeNodePaintState *state,
them. */
if (!node->cached_textures)
{
if (state->prerendered_material == COGL_INVALID_HANDLE &&
if (state->prerendered_pipeline == NULL &&
width >= node->box_shadow_min_width &&
height >= node->box_shadow_min_height)
{
@@ -1505,23 +1490,23 @@ st_theme_node_update_resources (StThemeNodePaintState *state,
g_return_if_fail (width > 0 && height > 0);
/* Free handles we can't reuse */
if (state->prerendered_texture != COGL_INVALID_HANDLE)
/* Free objects we can't reuse */
if (state->prerendered_texture != NULL)
{
cogl_handle_unref (state->prerendered_texture);
state->prerendered_texture = COGL_INVALID_HANDLE;
cogl_object_unref (state->prerendered_texture);
state->prerendered_texture = NULL;
had_prerendered_texture = TRUE;
}
if (state->prerendered_material != COGL_INVALID_HANDLE)
if (state->prerendered_pipeline != NULL)
{
cogl_handle_unref (state->prerendered_material);
state->prerendered_material = COGL_INVALID_HANDLE;
cogl_object_unref (state->prerendered_pipeline);
state->prerendered_pipeline = NULL;
if (node->border_slices_texture == COGL_INVALID_HANDLE &&
state->box_shadow_material != COGL_INVALID_HANDLE)
if (node->border_slices_texture == NULL &&
state->box_shadow_pipeline != NULL)
{
cogl_handle_unref (state->box_shadow_material);
state->box_shadow_material = COGL_INVALID_HANDLE;
cogl_object_unref (state->box_shadow_pipeline);
state->box_shadow_pipeline = NULL;
had_box_shadow = TRUE;
}
}
@@ -1535,43 +1520,26 @@ st_theme_node_update_resources (StThemeNodePaintState *state,
if (had_prerendered_texture)
{
state->prerendered_texture = st_theme_node_prerender_background (node, width, height);
state->prerendered_material = _st_create_texture_material (state->prerendered_texture);
state->prerendered_pipeline = _st_create_texture_pipeline (state->prerendered_texture);
}
else
{
int corner_id;
for (corner_id = 0; corner_id < 4; corner_id++)
if (state->corner_material[corner_id] == COGL_INVALID_HANDLE)
state->corner_material[corner_id] =
if (state->corner_pipeline[corner_id] == NULL)
state->corner_pipeline[corner_id] =
st_theme_node_lookup_corner (node, width, height, corner_id);
}
if (had_box_shadow)
state->box_shadow_material = _st_create_shadow_material (box_shadow_spec,
state->box_shadow_pipeline = _st_create_shadow_pipeline (box_shadow_spec,
state->prerendered_texture);
}
static void
paint_material_with_opacity (CoglHandle material,
ClutterActorBox *box,
ClutterActorBox *coords,
guint8 paint_opacity)
{
cogl_material_set_color4ub (material,
paint_opacity, paint_opacity, paint_opacity, paint_opacity);
cogl_set_source (material);
if (coords)
cogl_rectangle_with_texture_coords (box->x1, box->y1, box->x2, box->y2,
coords->x1, coords->y1, coords->x2, coords->y2);
else
cogl_rectangle (box->x1, box->y1, box->x2, box->y2);
}
static void
st_theme_node_paint_borders (StThemeNodePaintState *state,
CoglFramebuffer *fb,
const ClutterActorBox *box,
guint8 paint_opacity)
{
@@ -1624,10 +1592,7 @@ st_theme_node_paint_borders (StThemeNodePaintState *state,
if (alpha > 0)
{
cogl_set_source_color4ub (effective_border.red,
effective_border.green,
effective_border.blue,
alpha);
CoglPipeline *pipeline;
/* NORTH */
skip_corner_1 = border_radius[ST_CORNER_TOPLEFT] > 0;
@@ -1670,7 +1635,12 @@ st_theme_node_paint_borders (StThemeNodePaintState *state,
rects[15] = skip_corner_2 ? height - max_width_radius[ST_CORNER_BOTTOMLEFT]
: height - border_width[ST_SIDE_BOTTOM];
cogl_rectangles (rects, 4);
pipeline = get_color_pipeline (effective_border.red,
effective_border.green,
effective_border.blue,
alpha);
cogl_framebuffer_draw_rectangles (fb, pipeline, rects, 4);
cogl_object_unref (pipeline);
}
}
@@ -1679,35 +1649,40 @@ st_theme_node_paint_borders (StThemeNodePaintState *state,
{
for (corner_id = 0; corner_id < 4; corner_id++)
{
if (state->corner_material[corner_id] == COGL_INVALID_HANDLE)
CoglPipeline *pipeline = state->corner_pipeline[corner_id];
if (pipeline == NULL)
continue;
cogl_material_set_color4ub (state->corner_material[corner_id],
cogl_pipeline_set_color4ub (pipeline,
paint_opacity, paint_opacity,
paint_opacity, paint_opacity);
cogl_set_source (state->corner_material[corner_id]);
switch (corner_id)
{
case ST_CORNER_TOPLEFT:
cogl_rectangle_with_texture_coords (0, 0,
max_width_radius[ST_CORNER_TOPLEFT], max_width_radius[ST_CORNER_TOPLEFT],
0, 0, 0.5, 0.5);
cogl_framebuffer_draw_textured_rectangle (fb, pipeline,
0, 0,
max_width_radius[ST_CORNER_TOPLEFT], max_width_radius[ST_CORNER_TOPLEFT],
0, 0, 0.5, 0.5);
break;
case ST_CORNER_TOPRIGHT:
cogl_rectangle_with_texture_coords (width - max_width_radius[ST_CORNER_TOPRIGHT], 0,
width, max_width_radius[ST_CORNER_TOPRIGHT],
0.5, 0, 1, 0.5);
cogl_framebuffer_draw_textured_rectangle (fb, pipeline,
width - max_width_radius[ST_CORNER_TOPRIGHT], 0,
width, max_width_radius[ST_CORNER_TOPRIGHT],
0.5, 0, 1, 0.5);
break;
case ST_CORNER_BOTTOMRIGHT:
cogl_rectangle_with_texture_coords (width - max_width_radius[ST_CORNER_BOTTOMRIGHT], height - max_width_radius[ST_CORNER_BOTTOMRIGHT],
width, height,
0.5, 0.5, 1, 1);
cogl_framebuffer_draw_textured_rectangle (fb, pipeline,
width - max_width_radius[ST_CORNER_BOTTOMRIGHT], height - max_width_radius[ST_CORNER_BOTTOMRIGHT],
width, height,
0.5, 0.5, 1, 1);
break;
case ST_CORNER_BOTTOMLEFT:
cogl_rectangle_with_texture_coords (0, height - max_width_radius[ST_CORNER_BOTTOMLEFT],
max_width_radius[ST_CORNER_BOTTOMLEFT], height,
0, 0.5, 0.5, 1);
cogl_framebuffer_draw_textured_rectangle (fb, pipeline,
0, height - max_width_radius[ST_CORNER_BOTTOMLEFT],
max_width_radius[ST_CORNER_BOTTOMLEFT], height,
0, 0.5, 0.5, 1);
break;
}
}
@@ -1717,10 +1692,12 @@ st_theme_node_paint_borders (StThemeNodePaintState *state,
alpha = paint_opacity * node->background_color.alpha / 255;
if (alpha > 0)
{
cogl_set_source_color4ub (node->background_color.red,
node->background_color.green,
node->background_color.blue,
alpha);
CoglPipeline *pipeline;
pipeline = get_color_pipeline (node->background_color.red,
node->background_color.green,
node->background_color.blue,
alpha);
/* We add padding to each corner, so that all corners end up as if they
* had a border-radius of max_border_radius, which allows us to treat
@@ -1803,8 +1780,9 @@ st_theme_node_paint_borders (StThemeNodePaintState *state,
verts[7] = height - border_width[ST_SIDE_BOTTOM];
}
break;
cogl_framebuffer_draw_rectangles (fb, pipeline, verts, 4);
}
cogl_rectangles (verts, n_rects);
}
/* Once we've drawn the borders and corners, if the corners are bigger
@@ -1819,25 +1797,31 @@ st_theme_node_paint_borders (StThemeNodePaintState *state,
* necessary, then the main rectangle
*/
if (max_border_radius > border_width[ST_SIDE_TOP])
cogl_rectangle (MAX(max_border_radius, border_width[ST_SIDE_LEFT]),
border_width[ST_SIDE_TOP],
width - MAX(max_border_radius, border_width[ST_SIDE_RIGHT]),
max_border_radius);
cogl_framebuffer_draw_rectangle (fb, pipeline,
MAX(max_border_radius, border_width[ST_SIDE_LEFT]),
border_width[ST_SIDE_TOP],
width - MAX(max_border_radius, border_width[ST_SIDE_RIGHT]),
max_border_radius);
if (max_border_radius > border_width[ST_SIDE_BOTTOM])
cogl_rectangle (MAX(max_border_radius, border_width[ST_SIDE_LEFT]),
height - max_border_radius,
width - MAX(max_border_radius, border_width[ST_SIDE_RIGHT]),
height - border_width[ST_SIDE_BOTTOM]);
cogl_framebuffer_draw_rectangle (fb, pipeline,
MAX(max_border_radius, border_width[ST_SIDE_LEFT]),
height - max_border_radius,
width - MAX(max_border_radius, border_width[ST_SIDE_RIGHT]),
height - border_width[ST_SIDE_BOTTOM]);
cogl_rectangle (border_width[ST_SIDE_LEFT],
MAX(border_width[ST_SIDE_TOP], max_border_radius),
width - border_width[ST_SIDE_RIGHT],
height - MAX(border_width[ST_SIDE_BOTTOM], max_border_radius));
cogl_framebuffer_draw_rectangle (fb, pipeline,
border_width[ST_SIDE_LEFT],
MAX(border_width[ST_SIDE_TOP], max_border_radius),
width - border_width[ST_SIDE_RIGHT],
height - MAX(border_width[ST_SIDE_BOTTOM], max_border_radius));
cogl_object_unref (pipeline);
}
}
static void
st_theme_node_paint_sliced_shadow (StThemeNodePaintState *state,
CoglFramebuffer *fb,
const ClutterActorBox *box,
guint8 paint_opacity)
{
@@ -1943,16 +1927,14 @@ st_theme_node_paint_sliced_shadow (StThemeNodePaintState *state,
right += xoffset;
/* Setup pipeline */
cogl_color_set_from_4ub (&color,
box_shadow_spec->color.red * paint_opacity / 255,
box_shadow_spec->color.green * paint_opacity / 255,
box_shadow_spec->color.blue * paint_opacity / 255,
box_shadow_spec->color.alpha * paint_opacity / 255);
cogl_color_init_from_4ub (&color,
box_shadow_spec->color.red * paint_opacity / 255,
box_shadow_spec->color.green * paint_opacity / 255,
box_shadow_spec->color.blue * paint_opacity / 255,
box_shadow_spec->color.alpha * paint_opacity / 255);
cogl_color_premultiply (&color);
cogl_material_set_layer_combine_constant (state->box_shadow_material, 0, &color);
cogl_set_source (state->box_shadow_material);
cogl_pipeline_set_layer_combine_constant (state->box_shadow_pipeline, 0, &color);
idx = 0;
@@ -2080,36 +2062,8 @@ st_theme_node_paint_sliced_shadow (StThemeNodePaintState *state,
}
}
cogl_rectangles_with_texture_coords (rectangles, idx / 8);
#if 0
/* Visual feedback on shadow's 9-slice and orignal offscreen buffer,
for debug purposes */
cogl_rectangle (xend, yoffset, xend + shadow_width, yoffset + shadow_height);
cogl_set_source_color4ub (0xff, 0x0, 0x0, 0xff);
cogl_rectangle (xoffset, top, xend, top + 1);
cogl_rectangle (xoffset, bottom, xend, bottom + 1);
cogl_rectangle (left, yoffset, left + 1, yend);
cogl_rectangle (right, yoffset, right + 1, yend);
cogl_rectangle (xend, yoffset, xend + shadow_width, yoffset + 1);
cogl_rectangle (xend, yoffset + shadow_height, xend + shadow_width, yoffset + shadow_height + 1);
cogl_rectangle (xend, yoffset, xend + 1, yoffset + shadow_height);
cogl_rectangle (xend + shadow_width, yoffset, xend + shadow_width + 1, yoffset + shadow_height);
s_top *= shadow_height;
s_bottom *= shadow_height;
s_left *= shadow_width;
s_right *= shadow_width;
cogl_rectangle (xend, yoffset + s_top, xend + shadow_width, yoffset + s_top + 1);
cogl_rectangle (xend, yoffset + s_bottom, xend + shadow_width, yoffset + s_bottom + 1);
cogl_rectangle (xend + s_left, yoffset, xend + s_left + 1, yoffset + shadow_height);
cogl_rectangle (xend + s_right, yoffset, xend + s_right + 1, yoffset + shadow_height);
#endif
cogl_framebuffer_draw_textured_rectangles (fb, state->box_shadow_pipeline,
rectangles, idx / 4);
}
static void
@@ -2119,7 +2073,8 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
guint border_radius[4];
int max_borders[4];
int center_radius, corner_id;
CoglHandle buffer, offscreen;
CoglTexture *buffer;
CoglOffscreen *offscreen;
/* Get infos from the node */
if (state->alloc_width < node->box_shadow_min_width ||
@@ -2160,33 +2115,32 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
state->box_shadow_height,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_ANY);
offscreen = cogl_offscreen_new_to_texture (buffer);
offscreen = cogl_offscreen_new_with_texture (buffer);
if (offscreen != COGL_INVALID_HANDLE)
if (offscreen != NULL)
{
CoglFramebuffer *fb = COGL_FRAMEBUFFER (offscreen);
ClutterActorBox box = { 0, 0, state->box_shadow_width, state->box_shadow_height};
CoglColor clear_color;
cogl_push_framebuffer (offscreen);
cogl_ortho (0, state->box_shadow_width, state->box_shadow_height, 0, 0, 1.0);
cogl_framebuffer_orthographic (fb, 0, state->box_shadow_width, state->box_shadow_height, 0, 0, 1.0);
cogl_framebuffer_clear (fb, COGL_BUFFER_BIT_COLOR, &clear_color);
cogl_color_init_from_4ub (&clear_color, 0, 0, 0, 0);
st_theme_node_paint_borders (state, fb, &box, 0xFF);
cogl_object_unref (offscreen);
cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
st_theme_node_paint_borders (state, &box, 0xFF);
cogl_pop_framebuffer ();
cogl_handle_unref (offscreen);
state->box_shadow_material = _st_create_shadow_material (st_theme_node_get_box_shadow (node),
state->box_shadow_pipeline = _st_create_shadow_pipeline (st_theme_node_get_box_shadow (node),
buffer);
}
cogl_handle_unref (buffer);
cogl_object_unref (buffer);
}
static void
st_theme_node_paint_sliced_border_image (StThemeNode *node,
float width,
float height,
CoglFramebuffer *fb,
guint8 paint_opacity)
{
gfloat ex, ey;
@@ -2194,7 +2148,7 @@ st_theme_node_paint_sliced_border_image (StThemeNode *node,
gint border_left, border_right, border_top, border_bottom;
float img_width, img_height;
StBorderImage *border_image;
CoglHandle material;
CoglPipeline *pipeline;
border_image = st_theme_node_get_border_image (node);
g_assert (border_image != NULL);
@@ -2218,11 +2172,8 @@ st_theme_node_paint_sliced_border_image (StThemeNode *node,
if (ey < 0)
ey = border_bottom; /* FIXME ? */
material = node->border_slices_material;
cogl_material_set_color4ub (material,
paint_opacity, paint_opacity, paint_opacity, paint_opacity);
cogl_set_source (material);
pipeline = node->border_slices_pipeline;
cogl_pipeline_set_color4ub (pipeline, paint_opacity, paint_opacity, paint_opacity, paint_opacity);
{
float rectangles[] =
@@ -2273,12 +2224,14 @@ st_theme_node_paint_sliced_border_image (StThemeNode *node,
1.0, 1.0
};
cogl_rectangles_with_texture_coords (rectangles, 9);
cogl_framebuffer_draw_textured_rectangles (fb, pipeline,
rectangles, 9);
}
}
static void
st_theme_node_paint_outline (StThemeNode *node,
CoglFramebuffer *fb,
const ClutterActorBox *box,
guint8 paint_opacity)
@@ -2287,6 +2240,7 @@ st_theme_node_paint_outline (StThemeNode *node,
int outline_width;
float rects[16];
ClutterColor outline_color, effective_outline;
CoglPipeline *pipeline;
width = box->x2 - box->x1;
height = box->y2 - box->y1;
@@ -2298,10 +2252,10 @@ st_theme_node_paint_outline (StThemeNode *node,
st_theme_node_get_outline_color (node, &outline_color);
over (&outline_color, &node->background_color, &effective_outline);
cogl_set_source_color4ub (effective_outline.red,
effective_outline.green,
effective_outline.blue,
paint_opacity * effective_outline.alpha / 255);
pipeline = get_color_pipeline (effective_outline.red,
effective_outline.green,
effective_outline.blue,
paint_opacity * effective_outline.alpha / 255);
/* The outline is drawn just outside the border, which means just
* outside the allocation box. This means that in some situations
@@ -2333,7 +2287,8 @@ st_theme_node_paint_outline (StThemeNode *node,
rects[14] = 0;
rects[15] = height;
cogl_rectangles (rects, 4);
cogl_framebuffer_draw_rectangles (fb, pipeline, rects, 16);
cogl_object_unref (pipeline);
}
static gboolean
@@ -2373,9 +2328,13 @@ st_theme_node_needs_new_box_shadow_for_size (StThemeNodePaintState *state,
return FALSE;
}
/**
* st_theme_node_paint: (skip)
*/
void
st_theme_node_paint (StThemeNode *node,
StThemeNodePaintState *state,
CoglFramebuffer *fb,
const ClutterActorBox *box,
guint8 paint_opacity)
{
@@ -2441,24 +2400,26 @@ st_theme_node_paint (StThemeNode *node,
* such that it's aligned to the outside edges)
*/
if (state->box_shadow_material)
if (state->box_shadow_pipeline)
{
if (state->alloc_width < node->box_shadow_min_width ||
state->alloc_height < node->box_shadow_min_height)
_st_paint_shadow_with_opacity (node->box_shadow,
state->box_shadow_material,
state->box_shadow_pipeline,
fb,
&allocation,
paint_opacity);
else
st_theme_node_paint_sliced_shadow (state,
fb,
&allocation,
paint_opacity);
}
if (state->prerendered_material != COGL_INVALID_HANDLE ||
if (state->prerendered_pipeline != NULL ||
st_theme_node_load_border_image (node))
{
if (state->prerendered_material != COGL_INVALID_HANDLE)
if (state->prerendered_pipeline != NULL)
{
ClutterActorBox paint_box;
@@ -2466,23 +2427,24 @@ st_theme_node_paint (StThemeNode *node,
&allocation,
&paint_box);
paint_material_with_opacity (state->prerendered_material,
&paint_box,
NULL,
paint_opacity);
cogl_pipeline_set_color4ub (state->prerendered_pipeline,
paint_opacity, paint_opacity, paint_opacity, paint_opacity);
cogl_framebuffer_draw_rectangle (fb, state->prerendered_pipeline,
paint_box.x1, paint_box.y1,
paint_box.x2, paint_box.y2);
}
if (node->border_slices_material != COGL_INVALID_HANDLE)
st_theme_node_paint_sliced_border_image (node, width, height, paint_opacity);
if (node->border_slices_pipeline != NULL)
st_theme_node_paint_sliced_border_image (node, width, height, fb, paint_opacity);
}
else
{
st_theme_node_paint_borders (state, box, paint_opacity);
st_theme_node_paint_borders (state, fb, box, paint_opacity);
}
st_theme_node_paint_outline (node, box, paint_opacity);
st_theme_node_paint_outline (node, fb, box, paint_opacity);
if (state->prerendered_material == COGL_INVALID_HANDLE &&
if (state->prerendered_pipeline == NULL &&
st_theme_node_load_background_image (node))
{
ClutterActorBox background_box;
@@ -2498,7 +2460,7 @@ st_theme_node_paint (StThemeNode *node,
get_background_position (node, &allocation, &background_box, &texture_coords);
if (has_visible_outline || node->background_repeat)
cogl_clip_push_rectangle (allocation.x1, allocation.y1, allocation.x2, allocation.y2);
cogl_framebuffer_push_rectangle_clip (fb, allocation.x1, allocation.y1, allocation.x2, allocation.y2);
/* CSS based drop shadows
*
@@ -2513,19 +2475,23 @@ st_theme_node_paint (StThemeNode *node,
* there is nothing (like a border, or the edge of the background color)
* to logically confine it.
*/
if (node->background_shadow_material != COGL_INVALID_HANDLE)
if (node->background_shadow_pipeline != NULL)
_st_paint_shadow_with_opacity (node->background_image_shadow,
node->background_shadow_material,
node->background_shadow_pipeline,
fb,
&background_box,
paint_opacity);
paint_material_with_opacity (node->background_material,
&background_box,
&texture_coords,
paint_opacity);
cogl_pipeline_set_color4ub (node->background_pipeline,
paint_opacity, paint_opacity, paint_opacity, paint_opacity);
cogl_framebuffer_draw_textured_rectangle (fb, node->background_pipeline,
background_box.x1, background_box.y1,
background_box.x2, background_box.y2,
texture_coords.x1, texture_coords.x2,
texture_coords.y1, texture_coords.y2);
if (has_visible_outline || node->background_repeat)
cogl_clip_pop ();
cogl_framebuffer_pop_clip (fb);
}
}
@@ -2535,16 +2501,11 @@ st_theme_node_paint_state_node_free_internal (StThemeNodePaintState *state,
{
int corner_id;
if (state->prerendered_texture != COGL_INVALID_HANDLE)
cogl_handle_unref (state->prerendered_texture);
if (state->prerendered_material != COGL_INVALID_HANDLE)
cogl_handle_unref (state->prerendered_material);
if (state->box_shadow_material != COGL_INVALID_HANDLE)
cogl_handle_unref (state->box_shadow_material);
g_clear_pointer (&state->prerendered_texture, cogl_object_unref);
g_clear_pointer (&state->prerendered_pipeline, cogl_object_unref);
g_clear_pointer (&state->box_shadow_pipeline, cogl_object_unref);
for (corner_id = 0; corner_id < 4; corner_id++)
if (state->corner_material[corner_id] != COGL_INVALID_HANDLE)
cogl_handle_unref (state->corner_material[corner_id]);
g_clear_pointer (&state->corner_pipeline[corner_id], cogl_object_unref);
if (unref_node)
st_theme_node_paint_state_set_node (state, NULL);
@@ -2587,12 +2548,11 @@ st_theme_node_paint_state_init (StThemeNodePaintState *state)
state->alloc_width = 0;
state->alloc_height = 0;
state->node = NULL;
state->box_shadow_material = COGL_INVALID_HANDLE;
state->prerendered_texture = COGL_INVALID_HANDLE;
state->prerendered_material = COGL_INVALID_HANDLE;
state->box_shadow_pipeline = NULL;
state->prerendered_texture = NULL;
state->prerendered_pipeline = NULL;
for (corner_id = 0; corner_id < 4; corner_id++)
state->corner_material[corner_id] = COGL_INVALID_HANDLE;
state->corner_pipeline[corner_id] = NULL;
}
void
@@ -2613,15 +2573,15 @@ st_theme_node_paint_state_copy (StThemeNodePaintState *state,
state->box_shadow_width = other->box_shadow_width;
state->box_shadow_height = other->box_shadow_height;
if (other->box_shadow_material)
state->box_shadow_material = cogl_handle_ref (other->box_shadow_material);
if (other->box_shadow_pipeline)
state->box_shadow_pipeline = cogl_object_ref (other->box_shadow_pipeline);
if (other->prerendered_texture)
state->prerendered_texture = cogl_handle_ref (other->prerendered_texture);
if (other->prerendered_material)
state->prerendered_material = cogl_handle_ref (other->prerendered_material);
state->prerendered_texture = cogl_object_ref (other->prerendered_texture);
if (other->prerendered_pipeline)
state->prerendered_pipeline = cogl_object_ref (other->prerendered_pipeline);
for (corner_id = 0; corner_id < 4; corner_id++)
if (other->corner_material[corner_id])
state->corner_material[corner_id] = cogl_handle_ref (other->corner_material[corner_id]);
if (other->corner_pipeline[corner_id])
state->corner_pipeline[corner_id] = cogl_object_ref (other->corner_pipeline[corner_id]);
}
void

View File

@@ -105,11 +105,11 @@ struct _StThemeNode {
int box_shadow_min_width;
int box_shadow_min_height;
CoglHandle border_slices_texture;
CoglHandle border_slices_material;
CoglHandle background_texture;
CoglHandle background_material;
CoglHandle background_shadow_material;
CoglTexture *border_slices_texture;
CoglPipeline *border_slices_pipeline;
CoglTexture *background_texture;
CoglPipeline *background_pipeline;
CoglPipeline *background_shadow_pipeline;
StThemeNodePaintState cached_state;
};

View File

@@ -36,13 +36,13 @@ struct _StThemeNodeTransitionPrivate {
StThemeNodePaintState old_paint_state;
StThemeNodePaintState new_paint_state;
CoglHandle old_texture;
CoglHandle new_texture;
CoglTexture *old_texture;
CoglTexture *new_texture;
CoglHandle old_offscreen;
CoglHandle new_offscreen;
CoglOffscreen *old_offscreen;
CoglOffscreen *new_offscreen;
CoglHandle material;
CoglPipeline *pipeline;
ClutterTimeline *timeline;
@@ -237,9 +237,10 @@ setup_framebuffers (StThemeNodeTransition *transition,
StThemeNodeTransitionPrivate *priv = transition->priv;
CoglColor clear_color = { 0, 0, 0, 0 };
guint width, height;
CoglFramebuffer *fb;
/* template material to avoid unnecessary shader compilation */
static CoglHandle material_template = COGL_INVALID_HANDLE;
/* template pipeline to avoid unnecessary shader compilation */
static CoglPipeline *pipeline_template = NULL;
width = priv->offscreen_box.x2 - priv->offscreen_box.x1;
height = priv->offscreen_box.y2 - priv->offscreen_box.y1;
@@ -248,77 +249,72 @@ setup_framebuffers (StThemeNodeTransition *transition,
g_return_val_if_fail (height > 0, FALSE);
if (priv->old_texture)
cogl_handle_unref (priv->old_texture);
cogl_object_unref (priv->old_texture);
priv->old_texture = cogl_texture_new_with_size (width, height,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_ANY);
if (priv->new_texture)
cogl_handle_unref (priv->new_texture);
cogl_object_unref (priv->new_texture);
priv->new_texture = cogl_texture_new_with_size (width, height,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_ANY);
g_return_val_if_fail (priv->old_texture != COGL_INVALID_HANDLE, FALSE);
g_return_val_if_fail (priv->new_texture != COGL_INVALID_HANDLE, FALSE);
g_return_val_if_fail (priv->old_texture != NULL, FALSE);
g_return_val_if_fail (priv->new_texture != NULL, FALSE);
if (priv->old_offscreen)
cogl_handle_unref (priv->old_offscreen);
priv->old_offscreen = cogl_offscreen_new_to_texture (priv->old_texture);
cogl_object_unref (priv->old_offscreen);
priv->old_offscreen = cogl_offscreen_new_with_texture (priv->old_texture);
if (priv->new_offscreen)
cogl_handle_unref (priv->new_offscreen);
priv->new_offscreen = cogl_offscreen_new_to_texture (priv->new_texture);
cogl_object_unref (priv->new_offscreen);
priv->new_offscreen = cogl_offscreen_new_with_texture (priv->new_texture);
g_return_val_if_fail (priv->old_offscreen != COGL_INVALID_HANDLE, FALSE);
g_return_val_if_fail (priv->new_offscreen != COGL_INVALID_HANDLE, FALSE);
g_return_val_if_fail (priv->old_offscreen != NULL, FALSE);
g_return_val_if_fail (priv->new_offscreen != NULL, FALSE);
if (priv->material == NULL)
if (priv->pipeline == NULL)
{
if (G_UNLIKELY (material_template == COGL_INVALID_HANDLE))
if (G_UNLIKELY (pipeline_template == NULL))
{
material_template = cogl_material_new ();
CoglContext *ctx =
clutter_backend_get_cogl_context (clutter_get_default_backend ());
cogl_material_set_layer_combine (material_template, 0,
"RGBA = REPLACE (TEXTURE)",
NULL);
cogl_material_set_layer_combine (material_template, 1,
"RGBA = INTERPOLATE (PREVIOUS, "
"TEXTURE, "
"CONSTANT[A])",
NULL);
cogl_material_set_layer_combine (material_template, 2,
"RGBA = MODULATE (PREVIOUS, "
"PRIMARY)",
NULL);
pipeline_template = cogl_pipeline_new (ctx);
cogl_pipeline_set_layer_combine (pipeline_template, 0, "RGBA = REPLACE (TEXTURE)", NULL);
cogl_pipeline_set_layer_combine (pipeline_template, 1, "RGBA = INTERPOLATE (PREVIOUS, TEXTURE, CONSTANT[A])", NULL);
cogl_pipeline_set_layer_combine (pipeline_template, 2, "RGBA = MODULATE (PREVIOUS, PRIMARY)", NULL);
}
priv->material = cogl_material_copy (material_template);
priv->pipeline = cogl_pipeline_copy (pipeline_template);
}
cogl_material_set_layer (priv->material, 0, priv->new_texture);
cogl_material_set_layer (priv->material, 1, priv->old_texture);
cogl_pipeline_set_layer_texture (priv->pipeline, 0, priv->new_texture);
cogl_pipeline_set_layer_texture (priv->pipeline, 1, priv->old_texture);
cogl_push_framebuffer (priv->old_offscreen);
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
cogl_ortho (priv->offscreen_box.x1, priv->offscreen_box.x2,
priv->offscreen_box.y2, priv->offscreen_box.y1,
0.0, 1.0);
st_theme_node_paint (priv->old_theme_node, &priv->old_paint_state, allocation, 255);
cogl_pop_framebuffer ();
fb = COGL_FRAMEBUFFER (priv->old_offscreen);
cogl_framebuffer_clear (fb, COGL_BUFFER_BIT_COLOR, &clear_color);
cogl_framebuffer_orthographic (fb,
priv->offscreen_box.x1, priv->offscreen_box.x2,
priv->offscreen_box.y2, priv->offscreen_box.y1,
0.0, 1.0);
st_theme_node_paint (priv->old_theme_node, &priv->old_paint_state, fb, allocation, 255);
cogl_push_framebuffer (priv->new_offscreen);
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
cogl_ortho (priv->offscreen_box.x1, priv->offscreen_box.x2,
priv->offscreen_box.y2, priv->offscreen_box.y1,
0.0, 1.0);
st_theme_node_paint (priv->new_theme_node, &priv->new_paint_state, allocation, 255);
cogl_pop_framebuffer ();
fb = COGL_FRAMEBUFFER (priv->new_offscreen);
cogl_framebuffer_clear (fb, COGL_BUFFER_BIT_COLOR, &clear_color);
cogl_framebuffer_orthographic (fb,
priv->offscreen_box.x1, priv->offscreen_box.x2,
priv->offscreen_box.y2, priv->offscreen_box.y1,
0.0, 1.0);
st_theme_node_paint (priv->new_theme_node, &priv->new_paint_state, fb, allocation, 255);
return TRUE;
}
void
st_theme_node_transition_paint (StThemeNodeTransition *transition,
CoglFramebuffer *fb,
ClutterActorBox *allocation,
guint8 paint_opacity)
{
@@ -347,20 +343,20 @@ st_theme_node_transition_paint (StThemeNodeTransition *transition,
return;
}
cogl_color_set_from_4f (&constant, 0., 0., 0.,
clutter_timeline_get_progress (priv->timeline));
cogl_material_set_layer_combine_constant (priv->material, 1, &constant);
cogl_color_init_from_4f (&constant, 0., 0., 0.,
clutter_timeline_get_progress (priv->timeline));
cogl_pipeline_set_layer_combine_constant (priv->pipeline, 1, &constant);
cogl_material_set_color4ub (priv->material,
cogl_pipeline_set_color4ub (priv->pipeline,
paint_opacity, paint_opacity,
paint_opacity, paint_opacity);
cogl_set_source (priv->material);
cogl_rectangle_with_multitexture_coords (priv->offscreen_box.x1,
priv->offscreen_box.y1,
priv->offscreen_box.x2,
priv->offscreen_box.y2,
tex_coords, 8);
cogl_framebuffer_draw_multitextured_rectangle (fb, priv->pipeline,
priv->offscreen_box.x1,
priv->offscreen_box.y1,
priv->offscreen_box.x2,
priv->offscreen_box.y2,
tex_coords, 8);
}
static void
@@ -368,47 +364,16 @@ st_theme_node_transition_dispose (GObject *object)
{
StThemeNodeTransitionPrivate *priv = ST_THEME_NODE_TRANSITION (object)->priv;
if (priv->old_theme_node)
{
g_object_unref (priv->old_theme_node);
priv->old_theme_node = NULL;
}
g_clear_object (&priv->old_theme_node);
g_clear_object (&priv->new_theme_node);
if (priv->new_theme_node)
{
g_object_unref (priv->new_theme_node);
priv->new_theme_node = NULL;
}
g_clear_pointer (&priv->old_texture, cogl_object_unref);
g_clear_pointer (&priv->new_texture, cogl_object_unref);
if (priv->old_texture)
{
cogl_handle_unref (priv->old_texture);
priv->old_texture = NULL;
}
g_clear_pointer (&priv->old_offscreen, cogl_object_unref);
g_clear_pointer (&priv->new_offscreen, cogl_object_unref);
if (priv->new_texture)
{
cogl_handle_unref (priv->new_texture);
priv->new_texture = NULL;
}
if (priv->old_offscreen)
{
cogl_handle_unref (priv->old_offscreen);
priv->old_offscreen = NULL;
}
if (priv->new_offscreen)
{
cogl_handle_unref (priv->new_offscreen);
priv->new_offscreen = NULL;
}
if (priv->material)
{
cogl_handle_unref (priv->material);
priv->material = NULL;
}
g_clear_pointer (&priv->pipeline, cogl_object_unref);
if (priv->timeline)
{

View File

@@ -63,6 +63,7 @@ void st_theme_node_transition_update (StThemeNodeTransition *transition,
StThemeNode *new_node);
void st_theme_node_transition_paint (StThemeNodeTransition *transition,
CoglFramebuffer *fb,
ClutterActorBox *allocation,
guint8 paint_opacity);

View File

@@ -49,11 +49,6 @@ static void
st_theme_node_init (StThemeNode *node)
{
node->transition_duration = -1;
node->background_texture = COGL_INVALID_HANDLE;
node->background_material = COGL_INVALID_HANDLE;
node->background_shadow_material = COGL_INVALID_HANDLE;
node->border_slices_texture = COGL_INVALID_HANDLE;
node->border_slices_material = COGL_INVALID_HANDLE;
st_theme_node_paint_state_init (&node->cached_state);
}
@@ -160,16 +155,11 @@ st_theme_node_finalize (GObject *object)
if (node->background_image)
g_free (node->background_image);
if (node->background_texture != COGL_INVALID_HANDLE)
cogl_handle_unref (node->background_texture);
if (node->background_material != COGL_INVALID_HANDLE)
cogl_handle_unref (node->background_material);
if (node->background_shadow_material != COGL_INVALID_HANDLE)
cogl_handle_unref (node->background_shadow_material);
if (node->border_slices_texture != COGL_INVALID_HANDLE)
cogl_handle_unref (node->border_slices_texture);
if (node->border_slices_material != COGL_INVALID_HANDLE)
cogl_handle_unref (node->border_slices_material);
g_clear_pointer (&node->background_texture, cogl_object_unref);
g_clear_pointer (&node->background_pipeline, cogl_object_unref);
g_clear_pointer (&node->background_shadow_pipeline, cogl_object_unref);
g_clear_pointer (&node->border_slices_texture, cogl_object_unref);
g_clear_pointer (&node->border_slices_pipeline, cogl_object_unref);
G_OBJECT_CLASS (st_theme_node_parent_class)->finalize (object);
}

View File

@@ -105,10 +105,10 @@ struct _StThemeNodePaintState {
float box_shadow_width;
float box_shadow_height;
CoglHandle box_shadow_material;
CoglHandle prerendered_texture;
CoglHandle prerendered_material;
CoglHandle corner_material[4];
CoglPipeline *box_shadow_pipeline;
CoglTexture *prerendered_texture;
CoglPipeline *prerendered_pipeline;
CoglPipeline *corner_pipeline[4];
};
GType st_theme_node_get_type (void) G_GNUC_CONST;
@@ -268,6 +268,7 @@ gboolean st_theme_node_paint_equal (StThemeNode *node,
void st_theme_node_paint (StThemeNode *node,
StThemeNodePaintState *state,
CoglFramebuffer *fb,
const ClutterActorBox *box,
guint8 paint_opacity);

View File

@@ -465,6 +465,7 @@ st_widget_paint_background (StWidget *widget)
StThemeNode *theme_node;
ClutterActorBox allocation;
guint8 opacity;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
theme_node = st_widget_get_theme_node (widget);
@@ -474,11 +475,13 @@ st_widget_paint_background (StWidget *widget)
if (widget->priv->transition_animation)
st_theme_node_transition_paint (widget->priv->transition_animation,
fb,
&allocation,
opacity);
else
st_theme_node_paint (theme_node,
current_paint_state (widget),
fb,
&allocation,
opacity);
}