Compare commits
76 Commits
3.9.91
...
wip/cogl-d
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d8009fd826 | ||
![]() |
744749f2f3 | ||
![]() |
db1c65970b | ||
![]() |
2d8ed4c77f | ||
![]() |
9ba970b83d | ||
![]() |
954d262d67 | ||
![]() |
1b6090fe13 | ||
![]() |
f8234b07f8 | ||
![]() |
25318f696d | ||
![]() |
1ab3d12bc7 | ||
![]() |
d66e0a0b45 | ||
![]() |
d46ceead04 | ||
![]() |
1cc9480e56 | ||
![]() |
c022b541f1 | ||
![]() |
96588466d4 | ||
![]() |
dbde12f8bf | ||
![]() |
660f0fec16 | ||
![]() |
fd9401cc62 | ||
![]() |
1edb9f7525 | ||
![]() |
15cfb9d1d9 | ||
![]() |
da6744da2d | ||
![]() |
bd5aa66a5f | ||
![]() |
7c30fe7738 | ||
![]() |
8ce599df38 | ||
![]() |
75fe13f1df | ||
![]() |
8ad6ded3ec | ||
![]() |
38d22c47f5 | ||
![]() |
956b6b89b6 | ||
![]() |
f27c2e6813 | ||
![]() |
d35c9f880a | ||
![]() |
d62aacf301 | ||
![]() |
716ea64212 | ||
![]() |
c9d6b13f6a | ||
![]() |
b437e68026 | ||
![]() |
1dfc38d078 | ||
![]() |
387184b052 | ||
![]() |
beec47d7ad | ||
![]() |
6b554337ff | ||
![]() |
08f95264d6 | ||
![]() |
2802920e93 | ||
![]() |
b04c47c15f | ||
![]() |
56d96383e2 | ||
![]() |
f2cbf846e7 | ||
![]() |
0088e94293 | ||
![]() |
a03a077e3d | ||
![]() |
85d2b9e32a | ||
![]() |
aa6471b3cc | ||
![]() |
b462a85c43 | ||
![]() |
9d8f30f955 | ||
![]() |
420db828e9 | ||
![]() |
fd8def705d | ||
![]() |
39c4fa1bf0 | ||
![]() |
32b964e9b7 | ||
![]() |
2980515c85 | ||
![]() |
36bee16781 | ||
![]() |
4f5d3e00db | ||
![]() |
6fb044f351 | ||
![]() |
b403845d03 | ||
![]() |
9d0e00acce | ||
![]() |
d5afe8f4f2 | ||
![]() |
3eb5ca3653 | ||
![]() |
db07aa42ea | ||
![]() |
081f51b9eb | ||
![]() |
38d9c16aba | ||
![]() |
392a426ddf | ||
![]() |
d77b2751a6 | ||
![]() |
3b28308291 | ||
![]() |
574ecb5ad4 | ||
![]() |
7a57a780d8 | ||
![]() |
cf9842433e | ||
![]() |
c6d089d701 | ||
![]() |
ec37e2d2b5 | ||
![]() |
e68b648a33 | ||
![]() |
56179d8a54 | ||
![]() |
47d232f694 | ||
![]() |
fc26fb2149 |
@@ -1022,7 +1022,7 @@ StScrollBar StButton#vhandle:active {
|
||||
}
|
||||
|
||||
.app-folder-popup-bin {
|
||||
padding: 15px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.app-well-app.running > .overview-icon {
|
||||
@@ -1069,12 +1069,14 @@ StScrollBar StButton#vhandle:active {
|
||||
.app-well-app:checked > .overview-icon,
|
||||
.app-well-app:active > .overview-icon,
|
||||
.show-apps:checked > .overview-icon,
|
||||
.show-apps:active > .overview-icon {
|
||||
.show-apps:active > .overview-icon,
|
||||
.search-provider-icon:active,
|
||||
.list-search-result:active {
|
||||
background-gradient-start: rgba(255, 255, 255, .05);
|
||||
background-gradient-end: rgba(255, 255, 255, .15);
|
||||
background-gradient-direction: vertical;
|
||||
border-radius: 4px;
|
||||
box-shadow: inset 0px 1px 2px 0px rgba(0, 0, 0, 1);
|
||||
box-shadow: inset 0px 1px 2px 0px rgba(0, 0, 0, 0.7);
|
||||
transition-duration: 100ms;
|
||||
}
|
||||
|
||||
@@ -1662,7 +1664,7 @@ StScrollBar StButton#vhandle:active {
|
||||
}
|
||||
|
||||
.chat-notification-scrollview{
|
||||
max-height: 22em;
|
||||
max-height: 22em;
|
||||
}
|
||||
|
||||
.subscription-message {
|
||||
|
@@ -112,7 +112,7 @@ expand_content_files=
|
||||
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
||||
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
||||
GTKDOC_CFLAGS=$(GNOME_SHELL_CFLAGS)
|
||||
GTKDOC_LIBS=$(GNOME_SHELL_LIBS) $(BLUETOOTH_LIBS) $(top_builddir)/src/libgnome-shell.la
|
||||
GTKDOC_LIBS=$(GNOME_SHELL_LIBS) $(BLUETOOTH_LIBS) $(top_builddir)/src/libgnome-shell-menu.la $(top_builddir)/src/libgnome-shell-base.la $(top_builddir)/src/libgnome-shell.la
|
||||
|
||||
# This includes the standard gtk-doc make rules, copied by gtkdocize.
|
||||
include $(top_srcdir)/gtk-doc.make
|
||||
|
@@ -55,6 +55,7 @@ nobase_dist_js_DATA = \
|
||||
ui/extensionSystem.js \
|
||||
ui/extensionDownloader.js \
|
||||
ui/environment.js \
|
||||
ui/focusCaretTracker.js\
|
||||
ui/ibusCandidatePopup.js\
|
||||
ui/grabHelper.js \
|
||||
ui/iconGrid.js \
|
||||
|
@@ -20,7 +20,7 @@ const ObjectManagerIface = <interface name="org.freedesktop.DBus.ObjectManager">
|
||||
<arg name="objectPath" type="o"/>
|
||||
<arg name="interfaces" type="as" />
|
||||
</signal>
|
||||
</interface>
|
||||
</interface>;
|
||||
|
||||
const ObjectManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ObjectManagerIface);
|
||||
|
||||
|
@@ -355,10 +355,13 @@ const WindowSwitcherPopup = new Lang.Class({
|
||||
Name: 'WindowSwitcherPopup',
|
||||
Extends: SwitcherPopup.SwitcherPopup,
|
||||
|
||||
_init: function(items) {
|
||||
this.parent(items);
|
||||
this._settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
|
||||
},
|
||||
|
||||
_getWindowList: function() {
|
||||
let settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
|
||||
let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
|
||||
: null;
|
||||
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
|
||||
return global.display.get_tab_list(Meta.TabList.NORMAL, global.screen, workspace);
|
||||
},
|
||||
|
||||
@@ -368,7 +371,8 @@ const WindowSwitcherPopup = new Lang.Class({
|
||||
if (windows.length == 0)
|
||||
return false;
|
||||
|
||||
this._switcherList = new WindowList(windows);
|
||||
let mode = this._settings.get_enum('app-icon-mode');
|
||||
this._switcherList = new WindowList(windows, mode);
|
||||
this._items = this._switcherList.icons;
|
||||
|
||||
return true;
|
||||
@@ -663,7 +667,7 @@ const ThumbnailList = new Lang.Class({
|
||||
const WindowIcon = new Lang.Class({
|
||||
Name: 'WindowIcon',
|
||||
|
||||
_init: function(window) {
|
||||
_init: function(window, mode) {
|
||||
this.window = window;
|
||||
|
||||
this.actor = new St.BoxLayout({ style_class: 'alt-tab-app',
|
||||
@@ -681,8 +685,7 @@ const WindowIcon = new Lang.Class({
|
||||
|
||||
this._icon.destroy_all_children();
|
||||
|
||||
let settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
|
||||
switch (settings.get_enum('app-icon-mode')) {
|
||||
switch (mode) {
|
||||
case AppIconMode.THUMBNAIL_ONLY:
|
||||
size = WINDOW_PREVIEW_SIZE;
|
||||
this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE));
|
||||
@@ -720,7 +723,7 @@ const WindowList = new Lang.Class({
|
||||
Name: 'WindowList',
|
||||
Extends: SwitcherPopup.SwitcherList,
|
||||
|
||||
_init : function(windows) {
|
||||
_init : function(windows, mode) {
|
||||
this.parent(true);
|
||||
|
||||
this._label = new St.Label({ x_align: Clutter.ActorAlign.CENTER,
|
||||
@@ -732,7 +735,7 @@ const WindowList = new Lang.Class({
|
||||
|
||||
for (let i = 0; i < windows.length; i++) {
|
||||
let win = windows[i];
|
||||
let icon = new WindowIcon(win);
|
||||
let icon = new WindowIcon(win, mode);
|
||||
|
||||
this.addItem(icon.actor, icon.label);
|
||||
this.icons.push(icon);
|
||||
|
@@ -125,7 +125,7 @@ const BaseAppView = new Lang.Class({
|
||||
},
|
||||
|
||||
loadGrid: function() {
|
||||
this._allItems.sort(this._compareItems);
|
||||
this._allItems.sort(Lang.bind(this, this._compareItems));
|
||||
|
||||
for (let i = 0; i < this._allItems.length; i++) {
|
||||
let id = this._getItemId(this._allItems[i]);
|
||||
@@ -167,20 +167,6 @@ const BaseAppView = new Lang.Class({
|
||||
Signals.addSignalMethods(BaseAppView.prototype);
|
||||
|
||||
|
||||
// Ignore child size requests to use the available size from the parent
|
||||
const PagesBin = new Lang.Class({
|
||||
Name: 'PagesBin',
|
||||
Extends: St.Bin,
|
||||
|
||||
vfunc_get_preferred_height: function (forWidth) {
|
||||
return [0, 0];
|
||||
},
|
||||
|
||||
vfunc_get_preferred_width: function(forHeight) {
|
||||
return [0, 0];
|
||||
}
|
||||
});
|
||||
|
||||
const PageIndicators = new Lang.Class({
|
||||
Name:'PageIndicators',
|
||||
|
||||
@@ -189,7 +175,8 @@ const PageIndicators = new Lang.Class({
|
||||
vertical: true,
|
||||
x_expand: true, y_expand: true,
|
||||
x_align: Clutter.ActorAlign.END,
|
||||
y_align: Clutter.ActorAlign.CENTER });
|
||||
y_align: Clutter.ActorAlign.CENTER,
|
||||
reactive: true });
|
||||
this._nPages = 0;
|
||||
this._currentPage = undefined;
|
||||
|
||||
@@ -224,6 +211,7 @@ const PageIndicators = new Lang.Class({
|
||||
children[i].destroy();
|
||||
}
|
||||
this._nPages = nPages;
|
||||
this.actor.visible = (this._nPages > 1);
|
||||
},
|
||||
|
||||
setCurrentPage: function(currentPage) {
|
||||
@@ -272,30 +260,35 @@ const AllView = new Lang.Class({
|
||||
|
||||
_init: function() {
|
||||
this.parent({ usePagination: true }, null);
|
||||
this._pagesBin = new PagesBin({ style_class: 'all-apps',
|
||||
x_expand: true,
|
||||
y_expand: true,
|
||||
x_fill: true,
|
||||
y_fill: false,
|
||||
reactive: true,
|
||||
y_align: St.Align.START });
|
||||
this._scrollView = new St.ScrollView({ style_class: 'all-apps',
|
||||
x_expand: true,
|
||||
y_expand: true,
|
||||
x_fill: true,
|
||||
y_fill: false,
|
||||
reactive: true,
|
||||
y_align: St.Align.START });
|
||||
this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout(),
|
||||
x_expand:true, y_expand:true });
|
||||
this.actor.add_actor(this._pagesBin);
|
||||
this.actor.add_actor(this._scrollView);
|
||||
|
||||
this._scrollView.set_policy(Gtk.PolicyType.NEVER,
|
||||
Gtk.PolicyType.AUTOMATIC);
|
||||
// we are only using ScrollView for the fade effect, hide scrollbars
|
||||
this._scrollView.vscroll.hide();
|
||||
this._adjustment = this._scrollView.vscroll.adjustment;
|
||||
|
||||
this._pageIndicators = new PageIndicators();
|
||||
this._pageIndicators.connect('page-activated', Lang.bind(this,
|
||||
function(indicators, pageIndex) {
|
||||
this.goToPage(pageIndex);
|
||||
}));
|
||||
this._pageIndicators.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
|
||||
this.actor.add_actor(this._pageIndicators.actor);
|
||||
|
||||
this._folderIcons = [];
|
||||
|
||||
this._stack = new St.Widget({ layout_manager: new Clutter.BinLayout() });
|
||||
let box = new St.BoxLayout({ vertical: true });
|
||||
this._verticalAdjustment = new St.Adjustment();
|
||||
box.set_adjustments(new St.Adjustment() /* unused */, this._verticalAdjustment);
|
||||
|
||||
this._currentPage = 0;
|
||||
this._stack.add_actor(this._grid.actor);
|
||||
@@ -303,16 +296,16 @@ const AllView = new Lang.Class({
|
||||
this._stack.add_actor(this._eventBlocker);
|
||||
|
||||
box.add_actor(this._stack);
|
||||
this._pagesBin.add_actor(box);
|
||||
this._scrollView.add_actor(box);
|
||||
|
||||
this._pagesBin.connect('scroll-event', Lang.bind(this, this._onScroll));
|
||||
this._scrollView.connect('scroll-event', Lang.bind(this, this._onScroll));
|
||||
|
||||
let panAction = new Clutter.PanAction({ interpolate: false });
|
||||
panAction.connect('pan', Lang.bind(this, this._onPan));
|
||||
panAction.connect('gesture-cancel', Lang.bind(this, this._onPanEnd));
|
||||
panAction.connect('gesture-end', Lang.bind(this, this._onPanEnd));
|
||||
this._panAction = panAction;
|
||||
this._pagesBin.add_action(panAction);
|
||||
this._scrollView.add_action(panAction);
|
||||
this._panning = false;
|
||||
this._clickAction = new Clutter.ClickAction();
|
||||
this._clickAction.connect('clicked', Lang.bind(this, function() {
|
||||
@@ -337,6 +330,7 @@ const AllView = new Lang.Class({
|
||||
}));
|
||||
this._grid.connect('space-opened', Lang.bind(this,
|
||||
function() {
|
||||
this._scrollView.get_effect('fade').enabled = false;
|
||||
this.emit('space-ready');
|
||||
}));
|
||||
this._grid.connect('space-closed', Lang.bind(this,
|
||||
@@ -365,7 +359,7 @@ const AllView = new Lang.Class({
|
||||
// use the same speed regardless of original position
|
||||
// if velocity is specified, it's in pixels per milliseconds
|
||||
let diffToPage = this._diffToPage(pageNumber);
|
||||
let childBox = this._pagesBin.get_allocation_box();
|
||||
let childBox = this._scrollView.get_allocation_box();
|
||||
let totalHeight = childBox.y2 - childBox.y1;
|
||||
let time;
|
||||
// Only take the velocity into account on page changes, otherwise
|
||||
@@ -383,7 +377,7 @@ const AllView = new Lang.Class({
|
||||
|
||||
if (pageNumber < this._grid.nPages() && pageNumber >= 0) {
|
||||
this._currentPage = pageNumber;
|
||||
Tweener.addTween(this._verticalAdjustment,
|
||||
Tweener.addTween(this._adjustment,
|
||||
{ value: this._grid.getPageY(this._currentPage),
|
||||
time: time,
|
||||
transition: 'easeOutQuad' });
|
||||
@@ -392,7 +386,7 @@ const AllView = new Lang.Class({
|
||||
},
|
||||
|
||||
_diffToPage: function (pageNumber) {
|
||||
let currentScrollPosition = this._verticalAdjustment.value;
|
||||
let currentScrollPosition = this._adjustment.value;
|
||||
return Math.abs(currentScrollPosition - this._grid.getPageY(pageNumber));
|
||||
},
|
||||
|
||||
@@ -404,12 +398,13 @@ const AllView = new Lang.Class({
|
||||
|
||||
_closeSpaceForPopup: function() {
|
||||
this._updateIconOpacities(false);
|
||||
this._scrollView.get_effect('fade').enabled = true;
|
||||
this._grid.closeExtraSpace();
|
||||
},
|
||||
|
||||
_onScroll: function(actor, event) {
|
||||
if(this._displayingPopup)
|
||||
return;
|
||||
if (this._displayingPopup)
|
||||
return true;
|
||||
let direction = event.get_scroll_direction();
|
||||
if (direction == Clutter.ScrollDirection.UP) {
|
||||
if (this._currentPage > 0)
|
||||
@@ -420,6 +415,7 @@ const AllView = new Lang.Class({
|
||||
this.goToPage(this._currentPage + 1);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
_onPan: function(action) {
|
||||
@@ -428,8 +424,8 @@ const AllView = new Lang.Class({
|
||||
this._panning = true;
|
||||
this._clickAction.release();
|
||||
let [dist, dx, dy] = action.get_motion_delta(0);
|
||||
let adjustment = this._verticalAdjustment;
|
||||
adjustment.value -= (dy / this._pagesBin.height) * adjustment.page_size;
|
||||
let adjustment = this._adjustment;
|
||||
adjustment.value -= (dy / this._scrollView.height) * adjustment.page_size;
|
||||
return false;
|
||||
},
|
||||
|
||||
@@ -437,7 +433,7 @@ const AllView = new Lang.Class({
|
||||
if (this._displayingPopup)
|
||||
return;
|
||||
let diffCurrentPage = this._diffToPage(this._currentPage);
|
||||
if (diffCurrentPage > this._pagesBin.height * PAGE_SWITCH_TRESHOLD) {
|
||||
if (diffCurrentPage > this._scrollView.height * PAGE_SWITCH_TRESHOLD) {
|
||||
if (action.get_velocity(0)[2] > 0 && this._currentPage > 0)
|
||||
this.goToPage(this._currentPage - 1);
|
||||
else if (this._currentPage < this._grid.nPages() - 1)
|
||||
@@ -511,11 +507,6 @@ const AllView = new Lang.Class({
|
||||
this.goToPage(itemPage);
|
||||
},
|
||||
|
||||
_updateAdjustment: function(availHeight) {
|
||||
this._verticalAdjustment.page_size = availHeight;
|
||||
this._verticalAdjustment.upper = this._stack.height;
|
||||
},
|
||||
|
||||
_updateIconOpacities: function(folderOpen) {
|
||||
for (let id in this._items) {
|
||||
let params, opacity;
|
||||
@@ -538,18 +529,21 @@ const AllView = new Lang.Class({
|
||||
box.y1 = 0;
|
||||
box.y2 = height;
|
||||
box = this.actor.get_theme_node().get_content_box(box);
|
||||
box = this._pagesBin.get_theme_node().get_content_box(box);
|
||||
box = this._scrollView.get_theme_node().get_content_box(box);
|
||||
box = this._grid.actor.get_theme_node().get_content_box(box);
|
||||
let availWidth = box.x2 - box.x1;
|
||||
let availHeight = box.y2 - box.y1;
|
||||
let oldNPages = this._grid.nPages();
|
||||
|
||||
this._updateAdjustment(availHeight);
|
||||
|
||||
this._grid.adaptToSize(availWidth, availHeight);
|
||||
|
||||
let fadeOffset = Math.min(this._grid.topPadding,
|
||||
this._grid.bottomPadding);
|
||||
this._scrollView.update_fade_effect(fadeOffset, 0);
|
||||
this._scrollView.get_effect('fade').fade_edges = true;
|
||||
|
||||
if (this._availWidth != availWidth || this._availHeight != availHeight || oldNPages != this._grid.nPages()) {
|
||||
this._verticalAdjustment.value = 0;
|
||||
this._adjustment.value = 0;
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
|
||||
function() {
|
||||
this._pageIndicators.setNPages(this._grid.nPages());
|
||||
@@ -962,11 +956,19 @@ const FolderView = new Lang.Class({
|
||||
|
||||
this._grid.adaptToSize(width, height);
|
||||
|
||||
// To avoid the fade effect being applied to the unscrolled grid,
|
||||
// the offset would need to be applied after adjusting the padding;
|
||||
// however the final padding is expected to be too small for the
|
||||
// effect to look good, so use the unadjusted padding
|
||||
let fadeOffset = Math.min(this._grid.topPadding,
|
||||
this._grid.bottomPadding);
|
||||
this.actor.update_fade_effect(fadeOffset, 0);
|
||||
|
||||
// Set extra padding to avoid popup or close button being cut off
|
||||
this._grid.topPadding = Math.max(this._grid.topPadding - this._offsetForEachSide, 0);
|
||||
this._grid.bottomPadding = Math.max(this._grid.topPadding - this._offsetForEachSide, 0);
|
||||
this._grid.leftPadding = Math.max(this._grid.topPadding - this._offsetForEachSide, 0);
|
||||
this._grid.rightPadding = Math.max(this._grid.topPadding - this._offsetForEachSide, 0);
|
||||
this._grid.bottomPadding = Math.max(this._grid.bottomPadding - this._offsetForEachSide, 0);
|
||||
this._grid.leftPadding = Math.max(this._grid.leftPadding - this._offsetForEachSide, 0);
|
||||
this._grid.rightPadding = Math.max(this._grid.rightPadding - this._offsetForEachSide, 0);
|
||||
|
||||
this.actor.set_width(this.usedWidth());
|
||||
this.actor.set_height(this.usedHeight());
|
||||
@@ -1074,9 +1076,9 @@ const FolderIcon = new Lang.Class({
|
||||
// StWidget delays style calculation until needed, make sure we use the correct values
|
||||
this.view._grid.actor.ensure_style();
|
||||
|
||||
let offsetForEachSide = (this._popup.getOffset(St.Side.TOP) +
|
||||
this._popup.getOffset(St.Side.BOTTOM) -
|
||||
this._popup.getCloseButtonOverlap()) / 2;
|
||||
let offsetForEachSide = Math.ceil((this._popup.getOffset(St.Side.TOP) +
|
||||
this._popup.getOffset(St.Side.BOTTOM) -
|
||||
this._popup.getCloseButtonOverlap()) / 2);
|
||||
// Add extra padding to prevent boxpointer decorations and close button being cut off
|
||||
this.view.setPaddingOffsets(offsetForEachSide);
|
||||
this.view.adaptToSize(this._parentAvailableWidth, this._parentAvailableHeight);
|
||||
|
10
js/ui/dnd.js
10
js/ui/dnd.js
@@ -517,11 +517,6 @@ const _Draggable = new Lang.Class({
|
||||
},
|
||||
|
||||
_cancelDrag: function(eventTime) {
|
||||
if (this._updateHoverId) {
|
||||
GLib.source_remove(this._updateHoverId);
|
||||
this._updateHoverId = 0;
|
||||
}
|
||||
|
||||
this.emit('drag-cancelled', eventTime);
|
||||
this._dragInProgress = false;
|
||||
let [snapBackX, snapBackY, snapBackScale] = this._getRestoreLocation();
|
||||
@@ -617,6 +612,11 @@ const _Draggable = new Lang.Class({
|
||||
this._lastEnterActor = null;
|
||||
}
|
||||
|
||||
if (this._updateHoverId) {
|
||||
GLib.source_remove(this._updateHoverId);
|
||||
this._updateHoverId = 0;
|
||||
}
|
||||
|
||||
this._dragActor = undefined;
|
||||
currentDraggable = null;
|
||||
}
|
||||
|
64
js/ui/focusCaretTracker.js
Normal file
64
js/ui/focusCaretTracker.js
Normal file
@@ -0,0 +1,64 @@
|
||||
/** -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
/*
|
||||
* Copyright 2012 Inclusive Design Research Centre, OCAD University.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author:
|
||||
* Joseph Scheuhammer <clown@alum.mit.edu>
|
||||
* Contributor:
|
||||
* Magdalen Berns <m.berns@sms.ed.ac.uk>
|
||||
*/
|
||||
|
||||
const Atspi = imports.gi.Atspi;
|
||||
const Lang = imports.lang;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const CARETMOVED = 'object:text-caret-moved';
|
||||
const STATECHANGED = 'object:state-changed';
|
||||
|
||||
const FocusCaretTracker = new Lang.Class({
|
||||
Name: 'FocusCaretTracker',
|
||||
|
||||
_init: function() {
|
||||
Atspi.init();
|
||||
this._atspiListener = Atspi.EventListener.new(Lang.bind(this, this._onChanged));
|
||||
},
|
||||
|
||||
_onChanged: function(event) {
|
||||
if (event.type.indexOf(STATECHANGED) == 0)
|
||||
this.emit('focus-changed', event);
|
||||
else if (event.type == CARETMOVED)
|
||||
this.emit('caret-moved', event);
|
||||
},
|
||||
|
||||
registerFocusListener: function() {
|
||||
return this._atspiListener.register(STATECHANGED + ':focused') &&
|
||||
this._atspiListener.register(STATECHANGED + ':selected');
|
||||
},
|
||||
|
||||
registerCaretListener: function() {
|
||||
return this._atspiListener.register(CARETMOVED);
|
||||
},
|
||||
|
||||
deregisterFocusListener: function() {
|
||||
return this._atspiListener.deregister(STATECHANGED + ':focused') &&
|
||||
this._atspiListener.deregister(STATECHANGED + ':selected');
|
||||
},
|
||||
|
||||
deregisterCaretListener: function() {
|
||||
return this._atspiListener.deregister(CARETMOVED);
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(FocusCaretTracker.prototype);
|
@@ -533,6 +533,9 @@ const PaginatedIconGrid = new Lang.Class({
|
||||
_init: function(params) {
|
||||
this.parent(params);
|
||||
this._nPages = 0;
|
||||
this._rowsPerPage = 0;
|
||||
this._spaceBetweenPages = 0;
|
||||
this._childrenPerPage = 0;
|
||||
},
|
||||
|
||||
_getPreferredHeight: function (grid, forWidth, alloc) {
|
||||
@@ -697,7 +700,7 @@ const PaginatedIconGrid = new Lang.Class({
|
||||
},
|
||||
|
||||
_translateChildren: function(children, direction, nRows) {
|
||||
let translationY = nRows * (this._vItemSize + this._getSpacing());
|
||||
let translationY = nRows * (this._getVItemSize() + this._getSpacing());
|
||||
if (translationY == 0)
|
||||
return;
|
||||
|
||||
|
@@ -920,7 +920,7 @@ const LookingGlass = new Lang.Class({
|
||||
let text = o.get_text();
|
||||
// Ensure we don't get newlines in the command; the history file is
|
||||
// newline-separated.
|
||||
text.replace('\n', ' ');
|
||||
text = text.replace('\n', ' ');
|
||||
// Strip leading and trailing whitespace
|
||||
text = text.replace(/^\s+/g, '').replace(/\s+$/g, '');
|
||||
if (text == '')
|
||||
|
@@ -1,5 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Atspi = imports.gi.Atspi;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const GDesktopEnums = imports.gi.GDesktopEnums;
|
||||
const Gio = imports.gi.Gio;
|
||||
@@ -10,6 +11,7 @@ const Mainloop = imports.mainloop;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const FocusCaretTracker = imports.ui.focusCaretTracker;
|
||||
const Main = imports.ui.main;
|
||||
const MagnifierDBus = imports.ui.magnifierDBus;
|
||||
const Params = imports.misc.params;
|
||||
@@ -37,6 +39,8 @@ const CONTRAST_BLUE_KEY = 'contrast-blue';
|
||||
const LENS_MODE_KEY = 'lens-mode';
|
||||
const CLAMP_MODE_KEY = 'scroll-at-edges';
|
||||
const MOUSE_TRACKING_KEY = 'mouse-tracking';
|
||||
const FOCUS_TRACKING_KEY = 'focus-tracking';
|
||||
const CARET_TRACKING_KEY = 'caret-tracking';
|
||||
const SHOW_CROSS_HAIRS_KEY = 'show-cross-hairs';
|
||||
const CROSS_HAIRS_THICKNESS_KEY = 'cross-hairs-thickness';
|
||||
const CROSS_HAIRS_COLOR_KEY = 'cross-hairs-color';
|
||||
@@ -449,6 +453,14 @@ const Magnifier = new Lang.Class({
|
||||
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);
|
||||
@@ -488,6 +500,10 @@ const Magnifier = new Lang.Class({
|
||||
Lang.bind(this, this._updateClampMode));
|
||||
this._settings.connect('changed::' + MOUSE_TRACKING_KEY,
|
||||
Lang.bind(this, this._updateMouseTrackingMode));
|
||||
this._settings.connect('changed::' + FOCUS_TRACKING_KEY,
|
||||
Lang.bind(this, this._updateFocusTrackingMode));
|
||||
this._settings.connect('changed::' + CARET_TRACKING_KEY,
|
||||
Lang.bind(this, this._updateCaretTrackingMode));
|
||||
|
||||
this._settings.connect('changed::' + INVERT_LIGHTNESS_KEY,
|
||||
Lang.bind(this, this._updateInvertLightness));
|
||||
@@ -585,6 +601,24 @@ const Magnifier = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
_updateFocusTrackingMode: function() {
|
||||
// Applies only to the first zoom region.
|
||||
if (this._zoomRegions.length) {
|
||||
this._zoomRegions[0].setFocusTrackingMode(
|
||||
this._settings.get_enum(FOCUS_TRACKING_KEY)
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
_updateCaretTrackingMode: function() {
|
||||
// Applies only to the first zoom region.
|
||||
if (this._zoomRegions.length) {
|
||||
this._zoomRegions[0].setCaretTrackingMode(
|
||||
this._settings.get_enum(CARET_TRACKING_KEY)
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
_updateInvertLightness: function() {
|
||||
// Applies only to the first zoom region.
|
||||
if (this._zoomRegions.length) {
|
||||
@@ -623,7 +657,7 @@ const Magnifier = new Lang.Class({
|
||||
contrast.b = this._settings.get_double(CONTRAST_BLUE_KEY);
|
||||
this._zoomRegions[0].setContrast(contrast);
|
||||
}
|
||||
},
|
||||
}
|
||||
});
|
||||
Signals.addSignalMethods(Magnifier.prototype);
|
||||
|
||||
@@ -632,8 +666,11 @@ const ZoomRegion = new Lang.Class({
|
||||
|
||||
_init: function(magnifier, mouseSourceActor) {
|
||||
this._magnifier = magnifier;
|
||||
this._focusCaretTracker = new FocusCaretTracker.FocusCaretTracker();
|
||||
|
||||
this._mouseTrackingMode = GDesktopEnums.MagnifierMouseTrackingMode.NONE;
|
||||
this._focusTrackingMode = GDesktopEnums.MagnifierFocusTrackingMode.NONE;
|
||||
this._caretTrackingMode = GDesktopEnums.MagnifierCaretTrackingMode.NONE;
|
||||
this._clampScrollingAtEdges = false;
|
||||
this._lensMode = false;
|
||||
this._screenPosition = GDesktopEnums.MagnifierScreenPosition.FULL_SCREEN;
|
||||
@@ -659,9 +696,35 @@ const ZoomRegion = new Lang.Class({
|
||||
this._xMagFactor = 1;
|
||||
this._yMagFactor = 1;
|
||||
this._followingCursor = false;
|
||||
this._xFocus = 0;
|
||||
this._yFocus = 0;
|
||||
this._xCaret = 0;
|
||||
this._yCaret = 0;
|
||||
|
||||
Main.layoutManager.connect('monitors-changed',
|
||||
Lang.bind(this, this._monitorsChanged));
|
||||
this._focusCaretTracker.connect('caret-moved',
|
||||
Lang.bind(this, this._updateCaret));
|
||||
this._focusCaretTracker.connect('focus-changed',
|
||||
Lang.bind(this, this._updateFocus));
|
||||
},
|
||||
|
||||
_updateFocus: function(caller, event) {
|
||||
let component = event.source.get_component_iface();
|
||||
if (!component || event.detail1 != 1)
|
||||
return;
|
||||
let extents = component.get_extents(Atspi.CoordType.SCREEN);
|
||||
[this._xFocus, this._yFocus] = [extents.x, extents.y]
|
||||
this._centerFromFocusPosition();
|
||||
},
|
||||
|
||||
_updateCaret: function(caller, event) {
|
||||
let text = event.source.get_text_iface();
|
||||
if (!text)
|
||||
return;
|
||||
let extents = text.get_character_extents(text.get_caret_offset(), 0);
|
||||
[this._xCaret, this._yCaret] = [extents.x, extents.y];
|
||||
this._centerFromCaretPosition();
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -732,6 +795,30 @@ const ZoomRegion = new Lang.Class({
|
||||
return this._mouseTrackingMode;
|
||||
},
|
||||
|
||||
/**
|
||||
* setFocusTrackingMode
|
||||
* @mode: One of the enum FocusTrackingMode values.
|
||||
*/
|
||||
setFocusTrackingMode: function(mode) {
|
||||
this._focusTrackingMode = mode;
|
||||
if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.NONE)
|
||||
this._focusCaretTracker.deregisterFocusListener();
|
||||
else
|
||||
this._focusCaretTracker.registerFocusListener();
|
||||
},
|
||||
|
||||
/**
|
||||
* setCaretTrackingMode
|
||||
* @mode: One of the enum CaretTrackingMode values.
|
||||
*/
|
||||
setCaretTrackingMode: function(mode) {
|
||||
this._caretTrackingMode = mode;
|
||||
if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.NONE)
|
||||
this._focusCaretTracker.deregisterCaretListener();
|
||||
else
|
||||
this._focusCaretTracker.registerCaretListener();
|
||||
},
|
||||
|
||||
/**
|
||||
* setViewPort
|
||||
* Sets the position and size of the ZoomRegion on screen.
|
||||
@@ -1023,20 +1110,6 @@ const ZoomRegion = new Lang.Class({
|
||||
this._magShaderEffects.setBrightness(this._brightness);
|
||||
},
|
||||
|
||||
/**
|
||||
* getBrightness:
|
||||
* Retrive the current brightness of the Zoom Region.
|
||||
* @return Object containing the brightness change for the red, green,
|
||||
* and blue channels.
|
||||
*/
|
||||
getBrightness: function() {
|
||||
let brightness = {};
|
||||
brightness.r = this._brightness.r;
|
||||
brightness.g = this._brightness.g;
|
||||
brightness.b = this._brightness.b;
|
||||
return brightness;
|
||||
},
|
||||
|
||||
/**
|
||||
* setContrast:
|
||||
* Alter the contrast of the magnified view.
|
||||
@@ -1243,19 +1316,47 @@ const ZoomRegion = new Lang.Class({
|
||||
let yMouse = this._magnifier.yMouse;
|
||||
|
||||
if (this._mouseTrackingMode == GDesktopEnums.MagnifierMouseTrackingMode.PROPORTIONAL) {
|
||||
return this._centerFromMouseProportional(xMouse, yMouse);
|
||||
return this._centerFromPointProportional(xMouse, yMouse);
|
||||
}
|
||||
else if (this._mouseTrackingMode == GDesktopEnums.MagnifierMouseTrackingMode.PUSH) {
|
||||
return this._centerFromMousePush(xMouse, yMouse);
|
||||
return this._centerFromPointPush(xMouse, yMouse);
|
||||
}
|
||||
else if (this._mouseTrackingMode == GDesktopEnums.MagnifierMouseTrackingMode.CENTERED) {
|
||||
return this._centerFromMouseCentered(xMouse, yMouse);
|
||||
return this._centerFromPointCentered(xMouse, yMouse);
|
||||
}
|
||||
|
||||
return null; // Should never be hit
|
||||
},
|
||||
|
||||
_centerFromMousePush: function(xMouse, yMouse) {
|
||||
_centerFromCaretPosition: function() {
|
||||
let xCaret = this._xCaret;
|
||||
let yCaret = this._yCaret;
|
||||
|
||||
if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.PROPORTIONAL)
|
||||
[xCaret, yCaret] = this._centerFromPointProportional(xCaret, yCaret);
|
||||
else if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.PUSH)
|
||||
[xCaret, yCaret] = this._centerFromPointPush(xCaret, yCaret);
|
||||
else if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.CENTERED)
|
||||
[xCaret, yCaret] = this._centerFromPointCentered(xCaret, yCaret);
|
||||
|
||||
this.scrollContentsTo(xCaret, yCaret);
|
||||
},
|
||||
|
||||
_centerFromFocusPosition: function() {
|
||||
let xFocus = this._xFocus;
|
||||
let yFocus = this._yFocus;
|
||||
|
||||
if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.PROPORTIONAL)
|
||||
[xFocus, yFocus] = this._centerFromPointProportional(xFocus, yFocus);
|
||||
else if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.PUSH)
|
||||
[xFocus, yFocus] = this._centerFromPointPush(xFocus, yFocus);
|
||||
else if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.CENTERED)
|
||||
[xFocus, yFocus] = this._centerFromPointCentered(xFocus, yFocus);
|
||||
|
||||
this.scrollContentsTo(xFocus, yFocus);
|
||||
},
|
||||
|
||||
_centerFromPointPush: function(xPoint, yPoint) {
|
||||
let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI();
|
||||
let [cursorWidth, cursorHeight] = this._mouseSourceActor.get_size();
|
||||
let xPos = xRoi + widthRoi / 2;
|
||||
@@ -1263,20 +1364,20 @@ const ZoomRegion = new Lang.Class({
|
||||
let xRoiRight = xRoi + widthRoi - cursorWidth;
|
||||
let yRoiBottom = yRoi + heightRoi - cursorHeight;
|
||||
|
||||
if (xMouse < xRoi)
|
||||
xPos -= (xRoi - xMouse);
|
||||
else if (xMouse > xRoiRight)
|
||||
xPos += (xMouse - xRoiRight);
|
||||
if (xPoint < xRoi)
|
||||
xPos -= (xRoi - xPoint);
|
||||
else if (xPoint > xRoiRight)
|
||||
xPos += (xPoint - xRoiRight);
|
||||
|
||||
if (yMouse < yRoi)
|
||||
yPos -= (yRoi - yMouse);
|
||||
else if (yMouse > yRoiBottom)
|
||||
yPos += (yMouse - yRoiBottom);
|
||||
if (yPoint < yRoi)
|
||||
yPos -= (yRoi - yPoint);
|
||||
else if (yPoint > yRoiBottom)
|
||||
yPos += (yPoint - yRoiBottom);
|
||||
|
||||
return [xPos, yPos];
|
||||
},
|
||||
|
||||
_centerFromMouseProportional: function(xMouse, yMouse) {
|
||||
_centerFromPointProportional: function(xPoint, yPoint) {
|
||||
let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI();
|
||||
let halfScreenWidth = global.screen_width / 2;
|
||||
let halfScreenHeight = global.screen_height / 2;
|
||||
@@ -1285,16 +1386,16 @@ const ZoomRegion = new Lang.Class({
|
||||
let unscaledPadding = Math.min(this._viewPortWidth, this._viewPortHeight) / 5;
|
||||
let xPadding = unscaledPadding / this._xMagFactor;
|
||||
let yPadding = unscaledPadding / this._yMagFactor;
|
||||
let xProportion = (xMouse - halfScreenWidth) / halfScreenWidth; // -1 ... 1
|
||||
let yProportion = (yMouse - halfScreenHeight) / halfScreenHeight; // -1 ... 1
|
||||
let xPos = xMouse - xProportion * (widthRoi / 2 - xPadding);
|
||||
let yPos = yMouse - yProportion * (heightRoi /2 - yPadding);
|
||||
let xProportion = (xPoint - halfScreenWidth) / halfScreenWidth; // -1 ... 1
|
||||
let yProportion = (yPoint - halfScreenHeight) / halfScreenHeight; // -1 ... 1
|
||||
let xPos = xPoint - xProportion * (widthRoi / 2 - xPadding);
|
||||
let yPos = yPoint - yProportion * (heightRoi /2 - yPadding);
|
||||
|
||||
return [xPos, yPos];
|
||||
},
|
||||
|
||||
_centerFromMouseCentered: function(xMouse, yMouse) {
|
||||
return [xMouse, yMouse];
|
||||
_centerFromPointCentered: function(xPoint, yPoint) {
|
||||
return [xPoint, yPoint];
|
||||
},
|
||||
|
||||
_screenToViewPort: function(screenX, screenY) {
|
||||
@@ -1511,15 +1612,6 @@ const Crosshairs = new Lang.Class({
|
||||
this._vertBottomHair.set_opacity(opacity);
|
||||
},
|
||||
|
||||
/**
|
||||
* getOpacity:
|
||||
* Retriev how opaque the crosshairs are.
|
||||
* @return: A value between 0 (transparent) and 255 (opaque).
|
||||
*/
|
||||
getOpacity: function() {
|
||||
return this._horizLeftHair.get_opacity();
|
||||
},
|
||||
|
||||
/**
|
||||
* setLength:
|
||||
* Set the length of the vertical and horizontal lines in the crosshairs.
|
||||
@@ -1563,15 +1655,6 @@ const Crosshairs = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* getClip:
|
||||
* Get the dimensions of the clip rectangle.
|
||||
* @return: An array of the form [width, height].
|
||||
*/
|
||||
getClip: function() {
|
||||
return this._clipSize;
|
||||
},
|
||||
|
||||
/**
|
||||
* show:
|
||||
* Show the crosshairs.
|
||||
@@ -1667,23 +1750,10 @@ const MagShaderEffects = new Lang.Class({
|
||||
this._inverse.set_enabled(invertFlag);
|
||||
},
|
||||
|
||||
/**
|
||||
* getInvertLightness:
|
||||
* Report whether the inversion effect is enabled.
|
||||
* @return: Boolean.
|
||||
*/
|
||||
getInvertLightness: function() {
|
||||
return this._inverse.get_enabled();
|
||||
},
|
||||
|
||||
setColorSaturation: function(factor) {
|
||||
this._colorDesaturation.set_factor(1.0 - factor);
|
||||
},
|
||||
|
||||
getColorSaturation: function() {
|
||||
return 1.0 - this._colorDesaturation.get_factor();
|
||||
},
|
||||
|
||||
/**
|
||||
* setBrightness:
|
||||
* Set the brightness of the magnified view.
|
||||
@@ -1708,24 +1778,6 @@ const MagShaderEffects = new Lang.Class({
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* getBrightness:
|
||||
* Retrieve current brightness of the magnified view.
|
||||
* @return: Object containing the brightness for the red, green,
|
||||
* and blue channels. Values of 0.0 represent "standard"
|
||||
* brightness (no change), whereas values less or greater than
|
||||
* 0.0 indicate decreased or incresaed brightness, respectively.
|
||||
*/
|
||||
getBrightness: function() {
|
||||
let result = {};
|
||||
let [bRed, bGreen, bBlue] = this._brightnessContrast.get_brightness();
|
||||
result.r = bRed;
|
||||
result.g = bGreen;
|
||||
result.b = bBlue;
|
||||
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* Set the contrast of the magnified view.
|
||||
* @contrast: Object containing the contrast for the red, green,
|
||||
@@ -1750,21 +1802,4 @@ const MagShaderEffects = new Lang.Class({
|
||||
bRed != NO_CHANGE || bGreen != NO_CHANGE || bBlue != NO_CHANGE
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Retrieve current contrast of the magnified view.
|
||||
* @return: Object containing the contrast for the red, green,
|
||||
* and blue channels. Values of 0.0 represent "standard"
|
||||
* contrast (no change), whereas values less or greater than
|
||||
* 0.0 indicate decreased or incresaed contrast, respectively.
|
||||
*/
|
||||
getContrast: function() {
|
||||
let resutl = {};
|
||||
let [cRed, cGreen, cBlue] = this._brightnessContrast.get_contrast();
|
||||
result.r = cRed;
|
||||
result.g = cGreen;
|
||||
result.b = cBlue;
|
||||
|
||||
return result;
|
||||
}
|
||||
});
|
||||
|
@@ -4,14 +4,12 @@ const Gio = imports.gi.Gio;
|
||||
const Lang = imports.lang;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const MAG_SERVICE_NAME = 'org.gnome.Magnifier';
|
||||
const MAG_SERVICE_PATH = '/org/gnome/Magnifier';
|
||||
const ZOOM_SERVICE_NAME = 'org.gnome.Magnifier.ZoomRegion';
|
||||
const ZOOM_SERVICE_PATH = '/org/gnome/Magnifier/ZoomRegion';
|
||||
|
||||
// Subset of gnome-mag's Magnifier dbus interface -- to be expanded. See:
|
||||
// http://git.gnome.org/browse/gnome-mag/tree/xml/...Magnifier.xml
|
||||
const MagnifierIface = <interface name={MAG_SERVICE_NAME}>
|
||||
const MagnifierIface = <interface name="org.gnome.Magnifier">
|
||||
<method name="setActive">
|
||||
<arg type="b" direction="in" />
|
||||
</method>
|
||||
@@ -66,7 +64,7 @@ const MagnifierIface = <interface name={MAG_SERVICE_NAME}>
|
||||
|
||||
// Subset of gnome-mag's ZoomRegion dbus interface -- to be expanded. See:
|
||||
// http://git.gnome.org/browse/gnome-mag/tree/xml/...ZoomRegion.xml
|
||||
const ZoomRegionIface = <interface name={ZOOM_SERVICE_NAME}>
|
||||
const ZoomRegionIface = <interface name="org.gnome.Magnifier.ZoomRegion">
|
||||
<method name="setMagFactor">
|
||||
<arg type="d" direction="in" />
|
||||
<arg type="d" direction="in" />
|
||||
|
@@ -2732,6 +2732,7 @@ const MessageTray = new Lang.Class({
|
||||
|
||||
_onSummaryBoxPointerUngrabbed: function() {
|
||||
this._summaryBoxPointerState = State.HIDING;
|
||||
this._setClickedSummaryItem(null);
|
||||
|
||||
if (this._summaryBoxPointerContentUpdatedId) {
|
||||
this._summaryBoxPointerItem.disconnect(this._summaryBoxPointerContentUpdatedId);
|
||||
|
@@ -249,6 +249,7 @@ const AppMenuButton = new Lang.Class({
|
||||
this._visible = true;
|
||||
this.actor.reactive = true;
|
||||
this.actor.show();
|
||||
Tweener.removeTweens(this.actor);
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 255,
|
||||
time: Overview.ANIMATION_TIME,
|
||||
@@ -261,6 +262,7 @@ const AppMenuButton = new Lang.Class({
|
||||
|
||||
this._visible = false;
|
||||
this.actor.reactive = false;
|
||||
Tweener.removeTweens(this.actor);
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 0,
|
||||
time: Overview.ANIMATION_TIME,
|
||||
@@ -809,7 +811,12 @@ const AggregateMenu = new Lang.Class({
|
||||
this.actor.add_child(this._indicators);
|
||||
|
||||
this._network = new imports.ui.status.network.NMApplet();
|
||||
this._bluetooth = new imports.ui.status.bluetooth.Indicator();
|
||||
if (Config.HAVE_BLUETOOTH) {
|
||||
this._bluetooth = new imports.ui.status.bluetooth.Indicator();
|
||||
} else {
|
||||
this._bluetooth = null;
|
||||
}
|
||||
|
||||
this._power = new imports.ui.status.power.Indicator();
|
||||
this._rfkill = new imports.ui.status.rfkill.Indicator();
|
||||
this._volume = new imports.ui.status.volume.Indicator();
|
||||
@@ -819,7 +826,9 @@ const AggregateMenu = new Lang.Class({
|
||||
|
||||
this._indicators.add_child(this._screencast.indicators);
|
||||
this._indicators.add_child(this._network.indicators);
|
||||
this._indicators.add_child(this._bluetooth.indicators);
|
||||
if (this._bluetooth) {
|
||||
this._indicators.add_child(this._bluetooth.indicators);
|
||||
}
|
||||
this._indicators.add_child(this._rfkill.indicators);
|
||||
this._indicators.add_child(this._volume.indicators);
|
||||
this._indicators.add_child(this._power.indicators);
|
||||
@@ -831,7 +840,9 @@ const AggregateMenu = new Lang.Class({
|
||||
this.menu.addMenuItem(this._brightness.menu);
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addMenuItem(this._network.menu);
|
||||
this.menu.addMenuItem(this._bluetooth.menu);
|
||||
if (this._bluetooth) {
|
||||
this.menu.addMenuItem(this._bluetooth.menu);
|
||||
}
|
||||
this.menu.addMenuItem(this._rfkill.menu);
|
||||
this.menu.addMenuItem(this._power.menu);
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
|
@@ -35,6 +35,13 @@ function _ensureStyle(actor) {
|
||||
actor.ensure_style();
|
||||
}
|
||||
|
||||
function isPopupMenuItemVisible(child) {
|
||||
if (child._delegate instanceof PopupMenuSection)
|
||||
if (child._delegate.isEmpty())
|
||||
return false;
|
||||
return child.visible;
|
||||
}
|
||||
|
||||
const PopupBaseMenuItem = new Lang.Class({
|
||||
Name: 'PopupBaseMenuItem',
|
||||
|
||||
@@ -437,7 +444,7 @@ const PopupMenuBase = new Lang.Class({
|
||||
let hasVisibleChildren = this.box.get_children().some(function(child) {
|
||||
if (child._delegate instanceof PopupSeparatorMenuItem)
|
||||
return false;
|
||||
return child.visible;
|
||||
return isPopupMenuItemVisible(child);
|
||||
});
|
||||
|
||||
return !hasVisibleChildren;
|
||||
@@ -518,7 +525,7 @@ const PopupMenuBase = new Lang.Class({
|
||||
|
||||
let childBeforeIndex = index - 1;
|
||||
|
||||
while (childBeforeIndex >= 0 && !children[childBeforeIndex].visible)
|
||||
while (childBeforeIndex >= 0 && !isPopupMenuItemVisible(children[childBeforeIndex]))
|
||||
childBeforeIndex--;
|
||||
|
||||
if (childBeforeIndex < 0
|
||||
@@ -529,7 +536,7 @@ const PopupMenuBase = new Lang.Class({
|
||||
|
||||
let childAfterIndex = index + 1;
|
||||
|
||||
while (childAfterIndex < children.length && !children[childAfterIndex].visible)
|
||||
while (childAfterIndex < children.length && !isPopupMenuItemVisible(children[childAfterIndex]))
|
||||
childAfterIndex++;
|
||||
|
||||
if (childAfterIndex >= children.length
|
||||
@@ -921,19 +928,10 @@ const PopupMenuSection = new Lang.Class({
|
||||
this.isOpen = true;
|
||||
},
|
||||
|
||||
_syncVisibility: function() {
|
||||
this.actor.visible = !this.isEmpty();
|
||||
},
|
||||
|
||||
// deliberately ignore any attempt to open() or close(), but emit the
|
||||
// corresponding signal so children can still pick it up
|
||||
open: function() {
|
||||
this._syncVisibility();
|
||||
this.emit('open-state-changed', true);
|
||||
},
|
||||
close: function() {
|
||||
this.emit('open-state-changed', false);
|
||||
},
|
||||
open: function() { this.emit('open-state-changed', true); },
|
||||
close: function() { this.emit('open-state-changed', false); },
|
||||
});
|
||||
|
||||
const PopupSubMenuMenuItem = new Lang.Class({
|
||||
|
@@ -41,8 +41,7 @@ const MAX_INPUT_SOURCE_ACTIVATION_TIME = 4000; // ms
|
||||
const BUS_NAME = 'org.gnome.SettingsDaemon.Keyboard';
|
||||
const OBJECT_PATH = '/org/gnome/SettingsDaemon/Keyboard';
|
||||
|
||||
const KeyboardManagerInterface =
|
||||
<interface name="org.gnome.SettingsDaemon.Keyboard">
|
||||
const KeyboardManagerInterface = <interface name="org.gnome.SettingsDaemon.Keyboard">
|
||||
<method name="SetInputSource">
|
||||
<arg type="u" direction="in" />
|
||||
</method>
|
||||
|
@@ -244,7 +244,7 @@ const NMConnectionSection = new Lang.Class({
|
||||
this.emit('activation-failed', reason);
|
||||
}));
|
||||
|
||||
let pos = Util.insertSorted(this._connections, connection, this._connectionSortFunction);
|
||||
let pos = Util.insertSorted(this._connections, connection, Lang.bind(this, this._connectionSortFunction));
|
||||
this._labelSection.addMenuItem(item.labelItem, pos);
|
||||
this._switchSection.addMenuItem(item.switchItem, pos);
|
||||
this._connectionItems.set(connection.get_uuid(), item);
|
||||
|
@@ -74,12 +74,12 @@ const Indicator = new Lang.Class({
|
||||
|
||||
if (state == UPower.DeviceState.DISCHARGING) {
|
||||
// Translators: this is <hours>:<minutes> Remaining (<percentage>)
|
||||
return _("%d\u2236%02d Remaining (%d%%)".format(hours, minutes, percentage));
|
||||
return _("%d\u2236%02d Remaining (%d%%)").format(hours, minutes, percentage);
|
||||
}
|
||||
|
||||
if (state == UPower.DeviceState.CHARGING) {
|
||||
// Translators: this is <hours>:<minutes> Until Full (<percentage>)
|
||||
return _("%d\u2236%02d Until Full (%d%%)".format(hours, minutes, percentage));
|
||||
return _("%d\u2236%02d Until Full (%d%%)").format(hours, minutes, percentage);
|
||||
}
|
||||
|
||||
// state is one of PENDING_CHARGING, PENDING_DISCHARGING
|
||||
|
@@ -85,8 +85,12 @@ const ViewSelector = new Lang.Class({
|
||||
|
||||
this._entry.set_primary_icon(new St.Icon({ style_class: 'search-entry-icon',
|
||||
icon_name: 'edit-find-symbolic' }));
|
||||
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
|
||||
icon_name: 'edit-clear-symbolic' });
|
||||
if (this._entry.get_text_direction() == Clutter.TextDirection.RTL)
|
||||
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
|
||||
icon_name: 'edit-clear-rtl-symbolic' });
|
||||
else
|
||||
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
|
||||
icon_name: 'edit-clear-symbolic' });
|
||||
|
||||
this._iconClickedId = 0;
|
||||
this._capturedEventId = 0;
|
||||
|
@@ -1434,6 +1434,10 @@ const Workspace = new Lang.Class({
|
||||
|
||||
if (this._positionWindowsId > 0)
|
||||
Meta.later_remove(this._positionWindowsId);
|
||||
|
||||
if (this._actualGeometryLater > 0)
|
||||
Meta.later_remove(this._actualGeometryLater);
|
||||
|
||||
this._windows = [];
|
||||
},
|
||||
|
||||
|
@@ -540,12 +540,6 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].destroy();
|
||||
this._workspacesViews = [];
|
||||
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
for (let w = 0; w < this._workspaces[i].length; w++) {
|
||||
this._workspaces[i][w].disconnectAll();
|
||||
this._workspaces[i][w].destroy();
|
||||
}
|
||||
},
|
||||
|
||||
_workspacesOnlyOnPrimaryChanged: function() {
|
||||
@@ -561,10 +555,6 @@ const WorkspacesDisplay = new Lang.Class({
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].destroy();
|
||||
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
for (let w = 0; w < this._workspaces[i].length; w++)
|
||||
this._workspaces[i][w].destroy();
|
||||
|
||||
this._workspacesViews = [];
|
||||
this._workspaces = [];
|
||||
let monitors = Main.layoutManager.monitors;
|
||||
|
30
po/be.po
30
po/be.po
@@ -5,7 +5,7 @@ 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-08-31 16:55+0000\n"
|
||||
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
|
||||
"PO-Revision-Date: 2012-10-16 12:05+0300\n"
|
||||
"Last-Translator: Kasia Bondarava <kasia.bondarava@gmail.com>\n"
|
||||
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
|
||||
@@ -352,23 +352,27 @@ msgstr "Не ўдалося разабраць загад:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Не ўдалося выканаць \"%s\":"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../js/ui/appDisplay.js:578
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Тут размешчаныя часта ўжываныя праграмы"
|
||||
|
||||
#: ../js/ui/appDisplay.js:694
|
||||
msgid "Frequent"
|
||||
msgstr "Часта"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:701
|
||||
msgid "All"
|
||||
msgstr "Усе"
|
||||
|
||||
#: ../js/ui/appDisplay.js:991
|
||||
#: ../js/ui/appDisplay.js:1488
|
||||
msgid "New Window"
|
||||
msgstr "Новае акно"
|
||||
|
||||
#: ../js/ui/appDisplay.js:994 ../js/ui/dash.js:284
|
||||
#: ../js/ui/appDisplay.js:1491 ../js/ui/dash.js:284
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Выдаліць са спіса ўпадабанага"
|
||||
|
||||
#: ../js/ui/appDisplay.js:995
|
||||
#: ../js/ui/appDisplay.js:1492
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Дадаць у спіс упадабанага"
|
||||
|
||||
@@ -1023,9 +1027,12 @@ msgstr "Перазапуск і ўсталяванне абнаўленняў"
|
||||
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 секунд."
|
||||
msgstr[0] ""
|
||||
"Сістэма аўтаматычна перазапусціцца і ўсталюе абнаўленні праз %d секунду."
|
||||
msgstr[1] ""
|
||||
"Сістэма аўтаматычна перазапусціцца і ўсталюе абнаўленні праз %d секунды."
|
||||
msgstr[2] ""
|
||||
"Сістэма аўтаматычна перазапусціцца і ўсталюе абнаўленні праз %d секунд."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:119
|
||||
msgctxt "button"
|
||||
@@ -1246,11 +1253,11 @@ msgstr "Не ўдалося заблакіраваць"
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Блакіраванне стрымана праграмай"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Пошук..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "Нічога не знойдзена."
|
||||
|
||||
@@ -1701,4 +1708,3 @@ msgstr "Пароль не можа быць пустым"
|
||||
#: ../src/shell-polkit-authentication-agent.c:343
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Карыстальнік праігнараваў дыялогавае акенца ідэнтыфікацыі"
|
||||
|
||||
|
379
po/de.po
379
po/de.po
@@ -11,25 +11,25 @@
|
||||
# Jakob Kramer <jakob.kramer@gmx.de>, 2010.
|
||||
# Paul Seyfert <pseyfert@mathphys.fsk.uni-heidelberg.de>, 2010, 2011.
|
||||
# Wolfgang Stöggl <c72578@yahoo.de>, 2012.
|
||||
# Tobias Endrigkeit <tobiasendrigkeit@googlemail.com>, 2012, 2013.
|
||||
# Christian Kirbach <christian.kirbach@gmail.com>, 2009, 2010, 2011, 2012, 2013.
|
||||
# Benjamin Steinwender <b@stbe.at>, 2013.
|
||||
# Tobias Endrigkeit <tobiasendrigkeit@outlook.com>, 2012, 2013.
|
||||
#
|
||||
msgid ""
|
||||
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-08-23 21:40+0000\n"
|
||||
"PO-Revision-Date: 2013-08-25 00: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"
|
||||
@@ -132,28 +132,10 @@ msgid "History for the looking glass dialog"
|
||||
msgstr "Chronik des Dialogs »looking glass«"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
|
||||
msgid ""
|
||||
"Internally used to store the last IM presence explicitly set by the user. "
|
||||
"The value here is from the TpConnectionPresenceType enumeration."
|
||||
msgstr ""
|
||||
"Wird intern zur Speicherung des letzten Sofortnachrichtenstatus verwendet, "
|
||||
"der explizit vom Benutzer gesetzt wurde. Der hier verwendete Wert wird der "
|
||||
"TpConnectionPresenceType-Aufzählung entnommen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
||||
msgid ""
|
||||
"Internally used to store the last session presence status for the user. The "
|
||||
"value here is from the GsmPresenceStatus enumeration."
|
||||
msgstr ""
|
||||
"Wird intern zur Speicherung des letzten Sofortnachrichtenstatus des "
|
||||
"Benutzers verwendet. Der hier verwendete Wert wird der GsmPresenceStatus-"
|
||||
"Aufzählung entnommen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||
msgstr "Den Menüeintrag »Abmelden« immer im Benutzermenü anzeigen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||
#: ../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."
|
||||
@@ -161,14 +143,14 @@ msgstr ""
|
||||
"Dieser Schlüssel überschreibt das automatische Verbergen des Menüeintrags "
|
||||
"»Abmelden« in Einzelbenutzer, Einzelsitzungssituationen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||
msgid ""
|
||||
"Whether to remember password for mounting encrypted or remote filesystems"
|
||||
msgstr ""
|
||||
"Legt fest, ob Passwörter für eingehängte, verschlüsselte oder ferne "
|
||||
"Dateisysteme gespeichert werden"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
#: ../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 "
|
||||
@@ -181,74 +163,74 @@ msgstr ""
|
||||
"angeboten. Dieser Schlüssel stellt den Standardstatus für dieses Ankreuzfeld "
|
||||
"ein."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||
msgid "Show the week date in the calendar"
|
||||
msgstr "Kalenderwoche im Kalender anzeigen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||
msgid "If true, display the ISO week date in the calendar."
|
||||
msgstr ""
|
||||
"Wenn dieser Wert gesetzt ist, wird der ISO-Wochentag im Kalender angezeigt."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||
msgid "Keybinding to open the application menu"
|
||||
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||
msgid "Keybinding to open the application menu."
|
||||
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||
msgid "Keybinding to open the \"Show Applications\" view"
|
||||
msgstr "Tastenkombination zum Öffnen der »Anwendungen anzeigen«-Ansicht"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||
msgid ""
|
||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||
msgstr ""
|
||||
"Tastenkombination zum Öffnen der »Anwendungen anzeigen«-Ansicht der "
|
||||
"Aktivitätenübersicht."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||
msgid "Keybinding to open the overview"
|
||||
msgstr "Tastenkombination zum Öffnen der Übersicht"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||
msgid "Keybinding to open the Activities Overview."
|
||||
msgstr "Tastenkombination zum Öffnen der »Aktivitäten«-Übersicht"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||
msgid "Keybinding to toggle the visibility of the message tray"
|
||||
msgstr ""
|
||||
"Tastenkombination zum Umschalten der Sichtbarkeit des Benachrichtigungsfeldes"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||
msgid "Keybinding to toggle the visibility of the message tray."
|
||||
msgstr ""
|
||||
"Tastenkombination zum Umschalten der Sichtbarkeit des "
|
||||
"Benachrichtigungsfeldes."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||
msgid "Keybinding to focus the active notification"
|
||||
msgstr "Tastenkombination zur Ausrichtung auf die aktiven Benachrichtigungen"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||
msgid "Keybinding to focus the active notification."
|
||||
msgstr "Tastenkombination zur Ausrichtung auf die aktiven Benachrichtigungen."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Zu verwendende Tastatur"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Der Typ der zu verwendenden Tastatur"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||
msgid "The application icon mode."
|
||||
msgstr "Der Modus der Anwendungssymbole."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||
#: ../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-"
|
||||
@@ -258,22 +240,22 @@ msgstr ""
|
||||
"»thumbnail-only« (Vorschaubilder der Fenster werden angezeigt), »app-icon-"
|
||||
"only« (Nur das Anwendungssymbol wird angezeigt) oder »both« (beides)."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||
msgid "Attach modal dialog to the parent window"
|
||||
msgstr "Modalen Dialog an übergeordnetes Fenster binden"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||
#: ../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 ""
|
||||
"Dieser Schlüssel überschreibt den Schlüssel in org.gnome.mutter, wenn die "
|
||||
"GNOME-Shell läuft."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||
msgid "Arrangement of buttons on the titlebar"
|
||||
msgstr "Anordnung der Knöpfe auf der Titelleiste"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||
#: ../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."
|
||||
@@ -281,17 +263,17 @@ msgstr ""
|
||||
"Dieser Schlüssel überschreibt den Schlüssel in org.gnome.desktop.wm."
|
||||
"preferences, wenn die GNOME-Shell läuft."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr ""
|
||||
"Größenanpassung aktivieren, wenn ein Fenster an die Bildschirmkante "
|
||||
"verschoben wird"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Arbeitsflächen dynamisch verwalten"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||
msgid "Workspaces only on primary monitor"
|
||||
msgstr "Arbeitsflächen nur auf dem primären Bildschirm"
|
||||
|
||||
@@ -308,46 +290,41 @@ msgstr "Erweiterung"
|
||||
msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "Wählen Sie oben eine Erweiterung aus, die Sie konfigurieren wollen."
|
||||
|
||||
#: ../js/gdm/authPrompt.js:146 ../js/ui/components/networkAgent.js:132
|
||||
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:374
|
||||
#: ../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:679
|
||||
#: ../js/ui/status/system.js:373
|
||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:168 ../js/gdm/authPrompt.js:216
|
||||
#: ../js/gdm/authPrompt.js:167 ../js/gdm/authPrompt.js:215
|
||||
msgid "Next"
|
||||
msgstr "Nächstes"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
|
||||
#: ../js/ui/unlockDialog.js:57
|
||||
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
|
||||
#: ../js/ui/unlockDialog.js:59
|
||||
msgid "Unlock"
|
||||
msgstr "Entsperren"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:214
|
||||
#: ../js/gdm/authPrompt.js:213
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "Anmelden"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:299
|
||||
#: ../js/gdm/loginDialog.js:294
|
||||
msgid "Choose Session"
|
||||
msgstr "Sitzung wählen"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:317
|
||||
msgid "Session"
|
||||
msgstr "Sitzung"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:468
|
||||
#: ../js/gdm/loginDialog.js:454
|
||||
msgid "Not listed?"
|
||||
msgstr "Nicht aufgeführt?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: ../js/gdm/loginDialog.js:639
|
||||
#: ../js/gdm/loginDialog.js:622
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(z.B. Benutzer oder %s)"
|
||||
@@ -355,12 +332,12 @@ msgstr "(z.B. Benutzer oder %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:644 ../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 "Benutzername:"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:908
|
||||
#: ../js/gdm/loginDialog.js:891
|
||||
msgid "Login Window"
|
||||
msgstr "Anmeldefenster"
|
||||
|
||||
@@ -392,23 +369,27 @@ msgstr "Befehl konnte nicht verarbeitet werden:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Ausführung von »%s« ist gescheitert:"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../js/ui/appDisplay.js:573
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Häufig genutzte Anwendungen werden hier erscheinen"
|
||||
|
||||
#: ../js/ui/appDisplay.js:689
|
||||
msgid "Frequent"
|
||||
msgstr "Häufig"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:696
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: ../js/ui/appDisplay.js:986
|
||||
#: ../js/ui/appDisplay.js:1491
|
||||
msgid "New Window"
|
||||
msgstr "Neues Fenster"
|
||||
|
||||
#: ../js/ui/appDisplay.js:989 ../js/ui/dash.js:284
|
||||
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Aus Favoriten entfernen"
|
||||
|
||||
#: ../js/ui/appDisplay.js:990
|
||||
#: ../js/ui/appDisplay.js:1495
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Zu Favoriten hinzufügen"
|
||||
|
||||
@@ -422,7 +403,7 @@ msgstr "%s wurde zu Ihren Favoriten hinzugefügt"
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s wurde aus Ihren Favoriten entfernt"
|
||||
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:267
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
@@ -549,36 +530,44 @@ msgctxt "list saturday"
|
||||
msgid "S"
|
||||
msgstr "Sa"
|
||||
|
||||
#: ../js/ui/calendar.js:447
|
||||
msgid "Previous month"
|
||||
msgstr "Vorheriger Monat"
|
||||
|
||||
#: ../js/ui/calendar.js:457
|
||||
msgid "Next month"
|
||||
msgstr "Nächster Monat"
|
||||
|
||||
#. Translators: Text to show if there are no events
|
||||
#: ../js/ui/calendar.js:750
|
||||
#: ../js/ui/calendar.js:753
|
||||
msgid "Nothing Scheduled"
|
||||
msgstr "Nichts geplant"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:768
|
||||
#: ../js/ui/calendar.js:771
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d. %B"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:771
|
||||
#: ../js/ui/calendar.js:774
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%a, %d. %B %Y"
|
||||
|
||||
#: ../js/ui/calendar.js:782
|
||||
#: ../js/ui/calendar.js:785
|
||||
msgid "Today"
|
||||
msgstr "Heute"
|
||||
|
||||
#: ../js/ui/calendar.js:786
|
||||
#: ../js/ui/calendar.js:789
|
||||
msgid "Tomorrow"
|
||||
msgstr "Morgen"
|
||||
|
||||
#: ../js/ui/calendar.js:797
|
||||
#: ../js/ui/calendar.js:800
|
||||
msgid "This week"
|
||||
msgstr "Diese Woche"
|
||||
|
||||
#: ../js/ui/calendar.js:805
|
||||
#: ../js/ui/calendar.js:808
|
||||
msgid "Next week"
|
||||
msgstr "Nächste Woche"
|
||||
|
||||
@@ -612,7 +601,7 @@ msgid "Type again:"
|
||||
msgstr "Erneut eingeben:"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
|
||||
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
|
||||
msgid "Connect"
|
||||
msgstr "Verbinden"
|
||||
|
||||
@@ -962,7 +951,7 @@ msgstr "Anwendungen anzeigen"
|
||||
# Würde ich so übernehmen, oder evtl. »Dock«.
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/dash.js:439
|
||||
#: ../js/ui/dash.js:442
|
||||
msgid "Dash"
|
||||
msgstr "Dash"
|
||||
|
||||
@@ -996,20 +985,14 @@ msgctxt "title"
|
||||
msgid "Log Out"
|
||||
msgstr "Abmelden"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:64
|
||||
msgid "Click Log Out to quit these applications and log out of the system."
|
||||
msgstr ""
|
||||
"Klicken Sie auf »Abmelden«, um diese Anwendungen zu beenden und sich vom "
|
||||
"System abzumelden."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:66
|
||||
#: ../js/ui/endSessionDialog.js:65
|
||||
#, 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 wird automatisch in %d Sekunde abgemeldet."
|
||||
msgstr[1] "%s wird automatisch in %d Sekunden abgemeldet."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:71
|
||||
#: ../js/ui/endSessionDialog.js:70
|
||||
#, c-format
|
||||
msgid "You will be logged out automatically in %d second."
|
||||
msgid_plural "You will be logged out automatically in %d seconds."
|
||||
@@ -1017,67 +1000,84 @@ msgstr[0] "Sie werden automatisch in %d Sekunde abgemeldet."
|
||||
msgstr[1] "Sie werden automatisch in %d Sekunden abgemeldet."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:75
|
||||
msgid "Logging out of the system."
|
||||
msgstr "Abmeldung vom System."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:77
|
||||
msgctxt "button"
|
||||
msgid "Log Out"
|
||||
msgstr "Abmelden"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:82
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgctxt "title"
|
||||
msgid "Power Off"
|
||||
msgstr "Ausschalten"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:83
|
||||
msgid "Click Power Off to quit these applications and power off the system."
|
||||
msgstr ""
|
||||
"Klicken Sie auf »Ausschalten«, um diese Anwendungen zu beenden und das "
|
||||
"System auszuschalten."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:85
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
msgstr[0] "Das System wird automatisch in %d Sekunde ausgeschaltet."
|
||||
msgstr[1] "Das System wird automatisch in %d Sekunden ausgeschaltet."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
msgid "Powering off the system."
|
||||
msgstr "Das System wird ausgeschaltet."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:91 ../js/ui/endSessionDialog.js:108
|
||||
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
|
||||
msgctxt "button"
|
||||
msgid "Restart"
|
||||
msgstr "Neu starten"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:93
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
msgctxt "button"
|
||||
msgid "Power Off"
|
||||
msgstr "Ausschalten"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:99
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
msgctxt "title"
|
||||
msgid "Restart"
|
||||
msgstr "Neu starten"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:100
|
||||
msgid "Click Restart to quit these applications and restart the system."
|
||||
msgstr ""
|
||||
"Klicken Sie auf »Neu starten«, um diese Anwendungen zu beenden und das "
|
||||
"System neu zu starten."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:102
|
||||
#: ../js/ui/endSessionDialog.js:99
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
msgstr[0] "Das System wird automatisch in %d Sekunde neu gestartet."
|
||||
msgstr[1] "Das System wird automatisch in %d Sekunden neu gestartet."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:106
|
||||
msgid "Restarting the system."
|
||||
msgstr "Neustart des Systems."
|
||||
#: ../js/ui/endSessionDialog.js:112
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Updates"
|
||||
msgstr "Neu starten und Aktualisierungen installieren"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:114
|
||||
#, c-format
|
||||
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] ""
|
||||
"Das System wird automatisch in %d Sekunde neu gestartet und aktualisiert."
|
||||
msgstr[1] ""
|
||||
"Das System wird automatisch in %d Sekunden neu gestartet aktualisiert."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:119
|
||||
msgctxt "button"
|
||||
msgid "Restart & Install"
|
||||
msgstr "Neu starten und installieren"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:271
|
||||
msgid "Some applications are busy or have unsaved work."
|
||||
msgstr ""
|
||||
"Einige Anwendungen sind beschäftigt oder besitzen nicht-gespeicherte Arbeit."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:277
|
||||
msgid "Other users are logged in."
|
||||
msgstr "Andere Benutzer sind angemeldet."
|
||||
|
||||
#. Translators: Remote here refers to a remote session, like a ssh login
|
||||
#: ../js/ui/endSessionDialog.js:479
|
||||
#, c-format
|
||||
msgid "%s (remote)"
|
||||
msgstr "%s (Entfernt)"
|
||||
|
||||
#. Translators: Console here refers to a tty like a VT console
|
||||
#: ../js/ui/endSessionDialog.js:482
|
||||
#, c-format
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (Konsole)"
|
||||
|
||||
#: ../js/ui/extensionDownloader.js:199
|
||||
msgid "Install"
|
||||
@@ -1157,9 +1157,8 @@ msgid "Notification Settings"
|
||||
msgstr "Benachrichtigungseinstellungen"
|
||||
|
||||
#: ../js/ui/messageTray.js:1559
|
||||
#, fuzzy
|
||||
msgid "Tray Menu"
|
||||
msgstr "Nachrichtenfeldmenü"
|
||||
msgstr "Benachrichtigungsfeldmenü"
|
||||
|
||||
#: ../js/ui/messageTray.js:1775
|
||||
msgid "No Messages"
|
||||
@@ -1169,7 +1168,7 @@ msgstr "Keine Nachrichten"
|
||||
msgid "Message Tray"
|
||||
msgstr "Benachrichtigungsfeld"
|
||||
|
||||
#: ../js/ui/messageTray.js:2786
|
||||
#: ../js/ui/messageTray.js:2787
|
||||
msgid "System Information"
|
||||
msgstr "Systeminformationen"
|
||||
|
||||
@@ -1178,7 +1177,7 @@ msgctxt "program"
|
||||
msgid "Unknown"
|
||||
msgstr "Unbekannt"
|
||||
|
||||
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:154
|
||||
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:152
|
||||
#, c-format
|
||||
msgid "%d new message"
|
||||
msgid_plural "%d new messages"
|
||||
@@ -1215,7 +1214,7 @@ msgstr "Aktivitäten"
|
||||
msgid "Settings Menu"
|
||||
msgstr "Einstellungsmenü"
|
||||
|
||||
#: ../js/ui/panel.js:892
|
||||
#: ../js/ui/panel.js:901
|
||||
msgid "Top Bar"
|
||||
msgstr "Oberes Panel"
|
||||
|
||||
@@ -1241,22 +1240,22 @@ msgstr "Schließen"
|
||||
# %B - ausgeschriebener Name des Monats, abhängig von der gesetzten Umgebung
|
||||
#. Translators: This is a time format for a date in
|
||||
#. long format
|
||||
#: ../js/ui/screenShield.js:90
|
||||
#: ../js/ui/screenShield.js:88
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %d. %B"
|
||||
|
||||
#: ../js/ui/screenShield.js:156
|
||||
#: ../js/ui/screenShield.js:154
|
||||
#, c-format
|
||||
msgid "%d new notification"
|
||||
msgid_plural "%d new notifications"
|
||||
msgstr[0] "%d neue Benachrichtigung"
|
||||
msgstr[1] "%d neue Benachrichtigungen"
|
||||
|
||||
#: ../js/ui/screenShield.js:479 ../js/ui/status/system.js:275
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
|
||||
msgid "Lock"
|
||||
msgstr "Sperren"
|
||||
|
||||
#: ../js/ui/screenShield.js:712
|
||||
#: ../js/ui/screenShield.js:703
|
||||
msgid "GNOME needs to lock the screen"
|
||||
msgstr "GNOME muss den Bildschirm sperren"
|
||||
|
||||
@@ -1267,19 +1266,19 @@ 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:839 ../js/ui/screenShield.js:1318
|
||||
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
|
||||
msgid "Unable to lock"
|
||||
msgstr "Sperrung fehlgeschlagen"
|
||||
|
||||
#: ../js/ui/screenShield.js:840 ../js/ui/screenShield.js:1319
|
||||
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Sperrung wurde von einer Anwendung blockiert"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Suche läuft …"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "Keine Ergebnisse."
|
||||
|
||||
@@ -1360,7 +1359,7 @@ msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
|
||||
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
|
||||
msgid "Turn Off"
|
||||
msgstr "Ausschalten"
|
||||
|
||||
@@ -1458,83 +1457,83 @@ msgstr "Tastaturbelegung zeigen"
|
||||
msgid "<unknown>"
|
||||
msgstr "<Unbekannt>"
|
||||
|
||||
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
|
||||
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
|
||||
msgid "Off"
|
||||
msgstr "Aus"
|
||||
|
||||
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
|
||||
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
|
||||
#: ../js/ui/status/rfkill.js:49
|
||||
msgid "Network Settings"
|
||||
msgstr "Netzwerkeinstellungen"
|
||||
|
||||
#. 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:357
|
||||
#: ../js/ui/status/network.js:364
|
||||
msgid "unmanaged"
|
||||
msgstr "nicht verwaltet"
|
||||
|
||||
#: ../js/ui/status/network.js:359
|
||||
#: ../js/ui/status/network.js:366
|
||||
msgid "disconnecting..."
|
||||
msgstr "Verbindungsabbau …"
|
||||
|
||||
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
|
||||
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
|
||||
msgid "connecting..."
|
||||
msgstr "Verbindungsaufbau …"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
|
||||
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
|
||||
msgid "authentication required"
|
||||
msgstr "Legitimierung erforderlich"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:376
|
||||
#: ../js/ui/status/network.js:383
|
||||
msgid "firmware missing"
|
||||
msgstr "Firmware fehlt"
|
||||
|
||||
#. 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:380
|
||||
#: ../js/ui/status/network.js:387
|
||||
msgid "unavailable"
|
||||
msgstr "nicht verfügbar"
|
||||
|
||||
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
|
||||
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
|
||||
msgid "connection failed"
|
||||
msgstr "Verbindung gescheitert"
|
||||
|
||||
#: ../js/ui/status/network.js:647
|
||||
#: ../js/ui/status/network.js:654
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Drahtlosnetzwerke"
|
||||
|
||||
#: ../js/ui/status/network.js:649
|
||||
#: ../js/ui/status/network.js:656
|
||||
msgid "Select a network"
|
||||
msgstr "Wählen Sie ein Netzwerk"
|
||||
|
||||
#: ../js/ui/status/network.js:673
|
||||
#: ../js/ui/status/network.js:680
|
||||
msgid "No Networks"
|
||||
msgstr "Keine Netzwerke"
|
||||
|
||||
#: ../js/ui/status/network.js:942
|
||||
#: ../js/ui/status/network.js:949
|
||||
msgid "Select Network"
|
||||
msgstr "Wählen Sie ein Netzwerk aus"
|
||||
|
||||
#: ../js/ui/status/network.js:1027
|
||||
#: ../js/ui/status/network.js:1034
|
||||
msgid "Turn On"
|
||||
msgstr "Einschalten"
|
||||
|
||||
#: ../js/ui/status/network.js:1160
|
||||
#: ../js/ui/status/network.js:1167
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1296
|
||||
#: ../js/ui/status/network.js:1306
|
||||
msgid "Network Manager"
|
||||
msgstr "Netzwerk-Verwaltung"
|
||||
|
||||
#: ../js/ui/status/network.js:1338
|
||||
#: ../js/ui/status/network.js:1345
|
||||
msgid "Connection failed"
|
||||
msgstr "Verbindung gescheitert"
|
||||
|
||||
#: ../js/ui/status/network.js:1339
|
||||
#: ../js/ui/status/network.js:1346
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Aktivierung der Netzwerkverbindung ist gescheitert"
|
||||
|
||||
@@ -1580,42 +1579,26 @@ msgstr "Flugzeugmodus"
|
||||
msgid "On"
|
||||
msgstr "An"
|
||||
|
||||
#: ../js/ui/status/system.js:247
|
||||
#: ../js/ui/status/system.js:305
|
||||
msgid "Switch User"
|
||||
msgstr "Benutzer wechseln"
|
||||
|
||||
#: ../js/ui/status/system.js:252
|
||||
#: ../js/ui/status/system.js:310
|
||||
msgid "Log Out"
|
||||
msgstr "Abmelden"
|
||||
|
||||
#: ../js/ui/status/system.js:271
|
||||
#: ../js/ui/status/system.js:329
|
||||
msgid "Orientation Lock"
|
||||
msgstr "Hoch-/Querformats-Fixierung"
|
||||
|
||||
#: ../js/ui/status/system.js:279 ../js/ui/status/system.js:377
|
||||
#: ../js/ui/status/system.js:337
|
||||
msgid "Suspend"
|
||||
msgstr "In Bereitschaft versetzen"
|
||||
|
||||
#: ../js/ui/status/system.js:340
|
||||
msgid "Power Off"
|
||||
msgstr "Ausschalten"
|
||||
|
||||
#: ../js/ui/status/system.js:323
|
||||
msgid "Other users are logged in."
|
||||
msgstr "Andere Benutzer sind angemeldet."
|
||||
|
||||
#: ../js/ui/status/system.js:328
|
||||
msgid "Shutting down might cause them to lose unsaved work."
|
||||
msgstr "Herunterfahren könnte Datenverlust herbeiführen."
|
||||
|
||||
#. Translators: Remote here refers to a remote session, like a ssh login
|
||||
#: ../js/ui/status/system.js:356
|
||||
#, c-format
|
||||
msgid "%s (remote)"
|
||||
msgstr "%s (Entfernt)"
|
||||
|
||||
#. Translators: Console here refers to a tty like a VT console
|
||||
#: ../js/ui/status/system.js:359
|
||||
#, c-format
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (Konsole)"
|
||||
|
||||
#: ../js/ui/status/volume.js:127
|
||||
msgid "Volume changed"
|
||||
msgstr "Lautstärke geändert"
|
||||
@@ -1628,11 +1611,11 @@ msgstr "Lautstärke"
|
||||
msgid "Microphone"
|
||||
msgstr "Mikrofon"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:65
|
||||
#: ../js/ui/unlockDialog.js:67
|
||||
msgid "Log in as another user"
|
||||
msgstr "Als anderer Benutzer anmelden"
|
||||
|
||||
#: ../js/ui/unlockDialog.js:82
|
||||
#: ../js/ui/unlockDialog.js:84
|
||||
msgid "Unlock Window"
|
||||
msgstr "Fenster entsperren"
|
||||
|
||||
@@ -1746,6 +1729,52 @@ msgstr "Das Passwort darf nicht leer sein"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Der Dialog zur Legitimierung wurde vom Benutzer geschlossen"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Internally used to store the last IM presence explicitly set by the user. "
|
||||
#~ "The value here is from the TpConnectionPresenceType enumeration."
|
||||
#~ msgstr ""
|
||||
#~ "Wird intern zur Speicherung des letzten Sofortnachrichtenstatus "
|
||||
#~ "verwendet, der explizit vom Benutzer gesetzt wurde. Der hier verwendete "
|
||||
#~ "Wert wird der TpConnectionPresenceType-Aufzählung entnommen."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Internally used to store the last session presence status for the user. "
|
||||
#~ "The value here is from the GsmPresenceStatus enumeration."
|
||||
#~ msgstr ""
|
||||
#~ "Wird intern zur Speicherung des letzten Sofortnachrichtenstatus des "
|
||||
#~ "Benutzers verwendet. Der hier verwendete Wert wird der GsmPresenceStatus-"
|
||||
#~ "Aufzählung entnommen."
|
||||
|
||||
#~ msgid "Session"
|
||||
#~ msgstr "Sitzung"
|
||||
|
||||
#~ msgid "Click Log Out to quit these applications and log out of the system."
|
||||
#~ msgstr ""
|
||||
#~ "Klicken Sie auf »Abmelden«, um diese Anwendungen zu beenden und sich vom "
|
||||
#~ "System abzumelden."
|
||||
|
||||
#~ msgid "Logging out of the system."
|
||||
#~ msgstr "Abmeldung vom System."
|
||||
|
||||
#~ msgid "Click Power Off to quit these applications and power off the system."
|
||||
#~ msgstr ""
|
||||
#~ "Klicken Sie auf »Ausschalten«, um diese Anwendungen zu beenden und das "
|
||||
#~ "System auszuschalten."
|
||||
|
||||
#~ msgid "Powering off the system."
|
||||
#~ msgstr "Das System wird ausgeschaltet."
|
||||
|
||||
#~ msgid "Click Restart to quit these applications and restart the system."
|
||||
#~ msgstr ""
|
||||
#~ "Klicken Sie auf »Neu starten«, um diese Anwendungen zu beenden und das "
|
||||
#~ "System neu zu starten."
|
||||
|
||||
#~ msgid "Restarting the system."
|
||||
#~ msgstr "Neustart des Systems."
|
||||
|
||||
#~ msgid "Shutting down might cause them to lose unsaved work."
|
||||
#~ msgstr "Herunterfahren könnte Datenverlust herbeiführen."
|
||||
|
||||
#~ msgid "Screenshots"
|
||||
#~ msgstr "Bildschirmfotos"
|
||||
|
||||
|
69
po/es.po
69
po/es.po
@@ -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-08-30 14:46+0000\n"
|
||||
"PO-Revision-Date: 2013-09-02 16:27+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"
|
||||
@@ -283,7 +283,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:679
|
||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@@ -359,23 +359,27 @@ msgstr "No se pudo analizar el comando:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Falló la ejecución de «%s»:"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../js/ui/appDisplay.js:578
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí"
|
||||
|
||||
#: ../js/ui/appDisplay.js:694
|
||||
msgid "Frequent"
|
||||
msgstr "Frecuentes"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:701
|
||||
msgid "All"
|
||||
msgstr "Todas"
|
||||
|
||||
#: ../js/ui/appDisplay.js:991
|
||||
#: ../js/ui/appDisplay.js:1488
|
||||
msgid "New Window"
|
||||
msgstr "Ventana nueva"
|
||||
|
||||
#: ../js/ui/appDisplay.js:994 ../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:995
|
||||
#: ../js/ui/appDisplay.js:1492
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Añadir a los favoritos"
|
||||
|
||||
@@ -584,7 +588,7 @@ msgid "Type again:"
|
||||
msgstr "Escriba de nuevo:"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
|
||||
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
|
||||
msgid "Connect"
|
||||
msgstr "Conectar"
|
||||
|
||||
@@ -932,7 +936,7 @@ msgstr "Mostrar aplicaciones"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/dash.js:439
|
||||
#: ../js/ui/dash.js:442
|
||||
msgid "Dash"
|
||||
msgstr "Tablero"
|
||||
|
||||
@@ -1020,15 +1024,12 @@ msgstr[0] "El sistema se reiniciará automáticamente en %d segundo."
|
||||
msgstr[1] "El sistema se reiniciará automáticamente en %d segundos."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:112
|
||||
#| msgid "Install Updates & Restart"
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Updates"
|
||||
msgstr "Reiniciar e instalar actualizaciones"
|
||||
|
||||
#: ../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."
|
||||
@@ -1256,11 +1257,11 @@ msgstr "No se pudo bloquear"
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Una aplicación impidió el bloqueo"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Buscando…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "No se encontraron resultados."
|
||||
|
||||
@@ -1341,7 +1342,7 @@ msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
|
||||
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
|
||||
msgid "Turn Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
@@ -1439,83 +1440,83 @@ msgstr "Mostrar la distribución del teclado"
|
||||
msgid "<unknown>"
|
||||
msgstr "<desconocido>"
|
||||
|
||||
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
|
||||
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
|
||||
msgid "Off"
|
||||
msgstr "Desconectado"
|
||||
|
||||
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
|
||||
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
|
||||
#: ../js/ui/status/rfkill.js:49
|
||||
msgid "Network Settings"
|
||||
msgstr "Configuración de la red"
|
||||
|
||||
#. 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:357
|
||||
#: ../js/ui/status/network.js:364
|
||||
msgid "unmanaged"
|
||||
msgstr "no gestionada"
|
||||
|
||||
#: ../js/ui/status/network.js:359
|
||||
#: ../js/ui/status/network.js:366
|
||||
msgid "disconnecting..."
|
||||
msgstr "deconectando…"
|
||||
|
||||
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
|
||||
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
|
||||
msgid "connecting..."
|
||||
msgstr "conectando…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
|
||||
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
|
||||
msgid "authentication required"
|
||||
msgstr "se necesita autenticación"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:376
|
||||
#: ../js/ui/status/network.js:383
|
||||
msgid "firmware missing"
|
||||
msgstr "falta el «firmware»"
|
||||
|
||||
#. 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:380
|
||||
#: ../js/ui/status/network.js:387
|
||||
msgid "unavailable"
|
||||
msgstr "no disponible"
|
||||
|
||||
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
|
||||
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
|
||||
msgid "connection failed"
|
||||
msgstr "falló la conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:647
|
||||
#: ../js/ui/status/network.js:654
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Redes Wi-Fi"
|
||||
|
||||
#: ../js/ui/status/network.js:649
|
||||
#: ../js/ui/status/network.js:656
|
||||
msgid "Select a network"
|
||||
msgstr "Seleccionar una red"
|
||||
|
||||
#: ../js/ui/status/network.js:673
|
||||
#: ../js/ui/status/network.js:680
|
||||
msgid "No Networks"
|
||||
msgstr "No hay redes"
|
||||
|
||||
#: ../js/ui/status/network.js:942
|
||||
#: ../js/ui/status/network.js:949
|
||||
msgid "Select Network"
|
||||
msgstr "Seleccionar red"
|
||||
|
||||
#: ../js/ui/status/network.js:1027
|
||||
#: ../js/ui/status/network.js:1034
|
||||
msgid "Turn On"
|
||||
msgstr "Enceder"
|
||||
|
||||
#: ../js/ui/status/network.js:1160
|
||||
#: ../js/ui/status/network.js:1167
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1299
|
||||
#: ../js/ui/status/network.js:1306
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestor de la red"
|
||||
|
||||
#: ../js/ui/status/network.js:1338
|
||||
#: ../js/ui/status/network.js:1345
|
||||
msgid "Connection failed"
|
||||
msgstr "Falló la conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:1339
|
||||
#: ../js/ui/status/network.js:1346
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Falló la activación de la conexión de red"
|
||||
|
||||
|
109
po/gl.po
109
po/gl.po
@@ -11,8 +11,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-30 00:54+0200\n"
|
||||
"PO-Revision-Date: 2013-08-30 00:54+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"
|
||||
@@ -280,9 +280,9 @@ msgstr ""
|
||||
"Seleccione unha extensión que configurar usando a caixa combinada de arriba."
|
||||
|
||||
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
|
||||
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:347
|
||||
#: ../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:679
|
||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@@ -304,20 +304,16 @@ msgstr "Iniciar sesión"
|
||||
msgid "Choose Session"
|
||||
msgstr "Escolla unha sesión"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:312
|
||||
msgid "Session"
|
||||
msgstr "Sesión"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:458
|
||||
#: ../js/gdm/loginDialog.js:454
|
||||
msgid "Not listed?"
|
||||
msgstr "Non está na lista?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: ../js/gdm/loginDialog.js:626
|
||||
#: ../js/gdm/loginDialog.js:622
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(p.ex., usuario ou %s)"
|
||||
@@ -325,12 +321,12 @@ msgstr "(p.ex., usuario ou %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:631 ../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 "Nome de usuario: "
|
||||
|
||||
#: ../js/gdm/loginDialog.js:895
|
||||
#: ../js/gdm/loginDialog.js:891
|
||||
msgid "Login Window"
|
||||
msgstr "Xanela de inicio de sesión"
|
||||
|
||||
@@ -362,23 +358,27 @@ msgstr "Non foi posíbel analizar a orde:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Produciuse un fallo na execución de «%s»:"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../js/ui/appDisplay.js:579
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Os aplicativos usados recentemente aparecerán aquí"
|
||||
|
||||
#: ../js/ui/appDisplay.js:695
|
||||
msgid "Frequent"
|
||||
msgstr "Frecuentes"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:702
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:991
|
||||
#: ../js/ui/appDisplay.js:1489
|
||||
msgid "New Window"
|
||||
msgstr "Xanela nova"
|
||||
|
||||
#: ../js/ui/appDisplay.js:994 ../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:995
|
||||
#: ../js/ui/appDisplay.js:1493
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Engadir aos favoritos"
|
||||
|
||||
@@ -587,7 +587,7 @@ msgid "Type again:"
|
||||
msgstr "Escriba de novo:"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
|
||||
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
|
||||
msgid "Connect"
|
||||
msgstr "Conectar"
|
||||
|
||||
@@ -935,7 +935,7 @@ msgstr "Mostrar aplicativos"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/dash.js:439
|
||||
#: ../js/ui/dash.js:442
|
||||
msgid "Dash"
|
||||
msgstr "Taboleiro"
|
||||
|
||||
@@ -988,46 +988,46 @@ msgctxt "button"
|
||||
msgid "Log Out"
|
||||
msgstr "Saír da sesión"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgctxt "title"
|
||||
msgid "Power Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:82
|
||||
#: ../js/ui/endSessionDialog.js:83
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
msgstr[0] "O sistema apagarase automaticamente en %d segundo."
|
||||
msgstr[1] "O sistema apagarase automaticamente en %d segundos."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87 ../js/ui/endSessionDialog.js:102
|
||||
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
|
||||
msgctxt "button"
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
msgctxt "button"
|
||||
msgid "Power Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:95
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
msgctxt "title"
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:99
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
msgstr[0] "O sistema reiniciarase automaticamente en %d segundo."
|
||||
msgstr[1] "O sistema reiniciarase automaticamente en %d segundos."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:109
|
||||
#: ../js/ui/endSessionDialog.js:112
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Updates"
|
||||
msgstr "Reiniciar e instalar actualizacións"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:111
|
||||
#: ../js/ui/endSessionDialog.js:114
|
||||
#, c-format
|
||||
msgid "The system will automatically restart and install updates in %d second."
|
||||
msgid_plural ""
|
||||
@@ -1039,27 +1039,27 @@ msgstr[1] ""
|
||||
"O sistema reiniciarase automaticamente e instalará as actualizacións en %d "
|
||||
"segundos."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:116
|
||||
#: ../js/ui/endSessionDialog.js:119
|
||||
msgctxt "button"
|
||||
msgid "Restart & Install"
|
||||
msgstr "Reiniciar e instalar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:267
|
||||
#: ../js/ui/endSessionDialog.js:271
|
||||
msgid "Some applications are busy or have unsaved work."
|
||||
msgstr "Algúns aplicativos están ocupados ou teñen traballo sen gardar."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:273
|
||||
#: ../js/ui/endSessionDialog.js:277
|
||||
msgid "Other users are logged in."
|
||||
msgstr "Hai outros usuarios conectados."
|
||||
|
||||
#. Translators: Remote here refers to a remote session, like a ssh login
|
||||
#: ../js/ui/endSessionDialog.js:475
|
||||
#: ../js/ui/endSessionDialog.js:479
|
||||
#, c-format
|
||||
msgid "%s (remote)"
|
||||
msgstr "%s (remoto)"
|
||||
|
||||
#. Translators: Console here refers to a tty like a VT console
|
||||
#: ../js/ui/endSessionDialog.js:478
|
||||
#: ../js/ui/endSessionDialog.js:482
|
||||
#, c-format
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (consola)"
|
||||
@@ -1256,11 +1256,11 @@ msgstr "Non foi posíbel bloquear"
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Un aplicativo impediu o bloqueo"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Buscando…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "Sen resultados."
|
||||
|
||||
@@ -1341,7 +1341,7 @@ msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
|
||||
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
|
||||
msgid "Turn Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
@@ -1439,83 +1439,83 @@ msgstr "Mostrar a distribución do teclado"
|
||||
msgid "<unknown>"
|
||||
msgstr "<descoñecido>"
|
||||
|
||||
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
|
||||
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
|
||||
msgid "Off"
|
||||
msgstr "Desactivar"
|
||||
|
||||
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
|
||||
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
|
||||
#: ../js/ui/status/rfkill.js:49
|
||||
msgid "Network Settings"
|
||||
msgstr "Preferencias da rede"
|
||||
|
||||
#. 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:357
|
||||
#: ../js/ui/status/network.js:364
|
||||
msgid "unmanaged"
|
||||
msgstr "non xestionada"
|
||||
|
||||
#: ../js/ui/status/network.js:359
|
||||
#: ../js/ui/status/network.js:366
|
||||
msgid "disconnecting..."
|
||||
msgstr "desconectando…"
|
||||
|
||||
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
|
||||
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
|
||||
msgid "connecting..."
|
||||
msgstr "conectando…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
|
||||
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
|
||||
msgid "authentication required"
|
||||
msgstr "requírese autenticación"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:376
|
||||
#: ../js/ui/status/network.js:383
|
||||
msgid "firmware missing"
|
||||
msgstr "falta o «firmware»"
|
||||
|
||||
#. 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:380
|
||||
#: ../js/ui/status/network.js:387
|
||||
msgid "unavailable"
|
||||
msgstr "non dispoñíbel"
|
||||
|
||||
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
|
||||
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
|
||||
msgid "connection failed"
|
||||
msgstr "conexión fallada"
|
||||
|
||||
#: ../js/ui/status/network.js:647
|
||||
#: ../js/ui/status/network.js:654
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Redes WiFi"
|
||||
|
||||
#: ../js/ui/status/network.js:649
|
||||
#: ../js/ui/status/network.js:656
|
||||
msgid "Select a network"
|
||||
msgstr "Seleccione unha rede"
|
||||
|
||||
#: ../js/ui/status/network.js:673
|
||||
#: ../js/ui/status/network.js:680
|
||||
msgid "No Networks"
|
||||
msgstr "Sen redes"
|
||||
|
||||
#: ../js/ui/status/network.js:942
|
||||
#: ../js/ui/status/network.js:949
|
||||
msgid "Select Network"
|
||||
msgstr "Seleccione unha rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1027
|
||||
#: ../js/ui/status/network.js:1034
|
||||
msgid "Turn On"
|
||||
msgstr "Activar"
|
||||
|
||||
#: ../js/ui/status/network.js:1160
|
||||
#: ../js/ui/status/network.js:1167
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1299
|
||||
#: ../js/ui/status/network.js:1306
|
||||
msgid "Network Manager"
|
||||
msgstr "Xestor da rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1338
|
||||
#: ../js/ui/status/network.js:1345
|
||||
msgid "Connection failed"
|
||||
msgstr "Produciuse un fallo na conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:1339
|
||||
#: ../js/ui/status/network.js:1346
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Produciuse un fallo na activación da conexión de rede"
|
||||
|
||||
@@ -1711,6 +1711,9 @@ msgstr "O contrasinal non pode estar baleiro"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "O usuario rexeitou o diálogo de autenticación"
|
||||
|
||||
#~ msgid "Session"
|
||||
#~ msgstr "Sesión"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Internally used to store the last IM presence explicitly set by the user. "
|
||||
#~ "The value here is from the TpConnectionPresenceType enumeration."
|
||||
|
120
po/id.po
120
po/id.po
@@ -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-08-28 17:17+0000\n"
|
||||
"PO-Revision-Date: 2013-08-30 14:39+0700\n"
|
||||
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
|
||||
"PO-Revision-Date: 2013-09-10 13:06+0700\n"
|
||||
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
|
||||
"Language-Team: Indonesian <gnome@i15n.org>\n"
|
||||
"Language: id\n"
|
||||
@@ -279,9 +279,9 @@ msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "Pilih ekstensi yang ingin dikonfigurasi pada kotak di atas."
|
||||
|
||||
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
|
||||
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:347
|
||||
#: ../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:679
|
||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
|
||||
msgid "Cancel"
|
||||
msgstr "Batal"
|
||||
|
||||
@@ -303,20 +303,16 @@ msgstr "Masuk"
|
||||
msgid "Choose Session"
|
||||
msgstr "Pilih Sesi"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:312
|
||||
msgid "Session"
|
||||
msgstr "Sesi"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:458
|
||||
#: ../js/gdm/loginDialog.js:454
|
||||
msgid "Not listed?"
|
||||
msgstr "Tak masuk daftar?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: ../js/gdm/loginDialog.js:625
|
||||
#: ../js/gdm/loginDialog.js:622
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(cth., pengguna dari %s)"
|
||||
@@ -324,12 +320,12 @@ msgstr "(cth., pengguna dari %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:630 ../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 "Nama pengguna: "
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:891
|
||||
msgid "Login Window"
|
||||
msgstr "Jendela Log Masuk"
|
||||
|
||||
@@ -361,23 +357,27 @@ msgstr "Tidak dapat mengurai perintah:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Eksekusi '%s' gagal:"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../js/ui/appDisplay.js:578
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Aplikasi yang sering dipakai akan muncul di sini"
|
||||
|
||||
#: ../js/ui/appDisplay.js:694
|
||||
msgid "Frequent"
|
||||
msgstr "Sering"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:701
|
||||
msgid "All"
|
||||
msgstr "Semua"
|
||||
|
||||
#: ../js/ui/appDisplay.js:991
|
||||
#: ../js/ui/appDisplay.js:1488
|
||||
msgid "New Window"
|
||||
msgstr "Jendela Baru"
|
||||
|
||||
#: ../js/ui/appDisplay.js:994 ../js/ui/dash.js:284
|
||||
#: ../js/ui/appDisplay.js:1491 ../js/ui/dash.js:284
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Hapus dari Favorit"
|
||||
|
||||
#: ../js/ui/appDisplay.js:995
|
||||
#: ../js/ui/appDisplay.js:1492
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Tambah ke Favorit"
|
||||
|
||||
@@ -391,7 +391,7 @@ msgstr "%s telah ditambahkan ke favorit Anda."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s telah dihapus dari favorit Anda."
|
||||
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:323
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
|
||||
msgid "Settings"
|
||||
msgstr "Pengaturan"
|
||||
|
||||
@@ -586,7 +586,7 @@ msgid "Type again:"
|
||||
msgstr "Ketik lagi:"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
|
||||
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
|
||||
msgid "Connect"
|
||||
msgstr "Sambung"
|
||||
|
||||
@@ -932,7 +932,7 @@ msgstr "Tampilkan Aplikasi"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/dash.js:439
|
||||
#: ../js/ui/dash.js:442
|
||||
msgid "Dash"
|
||||
msgstr "Dash"
|
||||
|
||||
@@ -983,44 +983,44 @@ msgctxt "button"
|
||||
msgid "Log Out"
|
||||
msgstr "Keluar"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgctxt "title"
|
||||
msgid "Power Off"
|
||||
msgstr "Matikan"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:82
|
||||
#: ../js/ui/endSessionDialog.js:83
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
msgstr[0] "Sistem ini akan otomatis dimatikan dalam %d detik."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87 ../js/ui/endSessionDialog.js:102
|
||||
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
|
||||
msgctxt "button"
|
||||
msgid "Restart"
|
||||
msgstr "Nyalakan Ulang"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
msgctxt "button"
|
||||
msgid "Power Off"
|
||||
msgstr "Matikan"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:95
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
msgctxt "title"
|
||||
msgid "Restart"
|
||||
msgstr "Nyalakan Ulang"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:99
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
msgstr[0] "Sistem ini akan otomatis dimulai ulang dalam %d detik."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:109
|
||||
#: ../js/ui/endSessionDialog.js:112
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Updates"
|
||||
msgstr "Start Ulang & Pasang Pemutakhiran"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:111
|
||||
#: ../js/ui/endSessionDialog.js:114
|
||||
#, c-format
|
||||
msgid "The system will automatically restart and install updates in %d second."
|
||||
msgid_plural ""
|
||||
@@ -1029,27 +1029,27 @@ msgstr[0] ""
|
||||
"Sistem ini akan otomatis dimulai ulang dan memasang pemutakhiran dalam %d "
|
||||
"detik."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:116
|
||||
#: ../js/ui/endSessionDialog.js:119
|
||||
msgctxt "button"
|
||||
msgid "Restart & Install"
|
||||
msgstr "Start Ulang & Pasang"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:267
|
||||
#: ../js/ui/endSessionDialog.js:271
|
||||
msgid "Some applications are busy or have unsaved work."
|
||||
msgstr "Beberapa aplikasi sedang sibuk atau belum disimpan perubahannya."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:273
|
||||
#: ../js/ui/endSessionDialog.js:277
|
||||
msgid "Other users are logged in."
|
||||
msgstr "Pengguna lain sedang log masuk."
|
||||
|
||||
#. Translators: Remote here refers to a remote session, like a ssh login
|
||||
#: ../js/ui/endSessionDialog.js:475
|
||||
#: ../js/ui/endSessionDialog.js:479
|
||||
#, c-format
|
||||
msgid "%s (remote)"
|
||||
msgstr "%s (jarak jauh)"
|
||||
|
||||
#. Translators: Console here refers to a tty like a VT console
|
||||
#: ../js/ui/endSessionDialog.js:478
|
||||
#: ../js/ui/endSessionDialog.js:482
|
||||
#, c-format
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (konsol)"
|
||||
@@ -1222,7 +1222,7 @@ msgid "%d new notification"
|
||||
msgid_plural "%d new notifications"
|
||||
msgstr[0] "%d pemberitahuan baru"
|
||||
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:331
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
|
||||
msgid "Lock"
|
||||
msgstr "Kunci"
|
||||
|
||||
@@ -1245,11 +1245,11 @@ msgstr "Tak bisa mengunci"
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Kunci diblokir oleh suatu aplikasi"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Mencari…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "Tidak ada yang cocok."
|
||||
|
||||
@@ -1330,7 +1330,7 @@ msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
|
||||
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
|
||||
msgid "Turn Off"
|
||||
msgstr "Matikan"
|
||||
|
||||
@@ -1427,83 +1427,83 @@ msgstr "Tampilkan Tata Letak Papan Tik"
|
||||
msgid "<unknown>"
|
||||
msgstr "<tak dikenal>"
|
||||
|
||||
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
|
||||
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
|
||||
msgid "Off"
|
||||
msgstr "Mati"
|
||||
|
||||
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
|
||||
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
|
||||
#: ../js/ui/status/rfkill.js:49
|
||||
msgid "Network Settings"
|
||||
msgstr "Pengaturan Jaringan"
|
||||
|
||||
#. 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:357
|
||||
#: ../js/ui/status/network.js:364
|
||||
msgid "unmanaged"
|
||||
msgstr "tak dikelola"
|
||||
|
||||
#: ../js/ui/status/network.js:359
|
||||
#: ../js/ui/status/network.js:366
|
||||
msgid "disconnecting..."
|
||||
msgstr "memutus..."
|
||||
|
||||
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
|
||||
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
|
||||
msgid "connecting..."
|
||||
msgstr "menghubungi..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
|
||||
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
|
||||
msgid "authentication required"
|
||||
msgstr "diperlukan otentikasi"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:376
|
||||
#: ../js/ui/status/network.js:383
|
||||
msgid "firmware missing"
|
||||
msgstr "firmware hilang"
|
||||
|
||||
#. 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:380
|
||||
#: ../js/ui/status/network.js:387
|
||||
msgid "unavailable"
|
||||
msgstr "tidak tersedia"
|
||||
|
||||
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
|
||||
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
|
||||
msgid "connection failed"
|
||||
msgstr "koneksi gagal"
|
||||
|
||||
#: ../js/ui/status/network.js:647
|
||||
#: ../js/ui/status/network.js:654
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Jaringan Wi-Fi"
|
||||
|
||||
#: ../js/ui/status/network.js:649
|
||||
#: ../js/ui/status/network.js:656
|
||||
msgid "Select a network"
|
||||
msgstr "Pilih jaringan"
|
||||
|
||||
#: ../js/ui/status/network.js:673
|
||||
#: ../js/ui/status/network.js:680
|
||||
msgid "No Networks"
|
||||
msgstr "Tiada Jaringan"
|
||||
|
||||
#: ../js/ui/status/network.js:942
|
||||
#: ../js/ui/status/network.js:949
|
||||
msgid "Select Network"
|
||||
msgstr "Pilih Jaringan"
|
||||
|
||||
#: ../js/ui/status/network.js:1027
|
||||
#: ../js/ui/status/network.js:1034
|
||||
msgid "Turn On"
|
||||
msgstr "Nyalakan"
|
||||
|
||||
#: ../js/ui/status/network.js:1160
|
||||
#: ../js/ui/status/network.js:1167
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1296
|
||||
#: ../js/ui/status/network.js:1306
|
||||
msgid "Network Manager"
|
||||
msgstr "Manajer Jaringan"
|
||||
|
||||
#: ../js/ui/status/network.js:1338
|
||||
#: ../js/ui/status/network.js:1345
|
||||
msgid "Connection failed"
|
||||
msgstr "Koneksi gagal"
|
||||
|
||||
#: ../js/ui/status/network.js:1339
|
||||
#: ../js/ui/status/network.js:1346
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Aktivasi koneksi jaringan gagal"
|
||||
|
||||
@@ -1549,23 +1549,23 @@ msgstr "Mode Pesawat Terbang"
|
||||
msgid "On"
|
||||
msgstr "Nyala"
|
||||
|
||||
#: ../js/ui/status/system.js:303
|
||||
#: ../js/ui/status/system.js:305
|
||||
msgid "Switch User"
|
||||
msgstr "Ganti Pengguna"
|
||||
|
||||
#: ../js/ui/status/system.js:308
|
||||
#: ../js/ui/status/system.js:310
|
||||
msgid "Log Out"
|
||||
msgstr "Keluar"
|
||||
|
||||
#: ../js/ui/status/system.js:327
|
||||
#: ../js/ui/status/system.js:329
|
||||
msgid "Orientation Lock"
|
||||
msgstr "Kunci Orientasi"
|
||||
|
||||
#: ../js/ui/status/system.js:335
|
||||
#: ../js/ui/status/system.js:337
|
||||
msgid "Suspend"
|
||||
msgstr "Suspensi"
|
||||
|
||||
#: ../js/ui/status/system.js:338
|
||||
#: ../js/ui/status/system.js:340
|
||||
msgid "Power Off"
|
||||
msgstr "Matikan"
|
||||
|
||||
|
121
po/lt.po
121
po/lt.po
@@ -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-08-28 17:17+0000\n"
|
||||
"PO-Revision-Date: 2013-08-28 23:31+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"
|
||||
@@ -278,9 +278,9 @@ msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "Išskleidžiamajame sąraše pasirinkite konfigūruotiną plėtinį."
|
||||
|
||||
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
|
||||
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:347
|
||||
#: ../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:679
|
||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
|
||||
msgid "Cancel"
|
||||
msgstr "Atsisakyti"
|
||||
|
||||
@@ -302,20 +302,16 @@ msgstr "Prisijungti"
|
||||
msgid "Choose Session"
|
||||
msgstr "Pasirinkite seansą"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:312
|
||||
msgid "Session"
|
||||
msgstr "Seansas"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:458
|
||||
#: ../js/gdm/loginDialog.js:454
|
||||
msgid "Not listed?"
|
||||
msgstr "Nėra sąraše?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: ../js/gdm/loginDialog.js:625
|
||||
#: ../js/gdm/loginDialog.js:622
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(pvz., naudotojas arba %s)"
|
||||
@@ -323,12 +319,12 @@ msgstr "(pvz., naudotojas arba %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:630 ../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 "Naudotojo vardas: "
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:891
|
||||
msgid "Login Window"
|
||||
msgstr "Prisijungimo langas"
|
||||
|
||||
@@ -360,23 +356,27 @@ msgstr "Nepavyko perskaityti komandos:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Nepavyko įvykdyti „%s“:"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../js/ui/appDisplay.js:578
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Čia bus matomos dažnai naudojamos programos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:694
|
||||
msgid "Frequent"
|
||||
msgstr "Dažnai naudojamos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:701
|
||||
msgid "All"
|
||||
msgstr "Visos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:991
|
||||
#: ../js/ui/appDisplay.js:1488
|
||||
msgid "New Window"
|
||||
msgstr "Naujas langas"
|
||||
|
||||
#: ../js/ui/appDisplay.js:994 ../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:995
|
||||
#: ../js/ui/appDisplay.js:1492
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Pridėti prie mėgstamų"
|
||||
|
||||
@@ -390,7 +390,7 @@ msgstr "%s pridėta prie jūsų mėgstamų."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s pašalinta iš jūsų mėgstamų."
|
||||
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:323
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
|
||||
msgid "Settings"
|
||||
msgstr "Nustatymai"
|
||||
|
||||
@@ -585,7 +585,7 @@ msgid "Type again:"
|
||||
msgstr "Įveskite dar kartą:"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
|
||||
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
|
||||
msgid "Connect"
|
||||
msgstr "Prisijungti"
|
||||
|
||||
@@ -930,7 +930,7 @@ msgstr "Paleisti programas"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/dash.js:439
|
||||
#: ../js/ui/dash.js:442
|
||||
msgid "Dash"
|
||||
msgstr "Paleidimo sritis"
|
||||
|
||||
@@ -985,12 +985,12 @@ msgctxt "button"
|
||||
msgid "Log Out"
|
||||
msgstr "Atsijungti"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgctxt "title"
|
||||
msgid "Power Off"
|
||||
msgstr "Išjungti"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:82
|
||||
#: ../js/ui/endSessionDialog.js:83
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
@@ -998,22 +998,22 @@ msgstr[0] "Sistema automatiškai išsijungs po %d sekundės."
|
||||
msgstr[1] "Sistema automatiškai išsijungs po %d sekundžių."
|
||||
msgstr[2] "Sistema automatiškai išsijungs po %d sekundžių."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87 ../js/ui/endSessionDialog.js:102
|
||||
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
|
||||
msgctxt "button"
|
||||
msgid "Restart"
|
||||
msgstr "Paleisti iš naujo"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
msgctxt "button"
|
||||
msgid "Power Off"
|
||||
msgstr "Išjungti"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:95
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
msgctxt "title"
|
||||
msgid "Restart"
|
||||
msgstr "Paleisti iš naujo"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:99
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
@@ -1021,12 +1021,12 @@ msgstr[0] "Sistema bus paleista iš naujo po %d sekundės."
|
||||
msgstr[1] "Sistema bus paleista iš naujo po %d sekundžių."
|
||||
msgstr[2] "Sistema bus paleista iš naujo po %d sekundžių."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:109
|
||||
#: ../js/ui/endSessionDialog.js:112
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Updates"
|
||||
msgstr "Perleisti ir įdiegti atnaujinimus"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:111
|
||||
#: ../js/ui/endSessionDialog.js:114
|
||||
#, c-format
|
||||
msgid "The system will automatically restart and install updates in %d second."
|
||||
msgid_plural ""
|
||||
@@ -1038,27 +1038,27 @@ msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
"Sistema bus paleista iš naujo ir įdiegs atnaujinimus po %d sekundžių."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:116
|
||||
#: ../js/ui/endSessionDialog.js:119
|
||||
msgctxt "button"
|
||||
msgid "Restart & Install"
|
||||
msgstr "Perleisti ir įdiegti"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:267
|
||||
#: ../js/ui/endSessionDialog.js:271
|
||||
msgid "Some applications are busy or have unsaved work."
|
||||
msgstr "Kai kurios programos dirba arba turi neįrašyto darbo."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:273
|
||||
#: ../js/ui/endSessionDialog.js:277
|
||||
msgid "Other users are logged in."
|
||||
msgstr "Yra prisijungusių kitų naudotojų"
|
||||
|
||||
#. Translators: Remote here refers to a remote session, like a ssh login
|
||||
#: ../js/ui/endSessionDialog.js:475
|
||||
#: ../js/ui/endSessionDialog.js:479
|
||||
#, c-format
|
||||
msgid "%s (remote)"
|
||||
msgstr "%s (nutolęs)"
|
||||
|
||||
#. Translators: Console here refers to a tty like a VT console
|
||||
#: ../js/ui/endSessionDialog.js:478
|
||||
#: ../js/ui/endSessionDialog.js:482
|
||||
#, c-format
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (komandų eilutė)"
|
||||
@@ -1234,7 +1234,7 @@ msgstr[0] "%d naujas pranešimas"
|
||||
msgstr[1] "%d nauji pranešimai"
|
||||
msgstr[2] "%d naujų pranešimų"
|
||||
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:331
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
|
||||
msgid "Lock"
|
||||
msgstr "Užrakinti"
|
||||
|
||||
@@ -1257,11 +1257,11 @@ msgstr "Nepavyksta užrakinti"
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Programa užblokavo užrakinimą"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Ieškoma…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "Nerasta atitikmenų."
|
||||
|
||||
@@ -1342,7 +1342,7 @@ msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
|
||||
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
|
||||
msgid "Turn Off"
|
||||
msgstr "Išjungti"
|
||||
|
||||
@@ -1440,83 +1440,83 @@ msgstr "Rodyti klaviatūros išdėstymą"
|
||||
msgid "<unknown>"
|
||||
msgstr "<nežinoma>"
|
||||
|
||||
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
|
||||
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
|
||||
msgid "Off"
|
||||
msgstr "Išjungta"
|
||||
|
||||
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
|
||||
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
|
||||
#: ../js/ui/status/rfkill.js:49
|
||||
msgid "Network Settings"
|
||||
msgstr "Tinklo nustatymai"
|
||||
|
||||
#. 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:357
|
||||
#: ../js/ui/status/network.js:364
|
||||
msgid "unmanaged"
|
||||
msgstr "nevaldomas"
|
||||
|
||||
#: ../js/ui/status/network.js:359
|
||||
#: ../js/ui/status/network.js:366
|
||||
msgid "disconnecting..."
|
||||
msgstr "atsijungiama..."
|
||||
|
||||
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
|
||||
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
|
||||
msgid "connecting..."
|
||||
msgstr "jungiamasi..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
|
||||
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
|
||||
msgid "authentication required"
|
||||
msgstr "reikia patvirtinti tapatybę"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:376
|
||||
#: ../js/ui/status/network.js:383
|
||||
msgid "firmware missing"
|
||||
msgstr "Trūksta integruotos programinės įrangos (firmware)"
|
||||
|
||||
#. 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:380
|
||||
#: ../js/ui/status/network.js:387
|
||||
msgid "unavailable"
|
||||
msgstr "nepasiekiamas"
|
||||
|
||||
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
|
||||
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
|
||||
msgid "connection failed"
|
||||
msgstr "nepavyko prisijungti"
|
||||
|
||||
#: ../js/ui/status/network.js:647
|
||||
#: ../js/ui/status/network.js:654
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Wi-Fi tinklai"
|
||||
|
||||
#: ../js/ui/status/network.js:649
|
||||
#: ../js/ui/status/network.js:656
|
||||
msgid "Select a network"
|
||||
msgstr "Pasirinkite tinklą"
|
||||
|
||||
#: ../js/ui/status/network.js:673
|
||||
#: ../js/ui/status/network.js:680
|
||||
msgid "No Networks"
|
||||
msgstr "Nėra tinklų"
|
||||
|
||||
#: ../js/ui/status/network.js:942
|
||||
#: ../js/ui/status/network.js:949
|
||||
msgid "Select Network"
|
||||
msgstr "Pasirinkite tinklą"
|
||||
|
||||
#: ../js/ui/status/network.js:1027
|
||||
#: ../js/ui/status/network.js:1034
|
||||
msgid "Turn On"
|
||||
msgstr "Įjungti"
|
||||
|
||||
#: ../js/ui/status/network.js:1160
|
||||
#: ../js/ui/status/network.js:1167
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1296
|
||||
#: ../js/ui/status/network.js:1306
|
||||
msgid "Network Manager"
|
||||
msgstr "Tinklo valdymas"
|
||||
|
||||
#: ../js/ui/status/network.js:1338
|
||||
#: ../js/ui/status/network.js:1345
|
||||
msgid "Connection failed"
|
||||
msgstr "Nepavyko prisijungti"
|
||||
|
||||
#: ../js/ui/status/network.js:1339
|
||||
#: ../js/ui/status/network.js:1346
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Tinklo ryšio nepavyko aktyvuoti"
|
||||
|
||||
@@ -1562,23 +1562,23 @@ msgstr "Skrydžio veiksena"
|
||||
msgid "On"
|
||||
msgstr "Įjungta"
|
||||
|
||||
#: ../js/ui/status/system.js:303
|
||||
#: ../js/ui/status/system.js:305
|
||||
msgid "Switch User"
|
||||
msgstr "Keisti naudotoją"
|
||||
|
||||
#: ../js/ui/status/system.js:308
|
||||
#: ../js/ui/status/system.js:310
|
||||
msgid "Log Out"
|
||||
msgstr "Atsijungti"
|
||||
|
||||
#: ../js/ui/status/system.js:327
|
||||
#: ../js/ui/status/system.js:329
|
||||
msgid "Orientation Lock"
|
||||
msgstr "Padėties užrakinimas"
|
||||
|
||||
#: ../js/ui/status/system.js:335
|
||||
#: ../js/ui/status/system.js:337
|
||||
msgid "Suspend"
|
||||
msgstr "Užmigdyti"
|
||||
|
||||
#: ../js/ui/status/system.js:338
|
||||
#: ../js/ui/status/system.js:340
|
||||
msgid "Power Off"
|
||||
msgstr "Išjungti"
|
||||
|
||||
@@ -1712,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ą"
|
||||
|
||||
|
154
po/nb.po
154
po/nb.po
@@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell 3.9.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-27 20:18+0200\n"
|
||||
"PO-Revision-Date: 2013-08-27 20:19+0200\n"
|
||||
"POT-Creation-Date: 2013-09-08 11:22+0200\n"
|
||||
"PO-Revision-Date: 2013-09-08 11:23+0200\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
|
||||
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
|
||||
"Language: \n"
|
||||
@@ -257,9 +257,9 @@ msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "Velg en utvidelse som skal konfigureres med komboboksen over."
|
||||
|
||||
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
|
||||
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:347
|
||||
#: ../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:679
|
||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
@@ -281,20 +281,16 @@ msgstr "Logg inn"
|
||||
msgid "Choose Session"
|
||||
msgstr "Velg økt"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:312
|
||||
msgid "Session"
|
||||
msgstr "Økt"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:458
|
||||
#: ../js/gdm/loginDialog.js:454
|
||||
msgid "Not listed?"
|
||||
msgstr "Ikke listet?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: ../js/gdm/loginDialog.js:625
|
||||
#: ../js/gdm/loginDialog.js:622
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(f.eks. bruker eller %s)"
|
||||
@@ -302,12 +298,12 @@ msgstr "(f.eks. bruker eller %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:630 ../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 "Brukernavn: "
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:891
|
||||
msgid "Login Window"
|
||||
msgstr "Innloggingsvindu"
|
||||
|
||||
@@ -339,23 +335,27 @@ msgstr "Klarte ikke å lese kommando:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Kjøring av «%s» feilet:"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../js/ui/appDisplay.js:573
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Ofte brukte programmer vil vises her"
|
||||
|
||||
#: ../js/ui/appDisplay.js:689
|
||||
msgid "Frequent"
|
||||
msgstr "Ofte"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:696
|
||||
msgid "All"
|
||||
msgstr "Alle"
|
||||
|
||||
#: ../js/ui/appDisplay.js:991
|
||||
#: ../js/ui/appDisplay.js:1491
|
||||
msgid "New Window"
|
||||
msgstr "Nytt vindu"
|
||||
|
||||
#: ../js/ui/appDisplay.js:994 ../js/ui/dash.js:284
|
||||
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Fjern fra favoritter"
|
||||
|
||||
#: ../js/ui/appDisplay.js:995
|
||||
#: ../js/ui/appDisplay.js:1495
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Legg til i favoritter"
|
||||
|
||||
@@ -369,7 +369,7 @@ msgstr "%s ble lagt til i dine favoritter."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s ble fjernet fra dine favoritter."
|
||||
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:323
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
|
||||
msgid "Settings"
|
||||
msgstr "Innstillinger"
|
||||
|
||||
@@ -493,36 +493,44 @@ msgctxt "list saturday"
|
||||
msgid "S"
|
||||
msgstr "Lø"
|
||||
|
||||
#: ../js/ui/calendar.js:447
|
||||
msgid "Previous month"
|
||||
msgstr "Forrige måned"
|
||||
|
||||
#: ../js/ui/calendar.js:457
|
||||
msgid "Next month"
|
||||
msgstr "Neste måned"
|
||||
|
||||
#. Translators: Text to show if there are no events
|
||||
#: ../js/ui/calendar.js:750
|
||||
#: ../js/ui/calendar.js:753
|
||||
msgid "Nothing Scheduled"
|
||||
msgstr "Ingenting planlagt"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:768
|
||||
#: ../js/ui/calendar.js:771
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A %B %d"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:771
|
||||
#: ../js/ui/calendar.js:774
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A %B %d, %Y"
|
||||
|
||||
#: ../js/ui/calendar.js:782
|
||||
#: ../js/ui/calendar.js:785
|
||||
msgid "Today"
|
||||
msgstr "I dag"
|
||||
|
||||
#: ../js/ui/calendar.js:786
|
||||
#: ../js/ui/calendar.js:789
|
||||
msgid "Tomorrow"
|
||||
msgstr "I morgen"
|
||||
|
||||
#: ../js/ui/calendar.js:797
|
||||
#: ../js/ui/calendar.js:800
|
||||
msgid "This week"
|
||||
msgstr "Denne uken"
|
||||
|
||||
#: ../js/ui/calendar.js:805
|
||||
#: ../js/ui/calendar.js:808
|
||||
msgid "Next week"
|
||||
msgstr "Neste uke"
|
||||
|
||||
@@ -556,7 +564,7 @@ msgid "Type again:"
|
||||
msgstr "Skriv på nytt:"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
|
||||
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
|
||||
msgid "Connect"
|
||||
msgstr "Koble til"
|
||||
|
||||
@@ -901,7 +909,7 @@ msgstr "Vis programmer"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/dash.js:439
|
||||
#: ../js/ui/dash.js:442
|
||||
msgid "Dash"
|
||||
msgstr "Favoritter"
|
||||
|
||||
@@ -954,74 +962,78 @@ msgctxt "button"
|
||||
msgid "Log Out"
|
||||
msgstr "Logg ut"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgctxt "title"
|
||||
msgid "Power Off"
|
||||
msgstr "Slå av"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:82
|
||||
#: ../js/ui/endSessionDialog.js:83
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
msgstr[0] "Systemet vil slås av automatisk om %d sekund."
|
||||
msgstr[1] "Systemet vil slås av automatisk om %d sekunder."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87 ../js/ui/endSessionDialog.js:102
|
||||
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
|
||||
msgctxt "button"
|
||||
msgid "Restart"
|
||||
msgstr "Start på nytt"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
msgctxt "button"
|
||||
msgid "Power Off"
|
||||
msgstr "Slå av"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:95
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
msgctxt "title"
|
||||
msgid "Restart"
|
||||
msgstr "Start på nytt"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:99
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
msgstr[0] "Systemet vil starte på nytt automatisk om %d sekund."
|
||||
msgstr[1] "Systemet vil starte på nytt automatisk om %d sekunder."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:109
|
||||
#: ../js/ui/endSessionDialog.js:112
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Updates"
|
||||
msgstr "Start på nytt og installer oppdateringer"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:111
|
||||
#: ../js/ui/endSessionDialog.js:114
|
||||
#, c-format
|
||||
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] "Systemet vil starte på nytt og installere oppdateringer automatisk om %d sekund."
|
||||
msgstr[1] "Systemet vil starte på nytt og installere oppdateringer automatisk om %d sekunder."
|
||||
msgstr[0] ""
|
||||
"Systemet vil starte på nytt og installere oppdateringer automatisk om %d "
|
||||
"sekund."
|
||||
msgstr[1] ""
|
||||
"Systemet vil starte på nytt og installere oppdateringer automatisk om %d "
|
||||
"sekunder."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:116
|
||||
#: ../js/ui/endSessionDialog.js:119
|
||||
msgctxt "button"
|
||||
msgid "Restart & Install"
|
||||
msgstr "Start på nytt og installer"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:267
|
||||
#: ../js/ui/endSessionDialog.js:271
|
||||
msgid "Some applications are busy or have unsaved work."
|
||||
msgstr "Noen programmer er opptatt eller har arbeid som ikke er lagret."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:273
|
||||
#: ../js/ui/endSessionDialog.js:277
|
||||
msgid "Other users are logged in."
|
||||
msgstr "Andre brukere er logget inn."
|
||||
|
||||
#. Translators: Remote here refers to a remote session, like a ssh login
|
||||
#: ../js/ui/endSessionDialog.js:475
|
||||
#: ../js/ui/endSessionDialog.js:479
|
||||
#, c-format
|
||||
msgid "%s (remote)"
|
||||
msgstr "%s (ekstern)"
|
||||
|
||||
#. Translators: Console here refers to a tty like a VT console
|
||||
#: ../js/ui/endSessionDialog.js:478
|
||||
#: ../js/ui/endSessionDialog.js:482
|
||||
#, c-format
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (konsoll)"
|
||||
@@ -1115,7 +1127,7 @@ msgstr "Ingen meldinger"
|
||||
msgid "Message Tray"
|
||||
msgstr "Meldingstrau"
|
||||
|
||||
#: ../js/ui/messageTray.js:2786
|
||||
#: ../js/ui/messageTray.js:2787
|
||||
msgid "System Information"
|
||||
msgstr "Systeminformasjon"
|
||||
|
||||
@@ -1161,7 +1173,7 @@ msgstr "Aktiviteter"
|
||||
msgid "Settings Menu"
|
||||
msgstr "Meny for innstillinger"
|
||||
|
||||
#: ../js/ui/panel.js:892
|
||||
#: ../js/ui/panel.js:901
|
||||
msgid "Top Bar"
|
||||
msgstr "Topp-panel"
|
||||
|
||||
@@ -1195,7 +1207,7 @@ msgid_plural "%d new notifications"
|
||||
msgstr[0] "%d ny varsling"
|
||||
msgstr[1] "%d nye varslinger"
|
||||
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:331
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
|
||||
msgid "Lock"
|
||||
msgstr "Lås"
|
||||
|
||||
@@ -1218,11 +1230,11 @@ msgstr "Kan ikke låse"
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Låsing ble stoppet av et program"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Søker …"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "Ingen resultater."
|
||||
|
||||
@@ -1303,7 +1315,7 @@ msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
|
||||
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
|
||||
msgid "Turn Off"
|
||||
msgstr "Slå av"
|
||||
|
||||
@@ -1400,83 +1412,83 @@ msgstr "Vis tastaturutforming"
|
||||
msgid "<unknown>"
|
||||
msgstr "<ukjent>"
|
||||
|
||||
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
|
||||
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
|
||||
msgid "Off"
|
||||
msgstr "Av"
|
||||
|
||||
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
|
||||
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
|
||||
#: ../js/ui/status/rfkill.js:49
|
||||
msgid "Network Settings"
|
||||
msgstr "Innstillinger for nettverk"
|
||||
|
||||
#. 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:357
|
||||
#: ../js/ui/status/network.js:364
|
||||
msgid "unmanaged"
|
||||
msgstr "ikke håndtert"
|
||||
|
||||
#: ../js/ui/status/network.js:359
|
||||
#: ../js/ui/status/network.js:366
|
||||
msgid "disconnecting..."
|
||||
msgstr "kobler fra …"
|
||||
|
||||
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
|
||||
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
|
||||
msgid "connecting..."
|
||||
msgstr "kobler til …"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
|
||||
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
|
||||
msgid "authentication required"
|
||||
msgstr "autentisering kreves"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:376
|
||||
#: ../js/ui/status/network.js:383
|
||||
msgid "firmware missing"
|
||||
msgstr "fastvare mangler"
|
||||
|
||||
#. 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:380
|
||||
#: ../js/ui/status/network.js:387
|
||||
msgid "unavailable"
|
||||
msgstr "ikke tilgjengelig"
|
||||
|
||||
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
|
||||
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
|
||||
msgid "connection failed"
|
||||
msgstr "tilkobling feilet"
|
||||
|
||||
#: ../js/ui/status/network.js:647
|
||||
#: ../js/ui/status/network.js:654
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Wi-Fi nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:649
|
||||
#: ../js/ui/status/network.js:656
|
||||
msgid "Select a network"
|
||||
msgstr "Velg et nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:673
|
||||
#: ../js/ui/status/network.js:680
|
||||
msgid "No Networks"
|
||||
msgstr "Ingen nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:942
|
||||
#: ../js/ui/status/network.js:949
|
||||
msgid "Select Network"
|
||||
msgstr "Velg nettverk"
|
||||
|
||||
#: ../js/ui/status/network.js:1027
|
||||
#: ../js/ui/status/network.js:1034
|
||||
msgid "Turn On"
|
||||
msgstr "Slå på"
|
||||
|
||||
#: ../js/ui/status/network.js:1160
|
||||
#: ../js/ui/status/network.js:1167
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1296
|
||||
#: ../js/ui/status/network.js:1306
|
||||
msgid "Network Manager"
|
||||
msgstr "Nettverkshåndtering"
|
||||
|
||||
#: ../js/ui/status/network.js:1338
|
||||
#: ../js/ui/status/network.js:1345
|
||||
msgid "Connection failed"
|
||||
msgstr "Tilkobling feilet"
|
||||
|
||||
#: ../js/ui/status/network.js:1339
|
||||
#: ../js/ui/status/network.js:1346
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Aktivering av nettverkstilkobling feilet"
|
||||
|
||||
@@ -1522,23 +1534,23 @@ msgstr "Flymodus"
|
||||
msgid "On"
|
||||
msgstr "På"
|
||||
|
||||
#: ../js/ui/status/system.js:303
|
||||
#: ../js/ui/status/system.js:305
|
||||
msgid "Switch User"
|
||||
msgstr "Bytt bruker"
|
||||
|
||||
#: ../js/ui/status/system.js:308
|
||||
#: ../js/ui/status/system.js:310
|
||||
msgid "Log Out"
|
||||
msgstr "Logg ut"
|
||||
|
||||
#: ../js/ui/status/system.js:327
|
||||
#: ../js/ui/status/system.js:329
|
||||
msgid "Orientation Lock"
|
||||
msgstr "Lås for orientering"
|
||||
|
||||
#: ../js/ui/status/system.js:335
|
||||
#: ../js/ui/status/system.js:337
|
||||
msgid "Suspend"
|
||||
msgstr "Hvilemodus"
|
||||
|
||||
#: ../js/ui/status/system.js:338
|
||||
#: ../js/ui/status/system.js:340
|
||||
msgid "Power Off"
|
||||
msgstr "Slå av"
|
||||
|
||||
|
22
po/pl.po
22
po/pl.po
@@ -12,8 +12,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-31 22:32+0200\n"
|
||||
"PO-Revision-Date: 2013-08-31 22:33+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"
|
||||
@@ -365,23 +365,27 @@ msgstr "Nie można przetworzyć polecenia:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Wykonanie polecenia \"%s\" się nie powiodło:"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../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:696
|
||||
msgid "Frequent"
|
||||
msgstr "Często używane"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:703
|
||||
msgid "All"
|
||||
msgstr "Wszystkie"
|
||||
|
||||
#: ../js/ui/appDisplay.js:991
|
||||
#: ../js/ui/appDisplay.js:1490
|
||||
msgid "New Window"
|
||||
msgstr "Nowe okno"
|
||||
|
||||
#: ../js/ui/appDisplay.js:994 ../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:995
|
||||
#: ../js/ui/appDisplay.js:1494
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Dodaj do ulubionych"
|
||||
|
||||
@@ -1264,11 +1268,11 @@ msgstr "Nie można zablokować"
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Blokowanie zostało zablokowane przez program"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Wyszukiwanie…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "Brak wyników."
|
||||
|
||||
|
85
po/pt_BR.po
85
po/pt_BR.po
@@ -19,16 +19,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-08-30 13:59+0000\n"
|
||||
"PO-Revision-Date: 2013-08-28 19:33-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"
|
||||
"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.4\n"
|
||||
"X-Generator: Poedit 1.5.7\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: ../data/50-gnome-shell-system.xml.in.h:1
|
||||
@@ -294,7 +294,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:679
|
||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@@ -316,20 +316,16 @@ msgstr "Entrar"
|
||||
msgid "Choose Session"
|
||||
msgstr "Escolher sessão"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:312
|
||||
msgid "Session"
|
||||
msgstr "Sessão"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:458
|
||||
#: ../js/gdm/loginDialog.js:454
|
||||
msgid "Not listed?"
|
||||
msgstr "Não está listado?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: ../js/gdm/loginDialog.js:626
|
||||
#: ../js/gdm/loginDialog.js:622
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(ex.: usuário ou %s)"
|
||||
@@ -337,12 +333,12 @@ msgstr "(ex.: usuário ou %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:631 ../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 "Nome de usuário: "
|
||||
|
||||
#: ../js/gdm/loginDialog.js:895
|
||||
#: ../js/gdm/loginDialog.js:891
|
||||
msgid "Login Window"
|
||||
msgstr "Janela de sessão"
|
||||
|
||||
@@ -374,23 +370,27 @@ msgstr "Não foi possível analisar comando:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "A execução de \"%s\" falhou:"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../js/ui/appDisplay.js:578
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Aplicativos usados frequentemente vão aparecer aqui"
|
||||
|
||||
#: ../js/ui/appDisplay.js:694
|
||||
msgid "Frequent"
|
||||
msgstr "Frequente"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:701
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:991
|
||||
#: ../js/ui/appDisplay.js:1488
|
||||
msgid "New Window"
|
||||
msgstr "Nova janela"
|
||||
|
||||
#: ../js/ui/appDisplay.js:994 ../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:995
|
||||
#: ../js/ui/appDisplay.js:1492
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Adicionar aos favoritos"
|
||||
|
||||
@@ -599,7 +599,7 @@ msgid "Type again:"
|
||||
msgstr "Digite novamente:"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
|
||||
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
|
||||
msgid "Connect"
|
||||
msgstr "Conectar"
|
||||
|
||||
@@ -944,7 +944,7 @@ msgstr "Mostrar aplicativos"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/dash.js:439
|
||||
#: ../js/ui/dash.js:442
|
||||
msgid "Dash"
|
||||
msgstr "Dash"
|
||||
|
||||
@@ -1266,11 +1266,11 @@ msgstr "Não foi possível bloquear"
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "O bloqueio foi impedido por um aplicativo"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Pesquisando…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "Nenhum resultado."
|
||||
|
||||
@@ -1351,7 +1351,7 @@ msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
|
||||
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
|
||||
msgid "Turn Off"
|
||||
msgstr "Desligar"
|
||||
|
||||
@@ -1450,83 +1450,83 @@ msgstr "Exibir disposição de teclado"
|
||||
msgid "<unknown>"
|
||||
msgstr "<desconhecido>"
|
||||
|
||||
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
|
||||
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
|
||||
msgid "Off"
|
||||
msgstr "Desligar"
|
||||
|
||||
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
|
||||
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
|
||||
#: ../js/ui/status/rfkill.js:49
|
||||
msgid "Network Settings"
|
||||
msgstr "Configurações de rede"
|
||||
|
||||
#. 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:357
|
||||
#: ../js/ui/status/network.js:364
|
||||
msgid "unmanaged"
|
||||
msgstr "não gerenciado"
|
||||
|
||||
#: ../js/ui/status/network.js:359
|
||||
#: ../js/ui/status/network.js:366
|
||||
msgid "disconnecting..."
|
||||
msgstr "desconectando..."
|
||||
|
||||
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
|
||||
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
|
||||
msgid "connecting..."
|
||||
msgstr "conectando..."
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
|
||||
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
|
||||
msgid "authentication required"
|
||||
msgstr "autenticação necessária"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:376
|
||||
#: ../js/ui/status/network.js:383
|
||||
msgid "firmware missing"
|
||||
msgstr "firmware faltando"
|
||||
|
||||
#. 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:380
|
||||
#: ../js/ui/status/network.js:387
|
||||
msgid "unavailable"
|
||||
msgstr "indisponível"
|
||||
|
||||
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
|
||||
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
|
||||
msgid "connection failed"
|
||||
msgstr "conexão falhou"
|
||||
|
||||
#: ../js/ui/status/network.js:647
|
||||
#: ../js/ui/status/network.js:654
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Redes Wi-Fi"
|
||||
|
||||
#: ../js/ui/status/network.js:649
|
||||
#: ../js/ui/status/network.js:656
|
||||
msgid "Select a network"
|
||||
msgstr "Selecione uma rede"
|
||||
|
||||
#: ../js/ui/status/network.js:673
|
||||
#: ../js/ui/status/network.js:680
|
||||
msgid "No Networks"
|
||||
msgstr "Nenhuma rede"
|
||||
|
||||
#: ../js/ui/status/network.js:942
|
||||
#: ../js/ui/status/network.js:949
|
||||
msgid "Select Network"
|
||||
msgstr "Selecione a rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1027
|
||||
#: ../js/ui/status/network.js:1034
|
||||
msgid "Turn On"
|
||||
msgstr "Ligar"
|
||||
|
||||
#: ../js/ui/status/network.js:1160
|
||||
#: ../js/ui/status/network.js:1167
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1299
|
||||
#: ../js/ui/status/network.js:1306
|
||||
msgid "Network Manager"
|
||||
msgstr "Gerenciador de rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1338
|
||||
#: ../js/ui/status/network.js:1345
|
||||
msgid "Connection failed"
|
||||
msgstr "Falha de conexão"
|
||||
|
||||
#: ../js/ui/status/network.js:1339
|
||||
#: ../js/ui/status/network.js:1346
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Falha ao ativar a conexão da rede"
|
||||
|
||||
@@ -1720,6 +1720,9 @@ msgstr "A senha não pode estar em branco"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "O diálogo de autenticação foi descartado pelo usuário"
|
||||
|
||||
#~ msgid "Session"
|
||||
#~ msgstr "Sessão"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Internally used to store the last IM presence explicitly set by the user. "
|
||||
#~ "The value here is from the TpConnectionPresenceType enumeration."
|
||||
|
147
po/sk.po
147
po/sk.po
@@ -10,8 +10,8 @@ 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-08-27 18:20+0000\n"
|
||||
"PO-Revision-Date: 2013-08-27 22:08+0200\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"
|
||||
"Language: sk\n"
|
||||
@@ -290,9 +290,9 @@ msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "Použitím ponuky vyberte rozšírenie na nastavenie"
|
||||
|
||||
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
|
||||
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:347
|
||||
#: ../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:679
|
||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušiť"
|
||||
|
||||
@@ -315,21 +315,17 @@ msgstr "Prihlásiť sa"
|
||||
msgid "Choose Session"
|
||||
msgstr "Vybrať reláciu"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:312
|
||||
msgid "Session"
|
||||
msgstr "Relácia"
|
||||
|
||||
# https://bugzilla.gnome.org/show_bug.cgi?id=659972
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:458
|
||||
#: ../js/gdm/loginDialog.js:454
|
||||
msgid "Not listed?"
|
||||
msgstr "Nie ste v zozname?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: ../js/gdm/loginDialog.js:625
|
||||
#: ../js/gdm/loginDialog.js:622
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(napr., používateľ alebo %s)"
|
||||
@@ -337,12 +333,12 @@ msgstr "(napr., používateľ alebo %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:630 ../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 "Používateľské meno: "
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:891
|
||||
msgid "Login Window"
|
||||
msgstr "Prihlasovacie okno"
|
||||
|
||||
@@ -374,23 +370,27 @@ msgstr "Nepodarilo sa analyzovať príkaz:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Spustenie „%s“ zlyhalo:"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../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:696
|
||||
msgid "Frequent"
|
||||
msgstr "Často používané"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:703
|
||||
msgid "All"
|
||||
msgstr "Všetky"
|
||||
|
||||
#: ../js/ui/appDisplay.js:991
|
||||
#: ../js/ui/appDisplay.js:1490
|
||||
msgid "New Window"
|
||||
msgstr "Nové okno"
|
||||
|
||||
#: ../js/ui/appDisplay.js:994 ../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:995
|
||||
#: ../js/ui/appDisplay.js:1494
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Pridať do obľúbených"
|
||||
|
||||
@@ -404,7 +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/status/system.js:323
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
|
||||
msgid "Settings"
|
||||
msgstr "Nastavenia"
|
||||
|
||||
@@ -528,36 +528,44 @@ msgctxt "list saturday"
|
||||
msgid "S"
|
||||
msgstr "So"
|
||||
|
||||
#: ../js/ui/calendar.js:447
|
||||
msgid "Previous month"
|
||||
msgstr "Predchádzajúci mesiac"
|
||||
|
||||
#: ../js/ui/calendar.js:457
|
||||
msgid "Next month"
|
||||
msgstr "Nasledujúci mesiac"
|
||||
|
||||
#. Translators: Text to show if there are no events
|
||||
#: ../js/ui/calendar.js:750
|
||||
#: ../js/ui/calendar.js:753
|
||||
msgid "Nothing Scheduled"
|
||||
msgstr "Žiadne naplánované udalosti"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||
#: ../js/ui/calendar.js:768
|
||||
#: ../js/ui/calendar.js:771
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d"
|
||||
msgstr "%A, %e. %B"
|
||||
|
||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||
#: ../js/ui/calendar.js:771
|
||||
#: ../js/ui/calendar.js:774
|
||||
msgctxt "calendar heading"
|
||||
msgid "%A, %B %d, %Y"
|
||||
msgstr "%A, %e. %B %Y"
|
||||
|
||||
#: ../js/ui/calendar.js:782
|
||||
#: ../js/ui/calendar.js:785
|
||||
msgid "Today"
|
||||
msgstr "Dnes"
|
||||
|
||||
#: ../js/ui/calendar.js:786
|
||||
#: ../js/ui/calendar.js:789
|
||||
msgid "Tomorrow"
|
||||
msgstr "Zajtra"
|
||||
|
||||
#: ../js/ui/calendar.js:797
|
||||
#: ../js/ui/calendar.js:800
|
||||
msgid "This week"
|
||||
msgstr "Tento týždeň"
|
||||
|
||||
#: ../js/ui/calendar.js:805
|
||||
#: ../js/ui/calendar.js:808
|
||||
msgid "Next week"
|
||||
msgstr "Ďalší týždeň"
|
||||
|
||||
@@ -592,7 +600,7 @@ msgid "Type again:"
|
||||
msgstr "Zadajte znovu:"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
|
||||
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
|
||||
msgid "Connect"
|
||||
msgstr "Pripojiť"
|
||||
|
||||
@@ -939,7 +947,7 @@ msgstr "Zobrazí aplikácie"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/dash.js:439
|
||||
#: ../js/ui/dash.js:442
|
||||
msgid "Dash"
|
||||
msgstr "Dok"
|
||||
|
||||
@@ -994,12 +1002,12 @@ msgctxt "button"
|
||||
msgid "Log Out"
|
||||
msgstr "Odhlásiť sa"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgctxt "title"
|
||||
msgid "Power Off"
|
||||
msgstr "Vypnutie"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:82
|
||||
#: ../js/ui/endSessionDialog.js:83
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
@@ -1007,22 +1015,22 @@ msgstr[0] "Systém sa automaticky vypne o %d sekúnd."
|
||||
msgstr[1] "Systém sa automaticky vypne o %d sekundu."
|
||||
msgstr[2] "Systém sa automaticky vypne o %d sekundy."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87 ../js/ui/endSessionDialog.js:102
|
||||
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
|
||||
msgctxt "button"
|
||||
msgid "Restart"
|
||||
msgstr "Reštartovať"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
msgctxt "button"
|
||||
msgid "Power Off"
|
||||
msgstr "Vypnúť"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:95
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
msgctxt "title"
|
||||
msgid "Restart"
|
||||
msgstr "Reštart"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:99
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
@@ -1030,12 +1038,12 @@ msgstr[0] "Systém sa automaticky reštartuje o %d sekúnd."
|
||||
msgstr[1] "Systém sa automaticky reštartuje o %d sekundu."
|
||||
msgstr[2] "Systém sa automaticky reštartuje o %d sekundy."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:109
|
||||
#: ../js/ui/endSessionDialog.js:112
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Updates"
|
||||
msgstr "Reštart a inštalácia aktualizácií"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:111
|
||||
#: ../js/ui/endSessionDialog.js:114
|
||||
#, c-format
|
||||
msgid "The system will automatically restart and install updates in %d second."
|
||||
msgid_plural ""
|
||||
@@ -1047,27 +1055,27 @@ msgstr[1] ""
|
||||
msgstr[2] ""
|
||||
"Systém sa automaticky reštartuje a nainštaluje aktualizácie o %d sekundy."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:116
|
||||
#: ../js/ui/endSessionDialog.js:119
|
||||
msgctxt "button"
|
||||
msgid "Restart & Install"
|
||||
msgstr "Reštartovať a inštalovať"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:267
|
||||
#: ../js/ui/endSessionDialog.js:271
|
||||
msgid "Some applications are busy or have unsaved work."
|
||||
msgstr "Niektoré aplikácie sú zaneprázdnené, alebo obsahujú neuloženú prácu."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:273
|
||||
#: ../js/ui/endSessionDialog.js:277
|
||||
msgid "Other users are logged in."
|
||||
msgstr "Sú prihlásení iní používatelia."
|
||||
|
||||
#. Translators: Remote here refers to a remote session, like a ssh login
|
||||
#: ../js/ui/endSessionDialog.js:475
|
||||
#: ../js/ui/endSessionDialog.js:479
|
||||
#, c-format
|
||||
msgid "%s (remote)"
|
||||
msgstr "%s (vzdialená relácia)"
|
||||
|
||||
#. Translators: Console here refers to a tty like a VT console
|
||||
#: ../js/ui/endSessionDialog.js:478
|
||||
#: ../js/ui/endSessionDialog.js:482
|
||||
#, c-format
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (konzola)"
|
||||
@@ -1213,7 +1221,7 @@ msgstr "Aktivity"
|
||||
msgid "Settings Menu"
|
||||
msgstr "Ponuka nastavení"
|
||||
|
||||
#: ../js/ui/panel.js:892
|
||||
#: ../js/ui/panel.js:901
|
||||
msgid "Top Bar"
|
||||
msgstr "Horná lišta"
|
||||
|
||||
@@ -1251,7 +1259,7 @@ msgstr[0] "%d nových oznámení"
|
||||
msgstr[1] "%d nové oznámenie"
|
||||
msgstr[2] "%d nové oznámenia"
|
||||
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:331
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
|
||||
msgid "Lock"
|
||||
msgstr "Uzamknúť"
|
||||
|
||||
@@ -1274,11 +1282,11 @@ msgstr "Nepodarilo sa uzamknúť obrazovku"
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Uzamknutie bolo zablokované aplikáciou"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Hľadá sa…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "Žiadne výsledky."
|
||||
|
||||
@@ -1362,7 +1370,7 @@ msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
|
||||
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
|
||||
msgid "Turn Off"
|
||||
msgstr "Vypnúť"
|
||||
|
||||
@@ -1464,84 +1472,84 @@ msgid "<unknown>"
|
||||
msgstr "<neznáme>"
|
||||
|
||||
# DK: pripojenie, zariadenie
|
||||
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
|
||||
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
|
||||
msgid "Off"
|
||||
msgstr "Vypnuté"
|
||||
|
||||
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
|
||||
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
|
||||
#: ../js/ui/status/rfkill.js:49
|
||||
msgid "Network Settings"
|
||||
msgstr "Nastavenia siete"
|
||||
|
||||
#. 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:357
|
||||
#: ../js/ui/status/network.js:364
|
||||
msgid "unmanaged"
|
||||
msgstr "nespravované"
|
||||
|
||||
#: ../js/ui/status/network.js:359
|
||||
#: ../js/ui/status/network.js:366
|
||||
msgid "disconnecting..."
|
||||
msgstr "odpája sa…"
|
||||
|
||||
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
|
||||
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
|
||||
msgid "connecting..."
|
||||
msgstr "pripája sa…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
|
||||
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
|
||||
msgid "authentication required"
|
||||
msgstr "požaduje sa overenie totožnosti"
|
||||
|
||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||
#. module, which is missing
|
||||
#: ../js/ui/status/network.js:376
|
||||
#: ../js/ui/status/network.js:383
|
||||
msgid "firmware missing"
|
||||
msgstr "chýba firmvér"
|
||||
|
||||
#. 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:380
|
||||
#: ../js/ui/status/network.js:387
|
||||
msgid "unavailable"
|
||||
msgstr "nedostupné"
|
||||
|
||||
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
|
||||
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
|
||||
msgid "connection failed"
|
||||
msgstr "pripojenie zlyhalo"
|
||||
|
||||
#: ../js/ui/status/network.js:647
|
||||
#: ../js/ui/status/network.js:654
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Siete Wi-Fi"
|
||||
|
||||
#: ../js/ui/status/network.js:649
|
||||
#: ../js/ui/status/network.js:656
|
||||
msgid "Select a network"
|
||||
msgstr "Vyberte sieť"
|
||||
|
||||
#: ../js/ui/status/network.js:673
|
||||
#: ../js/ui/status/network.js:680
|
||||
msgid "No Networks"
|
||||
msgstr "Žiadne siete"
|
||||
|
||||
# item menu
|
||||
#: ../js/ui/status/network.js:942
|
||||
#: ../js/ui/status/network.js:949
|
||||
msgid "Select Network"
|
||||
msgstr "Vybrať sieť"
|
||||
|
||||
#: ../js/ui/status/network.js:1027
|
||||
#: ../js/ui/status/network.js:1034
|
||||
msgid "Turn On"
|
||||
msgstr "Zapnúť"
|
||||
|
||||
#: ../js/ui/status/network.js:1160
|
||||
#: ../js/ui/status/network.js:1167
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1296
|
||||
#: ../js/ui/status/network.js:1306
|
||||
msgid "Network Manager"
|
||||
msgstr "Správca siete"
|
||||
|
||||
#: ../js/ui/status/network.js:1338
|
||||
#: ../js/ui/status/network.js:1345
|
||||
msgid "Connection failed"
|
||||
msgstr "Pripojenie zlyhalo"
|
||||
|
||||
#: ../js/ui/status/network.js:1339
|
||||
#: ../js/ui/status/network.js:1346
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Aktivácia pripojenia k sieti zlyhala"
|
||||
|
||||
@@ -1588,24 +1596,24 @@ msgstr "Režim v lietadle"
|
||||
msgid "On"
|
||||
msgstr "Zapnutý"
|
||||
|
||||
#: ../js/ui/status/system.js:303
|
||||
#: ../js/ui/status/system.js:305
|
||||
msgid "Switch User"
|
||||
msgstr "Prepnúť používateľa"
|
||||
|
||||
#: ../js/ui/status/system.js:308
|
||||
#: ../js/ui/status/system.js:310
|
||||
msgid "Log Out"
|
||||
msgstr "Odhlásiť sa"
|
||||
|
||||
# action button
|
||||
#: ../js/ui/status/system.js:327
|
||||
#: ../js/ui/status/system.js:329
|
||||
msgid "Orientation Lock"
|
||||
msgstr "Uzamknutie orientácie"
|
||||
|
||||
#: ../js/ui/status/system.js:335
|
||||
#: ../js/ui/status/system.js:337
|
||||
msgid "Suspend"
|
||||
msgstr "Uspať"
|
||||
|
||||
#: ../js/ui/status/system.js:338
|
||||
#: ../js/ui/status/system.js:340
|
||||
msgid "Power Off"
|
||||
msgstr "Vypnúť"
|
||||
|
||||
@@ -1743,6 +1751,9 @@ 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 "Session"
|
||||
#~ msgstr "Relácia"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Internally used to store the last IM presence explicitly set by the user. "
|
||||
#~ "The value here is from the TpConnectionPresenceType enumeration."
|
||||
|
1224
po/sr@latin.po
1224
po/sr@latin.po
File diff suppressed because it is too large
Load Diff
127
po/tg.po
127
po/tg.po
@@ -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-08-28 17:17+0000\n"
|
||||
"PO-Revision-Date: 2013-08-29 11:19+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"
|
||||
@@ -282,9 +282,9 @@ msgstr ""
|
||||
"конфигуратсия кунед."
|
||||
|
||||
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
|
||||
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:347
|
||||
#: ../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:679
|
||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
|
||||
msgid "Cancel"
|
||||
msgstr "Бекор кардан"
|
||||
|
||||
@@ -306,20 +306,16 @@ msgstr "Ворид шудан"
|
||||
msgid "Choose Session"
|
||||
msgstr "Интихоби ҷаласа"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:312
|
||||
msgid "Session"
|
||||
msgstr "Ҷаласа"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:458
|
||||
#: ../js/gdm/loginDialog.js:454
|
||||
msgid "Not listed?"
|
||||
msgstr "Вуҷуд надора?"
|
||||
|
||||
#. Translators: this message is shown below the username entry field
|
||||
#. to clue the user in on how to login to the local network realm
|
||||
#: ../js/gdm/loginDialog.js:625
|
||||
#: ../js/gdm/loginDialog.js:622
|
||||
#, c-format
|
||||
msgid "(e.g., user or %s)"
|
||||
msgstr "(масалан, корбар ё %s)"
|
||||
@@ -327,12 +323,12 @@ 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:630 ../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 "Номи корбар:"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:894
|
||||
#: ../js/gdm/loginDialog.js:891
|
||||
msgid "Login Window"
|
||||
msgstr "Равзанаи воридшавӣ"
|
||||
|
||||
@@ -364,23 +360,27 @@ msgstr "Фармон иҷро нашудааст:"
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Иҷрокунии '%s' қатъ шудааст:"
|
||||
|
||||
#: ../js/ui/appDisplay.js:386
|
||||
#: ../js/ui/appDisplay.js:573
|
||||
msgid "Frequently used applications will appear here"
|
||||
msgstr "Барномаҳои бештар истифодашуда ин ҷо намоиш дода мешаванд"
|
||||
|
||||
#: ../js/ui/appDisplay.js:689
|
||||
msgid "Frequent"
|
||||
msgstr "Роиҷ"
|
||||
|
||||
#: ../js/ui/appDisplay.js:393
|
||||
#: ../js/ui/appDisplay.js:696
|
||||
msgid "All"
|
||||
msgstr "Ҳама"
|
||||
|
||||
#: ../js/ui/appDisplay.js:991
|
||||
#: ../js/ui/appDisplay.js:1491
|
||||
msgid "New Window"
|
||||
msgstr "Равзанаи нав"
|
||||
|
||||
#: ../js/ui/appDisplay.js:994 ../js/ui/dash.js:284
|
||||
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Тоза кардан аз Баргузидаҳо"
|
||||
|
||||
#: ../js/ui/appDisplay.js:995
|
||||
#: ../js/ui/appDisplay.js:1495
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Илова кардан ба Баргузидаҳо"
|
||||
|
||||
@@ -394,7 +394,7 @@ msgstr "%s ба баргузидаҳои шумо илова шудааст."
|
||||
msgid "%s has been removed from your favorites."
|
||||
msgstr "%s аз баргузидаҳои шумо тоза шудааст."
|
||||
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:323
|
||||
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
|
||||
msgid "Settings"
|
||||
msgstr "Танзимот"
|
||||
|
||||
@@ -589,7 +589,7 @@ msgid "Type again:"
|
||||
msgstr "Аз нав ворид кунед:"
|
||||
|
||||
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
|
||||
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
|
||||
msgid "Connect"
|
||||
msgstr "Пайваст шудан"
|
||||
|
||||
@@ -934,7 +934,7 @@ msgstr "Намоиш додани барномаҳо"
|
||||
|
||||
#. Translators: this is the name of the dock/favorites area on
|
||||
#. the left of the overview
|
||||
#: ../js/ui/dash.js:439
|
||||
#: ../js/ui/dash.js:442
|
||||
msgid "Dash"
|
||||
msgstr "Рах"
|
||||
|
||||
@@ -987,46 +987,46 @@ msgctxt "button"
|
||||
msgid "Log Out"
|
||||
msgstr "Баромад"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:80
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
msgctxt "title"
|
||||
msgid "Power Off"
|
||||
msgstr "Хомӯш кардан"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:82
|
||||
#: ../js/ui/endSessionDialog.js:83
|
||||
#, c-format
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
msgstr[0] "Система ба таври худкор баъд аз %d сония корро анҷом медиҳад."
|
||||
msgstr[1] "Система ба таври худкор баъд аз %d сония корро анҷом медиҳад."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:87 ../js/ui/endSessionDialog.js:102
|
||||
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
|
||||
msgctxt "button"
|
||||
msgid "Restart"
|
||||
msgstr "Бозоғозидан"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:89
|
||||
#: ../js/ui/endSessionDialog.js:90
|
||||
msgctxt "button"
|
||||
msgid "Power Off"
|
||||
msgstr "Хомӯш кардан"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:95
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
msgctxt "title"
|
||||
msgid "Restart"
|
||||
msgstr "Бозоғозидан"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:97
|
||||
#: ../js/ui/endSessionDialog.js:99
|
||||
#, c-format
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
msgstr[0] "Система ба таври худкор баъд аз %d сония бозоғозӣ мешавад."
|
||||
msgstr[1] "Система ба таври худкор баъд аз %d сония бозоғозӣ мешавад."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:109
|
||||
#: ../js/ui/endSessionDialog.js:112
|
||||
msgctxt "title"
|
||||
msgid "Restart & Install Updates"
|
||||
msgstr "Бозоғозӣ кардан ва насб кардани навсозиҳо"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:111
|
||||
#: ../js/ui/endSessionDialog.js:114
|
||||
#, c-format
|
||||
msgid "The system will automatically restart and install updates in %d second."
|
||||
msgid_plural ""
|
||||
@@ -1038,27 +1038,27 @@ msgstr[1] ""
|
||||
"Система баъд аз %d сония ба таври худкор бозоғозӣ мешавад ва навсозиҳоро "
|
||||
"насб мекунад."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:116
|
||||
#: ../js/ui/endSessionDialog.js:119
|
||||
msgctxt "button"
|
||||
msgid "Restart & Install"
|
||||
msgstr "Бозоғозӣ ва насб кардан"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:267
|
||||
#: ../js/ui/endSessionDialog.js:271
|
||||
msgid "Some applications are busy or have unsaved work."
|
||||
msgstr "Баъзе барномаҳо банданд ё дорои корҳои захиранашуда мебошанд."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:273
|
||||
#: ../js/ui/endSessionDialog.js:277
|
||||
msgid "Other users are logged in."
|
||||
msgstr "Корбарони дигар ворид шудаанд."
|
||||
|
||||
#. Translators: Remote here refers to a remote session, like a ssh login
|
||||
#: ../js/ui/endSessionDialog.js:475
|
||||
#: ../js/ui/endSessionDialog.js:479
|
||||
#, c-format
|
||||
msgid "%s (remote)"
|
||||
msgstr "%s (дурдаст)"
|
||||
|
||||
#. Translators: Console here refers to a tty like a VT console
|
||||
#: ../js/ui/endSessionDialog.js:478
|
||||
#: ../js/ui/endSessionDialog.js:482
|
||||
#, c-format
|
||||
msgid "%s (console)"
|
||||
msgstr "%s (консол)"
|
||||
@@ -1152,7 +1152,7 @@ msgstr "Ягон паём нест"
|
||||
msgid "Message Tray"
|
||||
msgstr "Қуттии паёмҳо"
|
||||
|
||||
#: ../js/ui/messageTray.js:2786
|
||||
#: ../js/ui/messageTray.js:2787
|
||||
msgid "System Information"
|
||||
msgstr "Маълумоти система"
|
||||
|
||||
@@ -1198,7 +1198,7 @@ msgstr "Фаъолиятҳо"
|
||||
msgid "Settings Menu"
|
||||
msgstr "Менюи танзимот"
|
||||
|
||||
#: ../js/ui/panel.js:892
|
||||
#: ../js/ui/panel.js:901
|
||||
msgid "Top Bar"
|
||||
msgstr "Панели боло"
|
||||
|
||||
@@ -1232,7 +1232,7 @@ msgid_plural "%d new notifications"
|
||||
msgstr[0] "%d огоҳии нав"
|
||||
msgstr[1] "%d огоҳии нав"
|
||||
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:331
|
||||
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
|
||||
msgid "Lock"
|
||||
msgstr "Қулф кардан"
|
||||
|
||||
@@ -1255,11 +1255,11 @@ msgstr "Қулф карда намешавад"
|
||||
msgid "Lock was blocked by an application"
|
||||
msgstr "Қулф аз тарави барнома баста шудааст"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:445
|
||||
#: ../js/ui/searchDisplay.js:447
|
||||
msgid "Searching…"
|
||||
msgstr "Ҷустуҷӯ рафта истодааст..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:489
|
||||
#: ../js/ui/searchDisplay.js:491
|
||||
msgid "No results."
|
||||
msgstr "Ягон натиҷа нест."
|
||||
|
||||
@@ -1340,7 +1340,7 @@ msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
|
||||
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
|
||||
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
|
||||
msgid "Turn Off"
|
||||
msgstr "Хомӯш кардан"
|
||||
|
||||
@@ -1439,83 +1439,83 @@ msgstr "Намоиш додани тарҳбандии клавиатура"
|
||||
msgid "<unknown>"
|
||||
msgstr "<номаълум>"
|
||||
|
||||
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
|
||||
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
|
||||
msgid "Off"
|
||||
msgstr "Хомӯш"
|
||||
|
||||
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
|
||||
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
|
||||
#: ../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:357
|
||||
#: ../js/ui/status/network.js:364
|
||||
msgid "unmanaged"
|
||||
msgstr "идоранашуда"
|
||||
|
||||
#: ../js/ui/status/network.js:359
|
||||
#: ../js/ui/status/network.js:366
|
||||
msgid "disconnecting..."
|
||||
msgstr "қатъ кардани пайваст..."
|
||||
|
||||
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
|
||||
#: ../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:368 ../js/ui/status/network.js:1096
|
||||
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
|
||||
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:376
|
||||
#: ../js/ui/status/network.js:383
|
||||
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:380
|
||||
#: ../js/ui/status/network.js:387
|
||||
msgid "unavailable"
|
||||
msgstr "дастнорас"
|
||||
|
||||
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
|
||||
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
|
||||
msgid "connection failed"
|
||||
msgstr "пайваст қатъ шудааст"
|
||||
|
||||
#: ../js/ui/status/network.js:647
|
||||
#: ../js/ui/status/network.js:654
|
||||
msgid "Wi-Fi Networks"
|
||||
msgstr "Шабакаҳои Wi-Fi"
|
||||
|
||||
#: ../js/ui/status/network.js:649
|
||||
#: ../js/ui/status/network.js:656
|
||||
msgid "Select a network"
|
||||
msgstr "Интихоб кардани шабака"
|
||||
|
||||
#: ../js/ui/status/network.js:673
|
||||
#: ../js/ui/status/network.js:680
|
||||
msgid "No Networks"
|
||||
msgstr "Ягон шабака нест"
|
||||
|
||||
#: ../js/ui/status/network.js:942
|
||||
#: ../js/ui/status/network.js:949
|
||||
msgid "Select Network"
|
||||
msgstr "Интихоби шабака"
|
||||
|
||||
#: ../js/ui/status/network.js:1027
|
||||
#: ../js/ui/status/network.js:1034
|
||||
msgid "Turn On"
|
||||
msgstr "Фаъол кардан"
|
||||
|
||||
#: ../js/ui/status/network.js:1160
|
||||
#: ../js/ui/status/network.js:1167
|
||||
msgid "VPN"
|
||||
msgstr "VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1296
|
||||
#: ../js/ui/status/network.js:1306
|
||||
msgid "Network Manager"
|
||||
msgstr "Мудири шабака"
|
||||
|
||||
#: ../js/ui/status/network.js:1338
|
||||
#: ../js/ui/status/network.js:1345
|
||||
msgid "Connection failed"
|
||||
msgstr "Пайваст қатъ шудааст"
|
||||
|
||||
#: ../js/ui/status/network.js:1339
|
||||
#: ../js/ui/status/network.js:1346
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Фаъолсозии пайвасти шабака қатъ шудааст."
|
||||
|
||||
@@ -1561,23 +1561,23 @@ msgstr "Ҳолати ҳавопаймо"
|
||||
msgid "On"
|
||||
msgstr "Фаъол"
|
||||
|
||||
#: ../js/ui/status/system.js:303
|
||||
#: ../js/ui/status/system.js:305
|
||||
msgid "Switch User"
|
||||
msgstr "Таъвизи корбар"
|
||||
|
||||
#: ../js/ui/status/system.js:308
|
||||
#: ../js/ui/status/system.js:310
|
||||
msgid "Log Out"
|
||||
msgstr "Баромад"
|
||||
|
||||
#: ../js/ui/status/system.js:327
|
||||
#: ../js/ui/status/system.js:329
|
||||
msgid "Orientation Lock"
|
||||
msgstr "Қулфи самт"
|
||||
|
||||
#: ../js/ui/status/system.js:335
|
||||
#: ../js/ui/status/system.js:337
|
||||
msgid "Suspend"
|
||||
msgstr "Таваққуф"
|
||||
|
||||
#: ../js/ui/status/system.js:338
|
||||
#: ../js/ui/status/system.js:340
|
||||
msgid "Power Off"
|
||||
msgstr "Хомӯш кардан"
|
||||
|
||||
@@ -1710,6 +1710,9 @@ msgstr "Парол бояд холӣ набошад"
|
||||
msgid "Authentication dialog was dismissed by the user"
|
||||
msgstr "Равзанаи гуфтугӯи санҷиши ҳакконият бо корбар бекор карда шуд"
|
||||
|
||||
#~ msgid "Session"
|
||||
#~ msgstr "Ҷаласа"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Internally used to store the last IM presence explicitly set by the user. "
|
||||
#~ "The value here is from the TpConnectionPresenceType enumeration."
|
||||
|
1293
po/zh_HK.po
1293
po/zh_HK.po
File diff suppressed because it is too large
Load Diff
1310
po/zh_TW.po
1310
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@@ -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)"\" \
|
||||
|
@@ -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)\" \
|
||||
@@ -186,7 +189,7 @@ gnome_shell_CPPFLAGS = \
|
||||
|
||||
# Here, and after, we repeat mutter and bluetooth libraries just for the rpath
|
||||
# The dependency is already pulled in by libtool
|
||||
gnome_shell_LDADD = libgnome-shell.la libgnome-shell-js.la $(MUTTER_LIBS) $(BLUETOOTH_LIBS)
|
||||
gnome_shell_LDADD = libgnome-shell.la libgnome-shell-js.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS) $(BLUETOOTH_LIBS)
|
||||
gnome_shell_DEPENDENCIES = libgnome-shell.la
|
||||
|
||||
if HAVE_MUTTER_WAYLAND
|
||||
@@ -199,7 +202,7 @@ gnome_shell_wayland_CPPFLAGS = \
|
||||
$(MUTTER_WAYLAND_CFLAGS) \
|
||||
$(gnome_shell_cflags)
|
||||
|
||||
gnome_shell_wayland_LDADD = libgnome-shell-wayland.la libgnome-shell-js.la $(MUTTER_WAYLAND_LIBS) $(BLUETOOTH_LIBS)
|
||||
gnome_shell_wayland_LDADD = libgnome-shell-wayland.la libgnome-shell-js.la $(GNOME_SHELL_LIBS) $(MUTTER_WAYLAND_LIBS) $(BLUETOOTH_LIBS)
|
||||
gnome_shell_wayland_DEPENDENCIES = libgnome-shell-wayland.la
|
||||
endif HAVE_MUTTER_WAYLAND
|
||||
|
||||
@@ -229,7 +232,7 @@ shell_recorder_sources = \
|
||||
# Custom element is an internal detail
|
||||
|
||||
if BUILD_RECORDER
|
||||
libgnome_shell_la_SOURCES += $(shell_recorder_sources)
|
||||
libgnome_shell_sources += $(shell_recorder_sources)
|
||||
|
||||
shell_recorder_private_sources = \
|
||||
shell-recorder-src.c \
|
||||
@@ -253,7 +256,7 @@ gnome_shell_perf_helper_LDADD = $(SHELL_PERF_HELPER_LIBS)
|
||||
noinst_PROGRAMS += run-js-test
|
||||
|
||||
run_js_test_CPPFLAGS = $(MUTTER_CFLAGS) $(gnome_shell_cflags)
|
||||
run_js_test_LDADD = libgnome-shell.la $(MUTTER_LIBS) $(BLUETOOTH_LIBS)
|
||||
run_js_test_LDADD = libgnome-shell.la $(GNOME_SHELL_JS_LIBS) $(MUTTER_LIBS) $(BLUETOOTH_LIBS)
|
||||
run_js_test_LDFLAGS = -export-dynamic
|
||||
|
||||
run_js_test_SOURCES = \
|
||||
@@ -293,6 +296,7 @@ libgnome_shell_libadd = \
|
||||
gvc/libgvc.la \
|
||||
$(NULL)
|
||||
|
||||
libgnome_shell_menu_la_LDFLAGS = $(libgnome_shell_ldflags)
|
||||
libgnome_shell_menu_la_LIBADD = $(GNOME_SHELL_LIBS)
|
||||
libgnome_shell_menu_la_CPPFLAGS = $(GNOME_SHELL_CFLAGS)
|
||||
|
||||
@@ -300,7 +304,7 @@ libgnome_shell_base_la_LIBADD = $(libgnome_shell_libadd)
|
||||
libgnome_shell_base_la_CPPFLAGS = $(gnome_shell_cflags)
|
||||
|
||||
libgnome_shell_la_LDFLAGS = $(libgnome_shell_ldflags)
|
||||
libgnome_shell_la_LIBADD = $(MUTTER_LIBS) libgnome-shell-base.la
|
||||
libgnome_shell_la_LIBADD = $(GNOME_SHELL_LIBS) $(MUTTER_LIBS) libgnome-shell-base.la
|
||||
libgnome_shell_la_CPPFLAGS = $(MUTTER_CFLAGS) $(gnome_shell_cflags)
|
||||
|
||||
if HAVE_MUTTER_WAYLAND
|
||||
|
@@ -28,8 +28,6 @@
|
||||
#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>
|
||||
@@ -324,7 +322,6 @@ static gboolean
|
||||
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
XEvent *xev)
|
||||
{
|
||||
MetaScreen *screen = meta_plugin_get_screen (plugin);
|
||||
GnomeShellPlugin *shell_plugin = GNOME_SHELL_PLUGIN (plugin);
|
||||
|
||||
#ifdef GLX_INTEL_swap_event
|
||||
@@ -350,7 +347,7 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||
if (_shell_global_check_xdnd_event (shell_plugin->global, xev))
|
||||
return TRUE;
|
||||
|
||||
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
2
src/gvc
2
src/gvc
Submodule src/gvc updated: 11e46cd40d...e14dbe8aa6
@@ -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);
|
||||
gtk_icon_info_free (info);
|
||||
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);
|
||||
@@ -771,25 +771,6 @@ shell_app_get_n_windows (ShellApp *app)
|
||||
return g_slist_length (app->running_state->windows);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
shell_app_has_visible_windows (ShellApp *app)
|
||||
{
|
||||
GSList *iter;
|
||||
|
||||
if (app->running_state == NULL)
|
||||
return FALSE;
|
||||
|
||||
for (iter = app->running_state->windows; iter; iter = iter->next)
|
||||
{
|
||||
MetaWindow *window = iter->data;
|
||||
|
||||
if (meta_window_showing_on_its_workspace (window))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
shell_app_is_on_workspace (ShellApp *app,
|
||||
MetaWorkspace *workspace)
|
||||
@@ -841,17 +822,13 @@ shell_app_get_last_user_time (ShellApp *app)
|
||||
*
|
||||
* Compare one #ShellApp instance to another, in the following way:
|
||||
* - Running applications sort before not-running applications.
|
||||
* - If one of them has visible windows and the other does not, the one
|
||||
* with visible windows is first.
|
||||
* - Finally, the application which the user interacted with most recently
|
||||
* - The application which the user interacted with most recently
|
||||
* compares earlier.
|
||||
*/
|
||||
int
|
||||
shell_app_compare (ShellApp *app,
|
||||
ShellApp *other)
|
||||
{
|
||||
gboolean vis_app, vis_other;
|
||||
|
||||
if (app->state != other->state)
|
||||
{
|
||||
if (app->state == SHELL_APP_STATE_RUNNING)
|
||||
@@ -859,14 +836,6 @@ shell_app_compare (ShellApp *app,
|
||||
return 1;
|
||||
}
|
||||
|
||||
vis_app = shell_app_has_visible_windows (app);
|
||||
vis_other = shell_app_has_visible_windows (other);
|
||||
|
||||
if (vis_app && !vis_other)
|
||||
return -1;
|
||||
else if (!vis_app && vis_other)
|
||||
return 1;
|
||||
|
||||
if (app->state == SHELL_APP_STATE_RUNNING)
|
||||
{
|
||||
if (app->running_state->windows && !other->running_state->windows)
|
||||
|
@@ -119,6 +119,7 @@ shell_embedded_window_constructor (GType gtype,
|
||||
* idle resize anyways.
|
||||
*/
|
||||
g_object_set (object,
|
||||
"app-paintable", TRUE,
|
||||
"resize-mode", GTK_RESIZE_IMMEDIATE,
|
||||
"type", GTK_WINDOW_POPUP,
|
||||
NULL);
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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,
|
||||
|
@@ -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>
|
||||
|
@@ -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
|
||||
|
@@ -189,7 +189,6 @@ st_box_layout_get_property (GObject *object,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (object)->priv;
|
||||
ClutterLayoutManager *layout;
|
||||
StAdjustment *adjustment;
|
||||
ClutterOrientation orientation;
|
||||
@@ -388,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)
|
||||
@@ -418,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;
|
||||
@@ -429,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
|
||||
@@ -443,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)
|
||||
@@ -470,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;
|
||||
@@ -481,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
|
||||
@@ -531,7 +534,6 @@ st_box_layout_get_paint_volume (ClutterActor *actor,
|
||||
static void
|
||||
st_box_layout_style_changed (StWidget *self)
|
||||
{
|
||||
StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (self)->priv;
|
||||
StThemeNode *theme_node = st_widget_get_theme_node (self);
|
||||
ClutterBoxLayout *layout;
|
||||
double spacing;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -416,6 +416,18 @@ st_entry_allocate (ClutterActor *actor,
|
||||
ClutterActorBox content_box, child_box, icon_box;
|
||||
gfloat icon_w, icon_h;
|
||||
gfloat entry_h, min_h, pref_h, avail_h;
|
||||
ClutterActor *left_icon, *right_icon;
|
||||
|
||||
if (clutter_actor_get_text_direction (actor) == CLUTTER_TEXT_DIRECTION_RTL)
|
||||
{
|
||||
right_icon = priv->primary_icon;
|
||||
left_icon = priv->secondary_icon;
|
||||
}
|
||||
else
|
||||
{
|
||||
left_icon = priv->primary_icon;
|
||||
right_icon = priv->secondary_icon;
|
||||
}
|
||||
|
||||
clutter_actor_set_allocation (actor, box, flags);
|
||||
|
||||
@@ -426,12 +438,10 @@ st_entry_allocate (ClutterActor *actor,
|
||||
child_box.x1 = content_box.x1;
|
||||
child_box.x2 = content_box.x2;
|
||||
|
||||
if (priv->primary_icon)
|
||||
if (left_icon)
|
||||
{
|
||||
clutter_actor_get_preferred_width (priv->primary_icon,
|
||||
-1, NULL, &icon_w);
|
||||
clutter_actor_get_preferred_height (priv->primary_icon,
|
||||
-1, NULL, &icon_h);
|
||||
clutter_actor_get_preferred_width (left_icon, -1, NULL, &icon_w);
|
||||
clutter_actor_get_preferred_height (left_icon, -1, NULL, &icon_h);
|
||||
|
||||
icon_box.x1 = content_box.x1;
|
||||
icon_box.x2 = icon_box.x1 + icon_w;
|
||||
@@ -439,20 +449,16 @@ st_entry_allocate (ClutterActor *actor,
|
||||
icon_box.y1 = (int) (content_box.y1 + avail_h / 2 - icon_h / 2);
|
||||
icon_box.y2 = icon_box.y1 + icon_h;
|
||||
|
||||
clutter_actor_allocate (priv->primary_icon,
|
||||
&icon_box,
|
||||
flags);
|
||||
clutter_actor_allocate (left_icon, &icon_box, flags);
|
||||
|
||||
/* reduce the size for the entry */
|
||||
child_box.x1 += icon_w + priv->spacing;
|
||||
}
|
||||
|
||||
if (priv->secondary_icon)
|
||||
if (right_icon)
|
||||
{
|
||||
clutter_actor_get_preferred_width (priv->secondary_icon,
|
||||
-1, NULL, &icon_w);
|
||||
clutter_actor_get_preferred_height (priv->secondary_icon,
|
||||
-1, NULL, &icon_h);
|
||||
clutter_actor_get_preferred_width (right_icon, -1, NULL, &icon_w);
|
||||
clutter_actor_get_preferred_height (right_icon, -1, NULL, &icon_h);
|
||||
|
||||
icon_box.x2 = content_box.x2;
|
||||
icon_box.x1 = icon_box.x2 - icon_w;
|
||||
@@ -460,12 +466,10 @@ st_entry_allocate (ClutterActor *actor,
|
||||
icon_box.y1 = (int) (content_box.y1 + avail_h / 2 - icon_h / 2);
|
||||
icon_box.y2 = icon_box.y1 + icon_h;
|
||||
|
||||
clutter_actor_allocate (priv->secondary_icon,
|
||||
&icon_box,
|
||||
flags);
|
||||
clutter_actor_allocate (right_icon, &icon_box, flags);
|
||||
|
||||
/* reduce the size for the entry */
|
||||
child_box.x2 -= icon_w - priv->spacing;
|
||||
child_box.x2 -= icon_w + priv->spacing;
|
||||
}
|
||||
|
||||
clutter_actor_get_preferred_height (priv->entry, child_box.x2 - child_box.x1,
|
||||
|
@@ -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",
|
||||
|
@@ -287,7 +287,6 @@ key_is_modifier (guint16 keyval)
|
||||
static GdkEventKey *
|
||||
key_event_to_gdk (ClutterKeyEvent *event_clutter)
|
||||
{
|
||||
GdkDisplay *display = gdk_display_get_default ();
|
||||
GdkEventKey *event_gdk;
|
||||
event_gdk = (GdkEventKey *)gdk_event_new ((event_clutter->type == CLUTTER_KEY_PRESS) ?
|
||||
GDK_KEY_PRESS : GDK_KEY_RELEASE);
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -41,27 +41,15 @@ typedef struct _StScrollViewFadeClass StScrollViewFadeClass;
|
||||
|
||||
struct _StScrollViewFade
|
||||
{
|
||||
ClutterOffscreenEffect parent_instance;
|
||||
ClutterShaderEffect parent_instance;
|
||||
|
||||
/* a back pointer to our actor, so that we can query it */
|
||||
ClutterActor *actor;
|
||||
|
||||
CoglHandle shader;
|
||||
CoglHandle program;
|
||||
|
||||
gint tex_uniform;
|
||||
gint height_uniform;
|
||||
gint width_uniform;
|
||||
gint fade_area_uniform;
|
||||
gint vfade_offset_uniform;
|
||||
gint hfade_offset_uniform;
|
||||
gint vvalue_uniform;
|
||||
gint hvalue_uniform;
|
||||
|
||||
StAdjustment *vadjustment;
|
||||
StAdjustment *hadjustment;
|
||||
|
||||
guint is_attached : 1;
|
||||
guint fade_edges : 1;
|
||||
|
||||
float vfade_offset;
|
||||
float hfade_offset;
|
||||
@@ -69,72 +57,21 @@ struct _StScrollViewFade
|
||||
|
||||
struct _StScrollViewFadeClass
|
||||
{
|
||||
ClutterOffscreenEffectClass parent_class;
|
||||
ClutterShaderEffectClass parent_class;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (StScrollViewFade,
|
||||
st_scroll_view_fade,
|
||||
CLUTTER_TYPE_OFFSCREEN_EFFECT);
|
||||
CLUTTER_TYPE_SHADER_EFFECT);
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
|
||||
PROP_VFADE_OFFSET,
|
||||
PROP_HFADE_OFFSET
|
||||
PROP_HFADE_OFFSET,
|
||||
PROP_FADE_EDGES
|
||||
};
|
||||
|
||||
static gboolean
|
||||
st_scroll_view_fade_pre_paint (ClutterEffect *effect)
|
||||
{
|
||||
StScrollViewFade *self = ST_SCROLL_VIEW_FADE (effect);
|
||||
ClutterEffectClass *parent_class;
|
||||
|
||||
if (self->shader == COGL_INVALID_HANDLE)
|
||||
return FALSE;
|
||||
|
||||
if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (effect)))
|
||||
return FALSE;
|
||||
|
||||
if (self->actor == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (self->program == COGL_INVALID_HANDLE)
|
||||
self->program = cogl_create_program ();
|
||||
|
||||
if (!self->is_attached)
|
||||
{
|
||||
g_assert (self->shader != COGL_INVALID_HANDLE);
|
||||
g_assert (self->program != COGL_INVALID_HANDLE);
|
||||
|
||||
cogl_program_attach_shader (self->program, self->shader);
|
||||
cogl_program_link (self->program);
|
||||
|
||||
cogl_handle_unref (self->shader);
|
||||
|
||||
self->is_attached = TRUE;
|
||||
|
||||
self->tex_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "tex");
|
||||
self->height_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "height");
|
||||
self->width_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "width");
|
||||
self->fade_area_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "fade_area");
|
||||
self->vfade_offset_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "vfade_offset");
|
||||
self->hfade_offset_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "hfade_offset");
|
||||
self->vvalue_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "vvalue");
|
||||
self->hvalue_uniform =
|
||||
cogl_program_get_uniform_location (self->program, "hvalue");
|
||||
}
|
||||
|
||||
parent_class = CLUTTER_EFFECT_CLASS (st_scroll_view_fade_parent_class);
|
||||
return parent_class->pre_paint (effect);
|
||||
}
|
||||
|
||||
static CoglHandle
|
||||
st_scroll_view_fade_create_texture (ClutterOffscreenEffect *effect,
|
||||
gfloat min_width,
|
||||
@@ -146,12 +83,19 @@ st_scroll_view_fade_create_texture (ClutterOffscreenEffect *effect,
|
||||
COGL_PIXEL_FORMAT_RGBA_8888_PRE);
|
||||
}
|
||||
|
||||
static char *
|
||||
st_scroll_view_fade_get_static_shader_source (ClutterShaderEffect *effect)
|
||||
{
|
||||
return g_strdup (st_scroll_view_fade_glsl);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
|
||||
{
|
||||
StScrollViewFade *self = ST_SCROLL_VIEW_FADE (effect);
|
||||
ClutterShaderEffect *shader = CLUTTER_SHADER_EFFECT (effect);
|
||||
ClutterOffscreenEffectClass *parent;
|
||||
CoglHandle material;
|
||||
|
||||
gdouble value, lower, upper, page_size;
|
||||
ClutterActor *vscroll = st_scroll_view_get_vscroll_bar (ST_SCROLL_VIEW (self->actor));
|
||||
@@ -160,21 +104,10 @@ st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
|
||||
|
||||
ClutterActorBox allocation, content_box, paint_box;
|
||||
|
||||
/*
|
||||
* Used to pass the fade area to the shader
|
||||
*
|
||||
* [0][0] = x1
|
||||
* [0][1] = y1
|
||||
* [1][0] = x2
|
||||
* [1][1] = y2
|
||||
*
|
||||
*/
|
||||
float fade_area[2][2];
|
||||
float fade_area_topleft[2];
|
||||
float fade_area_bottomright[2];
|
||||
ClutterVertex verts[4];
|
||||
|
||||
if (self->program == COGL_INVALID_HANDLE)
|
||||
goto out;
|
||||
|
||||
clutter_actor_get_paint_box (self->actor, &paint_box);
|
||||
clutter_actor_get_abs_allocation_vertices (self->actor, verts);
|
||||
|
||||
@@ -186,10 +119,10 @@ st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
|
||||
* The FBO is based on the paint_volume's size which can be larger then the actual
|
||||
* allocation, so we have to account for that when passing the positions
|
||||
*/
|
||||
fade_area[0][0] = content_box.x1 + (verts[0].x - paint_box.x1);
|
||||
fade_area[0][1] = content_box.y1 + (verts[0].y - paint_box.y1);
|
||||
fade_area[1][0] = content_box.x2 + (verts[3].x - paint_box.x2);
|
||||
fade_area[1][1] = content_box.y2 + (verts[3].y - paint_box.y2);
|
||||
fade_area_topleft[0] = content_box.x1 + (verts[0].x - paint_box.x1);
|
||||
fade_area_topleft[1] = content_box.y1 + (verts[0].y - paint_box.y1);
|
||||
fade_area_bottomright[0] = content_box.x2 + (verts[3].x - paint_box.x2);
|
||||
fade_area_bottomright[1] = content_box.y2 + (verts[3].y - paint_box.y2);
|
||||
|
||||
g_object_get (ST_SCROLL_VIEW (self->actor),
|
||||
"hscrollbar-visible", &h_scroll_visible,
|
||||
@@ -199,47 +132,33 @@ st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
|
||||
if (v_scroll_visible)
|
||||
{
|
||||
if (clutter_actor_get_text_direction (self->actor) == CLUTTER_TEXT_DIRECTION_RTL)
|
||||
fade_area[0][0] += clutter_actor_get_width (vscroll);
|
||||
fade_area_topleft[0] += clutter_actor_get_width (vscroll);
|
||||
|
||||
fade_area[1][0] -= clutter_actor_get_width (vscroll);
|
||||
fade_area_bottomright[0] -= clutter_actor_get_width (vscroll);
|
||||
}
|
||||
|
||||
if (h_scroll_visible)
|
||||
fade_area[1][1] -= clutter_actor_get_height (hscroll);
|
||||
fade_area_bottomright[1] -= clutter_actor_get_height (hscroll);
|
||||
|
||||
if (self->vvalue_uniform > -1)
|
||||
{
|
||||
st_adjustment_get_values (self->vadjustment, &value, &lower, &upper, NULL, NULL, &page_size);
|
||||
value = (value - lower) / (upper - page_size - lower);
|
||||
cogl_program_set_uniform_1f (self->program, self->vvalue_uniform, value);
|
||||
}
|
||||
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, "vvalue", G_TYPE_FLOAT, 1, value);
|
||||
|
||||
if (self->hvalue_uniform > -1)
|
||||
{
|
||||
st_adjustment_get_values (self->hadjustment, &value, &lower, &upper, NULL, NULL, &page_size);
|
||||
value = (value - lower) / (upper - page_size - lower);
|
||||
cogl_program_set_uniform_1f (self->program, self->hvalue_uniform, 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, "hvalue", G_TYPE_FLOAT, 1, value);
|
||||
|
||||
if (self->vfade_offset_uniform > -1)
|
||||
cogl_program_set_uniform_1f (self->program, self->vfade_offset_uniform, self->vfade_offset);
|
||||
if (self->hfade_offset_uniform > -1)
|
||||
cogl_program_set_uniform_1f (self->program, self->hfade_offset_uniform, self->hfade_offset);
|
||||
if (self->tex_uniform > -1)
|
||||
cogl_program_set_uniform_1i (self->program, self->tex_uniform, 0);
|
||||
if (self->height_uniform > -1)
|
||||
cogl_program_set_uniform_1f (self->program, self->height_uniform, clutter_actor_get_height (self->actor));
|
||||
if (self->width_uniform > -1)
|
||||
cogl_program_set_uniform_1f (self->program, self->width_uniform, clutter_actor_get_width (self->actor));
|
||||
if (self->fade_area_uniform > -1)
|
||||
cogl_program_set_uniform_matrix (self->program, self->fade_area_uniform, 2, 1, FALSE, (const float *)fade_area);
|
||||
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);
|
||||
|
||||
material = clutter_offscreen_effect_get_target (effect);
|
||||
cogl_material_set_user_program (material, self->program);
|
||||
|
||||
out:
|
||||
parent = CLUTTER_OFFSCREEN_EFFECT_CLASS (st_scroll_view_fade_parent_class);
|
||||
parent->paint_target (effect);
|
||||
parent->paint_target(effect);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -271,12 +190,6 @@ st_scroll_view_fade_set_actor (ClutterActorMeta *meta,
|
||||
|
||||
g_return_if_fail (actor == NULL || ST_IS_SCROLL_VIEW (actor));
|
||||
|
||||
if (self->shader == COGL_INVALID_HANDLE)
|
||||
{
|
||||
clutter_actor_meta_set_enabled (meta, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (self->vadjustment)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (self->vadjustment,
|
||||
@@ -325,14 +238,6 @@ st_scroll_view_fade_dispose (GObject *gobject)
|
||||
{
|
||||
StScrollViewFade *self = ST_SCROLL_VIEW_FADE (gobject);
|
||||
|
||||
if (self->program != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_handle_unref (self->program);
|
||||
|
||||
self->program = COGL_INVALID_HANDLE;
|
||||
self->shader = COGL_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
if (self->vadjustment)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (self->vadjustment,
|
||||
@@ -390,6 +295,24 @@ st_scroll_view_hfade_set_offset (StScrollViewFade *self,
|
||||
g_object_thaw_notify (G_OBJECT (self));
|
||||
}
|
||||
|
||||
static void
|
||||
st_scroll_view_fade_set_fade_edges (StScrollViewFade *self,
|
||||
gboolean fade_edges)
|
||||
{
|
||||
if (self->fade_edges == fade_edges)
|
||||
return;
|
||||
|
||||
g_object_freeze_notify (G_OBJECT (self));
|
||||
|
||||
self->fade_edges = fade_edges;
|
||||
|
||||
if (self->actor != NULL)
|
||||
clutter_actor_queue_redraw (self->actor);
|
||||
|
||||
g_object_notify (G_OBJECT (self), "fade-edges");
|
||||
g_object_thaw_notify (G_OBJECT (self));
|
||||
}
|
||||
|
||||
static void
|
||||
st_scroll_view_fade_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
@@ -406,6 +329,9 @@ st_scroll_view_fade_set_property (GObject *object,
|
||||
case PROP_HFADE_OFFSET:
|
||||
st_scroll_view_hfade_set_offset (self, g_value_get_float (value));
|
||||
break;
|
||||
case PROP_FADE_EDGES:
|
||||
st_scroll_view_fade_set_fade_edges (self, g_value_get_boolean (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -428,6 +354,9 @@ st_scroll_view_fade_get_property (GObject *object,
|
||||
case PROP_VFADE_OFFSET:
|
||||
g_value_set_float (value, self->vfade_offset);
|
||||
break;
|
||||
case PROP_FADE_EDGES:
|
||||
g_value_set_boolean (value, self->fade_edges);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -437,8 +366,8 @@ st_scroll_view_fade_get_property (GObject *object,
|
||||
static void
|
||||
st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
|
||||
{
|
||||
ClutterEffectClass *effect_class = CLUTTER_EFFECT_CLASS (klass);
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
ClutterShaderEffectClass *shader_class;
|
||||
ClutterOffscreenEffectClass *offscreen_class;
|
||||
ClutterActorMetaClass *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
|
||||
|
||||
@@ -448,7 +377,8 @@ st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
|
||||
|
||||
meta_class->set_actor = st_scroll_view_fade_set_actor;
|
||||
|
||||
effect_class->pre_paint = st_scroll_view_fade_pre_paint;
|
||||
shader_class = CLUTTER_SHADER_EFFECT_CLASS (klass);
|
||||
shader_class->get_static_shader_source = st_scroll_view_fade_get_static_shader_source;
|
||||
|
||||
offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
|
||||
offscreen_class->create_texture = st_scroll_view_fade_create_texture;
|
||||
@@ -468,50 +398,22 @@ st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
|
||||
"The width of the area which is faded at the edge",
|
||||
0.f, G_MAXFLOAT, DEFAULT_FADE_OFFSET,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_FADE_EDGES,
|
||||
g_param_spec_boolean ("fade-edges",
|
||||
"Fade Edges",
|
||||
"Whether the faded area should extend to the edges",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
st_scroll_view_fade_init (StScrollViewFade *self)
|
||||
{
|
||||
static CoglHandle shader = COGL_INVALID_HANDLE;
|
||||
|
||||
if (shader == COGL_INVALID_HANDLE)
|
||||
{
|
||||
if (clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
|
||||
{
|
||||
shader = cogl_create_shader (COGL_SHADER_TYPE_FRAGMENT);
|
||||
cogl_shader_source (shader, (const char *) st_scroll_view_fade_glsl);
|
||||
cogl_shader_compile (shader);
|
||||
if (!cogl_shader_is_compiled (shader))
|
||||
{
|
||||
gchar *log_buf = cogl_shader_get_info_log (shader);
|
||||
|
||||
g_warning (G_STRLOC ": Unable to compile the fade shader: %s",
|
||||
log_buf);
|
||||
g_free (log_buf);
|
||||
|
||||
cogl_handle_unref (shader);
|
||||
shader = COGL_INVALID_HANDLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
self->shader = shader;
|
||||
self->is_attached = FALSE;
|
||||
self->tex_uniform = -1;
|
||||
self->height_uniform = -1;
|
||||
self->width_uniform = -1;
|
||||
self->fade_area_uniform = -1;
|
||||
self->vfade_offset_uniform = -1;
|
||||
self->hfade_offset_uniform = -1;
|
||||
self->vvalue_uniform = -1;
|
||||
self->hvalue_uniform = -1;
|
||||
self->vfade_offset = DEFAULT_FADE_OFFSET;
|
||||
self->hfade_offset = DEFAULT_FADE_OFFSET;
|
||||
|
||||
if (shader != COGL_INVALID_HANDLE)
|
||||
cogl_handle_ref (self->shader);
|
||||
}
|
||||
|
||||
ClutterEffect *
|
||||
|
@@ -24,17 +24,10 @@ uniform float vfade_offset;
|
||||
uniform float hfade_offset;
|
||||
uniform float vvalue;
|
||||
uniform float hvalue;
|
||||
uniform bool fade_edges;
|
||||
|
||||
/*
|
||||
* Used to pass the fade area to the shader
|
||||
*
|
||||
* [0][0] = x1
|
||||
* [0][1] = y1
|
||||
* [1][0] = x2
|
||||
* [1][1] = y2
|
||||
*
|
||||
*/
|
||||
uniform mat2 fade_area;
|
||||
uniform vec2 fade_area_topleft;
|
||||
uniform vec2 fade_area_bottomright;
|
||||
|
||||
void main ()
|
||||
{
|
||||
@@ -47,15 +40,19 @@ void main ()
|
||||
* We cannot just return here due to a bug in llvmpipe see:
|
||||
* https://bugzilla.freedesktop.org/show_bug.cgi?id=62357
|
||||
*/
|
||||
if (x > fade_area[0][0] && x < fade_area[1][0] &&
|
||||
y > fade_area[0][1] && y < fade_area[1][1]) {
|
||||
if (x > fade_area_topleft[0] && x < fade_area_bottomright[0] &&
|
||||
y > fade_area_topleft[1] && y < fade_area_bottomright[1]) {
|
||||
float ratio = 1.0;
|
||||
float fade_bottom_start = fade_area[1][1] - vfade_offset;
|
||||
float fade_right_start = fade_area[1][0] - hfade_offset;
|
||||
bool fade_top = y < vfade_offset && vvalue > 0.0;
|
||||
bool fade_bottom = y > fade_bottom_start && vvalue < 1.0;
|
||||
bool fade_left = x < hfade_offset && hvalue > 0.0;
|
||||
bool fade_right = x > fade_right_start && hvalue < 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 ? 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) {
|
||||
@@ -63,7 +60,7 @@ void main ()
|
||||
}
|
||||
|
||||
if (fade_bottom) {
|
||||
ratio *= (fade_area[1][1] - y) / (fade_area[1][1] - fade_bottom_start);
|
||||
ratio *= (fade_area_bottomright[1] - y) / (fade_area_bottomright[1] - fade_bottom_start);
|
||||
}
|
||||
|
||||
float hfade_scale = width / hfade_offset;
|
||||
@@ -72,7 +69,7 @@ void main ()
|
||||
}
|
||||
|
||||
if (fade_right) {
|
||||
ratio *= (fade_area[1][0] - x) / (fade_area[1][0] - fade_right_start);
|
||||
ratio *= (fade_area_bottomright[0] - x) / (fade_area_bottomright[0] - fade_right_start);
|
||||
}
|
||||
|
||||
cogl_color_out *= ratio;
|
||||
|
@@ -160,19 +160,19 @@ st_scroll_view_get_property (GObject *object,
|
||||
|
||||
/**
|
||||
* st_scroll_view_update_fade_effect:
|
||||
* @self: a #StScrollView
|
||||
* @scroll: a #StScrollView
|
||||
* @vfade_offset: The length of the veritcal fade effect, in pixels.
|
||||
* @hfade_offset: The length of the horizontal fade effect, in pixels.
|
||||
*
|
||||
* Sets the height of the fade area area in pixels. A value of 0
|
||||
* disables the effect.
|
||||
*/
|
||||
static void
|
||||
st_scroll_view_update_fade_effect (StScrollView *self,
|
||||
void
|
||||
st_scroll_view_update_fade_effect (StScrollView *scroll,
|
||||
float vfade_offset,
|
||||
float hfade_offset)
|
||||
{
|
||||
StScrollViewPrivate *priv = ST_SCROLL_VIEW (self)->priv;
|
||||
StScrollViewPrivate *priv = ST_SCROLL_VIEW (scroll)->priv;
|
||||
|
||||
/* A fade amount of more than 0 enables the effect. */
|
||||
if (vfade_offset > 0. || hfade_offset > 0.)
|
||||
@@ -180,7 +180,7 @@ st_scroll_view_update_fade_effect (StScrollView *self,
|
||||
if (priv->fade_effect == NULL) {
|
||||
priv->fade_effect = g_object_new (ST_TYPE_SCROLL_VIEW_FADE, NULL);
|
||||
|
||||
clutter_actor_add_effect_with_name (CLUTTER_ACTOR (self), "fade",
|
||||
clutter_actor_add_effect_with_name (CLUTTER_ACTOR (scroll), "fade",
|
||||
CLUTTER_EFFECT (priv->fade_effect));
|
||||
}
|
||||
|
||||
@@ -194,12 +194,12 @@ st_scroll_view_update_fade_effect (StScrollView *self,
|
||||
else
|
||||
{
|
||||
if (priv->fade_effect != NULL) {
|
||||
clutter_actor_remove_effect (CLUTTER_ACTOR (self), CLUTTER_EFFECT (priv->fade_effect));
|
||||
clutter_actor_remove_effect (CLUTTER_ACTOR (scroll), CLUTTER_EFFECT (priv->fade_effect));
|
||||
priv->fade_effect = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (scroll));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -87,6 +87,9 @@ gboolean st_scroll_view_get_overlay_scrollbars (StScrollView *scroll);
|
||||
void st_scroll_view_set_policy (StScrollView *scroll,
|
||||
GtkPolicyType hscroll,
|
||||
GtkPolicyType vscroll);
|
||||
void st_scroll_view_update_fade_effect (StScrollView *scroll,
|
||||
float vfade_offset,
|
||||
float hfade_offset);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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,
|
||||
@@ -272,7 +272,7 @@ texture_load_data_free (gpointer p)
|
||||
|
||||
if (data->icon_info)
|
||||
{
|
||||
gtk_icon_info_free (data->icon_info);
|
||||
g_object_unref (data->icon_info);
|
||||
if (data->colors)
|
||||
st_icon_colors_unref (data->colors);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -956,7 +949,7 @@ load_gicon_with_colors (StTextureCache *cache,
|
||||
if (ensure_request (cache, key, policy, &request, texture))
|
||||
{
|
||||
/* If there's an outstanding request, we've just added ourselves to it */
|
||||
gtk_icon_info_free (info);
|
||||
g_object_unref (info);
|
||||
g_free (key);
|
||||
}
|
||||
else
|
||||
@@ -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;
|
||||
}
|
||||
|
@@ -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__ */
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
};
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -456,7 +456,7 @@ st_widget_allocate (ClutterActor *actor,
|
||||
* @widget: The #StWidget
|
||||
*
|
||||
* Paint the background of the widget. This is meant to be called by
|
||||
* subclasses of StWiget that need to paint the background without
|
||||
* subclasses of StWidget that need to paint the background without
|
||||
* painting children.
|
||||
*/
|
||||
void
|
||||
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user