Compare commits

...

76 Commits

Author SHA1 Message Date
Jasper St. Pierre
d8009fd826 Fix most of the Cogl deprecation warnings 2013-09-11 15:26:44 -04:00
Jasper St. Pierre
744749f2f3 dnd: Remove the queue updated ID for completed drags as well
I thought that cancelDrag was called for completed drags as well,
but it's not. Move the updateHoverId source removal to dragComplete.

This fixes "this._dragActor is undefined" warnings after completed
drags.

https://bugzilla.gnome.org/show_bug.cgi?id=707935
2013-09-11 15:11:23 -04:00
Jasper St. Pierre
db1c65970b Remove various E4X junk remove4x can't handle 2013-09-11 15:02:33 -04:00
Jasper St. Pierre
2d8ed4c77f Bind "this" for various methods
For extremely silly reasons with how the class framework works, the wrapper
method requires "this" to be bound in order for it to work, or else we'll
emit errors in strict mode.

https://bugzilla.gnome.org/show_bug.cgi?id=707892
2013-09-11 15:02:32 -04:00
Jasper St. Pierre
9ba970b83d lookingGlass: Fix newline replacing
text.replace() returns the new string as strings in JS are immutable.
2013-09-11 15:02:32 -04:00
Florian Müllner
954d262d67 st: Fix spacing on right icon in entry
https://bugzilla.gnome.org/show_bug.cgi?id=705779
2013-09-11 18:41:55 +02:00
Matthias Clasen
1b6090fe13 Make the search entry behave better in RTL locales
It is expected that the primary and secondary icons in entries
change places in RTL locales. When doing so, the edit-clear
icon must be replaced by an rtl variant too.

http://bugzilla.gnome.org/show_bug.cgi?id=705779
2013-09-11 18:41:55 +02:00
Jasper St. Pierre
f8234b07f8 workspacesView: Don't double-destroy workspaces
The WorkspaceView actors contain the Workspace actors, so destroying the
WorkspaceView actors should be enough.

https://bugzilla.gnome.org/show_bug.cgi?id=707889
2013-09-11 10:15:26 -04:00
Jasper St. Pierre
25318f696d workspace: Clean up a leftover later_add on destroy
https://bugzilla.gnome.org/show_bug.cgi?id=707889
2013-09-11 10:15:26 -04:00
Timo Jyrinki
1ab3d12bc7 Finnish translation update 2013-09-11 09:46:44 +03:00
Jasper St. Pierre
d66e0a0b45 Fix simple GTK+ deprecations 2013-09-10 20:43:17 -04:00
Jasper St. Pierre
d46ceead04 Fix simple, unused variable warnings 2013-09-10 20:43:17 -04:00
Rūdolfs Mazurs
1cc9480e56 Updated Latvian translation 2013-09-10 21:31:25 +03:00
Ihar Hrachyshka
c022b541f1 Updated Belarusian translation. 2013-09-10 20:02:46 +03:00
Neil Roberts
96588466d4 Don't pass on X events to Clutter
The Mutter plugin manager has now been changed so that it itself will
pass on the events through Clutter so there is no need to do this in
Gnome Shell anymore.

https://bugzilla.gnome.org/show_bug.cgi?id=707467
2013-09-10 17:27:18 +02:00
Nilamdyuti Goswami
dbde12f8bf Assamese Translation Updated 2013-09-10 20:47:49 +05:30
Jasper St. Pierre
660f0fec16 popupMenu: Fix algorithm for separator visibility to work with sections
Before, separators naively checked whether their siblings were visible
using actor visibility. However, if section actors are visible but have
no visible children, this will fail. Special-case separators when doing
visiblity checks.

https://bugzilla.gnome.org/show_bug.cgi?id=707801
2013-09-10 10:23:43 -04:00
Jasper St. Pierre
fd9401cc62 Revert "popupMenu: Make the section invisible if it has no visible children"
This reverts commit 5a0ac6c2ac.

https://bugzilla.gnome.org/show_bug.cgi?id=707801
2013-09-10 10:23:43 -04:00
Jasper St. Pierre
1edb9f7525 altTab: Only create one settings instance per window switcher popup
Every settings instance we create is a round-trip to the dconf
daemon, so we need to be careful of not creating them too haphazardly.

https://bugzilla.gnome.org/show_bug.cgi?id=707806
2013-09-10 10:23:43 -04:00
Giovanni Campagna
15cfb9d1d9 AppMenu: remove tweens before animating the actor visibility
When we show(), we need to make sure that the hiding animation
doesn't reach the end, otherwise we would hide the actor but
still have _visible = true.
We were relying on tweener overwriting to do this, but it
doesn't quite work, so better be explicit and do it ourselves.

https://bugzilla.gnome.org/show_bug.cgi?id=707814
2013-09-10 10:46:00 +02:00
Andika Triwidada
da6744da2d Updated Indonesian translation 2013-09-10 13:10:42 +07:00
Khaled Hosny
bd5aa66a5f Update Arabic translation 2013-09-09 23:15:20 +02:00
A S Alam
7c30fe7738 Punjabi Translation updated by Aman 2013-09-09 14:09:40 -05:00
Carlos Soriano
8ce599df38 theme: Change overview icon shadow inset opacity
In the commit 9a8bf3b was changed the background opacity of overview
icons. That cause that the shadow of the checked state of icons
was too hard, so it seems to be cut off.
Change the opacity of the shadow to solve this.
2013-09-09 13:37:36 +02:00
Мирослав Николић
75fe13f1df Updated Serbian translation 2013-09-08 16:26:18 +02:00
Victor Ibragimov
8ad6ded3ec Tajik translation updated 2013-09-08 15:45:21 +05:00
Victor Ibragimov
38d22c47f5 Tajik translation updated 2013-09-08 15:42:31 +05:00
Victor Ibragimov
956b6b89b6 Tajik translation updated 2013-09-08 15:38:46 +05:00
Kjartan Maraas
f27c2e6813 Updated Norwegian bokmål translation 2013-09-08 11:23:16 +02:00
Tobias Endrigkeit
d35c9f880a Updated German translation 2013-09-08 08:14:10 +02:00
Yuri Myasoedov
d62aacf301 Updated Russian translation 2013-09-07 23:11:29 +04:00
Jiro Matsuzawa
716ea64212 l10n: Update Japanese translation 2013-09-07 22:36:18 +09:00
Magdalen Berns
c9d6b13f6a Remove unused functions
Bug https://bugzilla.gnome.org/show_bug.cgi?id=707666
2013-09-07 15:05:59 +02:00
Florian Müllner
b437e68026 app: Removed unused function
https://bugzilla.gnome.org/show_bug.cgi?id=707663
2013-09-07 00:09:31 +02:00
Florian Müllner
1dfc38d078 app: Stop using window visibility when comparing apps
shell_app_compare() (which is only used as sort function for
shell_app_system_get_running() nowadays) currently takes the
visibility of an app's windows into account, e.g. applications
with visible windows (non-minimized windows on current workspace)
sort earlier than applications without.
This translate traditional window-switcher behavior to applications,
but we stopped sorting by workspace in the app-switcher a while ago,
and with the new auto-minimization behavior of fullscreen windows
it is more confusing than helpful - in fact, since mutter commit
7e61ef09369a we no longer do this for the window list, so it
makes sense to apply the same to application sorting.

https://bugzilla.gnome.org/show_bug.cgi?id=707663
2013-09-07 00:09:31 +02:00
Florian Müllner
387184b052 appDisplay: Increase fade offset in FolderView
Just as we do in AllView, we set the offset of FolderViews' fade
effect so that no icon is faded when a full page is visible.
This works fine in AllView, however in the FolderView case where
the popup's offsets eat away from the available fade height, the
effect ends up being barely noticeable at all.
While it is not ideal to apply the fade to the edge of a "full page",
it looks less ugly than the current state, so pick the lesser evil ...

https://bugzilla.gnome.org/show_bug.cgi?id=707662
2013-09-06 23:54:46 +02:00
Florian Müllner
beec47d7ad theme: Decrease padding on folder view popup
If a folder view is scrolled, its scrollbar ends up too close to the
content (even partially overlapping it) with the current padding.
Making it much smaller fixes the issue without affecting the content
position - the removed padding will just move to IconGrid's dynamic
padding.

https://bugzilla.gnome.org/show_bug.cgi?id=707662
2013-09-06 23:54:46 +02:00
Carlos Soriano
6b554337ff appDisplay: Make sure we don't clip folder view
If we round up the value, we make sure we don't clip in any
case neither the folder view or the close button.
2013-09-06 23:45:50 +02:00
Jasper St. Pierre
08f95264d6 embedded-window: Set as app-paintable to workaround opaque region issues
In specific cases, GTK+ does not have enough information to set a correct
opaque region, in which the recommended fix is to set your window as
app-paintable. In the tray icon case, the socket window was considered
opaque but GTK+ as it had a solid window background, but it cannot have an
opaque region set, as the plug isn't composited against the socket, but
instead punches through the socket window.

https://bugzilla.gnome.org/show_bug.cgi?id=707614
2013-09-06 16:28:41 -04:00
Luca Ferretti
2802920e93 Updated Italian translation 2013-09-06 22:15:53 +02:00
Florian Müllner
b04c47c15f focusCaretTracker: Minor cleanup 2013-09-06 19:14:53 +02:00
Florian Müllner
56d96383e2 st: Fix typo 2013-09-06 17:23:19 +02:00
Rico Tzschichholz
f2cbf846e7 build: Fix linker errors on Debian/Ubuntu 2013-09-06 16:21:55 +02:00
Marek Černocký
0088e94293 Updated Czech translation 2013-09-06 11:55:01 +02:00
Adam Matoušek
a03a077e3d Updated Czech translation 2013-09-06 11:50:44 +02:00
Carlos Soriano
85d2b9e32a appDisplay: Also scroll on focused indicators
Since now if you focus the indicators, you can't scroll and
change pages in the app picker. That was reported as odd from
some users/developers.
So allow to scroll when the focus is in the indicators.

https://bugzilla.gnome.org/show_bug.cgi?id=707609
2013-09-06 10:40:07 +02:00
Florian Müllner
aa6471b3cc messageTray: Reset clickedSummaryItem on ungrab
If we don't, we will pop up the summary again the next time
_updateState() is called.

https://bugzilla.gnome.org/show_bug.cgi?id=707600
2013-09-06 10:16:37 +02:00
Florian Müllner
b462a85c43 appDisplay: Fix obvious copy+paste error 2013-09-06 02:58:15 +02:00
Magdalen Berns
9d8f30f955 Magnifier: Implement focus and caret tracking
A11y users who use the magnifier may have trouble
focusing when they're typing or trying to keynav.
Implement a new system so that they can have the
magnifier track the caret and focus instead instead
of just the mouse.

Bug https://bugzilla.gnome.org/show_bug.cgi?id=647074
2013-09-05 13:18:54 -04:00
Florian Müllner
420db828e9 appDisplay: Also fade ScrollView in folders 2013-09-05 18:30:18 +02:00
Florian Müllner
fd8def705d appDisplay: Remove _updateAdjustment
Provided that PaginatedIconGrid's height request is correct, we
can rely on StBoxLayout to update the adjustment correctly.
2013-09-05 18:18:05 +02:00
Florian Müllner
39c4fa1bf0 iconGrid: Initialize properties in _init
While this is good style anyway, after the latest appDisplay changes
the first call to get_preferred_height() happens before we properly
compute those properties, resulting in a size request of NaN that
triggers a Clutter warning.
2013-09-05 18:18:05 +02:00
Jasper St. Pierre
32b964e9b7 power: Fix translations in the power section
This technically isn't a string freeze break, since xgettext already
picked up the string and translators have been translating it.

https://bugzilla.gnome.org/show_bug.cgi?id=707557
2013-09-05 12:03:26 -04:00
Florian Müllner
2980515c85 appDisplay: Fix return value for _onScroll
ClutterActor::scroll-event has a boolean return value to indicate
whether the event has been handled, or event emission should continue.
Now that we are using an StScrollView, we depend on this to avoid
propagating the event to the view's own handler.

https://bugzilla.gnome.org/show_bug.cgi?id=707409
2013-09-04 23:52:19 +02:00
Florian Müllner
36bee16781 appDisplay: Use a ScrollView for pages
While we obviously don't want any scrollbars, its fade effect
will give us some extra polish when switching pages.

https://bugzilla.gnome.org/show_bug.cgi?id=707409
2013-09-04 23:52:19 +02:00
Florian Müllner
4f5d3e00db st: Add StScrollViewFade:fade-edges
Add a new property which controls whether edge areas are excluded
from the effect (the default and current behavior), or not.

https://bugzilla.gnome.org/show_bug.cgi?id=707409
2013-09-04 23:52:18 +02:00
Florian Müllner
6fb044f351 st: Make st_scroll_view_update_fade_effect() public
Using fixed fade offsets is not always appropriate, this will allow
to set them from code instead.

https://bugzilla.gnome.org/show_bug.cgi?id=707409
2013-09-04 23:52:18 +02:00
Florian Müllner
b403845d03 st: Make StScrollViewFade a ClutterShaderEffect
The cogl_shader_XXX and cogl_program_YYY APIs have been deprecated
this cycle, so port to ClutterShaderEffect instead.

https://bugzilla.gnome.org/show_bug.cgi?id=707508
2013-09-04 23:13:30 +02:00
Dušan Kazik
9d0e00acce Updated slovak translation 2013-09-04 20:12:26 +02:00
Jasper St. Pierre
d5afe8f4f2 Update gvc 2013-09-04 13:00:31 -04:00
Daniel Korostil
3eb5ca3653 Updated Ukrainian 2013-09-04 18:47:00 +03:00
Olivier Blin
db07aa42ea panel: fix crash when bluetooth is disabled
https://bugzilla.gnome.org/show_bug.cgi?id=707430
2013-09-04 11:34:17 +02:00
Timo Jyrinki
081f51b9eb Finnish translation update 2013-09-04 11:04:49 +03:00
Carlos Soriano
38d9c16aba gnome-shell.css: typo replace tabs with spaces 2013-09-04 09:48:07 +02:00
Carlos Soriano
392a426ddf iconGrid: typo in iconGrid this._vItemSize to this._getVItemSize() 2013-09-04 09:43:10 +02:00
Chao-Hsiung Liao
d77b2751a6 Updated Traditional Chinese translation(Hong Kong and Taiwan) 2013-09-04 15:06:39 +08:00
Piotr Drąg
3b28308291 Updated Polish translation 2013-09-04 02:08:10 +02:00
Luca Ferretti
574ecb5ad4 Updated Italian translation 2013-09-04 00:42:12 +02:00
Aurimas Černius
7a57a780d8 Updated Lithuanian translation 2013-09-04 00:34:30 +03:00
Jakub Steiner
cf9842433e search: "pushed in" :active state
https://bugzilla.gnome.org/show_bug.cgi?id=704714
2013-09-03 17:19:53 +02:00
Rico Tzschichholz
c6d089d701 build: Don't add version to private libgnome-shell-menu library 2013-09-03 16:17:06 +02:00
Daniel Mustieles
ec37e2d2b5 Updated Spanish translation 2013-09-03 16:10:59 +02:00
Florian Müllner
e68b648a33 appDisplay: Don't show page indicators if there's only one page
It doesn't make sense to show the indicators in that case, so
don't show them. This has been the design in the first place,
but the code that did that was lost at some point during review ...

https://bugzilla.gnome.org/show_bug.cgi?id=707363
2013-09-03 13:54:21 +02:00
Florian Müllner
56179d8a54 build: Fix building introspection for ShellRecorder
This is a regression from commit 21a85832b3, which resulted in
shell-recorder.[ch] not being included in gir generation.

https://bugzilla.gnome.org/show_bug.cgi?id=707308
2013-09-03 13:53:32 +02:00
Fran Diéguez
47d232f694 Updated Galician translations 2013-09-03 12:57:20 +02:00
Rafael Ferreira
fc26fb2149 Updated Brazilian Portuguese translation 2013-09-02 21:06:47 -03:00
79 changed files with 10249 additions and 10173 deletions

View File

@@ -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 {

View File

@@ -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

View File

@@ -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 \

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}

View 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);

View File

@@ -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;

View File

@@ -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 == '')

View File

@@ -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;
}
});

View File

@@ -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" />

View File

@@ -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);

View File

@@ -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());

View File

@@ -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({

View File

@@ -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>

View File

@@ -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);

View File

@@ -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

View File

@@ -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;

View File

@@ -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 = [];
},

View File

@@ -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;

745
po/ar.po

File diff suppressed because it is too large Load Diff

1571
po/as.po

File diff suppressed because it is too large Load Diff

View File

@@ -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 "Карыстальнік праігнараваў дыялогавае акенца ідэнтыфікацыі"

530
po/cs.po

File diff suppressed because it is too large Load Diff

379
po/de.po
View File

@@ -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"

View File

@@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-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"

1621
po/fi.po

File diff suppressed because it is too large Load Diff

109
po/gl.po
View File

@@ -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
View File

@@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-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"

1287
po/it.po

File diff suppressed because it is too large Load Diff

1171
po/ja.po

File diff suppressed because it is too large Load Diff

121
po/lt.po
View File

@@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-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ą"

1616
po/lv.po

File diff suppressed because it is too large Load Diff

154
po/nb.po
View File

@@ -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"

475
po/pa.po

File diff suppressed because it is too large Load Diff

View File

@@ -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."

View File

@@ -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."

1052
po/ru.po

File diff suppressed because it is too large Load Diff

147
po/sk.po
View File

@@ -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.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

127
po/tg.po
View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Tajik Gnome\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-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."

1751
po/uk.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@@ -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

Submodule src/gvc updated: 11e46cd40d...e14dbe8aa6

View File

@@ -217,7 +217,7 @@ typedef struct {
ClutterTextDirection direction;
} CreateFadedIconData;
static CoglHandle
static CoglTexture *
shell_app_create_faded_icon_cpu (StTextureCache *cache,
const char *key,
void *datap,
@@ -227,7 +227,7 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
ShellApp *app;
GdkPixbuf *pixbuf;
int size;
CoglHandle texture;
CoglTexture *texture;
gint width, height, rowstride;
guint8 n_channels;
gboolean have_alpha;
@@ -263,13 +263,13 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
}
if (info == NULL)
return COGL_INVALID_HANDLE;
return NULL;
pixbuf = gtk_icon_info_load_icon (info, NULL);
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)

View File

@@ -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);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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;

View File

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

View File

@@ -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,

View File

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

View File

@@ -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);

View File

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

View File

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

View File

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

View File

@@ -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 *

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

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

View File

@@ -60,7 +60,7 @@ static guint signals[LAST_SIGNAL] = { 0, };
G_DEFINE_TYPE(StTextureCache, st_texture_cache, G_TYPE_OBJECT);
/* We want to preserve the aspect ratio by default, also the default
* material for an empty texture is full opacity white, which we
* pipeline for an empty texture is full opacity white, which we
* definitely don't want. Skip that by setting 0 opacity.
*/
static ClutterTexture *
@@ -73,7 +73,7 @@ create_default_texture (void)
/* Reverse the opacity we added while loading */
static void
set_texture_cogl_texture (ClutterTexture *clutter_texture, CoglHandle cogl_texture)
set_texture_cogl_texture (ClutterTexture *clutter_texture, CoglTexture *cogl_texture)
{
clutter_texture_set_cogl_texture (clutter_texture, cogl_texture);
g_object_set (clutter_texture, "opacity", 255, NULL);
@@ -144,7 +144,7 @@ st_texture_cache_init (StTextureCache *self)
G_CALLBACK (on_icon_theme_changed), self);
self->priv->keyed_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, cogl_handle_unref);
g_free, cogl_object_unref);
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL);
self->priv->file_monitors = g_hash_table_new_full (g_str_hash, g_str_equal,
@@ -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;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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);
}