Compare commits

...

77 Commits

Author SHA1 Message Date
1d56aac156 Bump version to 3.20.0
Update NEWS.
2016-03-22 18:17:09 +01:00
f95f3b1ca5 Update .gitignore 2016-03-21 14:58:09 -07:00
3a4ae679ea common: Remove META_LAYER_FOCUSED_WINDOW
Usage of this was removed 14 years ago in 25ca0e2. Let's remove the
constant, too.
2016-03-21 13:45:11 -07:00
190357c561 surface-actor-x11: Unredirect ARGB32 windows with full opaque regions
We can detect that these windows are already fully opaque, so allow them
to unredirect. Allows unredirecting Totem during video playback, giving
a significant speed boost.
2016-03-21 13:44:44 -07:00
92c8a51ba6 bell: Fallback to fullscreen flash if no window was passed
We allow to flash without providing a window. In this case we should
flash the whole screen, instead of crashing.

https://bugzilla.gnome.org/show_bug.cgi?id=763858
2016-03-21 11:38:31 +08:00
8b1195be1a Updated Danish translation 2016-03-20 23:17:25 +01:00
e427aa3606 Updated Italian translation 2016-03-17 20:26:05 +00:00
7517c91e99 Bump version to 3.19.92
Update NEWS.
2016-03-16 18:58:37 +01:00
7a94fa3be7 Updated Greek translation 2016-03-16 14:59:42 +00:00
f2ff0b6d42 [l10n] Updated Catalan translation 2016-03-13 14:45:26 +01:00
4749bf0420 Updated Korean translation 2016-03-12 19:39:37 +00:00
223bfb10a0 Updated Swedish translation 2016-03-11 15:01:14 +00:00
3d67bfda14 wayland: Implement support for the x-rootwindow-drop target
This target is set whenever DnD moves towards an area between surfaces.
Although no offer is set and data is actually not read, drag sources
offering this mimetype will be able to behave just like they used to
do in X11.

https://bugzilla.gnome.org/show_bug.cgi?id=762104
2016-03-11 14:47:02 +01:00
51e4491a9f wayland: Force an initial focus in meta_wayland_drag_grab_set_focus()
We want some initial processing, even if the current focus didn't change.
This could be for example the case of starting DnD too close to the window
edge and out of it. At the point start_drag() is called, the current
pointer focus is already NULL, so set_focus() would simply bail out here.

https://bugzilla.gnome.org/show_bug.cgi?id=762104
2016-03-11 14:47:02 +01:00
82153ff23f wayland: Always send focus() when starting a pointer grab
Even if the focus is NULL, we may want the current grab focus code
to be run.

https://bugzilla.gnome.org/show_bug.cgi?id=762104
2016-03-11 14:47:01 +01:00
9b39325244 display: Fix typo 2016-03-11 12:27:00 +01:00
868b3fd01e unit-tests: Fix const compiler warning 2016-03-11 12:26:38 +01:00
8b801aac77 Handle meta_screen_get_monitor_for_point() returning NULL
On the X11 backend we don't track the pointer position in
priv->current_x/y which remain set to zero. That means we never set
the clutter stage cursor if point 0,0 isn't covered by any monitor
since we return early.

Commit 4bebc5e5fa introduced this to
avoid crashing on the prepare-at handlers when the cursor position
doesn't fall inside any monitor area but we can handle that higher up
in the stack. In that case, the sprite's scale doesn't matter since
the cursor won't be shown anyway so we can skip setting it.

https://bugzilla.gnome.org/show_bug.cgi?id=763159
2016-03-10 16:01:54 +01:00
c380f2e03f wayland-pointer: Drop a phony signal disconnect
cursor_sprite_prepare_at() is never connected to a MetaCursorTracker
signal.

https://bugzilla.gnome.org/show_bug.cgi?id=763159
2016-03-10 15:58:46 +01:00
ca1b4382c0 shaped-texture: Invalidate mask texture when main texture changes size
We currently rely only on MetaWindowActor to update the mask
texture. This isn't good enough since we might get asked to use the
mask (e.g. via meta_shaped_texture_get_image() ) after having a new
texture size but before MetaWindowActor decides to update the mask in
which case we might crash since cogl_texture_new_from_sub_texture()
might fail with an early return such as

Cogl-CRITICAL **: cogl_sub_texture_new: assertion 'sub_x + sub_width
<= next_width' failed

https://bugzilla.gnome.org/show_bug.cgi?id=762639
2016-03-10 15:56:41 +01:00
f6ba3bdfc2 wayland: Add gtk_surface.present to gtk-shell
This commits adds a gtk_surface.present request and its implementation.
The timestamp is assumed to be from some input event that the client
responded to. The timestamps we deal with when managing windows will
usually come from two different clocks: CLOCK_MONOTONIC if they come
from libinput/evdev, or CLOCK_MONOTONIC_COARSE if they come from the
X server.

Luckily these are quite similar, the difference beeing that the X server
timestamps having lower resolution, so we can just pass the timestamps
no matter where they came from and it'll most likely work fine, except
for the race condition described in bug 756272 which might happen here
too until it is properly fixed.

https://bugzilla.gnome.org/show_bug.cgi?id=763295
2016-03-10 12:34:56 +08:00
99bba9e56c bell: Flash whole window if the window had no frame
CSD X11 clients and Wayland clients don't have a window frame drawn by
the compositor to flash. So instead of flashing the whole screen when
configured to just flash the window, flash just the window region.

https://bugzilla.gnome.org/show_bug.cgi?id=763284
2016-03-10 12:34:56 +08:00
4af908a970 wayland: Add system bell support via gtk_shell
Add a system_bell request to gtk_shell. A client can use this to invoke
the system bell, be it aural, visual or none at all. Currently per
window visual bell support is not implemented.

https://bugzilla.gnome.org/show_bug.cgi?id=763284
2016-03-10 12:34:56 +08:00
417cb2b213 bell: Let the X11 caller deal with the X11 fallback
To support invoking the system bell on Wayland we shouldn't have paths
that fallback to X11. Let the X11 caller deal with the absence of
libcanberra, and change API to not take any X events.

https://bugzilla.gnome.org/show_bug.cgi?id=763284
2016-03-10 12:34:56 +08:00
9f1d1151b7 wayland: Namespace gtk_shell request handlers
https://bugzilla.gnome.org/show_bug.cgi?id=763284
2016-03-10 12:34:56 +08:00
fea1ddcd29 wayland: Don't invent our own unstable protocol semantics
The gtk_shell protocol used some half baked unstable protocol semantics
that worked by only allowing binding the exact version of the
interface. This hack is a bit too confusing and it makes it impossible
to do any compatible changes without breaking things.

So, instead rename it to include a number in the interface names. This
way we can add requests and events without causing compatibility issues,
and we can later remove requests and events by bumping the number in
the interface names.

https://bugzilla.gnome.org/show_bug.cgi?id=763284
2016-03-10 12:29:43 +08:00
3b023ea994 wayland: Start drags from the press position
Using the current position to set the origin x/y of the DnD icon
is wrong, it should still be used in order to move the icon besides
the current pointer position though.

Fixes possible drag-start-x/y property constraint warnings when
starting a drag too close to the window edge, and towards outside
of it.
2016-03-09 18:31:50 +01:00
f8c70491b9 wayland: Small code cleanup in meta_wayland_drag_grab_set_focus()
There's enough instances of drag_grab->drag_data_source to make it
nicer getting a "source" variable first.
2016-03-09 18:19:23 +01:00
9df99d8bac Updated Serbian translation 2016-03-09 09:53:56 +01:00
d4b0c21d06 MetaWaylandPointerConstraint: Maybe enable on window 'raise'
If a MetaWindow's 'appears-focused' state changed to true, but the
window did not have pointer focus, the constraint did not enable. Thus,
make it possible for the user to also click the window to enable it.

https://bugzilla.gnome.org/show_bug.cgi?id=762661
2016-03-09 14:29:22 +08:00
517078d142 MetaWaylandPointerConstraint: Disable if 'appears-focused' is false
Disable a constraint if the associated MetaWindow's 'appears-focused'
state changed to false.

https://bugzilla.gnome.org/show_bug.cgi?id=762661
2016-03-09 14:27:43 +08:00
1c94d0e598 MetaWaylandPointerConstraint: Require 'appears-focused' to enable
Instead of relying on the keyboard focus surface, use the
'appears-focused' state of the corresponding MetaWindow to determine if
a constraint should enable or not.

https://bugzilla.gnome.org/show_bug.cgi?id=762661
2016-03-09 14:26:53 +08:00
b04747b174 MetaWaylandPointerConstraint: Unset is_enabled state when disabling
If we don't set the is_disabled state to FALSE when disabling,
re-enabling will fail.

https://bugzilla.gnome.org/show_bug.cgi?id=762661
2016-03-09 14:26:53 +08:00
6396974eae MetaWaylandPointerConstraint: Use own 'appears-focused' signal handler
Instead of having MetaWindowWayland having hooks into pointer
constraints subsystem, have the pointer constraints subsystem listen
for the signal itself and enable/disable itself.

https://bugzilla.gnome.org/show_bug.cgi?id=762661
2016-03-09 14:26:53 +08:00
20908b9c2c MetaWaylandPointerConstraint: Make per surface state a quark
Make the per surface pointer constraint related state (list of
constraints on given surface) a quark managed from the pointer
constraints unit.

https://bugzilla.gnome.org/show_bug.cgi?id=762661
2016-03-09 14:24:28 +08:00
4abfb299e2 MetaWaylandPointerConstraint: Use NULL for infinite region
Instead of having a very large region represent an infinitely large
region, use NULL, and use the calculated input region from the
MetaWaylandSurface if the constraint region was not set.

https://bugzilla.gnome.org/show_bug.cgi?id=762661
2016-03-09 14:24:28 +08:00
62ac9df43d MetaWaylandPointerConstraint: Fix effective region calculation
The when surface->input_region is NULL, it should be interpreted as the
whole surface region. If not, the effective input region is the
intersection of the buffer region and the input region set by
wl_surface.set_input_region. Add
meta_wayland_surface_calculate_input_region() that does this
calculation.

https://bugzilla.gnome.org/show_bug.cgi?id=762661
2016-03-09 14:24:28 +08:00
0882bce989 startup-notification: Ensure provided timestamp is always a 64 bit integer
The libsn API provides its timestamps in the "Time" X11 type, which is
usually is a typedef for "unsigned long". The type of the "timestamp"
parameter of StartupNotificationSequence is a signed 64 bit integer.
When building on an architecture where a "unsigned long" is not 64 bit,
we'd then pass a 32 bit unsigned integer via a va_list where a signed 64
bit integer is expected causing va_arg to read past the passed 32 bit
unsigned integer.

Fix this by ensuring that we always pass the expected type via the
va_list. Also change the internal timestamp type from time_t (which
size is undefined) to gint64, to avoid any potential overflow issues.

https://bugzilla.gnome.org/show_bug.cgi?id=762763
2016-03-07 11:19:08 +08:00
2d65b485fd tests: Ensure tests run in a nested mutter
Since mutter was changed to be D-Bus activatable, the test cases has not
been working when running from inside a GNOME Wayland session. This
commit makes the test work again by ensuring the tests run in a nested
mutter instance.

https://bugzilla.gnome.org/show_bug.cgi?id=763125
2016-03-07 11:19:08 +08:00
613cadd19b Updated Slovenian translation 2016-03-05 21:17:27 +01:00
9987185e20 Updated Slovenian translation 2016-03-05 20:46:23 +01:00
2ff61a7d1b Updated French translation 2016-03-05 17:57:21 +01:00
ed686ab60b Updated Hungarian translation 2016-03-04 19:46:17 +00:00
a94e640b3f xwayland: Fix possible cancellation of wayland data sources
If we receive multiple SelectionRequest events, we'll end up replacing the
former WaylandSelectionData at a time when an async read has been issued.
This will cause the cancellation of the previous operation.

But the wayland_data_read() callback will attempt to just remove the
current wayland data again on error, which will not be the one we're
cancelling, so the new operation will just be cancelled too.

Also, cancellation is no longer warned about. As the wayland selection
has been replaced at this time, we can just return here.

https://bugzilla.gnome.org/show_bug.cgi?id=760745
2016-03-04 00:50:43 +01:00
da28d7a012 wayland: Emit signal on primary selection data source destruction
This is necessary for the X11 side to catch up, and unset the primary
selection ownership on our window that represents the wayland side in
X11 selection.

https://bugzilla.gnome.org/show_bug.cgi?id=760745
2016-03-04 00:50:43 +01:00
169f0e7324 wayland: Emit signal on selection data source destruction
This is necessary for the X11 side to catch up, and unset the selection
ownership on our window that represents the wayland side in X11 selection.

https://bugzilla.gnome.org/show_bug.cgi?id=760745
2016-03-04 00:50:43 +01:00
e6eb5c3ebc Update Latvian translation 2016-03-03 22:21:21 +02:00
96927b3415 wayland: Don't access the cursor wl_buffer when updating the sprite
We may have released the wl_buffer already when doing this, which means
we should not try to access the wl_buffer content.

Regarding the cursor texture this is not an issue since we can just use
the texture created in apply_pending_state().

The hw cursor however will only be realized if the surface is already
using the the buffer (surface->using_buffer == true). This will, at the
moment, effectively disable hardware cursors for SHM buffers.

https://bugzilla.gnome.org/show_bug.cgi?id=762828
2016-03-03 23:26:02 +08:00
ceae5dceea Bump version to 3.19.91
Update NEWS.
2016-03-03 14:58:20 +01:00
d694244f29 Updated Hebrew translation 2016-03-03 14:40:05 +02:00
c52f716115 Updated Russian translation 2016-03-03 10:53:12 +00:00
800c0c277e Updated Spanish translation 2016-03-02 21:37:17 +01:00
ae3fad7155 Updated Lithuanian translation 2016-03-02 20:23:27 +02:00
1e0abc5279 Updated Galician translations 2016-03-02 09:49:38 +01:00
1a3653765c wayland: Close primary selection fd after gtk_primary_selection_source.send
We leak the fd otherwise.
2016-03-01 21:07:56 +01:00
f0b8dadb7d Updated Slovak translation 2016-03-01 19:41:13 +00:00
d340c3a6dd wayland: Don't unset surface->buffer when wl_buffer destroyed
Don't unset the surface->buffer if the associated wl_buffer object is
destroyed. The MetaWaylandBuffer doesn't really only represent a
wl_buffer object, but also the data (texture) created from the given
wl_buffer. Thus, for example destroying a released SHM wl_buffer should
not destroy the MetaWaylandBuffer instance, because the texture may
still be used.

This commit also fixes a race where calc_showing would hide a window
because, at the time of calculation whether it should be showing, the
surface's buffer had been destroyed as described above.

https://bugzilla.gnome.org/show_bug.cgi?id=762716
2016-03-01 13:33:13 +08:00
43bd057754 wayland: Ensure harder we're dealing with DnD offers/sources
In destroy_data_offer() there is code to ensure compatibility when
dragging from a v3 wl_data_device to a v2 one, it's however not checking
correctly that this is the DnD drag source. The other path should be
used otherwise.

https://bugzilla.gnome.org/show_bug.cgi?id=762878
2016-02-29 19:55:55 +01:00
66be0387ee wayland: Use separate destructor for the gtk_primary_selection_offer
Things don't mix well if we use the same destructor than wl_data_offer,
Use a separate destructor with no DnD paths whatsoever.

https://bugzilla.gnome.org/show_bug.cgi?id=762878
2016-02-29 19:55:55 +01:00
837836a722 Updated German translation 2016-02-28 19:17:12 +01:00
2c71a35b4c Updated Occitan translation 2016-02-28 16:26:09 +00:00
d3537c4dc6 Updated Czech translation 2016-02-27 18:38:00 +01:00
7c114360d0 wayland: Implement the (so far internal) primary selection protocol
Add an additional MetaWaylandDataSource implementation for primary selection
sources, and methods to set primary selection offers. Primary selection
sets altogether a different channel than the clipboard selection, those don't
cross in any way.

Also, the bridge for the X11 PRIMARY selection atom has been added, which
adds all the necessary handling to translate primary selection both ways
with wayland and X11 applications.

https://bugzilla.gnome.org/show_bug.cgi?id=762560
2016-02-26 19:51:32 +01:00
c6aad6e735 wayland: Add gtk-primary-selection protocol
This protocol is an internal mirror of the primary selection drafts
being proposed for wayland-protocols. No changes besides prefix/suffix
changes.

https://bugzilla.gnome.org/show_bug.cgi?id=762560
2016-02-26 19:51:32 +01:00
741dd674f6 backends: rate-filter the emission of MetaBackend::last-device-changed signal
It indirectly triggers expensive operations in gnome-shell
(js/ui/keyboard.js), which turns out too expensive if we happen to operate
the shell simultaneously with 2 devices that will trigger the operations
there.

So just rate limit the signal emission, defer to an idle and just emit
the last device gotten. Worst that will happen is that we may possibly
emit the signal on the same device consecutively.

https://bugzilla.gnome.org/show_bug.cgi?id=753527
2016-02-26 16:19:15 +01:00
821d737e2c tests: Test scheduling a later MetaLater from a later callback works
The added test tests for the bug fixed by "MetaLater: Invoke later
callbacks queued by earlier ones".

https://bugzilla.gnome.org/show_bug.cgi?id=755605
2016-02-26 17:52:01 +08:00
35da6a9078 MetaLater: Invoke later callbacks queued by earlier ones
If a MetaLater callback queued another MetaLater with a scheduling
later than the one currently being invoked, make it so that the newly
scheduled callback will actually be invoked.

The fact that it doesn't already do this is a regression from
cd7a968093.

https://bugzilla.gnome.org/show_bug.cgi?id=755605
2016-02-26 17:52:01 +08:00
00139755ff tests: Add unit tests framework runner
Separate from meta-test-runner which runs metatests testing window
manager operations, a new test program (mutter-unit-tests) is
introduced. This is meant to run unit test like tests on various units
in mutter.

An initial test testing the order of MetaLater callback invokation was
added.

https://bugzilla.gnome.org/show_bug.cgi?id=755605
2016-02-26 17:52:01 +08:00
95dd681d47 Updated Brazilian Portuguese translation 2016-02-25 17:24:12 +00:00
2e5c8b3f11 Updated Polish translation 2016-02-25 17:33:12 +01:00
ad7e654a8b MetaWaylandPointerConstraint: Don't expose internal function
It was exposed via meta-wayland-pointer-constraints.h for no apparent
reason.
2016-02-25 11:47:17 +08:00
b01926dbfa MetaWaylandPointerConstraint: Ignore requests on defunct resource
The constraint may be destroyed before the client destroyes the
protocol object, for example if a oneshot constraint was disabled by
alt-tab. Therefore we need to NULL check the constraint in request
handlers and ignore any requests to defunct objects.
2016-02-25 11:32:20 +08:00
5001aa76d7 MetaWaylandPointerConstraint: Remove redundant typedef 2016-02-25 11:32:20 +08:00
f1730e488d MetaWaylandPointerConstraint: Remove unused function 2016-02-25 11:32:20 +08:00
c22bee19e1 Add --nested command line argument
As of "core: start as wayland display server when
XDG_SESSION_TYPE=wayland" it is no longer possible to run a nested
mutter Wayland session on top of another Wayland session. This patch
adds a command line argument to make it possible to force mutter to
start as a nested compositor.

https://bugzilla.gnome.org/show_bug.cgi?id=758658
2016-02-22 17:03:07 +08:00
7fe2873750 build: Require clutter-1.0 >= 1.25.6
Needed since 5b0eabec51
2016-02-21 08:42:59 +11:00
d6e32a6ac5 Bump version to 3.19.90
Update NEWS.
2016-02-19 18:02:23 +01:00
63 changed files with 2875 additions and 3936 deletions

3
.gitignore vendored
View File

@ -46,6 +46,7 @@ mutter
mutter-restart-helper
mutter-test-client
mutter-test-runner
mutter-test-unit-tests
mutter-all.test
org.gnome.mutter.gschema.valid
org.gnome.mutter.gschema.xml
@ -62,6 +63,8 @@ src/stamp-meta-enum-types.h
src/meta-dbus-display-config.[ch]
src/meta-dbus-idle-monitor.[ch]
src/meta-dbus-login1.[ch]
src/gtk-primary-selection-protocol.c
src/gtk-primary-selection-server-protocol.h
src/gtk-shell-protocol.c
src/gtk-shell-server-protocol.h
src/xdg-shell-unstable-v*-protocol.c

54
NEWS
View File

@ -1,3 +1,57 @@
3.20.0
======
* Fix crash when using visual bell [Jonas; #763858]
Contributors:
Jonas Ådahl, Jasper St. Pierre
Translations:
Milo Casagrande [it], Ask Hjorth Larsen [da]
3.19.92
=======
* Add system bell support on wayland [Jonas; #763284]
* Add gtk_surface.present to gtk-shell [Jonas; #763295]
* Handle DND drops on the root window [Carlos; #762104]
* Misc. bug fixes [Jonas, Carlos, Rui; #762828, #760745, #763125, #762763,
#762661, #762639, #763159]
Contributors:
Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner
Translations:
Rūdolfs Mazurs [lv], Balázs Úr [hu], Claude Paroz [fr], Matej Urbančič [sl],
Мирослав Николић [sr, sr@latin], Sebastian Rasmussen [sv], Changwoo Ryu [ko],
Gil Forcada [ca], Tom Tryfonidis [el]
3.19.91
=======
* Add --nested CLI argument to fix nested wayland session [Jonas; #758658]
* Fix stack - scene graph stacking synchronization issues [Jonas; #755605]
* Rate-limit last-device changes to fix freezes [Carlos; #753527]
* Implement primary selection protocol [Carlos; #762560]
* Misc. bug fixes [Carlos, Jonas; #762878, #762716]
Contributors:
Jonas Ådahl, Carlos Garnacho, Tim Lunn
Translations:
Piotr Drąg [pl], Artur de Aquino Morais [pt_BR], Marek Černocký [cs],
Cédric Valmary [oc], Mario Blättermann [de], Dušan Kazik [sk],
Fran Dieguez [gl], Aurimas Černius [lt], Daniel Mustieles [es],
Stas Solovey [ru], Yosef Or Boczko [he]
3.19.90
=======
* Release buffer after processing commit [Ray; #761312, #761613]
* Implement pointer motion, locks and confinement on wayland [Jonas; #744104]
* Add basic startup notification support on wayland [Carlos; #762268]
* Misc. bug fixes [Rui, Alberts, Florian; #760670, #761543, #752794, #761557]
Contributors:
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos,
Alberts Muktupāvels, Florian Müllner, Jasper St. Pierre, Ray Strode
3.19.4
======
* Fix updating stacking order when setting transient_for [Jonas; #755606]

View File

@ -1,8 +1,8 @@
AC_PREREQ(2.62)
m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [19])
m4_define([mutter_micro_version], [4])
m4_define([mutter_minor_version], [20])
m4_define([mutter_micro_version], [0])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])
@ -64,7 +64,7 @@ MUTTER_PC_MODULES="
pango >= 1.2.0
cairo >= 1.10.0
gsettings-desktop-schemas >= 3.19.3
$CLUTTER_PACKAGE >= 1.25.1
$CLUTTER_PACKAGE >= 1.25.6
cogl-1.0 >= 1.17.1
upower-glib >= 0.99.0
gnome-desktop-3.0

View File

@ -6,21 +6,23 @@
# Jordi Mallach <jordi@sindominio.net>, 2003, 2004, 2005, 2006, 2007, 2008.
# David Planella <david.planella@gmail.com>, 2008, 2009, 2011, 2012.
# Jordi Serratosa <jordis@softcatala.cat>, 2012.
# Gil Forcada <gilforcada@guifi.net>, 2012, 2013, 2014.
# Gil Forcada <gilforcada@guifi.net>, 2012, 2013, 2014, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: metacity 2.24\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-03-10 17:33-0400\n"
"PO-Revision-Date: 2015-03-10 17:33-0400\n"
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2016-03-13 01:36+0000\n"
"PO-Revision-Date: 2016-03-13 14:45+0100\n"
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bits\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Gtranslator 2.91.6\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -465,22 +467,22 @@ msgstr "Canvia al terminal virtual 11"
msgid "Switch to VT 12"
msgstr "Canvia al terminal virtual 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Pantalla integrada"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Desconeguda"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Pantalla desconeguda"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -496,7 +498,7 @@ msgstr ""
"Ja s'està executant un altre gestor de composició a la pantalla %i a la "
"visualització «%s»."
#: ../src/core/bell.c:185
#: ../src/core/bell.c:192
msgid "Bell event"
msgstr "Esdeveniment de campana"
@ -525,41 +527,51 @@ msgstr "_Espera"
msgid "_Force Quit"
msgstr "_Força'n la sortida"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr ""
"S'ha produït un error en obrir la pantalla del sistema de finestres X «%s»\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Inhabilita la connexió al gestor de sessions"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Reemplaça el gestor de finestres en execució"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Especifica l'ID de gestió de sessió"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Visualització X per usar"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Inicialitza la sessió des del fitxer desat"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Fes que les crides a l'X siguin síncrones"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Funciona com a compositor de Wayland"
#: ../src/core/main.c:220
# Notes:
# Afegeix una nota
#
# Camins:
# ../src/core/main.c:223
#: ../src/core/main.c:223
#| msgid "Run as a wayland compositor"
msgid "Run as a nested compositor"
msgstr "Funciona com a compositor imbricat"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Funciona com a servidor de pantalla completa, en comptes d'imbricat"
@ -587,12 +599,12 @@ msgstr "Escriu versió"
msgid "Mutter plugin to use"
msgstr "Connector del Mutter a utilitzar"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Espai de treball %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -601,12 +613,12 @@ msgstr ""
"La pantalla «%s» ja té un gestor de finestres; proveu l'opció --replace per "
"reemplaçar el gestor de finestres actual."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "La pantalla %d en la visualització '%s' no és vàlida\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter es va compilar sense compatibilitat per al mode detallat\n"

View File

@ -12,7 +12,7 @@ msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-03-24 23:25+0000\n"
"POT-Creation-Date: 2016-02-27 13:36+0000\n"
"PO-Revision-Date: 2014-09-22 15:01+0200\n"
"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
@ -238,8 +238,7 @@ msgstr "Přepnout okno na všechny/jednu pracovní plochu"
#: ../data/50-mutter-windows.xml.in.h:13
msgid "Raise window if covered, otherwise lower it"
msgstr ""
"Když je okno zakryté vynést jej do popředí, jinak odsunout do pozadí"
msgstr "Když je okno zakryté vynést jej do popředí, jinak odsunout do pozadí"
#: ../data/50-mutter-windows.xml.in.h:14
msgid "Raise window above other windows"
@ -457,22 +456,22 @@ msgstr "Přepnout na VT 11"
msgid "Switch to VT 12"
msgstr "Přepnout na VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Vestavěný displej"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Neznámý"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Neznámý displej"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -515,40 +514,44 @@ msgstr "_Počkat"
msgid "_Force Quit"
msgstr "_Vynutit ukončení"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Nelze otevřít displej X Window System „%s“\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Zakáže připojení ke správci sezení"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Nahradí běžícího správce oken"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Určení ID správy sezení"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Displej X, který použije"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Spustí sezení z uloženého souboru"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Provede volání X synchronně"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Spustit jako kompozitní program protokolu Wayland"
msgstr "Spustit jako kompozitor protokolu Wayland"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Spustit jako podkladový kompozitor"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Spustit jako plnohodnotný server displeje, nikoliv vnořeně"
@ -576,12 +579,12 @@ msgstr "Vypíše verzi"
msgid "Mutter plugin to use"
msgstr "Zásuvný modul Mutter, který se má použít"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Plocha %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -590,12 +593,12 @@ msgstr ""
"Displej „%s“ již správce oken má; zkuste prosím nahradit aktuálního správce "
"oken pomocí přepínače --replace."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Obrazovka %d na displeji „%s“ je neplatná\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter bylo přeloženo bez podpory podrobného režimu\n"
@ -1272,32 +1275,3 @@ msgstr "%s (na %s)"
#~ msgid "Move to Another _Workspace"
#~ msgstr "Přes_unout na jinou plochu"
#~ msgid "Shift"
#~ msgstr "Shift"
#~ msgid "Ctrl"
#~ msgstr "Ctrl"
#~ msgid "Alt"
#~ msgstr "Alt"
#~ msgid "Meta"
#~ msgstr "Meta"
#~ msgid "Super"
#~ msgstr "Super"
#~ msgid "Hyper"
#~ msgstr "Hyper"
#~ msgid "Mod2"
#~ msgstr "Mod2"
#~ msgid "Mod3"
#~ msgstr "Mod3"
#~ msgid "Mod4"
#~ msgstr "Mod4"
#~ msgid "Mod5"
#~ msgstr "Mod5"

View File

@ -1,5 +1,5 @@
# Danish translation of Mutter.
# Copyright (C) 2002-2009, 2012-2015.
# Copyright (C) 2002-2009, 2012-2016.
# This file is distributed under the same license as the metacity package.
# Kjartan Maraas <kmaraas@gnome.org>, 2002
# Keld simonsen <keld@dkuug.dk>, 2002
@ -8,7 +8,7 @@
# Lasse Bang Mikkelsen <lbm@fatalerror.dk>, 2006.
# Kenneth Nielsen <k.nielsen81@gmail.com>, 2008.
# Joe Hansen <joedalton2@yahoo.dk>, 2011.
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2007, 09, 10, 12, 13, 14, 15.
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2007, 09, 10, 12, 13, 14, 15, 16.
#
# Konventioner:
#
@ -20,8 +20,8 @@ msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-03-21 16:30+0100\n"
"PO-Revision-Date: 2015-03-14 17:01+0100\n"
"POT-Creation-Date: 2016-03-20 23:17+0100\n"
"PO-Revision-Date: 2016-03-20 21:46+0100\n"
"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
@ -291,7 +291,7 @@ msgstr ""
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
msgstr "Fastgør modaldialogvinduer"
msgstr "Fastgør modaldialoger"
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
msgid ""
@ -299,9 +299,8 @@ msgid ""
"attached to the titlebar of the parent window and are moved together with "
"the parent window."
msgstr ""
"Når sand, vil modaldialogvinduer hænge sammen med titellinjen af "
"ophavsvinduet og flyttes sammen med dette, frem for at have uafhængige "
"titellinjer."
"Når sand, vil modaldialoger hænge sammen med titellinjen af ophavsvinduet og "
"flyttes sammen med dette, frem for at have uafhængige titellinjer."
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges"
@ -463,22 +462,22 @@ msgstr "Skift til VT 11"
msgid "Switch to VT 12"
msgstr "Skift til VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Indbygget skærm"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Ukendt"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Ukendt skærm"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -493,7 +492,7 @@ msgid ""
msgstr ""
"En anden komposithåndtering kører allerede på skærm %i på terminal \"%s\"."
#: ../src/core/bell.c:185
#: ../src/core/bell.c:192
msgid "Bell event"
msgstr "Bip-hændelse"
@ -522,40 +521,44 @@ msgstr "_Vent"
msgid "_Force Quit"
msgstr "_Tving til at afslutte"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Kunne ikke åbne X Window System-terminalen \"%s\"\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Deaktivér forbindelse til sessionshåndtering"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Erstat den kørende vindueshåndtering"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Angiv sessionhåndterings-id"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "X-skærm som bruges"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Initialisér session fra gemt fil"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Gør kald til X synkrone"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Kør som en wayland-kompositor"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Kør som en indlejret kompositor"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Kør som fuld displayserver, frem for indlejret"
@ -582,12 +585,12 @@ msgstr "Vis version"
msgid "Mutter plugin to use"
msgstr "Mutter-udvidelsesmodul der skal bruges"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Arbejdsområde %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -596,12 +599,12 @@ msgstr ""
"Terminalen \"%s\" har allerede en vindueshåndtering; prøv tilvalget --"
"replace for at erstatte den aktuelle vindueshåndtering."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skærm %d på terminal \"%s\" er ugyldig\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter blev kompileret uden understøttelse for uddybende tilstand\n"
@ -1336,9 +1339,6 @@ msgstr "%s (på %s)"
#~ msgid "_Dialog"
#~ msgstr "_Dialog"
#~ msgid "_Modal dialog"
#~ msgstr "_Modaldialogvindue"
#~ msgid "_Utility"
#~ msgstr "_Værktøj"
@ -1402,9 +1402,6 @@ msgstr "%s (på %s)"
#~ msgid "Border"
#~ msgstr "Ramme"
#~ msgid "Attached Modal Dialog"
#~ msgstr "Fastgjort modaldialogvindue"
#~ msgid "Button layout test %d"
#~ msgstr "Knaplayouttest %d"

View File

@ -3,7 +3,7 @@
# Matthias Warkus <mawarkus@gnome.org>, 2002.
# Christian Neumair <chris@gnome-de.org>, 2002-2004.
# Hendrik Richter <hendrikr@gnome.org>, 2005, 2006, 2007, 2008.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2010-2013.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2010-2013, 2016.
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009, 2011, 2012.
# Wolfgang Stöggl <c72578@yahoo.de> 2011.
# Tobias Endrigkeit <tobiasendrigkeit@googlemail.com>, 2012.
@ -13,16 +13,16 @@ msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-06-20 08:08+0000\n"
"PO-Revision-Date: 2015-06-18 20:59+0100\n"
"Last-Translator: Bernd Homuth <dev@hmt.im>\n"
"POT-Creation-Date: 2016-02-28 13:37+0000\n"
"PO-Revision-Date: 2016-02-28 19:15+0100\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
"Language: 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.8.1\n"
"X-Generator: Poedit 1.8.7\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -463,22 +463,22 @@ msgstr "Zum virtuellen Terminal 11 wechseln"
msgid "Switch to VT 12"
msgstr "Zum virtuellen Terminal 12 wechseln"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Eingebaute Anzeige"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Unbekannt"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Unbekannte Anzeige"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -523,40 +523,44 @@ msgstr "_Warten"
msgid "_Force Quit"
msgstr "_Beenden erzwingen"
#: ../src/core/display.c:563
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "X-Window-Systemanzeige »%s« konnte nicht geöffnet werden\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Verbindung zur Sitzungsverwaltung deaktivieren"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Den aktuellen Fensterverwalter ersetzen"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Kennung der Sitzungsverwaltung angeben"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Zu verwendende X-Anzeige"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Sitzung anhand gespeicherter Datei starten"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "X-Aufrufe abgleichen"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Als Wayland-Compositor ausführen"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Als eingebetteten Compositor ausführen"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Als vollwertigen Display-Server verwenden (nicht eingebettet)"
@ -586,12 +590,12 @@ msgstr "Version ausgeben"
msgid "Mutter plugin to use"
msgstr "Zu benutzendes Mutter-Plugin"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Arbeitsfläche %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -600,12 +604,12 @@ msgstr ""
"Bildschirm »%s« hat bereits einen Fensterverwalter. Versuchen Sie die Option "
"»--replace«, um den aktuellen Fensterverwalter zu ersetzen."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Bildschirm %d auf Anzeige »%s« ist ungültig\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter wurde ohne Unterstützung für den redseligen Modus kompiliert\n"

View File

@ -20,16 +20,16 @@ msgstr ""
"Project-Id-Version: metacity.gnome-2-26\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-02-21 11:31+0000\n"
"PO-Revision-Date: 2015-02-21 15:43+0200\n"
"Last-Translator: Efstathios Iosifidis <iosifidis@opensuse.org>\n"
"POT-Creation-Date: 2016-03-12 01:36+0000\n"
"PO-Revision-Date: 2016-03-14 23:05+0200\n"
"Last-Translator: Tom Tryfonidis <tomtryf@gmail.com>\n"
"Language-Team: Greek, Modern (1453-) <opensuse-translation-el@opensuse.org>\n"
"Language: el\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: Gtranslator 2.91.6\n"
"X-Generator: Poedit 1.8.7\n"
"X-Project-Style: gnome\n"
#: ../data/50-mutter-navigation.xml.in.h:1
@ -453,46 +453,41 @@ msgid "Switch to VT 7"
msgstr "Εναλλαγή στο VT 7"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to VT 1"
msgid "Switch to VT 8"
msgstr "Εναλλαγή στο VT 8"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to VT 1"
msgid "Switch to VT 9"
msgstr "Εναλλαγή στο VT 9"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to VT 1"
msgid "Switch to VT 10"
msgstr "Εναλλαγή στο VT 10"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to VT 1"
msgid "Switch to VT 11"
msgstr "Εναλλαγή στο VT 11"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to VT 1"
msgid "Switch to VT 12"
msgstr "Εναλλαγή στο VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Ενσωματωμένη οθόνη"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Άγνωστη"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Άγνωστη οθόνη"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -507,7 +502,7 @@ msgid ""
msgstr ""
"Εκτελείται ένας άλλος διαχειριστής παραθύρων στην οθόνη %i προβολή \"%s\"."
#: ../src/core/bell.c:185
#: ../src/core/bell.c:192
msgid "Bell event"
msgstr "Ηχητικό συμβάν κουδουνιού"
@ -537,40 +532,44 @@ msgid "_Force Quit"
msgstr "_Εξαναγκασμός σε τερματισμό"
# gconf/gconf-internals.c:2416
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Αποτυχία ανοίγματος οθόνης του συστήματος παραθύρων Χ '%s'\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Απενεργοποίηση σύνδεσης στο διαχειριστή συνεδρίας"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Αντικατάσταση του τρέχοντος διαχειριστή παραθύρων"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Καθορισμός αναγνωριστικού διαχείρισης συνεδρίας"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Εμφάνιση Χ για χρήση"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Εκκίνηση συνεδρίας από savefile"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Να καταστούν σύγχρονες οι κλήσεις του X"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Εκτέλεση ως συνθετητής wayland"
msgstr "Εκτέλεση ως wayland compositor"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Εκτέλεση ως ενσωματωμένος compositor"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Εκτέλεση ως διακομιστής πλήρους οθόνης, αντί ενσωματωμένης"
@ -598,16 +597,13 @@ msgstr "Εμφάνιση έκδοσης"
msgid "Mutter plugin to use"
msgstr "Πρόσθετα του Mutter για χρήση"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Χώρος εργασίας %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
#| msgid ""
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
#| "replace option to replace the current window manager.\n"
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
@ -616,12 +612,12 @@ msgstr ""
"χρησιμοποιήσετε την επιλογή --replace για να αντικαταστήσετε τον τρέχων "
"διαχειριστή παραθύρων."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Η οθόνη %d στην προβολή '%s' δεν είναι έγκυρη\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr ""
"Το Mutter έχει μεταγλωττιστεί χωρίς υποστήριξη για λειτουργία εμφάνισης "

View File

@ -7,15 +7,15 @@
# Pablo Gonzalo del Campo <pablodc@bigfoot.com>,2002,2003.
# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2004, 2005, 2006.
# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2009, 2010, 2011.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012, 2013, 2014, 2015.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012, 2013, 2014, 2015, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-02-23 11:10+0000\n"
"PO-Revision-Date: 2015-02-23 19:07+0100\n"
"POT-Creation-Date: 2016-02-28 13:37+0000\n"
"PO-Revision-Date: 2016-02-29 16:02+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
"Language: \n"
@ -445,46 +445,41 @@ msgid "Switch to VT 7"
msgstr "Cambiar al VT 7"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to VT 1"
msgid "Switch to VT 8"
msgstr "Cambiar al VT 8"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to VT 1"
msgid "Switch to VT 9"
msgstr "Cambiar al VT 9"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to VT 1"
msgid "Switch to VT 10"
msgstr "Cambiar al VT 10"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to VT 1"
msgid "Switch to VT 11"
msgstr "Cambiar al VT 11"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to VT 1"
msgid "Switch to VT 12"
msgstr "Cambiar al VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Pantalla integrada"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Desconocida"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Pantalla desconocida"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -529,40 +524,45 @@ msgstr "_Esperar"
msgid "_Force Quit"
msgstr "_Forzar la salida"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Desactivar conexión al gestor de sesión"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Reemplazar el gestor de ventanas en ejecución"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Especificar el ID se gestión de sesión"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Pantalla X que usar"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Inicializar sesión desde el archivo de salvaguarda"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Hacer que las llamadas a las X sean síncronas"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Ejecutar como compositor Wayland"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
#| msgid "Run as a wayland compositor"
msgid "Run as a nested compositor"
msgstr "Ejecutar como compositor anidado"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Ejecutar como servidor completo, en lugar de anidado"
@ -589,12 +589,12 @@ msgstr "Imprimir versión"
msgid "Mutter plugin to use"
msgstr "Complemento de mutter que usar"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Área de trabajo %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -603,12 +603,12 @@ msgstr ""
"La pantalla «%s» ya tiene un gestor de ventanas; pruebe a usar la opción «--"
"replace» para reemplazar el gestor de ventanas activo."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "La ventana %d en la pantalla «%s» no es válida\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter fue compilado sin soporte para modo prolijo\n"

View File

@ -1,5 +1,5 @@
# French translation of mutter.
# Copyright (C) 2002-2015 Free Software Foundation, Inc.
# Copyright (C) 2002-2016 Free Software Foundation, Inc.
# This file is distributed under the same license as the metacity package.
#
# Christophe Fergeau <teuf@users.sourceforge.net>, 2002.
@ -11,7 +11,7 @@
# Cyprien Le Pannérer <cyplp@free.fr>, 2006.
# Robert-André Mauchin <zebob.m@gmail.com>, 2007.
# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2007.
# Claude Paroz <claude@2xlibre.net>, 2008-2015.
# Claude Paroz <claude@2xlibre.net>, 2008-2016.
# Bruno Brouard <annoa.b@gmail.com>, 2011-12.
#
msgid ""
@ -19,8 +19,8 @@ msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-02-23 23:11+0000\n"
"PO-Revision-Date: 2015-02-24 10:08+0100\n"
"POT-Creation-Date: 2016-03-05 13:41+0000\n"
"PO-Revision-Date: 2016-03-05 17:57+0100\n"
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
"Language: fr\n"
@ -468,22 +468,22 @@ msgstr "Passer à l'émulateur de terminal 11"
msgid "Switch to VT 12"
msgstr "Passer à l'émulateur de terminal 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Affichage intégré"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Inconnu"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Affichage inconnu"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -528,40 +528,44 @@ msgstr "_Attendre"
msgid "_Force Quit"
msgstr "_Forcer à quitter"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Impossible d'ouvrir l'affichage « %s » du système X Window\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Désactiver la connexion au gestionnaire de sessions"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Remplacer le gestionnaire de fenêtres en cours de fonctionnement"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Indiquer l'ID de gestion de sessions"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Affichage X à utiliser"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Initialiser la session depuis le fichier de sauvegarde"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Rendre synchrones les appels à X"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Lancer comme un compositeur wayland"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Lancer comme un compositeur imbriqué"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Lancer comme un serveur d'affichage complet, plutôt qu'imbriqué"
@ -589,12 +593,12 @@ msgstr "Afficher la version"
msgid "Mutter plugin to use"
msgstr "Greffon de Mutter à utiliser"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Espace de travail %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -603,12 +607,12 @@ msgstr ""
"L'affichage « %s » a déjà un gestionnaire de fenêtres ; essayez d'utiliser "
"l'option --replace pour remplacer le gestionnaire de fenêtres actuel."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "L'écran %d sur l'affichage « %s » n'est pas valide\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter a été compilé sans la prise en charge du mode bavard\n"

View File

@ -9,22 +9,21 @@
# Mancomún - Centro de Referencia e Servizos de Software Libre <g11n@mancomun.org>, 2009.
# Fran Diéguez <frandieguez@gnome.org>, 2009, 2010, 2011, 2012.
# Leandro Regueiro <leandro.regueiro@gmail.com>, 2012.
# Fran Dieguez <frandieguez@gnome.org>, 2012, 2013, 2014, 2015.
#
# Fran Dieguez <frandieguez@gnome.org>, 2012, 2013, 2014, 2015, 2016.
msgid ""
msgstr ""
"Project-Id-Version: gl\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-28 22:43+0100\n"
"PO-Revision-Date: 2015-02-28 22:42+0100\n"
"POT-Creation-Date: 2016-03-02 09:49+0100\n"
"PO-Revision-Date: 2016-03-02 09:49+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: Galician <>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\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: Gtranslator 2.91.6\n"
"X-Generator: Virtaal 0.7.1\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -461,22 +460,22 @@ msgstr "Cambiar á VT 11"
msgid "Switch to VT 12"
msgstr "Cambiar á VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Pantalla embebida"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Descoñecido"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Pantalla descoñecida"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -521,40 +520,44 @@ msgstr "Espe_rar"
msgid "_Force Quit"
msgstr "_Forzar a saída"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Produciuse un erro ao abrir a visualización do X Window System «%s»\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Desactivar a conexión ao xestor de sesión"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Substituír o xestor de xanelas en execución"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Especificar o ID de xestión de sesión"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Pantalla X que se vai usar"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Inicializar sesión desde o ficheiro de salvagarda"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Facer que as chamadas a X sexan sincrónicas"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Executar como compositor de wayland"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Executar como compositor anidado"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Executar como un servidor de pantalla completo, fronte a un aniñado"
@ -581,12 +584,12 @@ msgstr "Imprimir versión"
msgid "Mutter plugin to use"
msgstr "Engadido de mutter que usar"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Espazo de traballo %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -595,12 +598,12 @@ msgstr ""
"A pantalla «%s» ten xa un xestor de xanelas, tente usar a opción --replace "
"para substituír o xestor de xanelas."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "A pantalla %d na visualización «%s» non é válida\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter foi compilado sen compatibilidade para o modo detallado\n"

View File

@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: metacity.HEAD.he\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-24 19:33+0200\n"
"PO-Revision-Date: 2015-02-24 19:34+0200\n"
"POT-Creation-Date: 2016-03-03 14:39+0200\n"
"PO-Revision-Date: 2016-03-03 14:40+0200\n"
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
"Language-Team: עברית <>\n"
"Language: he\n"
@ -453,22 +453,22 @@ msgstr "מעבר ל־VT 11"
msgid "Switch to VT 12"
msgstr "מעבר ל־VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "תצוגה מובנית"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "לא ידוע"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "תצוגה לא ידועה"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -510,40 +510,44 @@ msgstr "ה_מתנה"
msgid "_Force Quit"
msgstr "_אילוץ סגירה"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Failed to open X Window System display '%s'\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Disable connection to session manager"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Replace the running window manager"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Specify session management ID"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "X Display to use"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Initialize session from savefile"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Make X calls synchronous"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Run as a wayland compositor"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Run as a nested compositor"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Run as a full display server, rather than nested"
@ -569,12 +573,12 @@ msgstr "Print version"
msgid "Mutter plugin to use"
msgstr "תוסף ה־mutter לשימוש"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "מרחב עבודה %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -583,12 +587,12 @@ msgstr ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Screen %d on display '%s' is invalid\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter הודר ללא תמיכה במצב פירוט\n"

View File

@ -1,4 +1,4 @@
# Hungarian translation of mutter
# Hungarian translation of mutter.
# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
# This file is distributed under the same license as the mutter package.
#
@ -6,14 +6,14 @@
# Gabor Sari <saga at externet dot hu>, 2003.
# Laszlo Dvornik <dvornik at gnome dot hu>, 2004.
# Gabor Kelemen <kelemeng at gnome dot hu>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
# Balázs Úr <urbalazs at gmail dot com>, 2013, 2014, 2015.
# Balázs Úr <urbalazs at gmail dot com>, 2013, 2014, 2015, 2016.
msgid ""
msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-02-22 11:10+0000\n"
"PO-Revision-Date: 2015-02-22 20:52+0100\n"
"POT-Creation-Date: 2016-03-04 13:42+0000\n"
"PO-Revision-Date: 2016-03-04 20:43+0100\n"
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
"Language: hu\n"
@ -436,46 +436,41 @@ msgid "Switch to VT 7"
msgstr "Váltás a 7. VT-re"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to VT 1"
msgid "Switch to VT 8"
msgstr "Váltás a 8. VT-re"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to VT 1"
msgid "Switch to VT 9"
msgstr "Váltás a 9. VT-re"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to VT 1"
msgid "Switch to VT 10"
msgstr "Váltás a 10. VT-re"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to VT 1"
msgid "Switch to VT 11"
msgstr "Váltás a 11. VT-re"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to VT 1"
msgid "Switch to VT 12"
msgstr "Váltás a 12. VT-re"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Beépített kijelző"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Ismeretlen"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Ismeretlen kijelző"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -519,40 +514,45 @@ msgstr "Vá_rakozás"
msgid "_Force Quit"
msgstr "_Erőltetett kilépés"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Nem sikerült megnyitni a(z) „%s” X Window rendszer képernyőt\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "A munkamenet-kezelőhöz való csatlakozás tiltása"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "A futó ablakkezelő helyettesítése"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "A munkamenet-kezelő azonosítójának megadása"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "A használandó X megjelenítő"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "A munkamenet előkészítése a mentési fájlból"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Az X-hívások szinkronná tétele"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Futtatás wayland betűszedőként"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
#| msgid "Run as a wayland compositor"
msgid "Run as a nested compositor"
msgstr "Futtatás beágyazott betűszedőként"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr ""
"Futtatás teljes megjelenítő kiszolgálóként az egymásba ágyazott helyett"
@ -580,12 +580,12 @@ msgstr "Verzió kinyomtatása"
msgid "Mutter plugin to use"
msgstr "Használandó Mutter bővítmény"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "%d. munkaterület"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -594,12 +594,12 @@ msgstr ""
"A(z) „%s” kijelző már rendelkezik ablakkezelővel; próbálja a --replace "
"kapcsolóval helyettesíteni a jelenlegi ablakkezelőt."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "A(z) %d képernyő a(z) „%s” megjelenítőn érvénytelen\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "A Mutter ablakkezelőt a részletes mód támogatása nélkül fordították\n"

View File

@ -5,15 +5,15 @@
# Pier Luigi Fiorini <plfiorini@libero.it>, 2002.
# Lapo Calamandrei <lapo.calamandrei@virgilio.it>, 2003.
# Luca Ferretti <lferrett@gnome.org>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012.
# Milo Casagrande <milo@milo.name>, 2012, 2013, 2014, 2015.
# Milo Casagrande <milo@milo.name>, 2012, 2013, 2014, 2015, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-03-04 23:11+0000\n"
"PO-Revision-Date: 2015-03-05 09:16+0100\n"
"POT-Creation-Date: 2016-03-17 13:44+0000\n"
"PO-Revision-Date: 2016-03-17 21:24+0100\n"
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\n"
@ -21,7 +21,7 @@ msgstr ""
"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.7.4\n"
"X-Generator: Poedit 1.8.7\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -466,22 +466,22 @@ msgstr "Passa al VT 11"
msgid "Switch to VT 12"
msgstr "Passa al VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Display integrato"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Sconosciuto"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Display sconosciuto"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -497,7 +497,7 @@ msgstr ""
"Un altro compositing manager è già in esecuzione sullo schermo %i sul "
"display «%s»."
#: ../src/core/bell.c:185
#: ../src/core/bell.c:192
msgid "Bell event"
msgstr "Evento campanella"
@ -526,40 +526,44 @@ msgstr "_Attendi"
msgid "_Force Quit"
msgstr "_Forza uscita"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Apertura del display «%s» di X Window System non riuscita\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Disabilita la connessione al gestore di sessione"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Sostituisce il window manager in esecuzione"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Specifica l'ID di gestione sessione"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Display X da usare"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Inizializza la sessione da file salvato"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Rende le chiamate X sincrone"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Esegui come compositor Wayland"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Esegui come compositor annidato"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Esegui come display server invece che annidato"
@ -586,12 +590,12 @@ msgstr "Stampa la versione"
msgid "Mutter plugin to use"
msgstr "Plugin Mutter da usare"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Spazio di lavoro %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -600,12 +604,12 @@ msgstr ""
"Il display «%s» ha già un window manager; provare a utilizzare l'opzione --"
"replace per sostituirlo."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Lo schermo %d nel display «%s» non è valido\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr ""
"Mutter è stato compilato escludendo il supporto per la modalità prolissa\n"

View File

@ -6,7 +6,7 @@
# Changwoo Ryu <cwryu@debian.org>, 2003, 2004, 2005, 2006, 2007, 2008, 2009.
#
# Updated in mutter:
# Changwoo Ryu <cwryu@debian.org>, 2011-2015.
# Changwoo Ryu <cwryu@debian.org>, 2011-2016.
#
#
# 주의:
@ -18,8 +18,8 @@ msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-03-07 11:12+0000\n"
"PO-Revision-Date: 2015-03-08 03:44+0900\n"
"POT-Creation-Date: 2016-03-12 13:40+0000\n"
"PO-Revision-Date: 2016-03-13 04:38+0900\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
"Language: Korean\n"
@ -453,22 +453,22 @@ msgstr "가상 터미널 11로 이동"
msgid "Switch to VT 12"
msgstr "가상 터미널 12로 이동"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "내장 디스플레이"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "알 수 없음"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "알 수 없는 디스플레이"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -484,7 +484,7 @@ msgstr ""
"다른 창 구성 관리 프로그램이 이미 디스플레이 \"%2$s\" 화면 %1$i번에서 실행 중"
"입니다."
#: ../src/core/bell.c:185
#: ../src/core/bell.c:192
msgid "Bell event"
msgstr "삑소리 이벤트"
@ -511,40 +511,44 @@ msgstr "기다리기(_W)"
msgid "_Force Quit"
msgstr "강제로 끝내기(_F)"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "X 윈도 시스템 디스플레이 '%s'을(를) 여는데 실패하였습니다\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "세션 관리자와 연결 하지 않습니다"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "실행 중인 창 관리자를 바꿉니다"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "세션 관리 ID를 지정합니다"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "사용할 X 디스플레이"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "저장 파일에서 세션을 초기화 합니다"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "동기 X 호출을 합니다"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "웨일랜드 컴포지터로 실행합니다"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "내장 컴포지터로 실행합니다"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "전체 디스플레이 서버로 실행, 내장 프로그램 아님"
@ -571,24 +575,26 @@ msgstr "버전을 출력합니다"
msgid "Mutter plugin to use"
msgstr "사용할 머터 플러그인"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "작업 공간 %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
msgstr "디스플레이 \"%s\"에 이미 창 관리자가 있습니다. 현재 창 관리자를 바꾸려면 --replace 옵션을 써보십시오."
msgstr ""
"디스플레이 \"%s\"에 이미 창 관리자가 있습니다. 현재 창 관리자를 바꾸려면 --"
"replace 옵션을 써보십시오."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "디스플레이 '%2$s'의 화면 %1$d은(는) 잘못되었습니다\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "머터가 자세한 모드 지원 없이 컴파일 되었습니다\n"

View File

@ -13,8 +13,8 @@ msgstr ""
"Project-Id-Version: lt\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2016-01-05 13:43+0000\n"
"PO-Revision-Date: 2016-01-05 18:04+0200\n"
"POT-Creation-Date: 2016-02-26 09:54+0000\n"
"PO-Revision-Date: 2016-02-25 15:18+0200\n"
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
"Language: lt\n"
@ -23,7 +23,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
"%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 1.8.6\n"
"X-Generator: Poedit 1.8.7\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -513,42 +513,46 @@ msgstr "_Laukti"
msgid "_Force Quit"
msgstr "_Priverstinai išeiti"
#: ../src/core/display.c:563
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Nepavyko atverti X Window sistemos ekrano „%s“\n"
#: ../src/core/main.c:180
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Išjungti susijungimą su sesijos tvarkytuve"
#: ../src/core/main.c:186
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Pakeisti veikiančią langų tvarkytuvę"
#: ../src/core/main.c:192
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Nurodyti sesijos tvarkymo ID"
#: ../src/core/main.c:197
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Naudotinas X ekranas"
#: ../src/core/main.c:203
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Inicializuoti sesiją iš išsaugojimo failo"
#: ../src/core/main.c:209
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Sinchronizuoti X iškvietimus"
#: ../src/core/main.c:216
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Vykdyti kaip wayland kompozitorių"
#: ../src/core/main.c:224
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Vykdyti kaip įdėtinį kompozitorių"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Vykdyti kaip visą vaizduoklio serverį, o ne vidinį"
msgstr "Vykdyti kaip visą vaizduoklio serverį, o ne įdėtinį"
#: ../src/core/mutter.c:39
#, c-format
@ -580,7 +584,7 @@ msgstr "Naudojamas Mutter įskiepis"
msgid "Workspace %d"
msgstr "Darbo sritis %d"
#: ../src/core/screen.c:526
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -589,12 +593,12 @@ msgstr ""
"Vaizduoklis „%s“ jau turi langų tvarkytuvę; pabandykite pakeisti esamą langų "
"tvarkytuvę, naudodami parametrą --replace."
#: ../src/core/screen.c:608
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Ekranas %d vaizduoklyje „%s“ netinkamas\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter buvo sukompiliuota be išsamaus veikimo veiksenos\n"

View File

@ -7,14 +7,14 @@
# Raivis Dejus <orvils@gmail.com>, 2006, 2007, 2009.
# Rudolfs <rudolfs.mazurs@gmail.com>, 2011.
# Rūdofls Mazurs <rudolfs.mazurs@gmail.com>, 2011, 2012.
# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2012, 2013, 2014, 2015.
# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2012, 2013, 2014, 2015, 2016.
msgid ""
msgstr ""
"Project-Id-Version: lv\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-09-20 11:14+0000\n"
"PO-Revision-Date: 2015-09-20 18:51+0300\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&"
"keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2016-03-03 13:37+0000\n"
"PO-Revision-Date: 2016-03-03 22:19+0200\n"
"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
"Language-Team: Latvian <lata-l10n@googlegroups.com>\n"
"Language: lv\n"
@ -23,7 +23,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
"2);\n"
"X-Generator: Lokalize 1.5\n"
"X-Generator: Lokalize 2.0\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -437,46 +437,41 @@ msgid "Switch to VT 7"
msgstr "Pārslēgties uz VT 7"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to VT 1"
msgid "Switch to VT 8"
msgstr "Pārslēgties uz VT 8"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to VT 1"
msgid "Switch to VT 9"
msgstr "Pārslēgties uz VT 9"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to VT 1"
msgid "Switch to VT 10"
msgstr "Pārslēgties uz VT 10"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to VT 1"
msgid "Switch to VT 11"
msgstr "Pārslēgties uz VT 11"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to VT 1"
msgid "Switch to VT 12"
msgstr "Pārslēgties uz VT 12"
#: ../src/backends/meta-monitor-manager.c:500
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Iebūvēts displejs"
#: ../src/backends/meta-monitor-manager.c:526
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Nezināms"
#: ../src/backends/meta-monitor-manager.c:528
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Nezināms displejs"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:536
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -519,40 +514,45 @@ msgstr "_Gaidīt"
msgid "_Force Quit"
msgstr "Aizvērt _piespiedu kārtā"
#: ../src/core/display.c:563
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Neizdevās atvērt X logu sistēmas displeju “%s”\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Deaktivēt savienojumu ar sesiju pārvaldnieku"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Aizvietot darbojošos logu pārvaldnieku"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Norādiet sesiju pārvaldības ID"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Lietojamais X displejs"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Inicializēt sesiju no saglabātās datnes"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Padarīt X izsaukumus sinhronus"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Palaist kā wayland kompozitoru"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
#| msgid "Run as a wayland compositor"
msgid "Run as a nested compositor"
msgstr "Palaist kā ligzdotu kompozitoru"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Palaist kā pilnu attēlošanas serveri, nevis iegultu"
@ -579,29 +579,26 @@ msgstr "Parādīt versiju"
msgid "Mutter plugin to use"
msgstr "Izmantojamais mutter spraudnis"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Darbvieta %d"
#: ../src/core/screen.c:526
#: ../src/core/screen.c:521
#, c-format
#| msgid ""
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
#| "replace option to replace the current window manager.\n"
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
msgstr ""
"Displejam “%s” jau ir logu pārvaldnieks; mēģiniet lietot --replace "
"iespēju, lai aizvietotu pašreizējo logu pārvaldnieku."
"Displejam “%s” jau ir logu pārvaldnieks; mēģiniet lietot --replace iespēju, "
"lai aizvietotu pašreizējo logu pārvaldnieku."
#: ../src/core/screen.c:608
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Ekrāna %d displejs “%s“ nav derīgs\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter tika kompilēts bez detalizētas izvades režīma atbalsta\n"
@ -617,3 +614,4 @@ msgstr ""
#, c-format
msgid "%s (on %s)"
msgstr "%s (uz %s)"

3420
po/oc.po

File diff suppressed because it is too large Load Diff

View File

@ -9,14 +9,14 @@
# Marek Stępień <marcoos@aviary.pl>, 2007.
# Wadim Dziedzic <wdziedzic@aviary.pl>, 2007.
# Tomasz Dominikowski <dominikowski@gmail.com>, 2008-2009.
# Piotr Drąg <piotrdrag@gmail.com>, 2010-2015.
# Aviary.pl <gnomepl@aviary.pl>, 2007-2015.
# Piotr Drąg <piotrdrag@gmail.com>, 2010-2016.
# Aviary.pl <gnomepl@aviary.pl>, 2007-2016.
msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-08-26 18:49+0200\n"
"PO-Revision-Date: 2015-08-26 18:50+0200\n"
"POT-Creation-Date: 2016-02-25 17:29+0100\n"
"PO-Revision-Date: 2016-02-25 17:30+0100\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <gnomepl@aviary.pl>\n"
"Language: pl\n"
@ -285,10 +285,10 @@ msgid ""
"\"Windows key\" on PC hardware. It's expected that this binding either the "
"default or set to the empty string."
msgstr ""
"Ten klawisz inicjuje tryb „overlay”, który jest połączeniem podglądu okien i "
"systemu uruchamiania programów. Domyślnie jest przeznaczony do powiązania z "
"klawiszem „Windows” na komputerach typu PC. Ustawienie tego powiązania "
"powinno być domyślne lub puste."
"Ten klawisz inicjuje tryb „overlay” (nakładki), który jest połączeniem "
"podglądu okien i systemu uruchamiania programów. Domyślnie jest przeznaczony "
"do powiązania z klawiszem „Windows” na komputerach typu PC. Ustawienie tego "
"powiązania powinno być domyślne lub puste."
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
@ -332,8 +332,8 @@ msgid ""
"gnome.desktop.wm.preferences)."
msgstr ""
"Określa, czy obszary robocze są zarządzane dynamicznie, czy istnieje "
"statyczna liczba obszarów (określona przez klucz „num-workspaces” w org."
"gnome.desktop.wm.preferences)."
"statyczna liczba obszarów (określona przez klucz „num-workspaces” w org."
"gnome.desktop.wm.preferences)."
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary"
@ -468,22 +468,22 @@ msgstr "Przełączenie na 11. konsolę wirtualną"
msgid "Switch to VT 12"
msgstr "Przełączenie na 12. konsolę wirtualną"
#: ../src/backends/meta-monitor-manager.c:500
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Wbudowany ekran"
#: ../src/backends/meta-monitor-manager.c:526
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Nieznany"
#: ../src/backends/meta-monitor-manager.c:528
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Nieznany ekran"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:536
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -525,42 +525,46 @@ msgstr "_Czekaj"
msgid "_Force Quit"
msgstr "_Zakończ"
#: ../src/core/display.c:563
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Otwarcie połączenia z ekranem „%s” systemu X Window się nie powiodło\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Rozłącza połączenie z menedżerem sesji"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Zastępuje uruchomionego menedżera okien"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Podaje identyfikator zarządzania sesją"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Używany ekran X"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Inicjuje sesję z zapisanego pliku"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Synchroniczne wywołania X"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Uruchamia jako menedżer składania Wayland"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Uruchamia jako osadzony menedżer składania"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Uruchamia pełny serwer wyświetlania zamiast osadzonego"
msgstr "Uruchamia jako pełny serwer wyświetlania zamiast osadzonego"
#: ../src/core/mutter.c:39
#, c-format
@ -572,7 +576,7 @@ msgid ""
"PARTICULAR PURPOSE.\n"
msgstr ""
"mutter %s\n"
"Copyright (C) 2001%d Havoc Pennington, Red Hat, Inc., oraz inni\n"
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., oraz inni\n"
"Niniejszy program jest wolnym oprogramowaniem, aby poznać warunki, pod\n"
"jakimi dopuszczalne jest kopiowanie programu, zajrzyj do jego źródeł.\n"
"Na program nie udziela się ŻADNYCH GWARANCJI, nawet domyślnej gwarancji\n"
@ -584,23 +588,23 @@ msgstr "Wyświetla wersję"
#: ../src/core/mutter.c:59
msgid "Mutter plugin to use"
msgstr "Używana wtyczka programu Mutter"
msgstr "Używana wtyczka menedżera Mutter"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Obszar roboczy %d"
msgstr "%d. obszar roboczy"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
msgstr ""
"Na ekranie „%s” działa już menedżer okien. Aby zastąpić działającego "
"menedżera okien, proszę spróbować użyć opcji --replace."
"menedżera okien, należy użyć opcji --replace."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Podekran %d ekranu „%s” jest nieprawidłowy\n"
@ -608,7 +612,7 @@ msgstr "Podekran %d ekranu „%s” jest nieprawidłowy\n"
#: ../src/core/util.c:118
msgid "Mutter was compiled without support for verbose mode\n"
msgstr ""
"Program Mutter został skompilowany bez obsługi trybu z obszerną informacją\n"
"Menedżer Mutter został skompilowany bez obsługi trybu z obszerną informacją\n"
#: ../src/x11/session.c:1815
msgid ""

View File

@ -15,22 +15,23 @@
# Rodrigo Padula de Oliveira <contato@rodrigopadula.com>, 2011.
# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013, 2014.
# Enrico Nicoletto <liverig@gmail.com>, 2012, 2014.
# Artur de Aquino Morais <artur.morais93@outlook.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-02-26 11:24+0000\n"
"PO-Revision-Date: 2015-02-26 17:36-0300\n"
"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
"POT-Creation-Date: 2016-02-25 13:40+0000\n"
"PO-Revision-Date: 2016-02-25 13:41-0300\n"
"Last-Translator: Artur de Aquino Morais <artur.morais93@outlook.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.7.4\n"
"X-Generator: Poedit 1.8.4\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -472,22 +473,22 @@ msgstr "Trocar para o VT 11"
msgid "Switch to VT 12"
msgstr "Trocar para o VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Tela embutida"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Desconhecido"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Monitor desconhecido"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s de %s"
@ -531,40 +532,44 @@ msgstr "_Esperar"
msgid "_Force Quit"
msgstr "_Forçar sair"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Falha ao abrir a exibição \"%s\" do sistema de janelas X\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Desabilitar a conexão com o gerenciador de sessões"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Substituir o gerenciador de janelas em execução"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Especificar o ID do gerenciador de sessões"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Exibição do X a ser utilizada"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Inicializar a sessão a partir do arquivo salvo"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Fazer X chamadas síncronas"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Executar como um compositor wayland"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Executar como um compositor aninhado"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Executar como um servidor de tela cheia, ao invés de aninhado"
@ -592,12 +597,12 @@ msgstr "Versão impressa"
msgid "Mutter plugin to use"
msgstr "Plug-in do Mutter para usar"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Espaço de trabalho %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -606,7 +611,7 @@ msgstr ""
"A exibição \"%s\" já possui um gerenciador de janelas; tente usar a opção --"
"replace para substituir o gerenciador de janelas atual."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "A tela %d na exibição \"%s\" é inválida\n"

View File

@ -9,15 +9,16 @@
# Yuri Kozlov <yuray@komyakino.ru>, 2011.
# Yuri Myasoedov <ymyasoedov@yandex.ru>, 2012-2014, 2015.
# Ivan Komaritsyn <vantu5z@mail.ru>, 2015.
# Stas Solovey <whats_up@tut.by>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: metacity ru\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-02-19 23:11+0000\n"
"PO-Revision-Date: 2015-02-20 13:59+0300\n"
"Last-Translator: Ivan Komaritsyn <vantu5z@mail.ru>\n"
"POT-Creation-Date: 2016-03-03 01:44+0000\n"
"PO-Revision-Date: 2016-03-03 13:51+0300\n"
"Last-Translator: Stas Solovey <whats_up@tut.by>\n"
"Language-Team: Русский <gnome-cyr@gnome.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
@ -25,7 +26,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"X-Generator: Gtranslator 2.91.6\n"
"X-Generator: Gtranslator 2.91.7\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -441,46 +442,41 @@ msgid "Switch to VT 7"
msgstr "Переключиться на виртуальный терминал 7"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to VT 1"
msgid "Switch to VT 8"
msgstr "Переключиться на виртуальный терминал 8"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to VT 1"
msgid "Switch to VT 9"
msgstr "Переключиться на виртуальный терминал 9"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to VT 1"
msgid "Switch to VT 10"
msgstr "Переключиться на виртуальный терминал 10"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to VT 1"
msgid "Switch to VT 11"
msgstr "Переключиться на виртуальный терминал 11"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to VT 1"
msgid "Switch to VT 12"
msgstr "Переключиться на виртуальный терминал 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Встроенный дисплей"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Неизвестный"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Неизвестный дисплей"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -521,40 +517,45 @@ msgstr "_Подождать"
msgid "_Force Quit"
msgstr "Завер_шить"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Не удалось открыть дисплей «%s» системы X Window\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Запретить подключение к менеджеру сеансов"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Заменить запущенный оконный менеджер"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Указать идентификатор управления сеансом"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Используемый дисплей X"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Инициализировать сеанс из сохранённого файла"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Сделать X-вызовы синхронными"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Запустить в качестве композитора wayland"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
#| msgid "Run as a wayland compositor"
msgid "Run as a nested compositor"
msgstr "Запустить в качестве встроенного композитора"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Запустить в качестве полноэкранного сервера вместо встроенного"
@ -583,12 +584,12 @@ msgstr "Вывести версию"
msgid "Mutter plugin to use"
msgstr "Использовать модуль mutter"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Рабочее место %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -597,12 +598,12 @@ msgstr ""
"Дисплей «%s» уже использует менеджер окон; попробуйте использовать параметр "
"--replace, чтобы заменить текущий менеджер окон."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Недопустимый экран %d дисплея «%s»\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter собран без поддержки режима подробных сообщений\n"

View File

@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-02-21 23:27+0000\n"
"PO-Revision-Date: 2015-02-22 11:11+0100\n"
"POT-Creation-Date: 2016-03-01 13:42+0000\n"
"PO-Revision-Date: 2016-03-01 20:40+0100\n"
"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
"Language-Team: Slovak <gnome-sk-list@gnome.org>\n"
"Language: sk\n"
@ -23,7 +23,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
"X-Generator: Poedit 1.7.4\n"
"X-Generator: Poedit 1.8.7\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -542,22 +542,22 @@ msgstr "Prepnúť na VT č. 11"
msgid "Switch to VT 12"
msgstr "Prepnúť na VT č. 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Vstavaný displej"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Neznámy"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Neznámy displej"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -602,46 +602,51 @@ msgid "_Force Quit"
msgstr "_Vynútiť ukončenie"
# X window system preloz, napr. system na spravu okien X
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Zlyhalo otvorenie displeja systému na správu okien X „%s“\n"
# cmd desc
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Zakáže pripojenia k správcovi relácií"
# cmd desc
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Nahradí bežiaceho správcu okien"
# cmd desc
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Zadá identifikátor správy relácií"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "X displej, ktorý bude použitý"
# cmd desc
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Inicializuje reláciu z uloženého súboru"
# cmd desc
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Použije synchrónne volania X"
# cmd desc
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Spustí ako kompozitor protokolu wayland"
#: ../src/core/main.c:220
# cmd desc
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Spustí ako kompozitor s vnoreným režimom"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Spustí ako plnohodnotný zobrazovací server, namiesto vnoreného režimu"
@ -670,12 +675,12 @@ msgstr "Zobrazí verziu"
msgid "Mutter plugin to use"
msgstr "Použije zásuvný modul Mutter"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Pracovný priestor č. %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -684,12 +689,12 @@ msgstr ""
"Displej „%s“ už má správcu okien. Skúste použiť prepínač --replace, aby sa "
"aktuálny správca nahradil."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Obrazovka č. %d na displeji „%s“ nie je platná\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter bol skompilovaný bez výpisu podrobností pri behu\n"

View File

@ -4,15 +4,15 @@
#
# Andraž Tori <andraz.tori1@guest.arnes.si>, 2000.
# Matjaž Horvat <m@owca.info>, 2006.
# Matej Urbančič <mateju@svn.gnome.org>, 2007-2015.
# Matej Urbančič <mateju@svn.gnome.org>, 2007-2016.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-03-15 11:07+0000\n"
"PO-Revision-Date: 2015-03-15 14:36+0100\n"
"POT-Creation-Date: 2016-03-05 21:12+0100\n"
"PO-Revision-Date: 2016-03-05 21:12+0100\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: sl_SI\n"
@ -22,7 +22,7 @@ msgstr ""
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
"%100==4 ? 3 : 0);\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Generator: Poedit 1.5.4\n"
"X-Generator: Poedit 1.8.4\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -455,22 +455,22 @@ msgstr "Preklopi na VT 11"
msgid "Switch to VT 12"
msgstr "Preklopi na VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Vgrajen zaslon"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Neznano"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Neznan zaslon"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -514,40 +514,44 @@ msgstr "_Počakaj"
msgid "_Force Quit"
msgstr "_Vsili konec"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Ni mogoče odpreti zaslona '%s' okenskega sistema X\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Onemogoči povezavo z upravljalnikom sej"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Zamenjaj trenutni upravljalnik oken"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Navedite ID upravljanja seje"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Zaslon X za uporabo"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Začni sejo iz shranjene datoteke"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Uskladi klice X"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Zaženi izbirnik wayland"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Zaženi kot gnezden vpisovalnik"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Zaženi kot polni strežnik zaslona in ne vstavljeno"
@ -575,12 +579,12 @@ msgid "Mutter plugin to use"
msgstr "Vstavek Mutter za uporabo"
# G:1 K:0 O:0
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Delovna površina %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@ -589,12 +593,12 @@ msgstr ""
"Zaslon \"%s\" že ima določen upravljalnik oken; poskušajte uporabiti možnost "
"--replace za zamenjavo trenutnega upravljalnika zaslona."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Zaslon %d na prikazu '%s' ni veljaven\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr ""
"Program Mutter je kodno preveden brez podpore za podrobni način izpisovanja\n"

View File

@ -1,19 +1,21 @@
# Serbian translation of mutter.
# Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2015.
# Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2016.
# This file is distributed under the same license as the mutter package.
#
# Translators:
# Горан Ракић <grakic@devbase.net>
# Данило Шеган <danilo@prevod.org>, 2005.
# Милош Поповић <gpopac@gmail.com>, 2010.
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011—2015.
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011—2016.
msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&"
"keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-03-04 11:14+0000\n"
"PO-Revision-Date: 2015-03-04 19:46+0200\n"
"POT-Creation-Date: 2016-03-09 01:41+0000\n"
"PO-Revision-Date: 2016-03-09 09:52+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <gnom@prevod.org>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -436,46 +438,41 @@ msgid "Switch to VT 7"
msgstr "Прелазак на ВТ 7"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to VT 1"
msgid "Switch to VT 8"
msgstr "Прелазак на ВТ 8"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to VT 1"
msgid "Switch to VT 9"
msgstr "Прелазак на ВТ 9"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to VT 1"
msgid "Switch to VT 10"
msgstr "Прелазак на ВТ 10"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to VT 1"
msgid "Switch to VT 11"
msgstr "Прелазак на ВТ 11"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to VT 1"
msgid "Switch to VT 12"
msgstr "Прелазак на ВТ 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Уграђени дисплеј"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Непознато"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Непознат дисплеј"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -519,40 +516,45 @@ msgstr "_Сачекај"
msgid "_Force Quit"
msgstr "_Приморај излаз"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Нисам успео да отворим екран „%s“ Икс система прозора\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Искључује везу са управником сесије"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Мења текућег управника прозорима"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Наводи ИБ управника сесије"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Икс екран који ће бити коришћен"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Покреће сесију из датотеке чувања"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Чини Икс позиве усклађеним"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Ради као вајландов саставник"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
#| msgid "Run as a wayland compositor"
msgid "Run as a nested compositor"
msgstr "Ради као угнеждени саставник"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Ради као пуни сервер приказа, уместо као угнеждени"
@ -566,8 +568,8 @@ msgid ""
"PARTICULAR PURPOSE.\n"
msgstr ""
"матер %s\n"
"Сва права задржана (C) 2001%d Havoc Pennington, Red Hat, Inc., и остали\n"
"Ово је слободан програм; погледајте изворни код за услове коришћења.\n"
"Сва права задржана © 2001%d Хевок Пенингтон, Ред Хет, Инк., и остали\n"
"Ово је слободан програм; погледајте изворни кôд за услове коришћења.\n"
"НЕ постоји никаква гаранција; чак ни гаранција о ТРЖИШНОЈ ВРЕДНОСТИ или "
"ПРИЛАГОЂЕНОСТИ ОДРЕЂЕНОЈ НАМЕНИ.\n"
@ -579,29 +581,26 @@ msgstr "Исписује издање"
msgid "Mutter plugin to use"
msgstr "Прикључци Матера за коришћење"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "%d. радни простор"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
#| msgid ""
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
#| "replace option to replace the current window manager.\n"
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
msgstr ""
"Приказ „%s“ већ има управника прозора; пробајте да користите опцију "
"„--replace“ да замените тренутног управника прозора."
"Приказ „%s“ већ има управника прозора; пробајте да користите опцију „--"
"replace“ да замените тренутног управника прозора."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Приказ „%d“ на екрану „%s“ није исправан\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Матер је преведен без подршке за опширан режим\n"

View File

@ -1,19 +1,21 @@
# Serbian translation of mutter.
# Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2015.
# Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2016.
# This file is distributed under the same license as the mutter package.
#
# Translators:
# Goran Rakić <grakic@devbase.net>
# Danilo Šegan <danilo@prevod.org>, 2005.
# Miloš Popović <gpopac@gmail.com>, 2010.
# Miroslav Nikolić <miroslavnikolic@rocketmail.com>, 2011—2015.
# Miroslav Nikolić <miroslavnikolic@rocketmail.com>, 2011—2016.
msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&"
"keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-03-04 11:14+0000\n"
"PO-Revision-Date: 2015-03-04 19:46+0200\n"
"POT-Creation-Date: 2016-03-09 01:41+0000\n"
"PO-Revision-Date: 2016-03-09 09:52+0200\n"
"Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <gnom@prevod.org>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -436,46 +438,41 @@ msgid "Switch to VT 7"
msgstr "Prelazak na VT 7"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#| msgid "Switch to VT 1"
msgid "Switch to VT 8"
msgstr "Prelazak na VT 8"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#| msgid "Switch to VT 1"
msgid "Switch to VT 9"
msgstr "Prelazak na VT 9"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#| msgid "Switch to VT 1"
msgid "Switch to VT 10"
msgstr "Prelazak na VT 10"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#| msgid "Switch to VT 1"
msgid "Switch to VT 11"
msgstr "Prelazak na VT 11"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#| msgid "Switch to VT 1"
msgid "Switch to VT 12"
msgstr "Prelazak na VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Ugrađeni displej"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Nepoznato"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Nepoznat displej"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -519,40 +516,45 @@ msgstr "_Sačekaj"
msgid "_Force Quit"
msgstr "_Primoraj izlaz"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Nisam uspeo da otvorim ekran „%s“ Iks sistema prozora\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Isključuje vezu sa upravnikom sesije"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Menja tekućeg upravnika prozorima"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Navodi IB upravnika sesije"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "Iks ekran koji će biti korišćen"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Pokreće sesiju iz datoteke čuvanja"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Čini Iks pozive usklađenim"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Radi kao vajlandov sastavnik"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
#| msgid "Run as a wayland compositor"
msgid "Run as a nested compositor"
msgstr "Radi kao ugneždeni sastavnik"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Radi kao puni server prikaza, umesto kao ugneždeni"
@ -566,8 +568,8 @@ msgid ""
"PARTICULAR PURPOSE.\n"
msgstr ""
"mater %s\n"
"Sva prava zadržana (C) 2001%d Havoc Pennington, Red Hat, Inc., i ostali\n"
"Ovo je slobodan program; pogledajte izvorni kod za uslove korišćenja.\n"
"Sva prava zadržana © 2001%d Hevok Penington, Red Het, Ink., i ostali\n"
"Ovo je slobodan program; pogledajte izvorni kôd za uslove korišćenja.\n"
"NE postoji nikakva garancija; čak ni garancija o TRŽIŠNOJ VREDNOSTI ili "
"PRILAGOĐENOSTI ODREĐENOJ NAMENI.\n"
@ -579,29 +581,26 @@ msgstr "Ispisuje izdanje"
msgid "Mutter plugin to use"
msgstr "Priključci Matera za korišćenje"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "%d. radni prostor"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
#| msgid ""
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
#| "replace option to replace the current window manager.\n"
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
msgstr ""
"Prikaz „%s“ već ima upravnika prozora; probajte da koristite opciju "
"„--replace“ da zamenite trenutnog upravnika prozora."
"Prikaz „%s“ već ima upravnika prozora; probajte da koristite opciju „--"
"replace“ da zamenite trenutnog upravnika prozora."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Prikaz „%d“ na ekranu „%s“ nije ispravan\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mater je preveden bez podrške za opširan režim\n"

162
po/sv.po
View File

@ -1,24 +1,25 @@
# Swedish messages for mutter.
# Copyright © 2001-2015 Free Software Foundation, Inc.
# Copyright © 2001-2016 Free Software Foundation, Inc.
# Christian Rose <menthos@menthos.com>, 2001, 2002, 2003, 2004, 2005.
# Daniel Nylander <po@danielnylander.se>, 2006, 2007, 2008, 2009, 2010, 2011, 2012.
# Mattias Eriksson <snaggen@gmail.com>, 2014.
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2015.
# Sebastian Rasmussen <sebras@gmail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-02-19 21:45+0000\n"
"PO-Revision-Date: 2015-02-24 17:54+0100\n"
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"POT-Creation-Date: 2016-03-05 13:41+0000\n"
"PO-Revision-Date: 2016-03-06 13:47+0100\n"
"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.7.3\n"
"X-Generator: Poedit 1.8.7.1\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
@ -270,15 +271,15 @@ msgstr "Modifierare att använda för utökade fönsterhanteringsåtgärder"
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
msgid ""
"This key will initiate the \"overlay\", which is a combination window overview "
"and application launching system. The default is intended to be the \"Windows key"
"\" on PC hardware. It's expected that this binding either the default or set to "
"the empty string."
"This key will initiate the \"overlay\", which is a combination window "
"overview and application launching system. The default is intended to be the "
"\"Windows key\" on PC hardware. It's expected that this binding either the "
"default or set to the empty string."
msgstr ""
"Denna nyckel kommer att initiera \"overlay\", som är en kombinerad "
"fönsteröversikt och programstartare. Standard är tänkt att vara \"Windows-"
"tangenten\" på PC-maskinvara. Det är förväntat att denna bindning antingen är "
"standard eller inställd till en tom sträng."
"tangenten\" på PC-maskinvara. Det är förväntat att denna bindning antingen "
"är standard eller inställd till en tom sträng."
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
@ -287,12 +288,12 @@ msgstr "Bifoga modala dialogfönster"
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
msgid ""
"When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with the "
"parent window."
"attached to the titlebar of the parent window and are moved together with "
"the parent window."
msgstr ""
"När true kommer, istället för att ha oberoende namnlister, modala dialogfönster "
"att visas anslutna till namnlisten i föräldrafönstret och flyttas tillsammans "
"med föräldrafönstret."
"När true kommer, istället för att ha oberoende namnlister, modala "
"dialogfönster att visas anslutna till namnlisten i föräldrafönstret och "
"flyttas tillsammans med föräldrafönstret."
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges"
@ -300,13 +301,13 @@ msgstr "Aktivera kantframhävning när fönster släpps på skärmkanter"
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them vertically "
"and resizes them horizontally to cover half of the available area. Dropping "
"windows on the top screen edge maximizes them completely."
"If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"Om aktiverad, släppa fönster på vertikala skärmkanter kommer att maximera dem "
"vertikalt och storleksändra dem horisontellt till att täcka hälften av den "
"tillgängliga ytan. Släppa fönster på övre skärmkanten maximerar dem helt."
"Om aktiverad, släppa fönster på vertikala skärmkanter kommer att maximera "
"dem vertikalt och storleksändra dem horisontellt till att täcka hälften av "
"den tillgängliga ytan. Släppa fönster på övre skärmkanten maximerar dem helt."
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically"
@ -315,12 +316,12 @@ msgstr "Arbetsytor hanteras dynamiskt"
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org.gnome."
"desktop.wm.preferences)."
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"Bestämmer huruvida arbetsytor hanteras dynamiskt eller huruvida det finns ett "
"fast antal arbetsytor (bestäms av nyckeln num-workspaces i org.gnome.desktop.wm."
"preferences)."
"Bestämmer huruvida arbetsytor hanteras dynamiskt eller huruvida det finns "
"ett fast antal arbetsytor (bestäms av nyckeln num-workspaces i org.gnome."
"desktop.wm.preferences)."
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary"
@ -328,11 +329,11 @@ msgstr "Arbetsytor endast på primär"
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
msgid ""
"Determines whether workspace switching should happen for windows on all monitors "
"or only for windows on the primary monitor."
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr ""
"Bestämmer huruvida arbetsyteväxling ska hända för alla fönster på alla skärmar "
"eller endast för fönster på den primära skärmen."
"Bestämmer huruvida arbetsyteväxling ska hända för alla fönster på alla "
"skärmar eller endast för fönster på den primära skärmen."
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup"
@ -340,11 +341,11 @@ msgstr "Ingen flik-popup"
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
msgid ""
"Determines whether the use of popup and highlight frame should be disabled for "
"window cycling."
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"Bestämmer huruvida användning av popup och framhävning av kontur ska inaktiveras "
"vid fönsterväxling."
"Bestämmer huruvida användning av popup och framhävning av kontur ska "
"inaktiveras vid fönsterväxling."
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
@ -352,13 +353,13 @@ msgstr "Fördröj fokusändringar till muspekaren hålls still"
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then the "
"focus will not be changed immediately when entering a window, but only after the "
"pointer stops moving."
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Om satt till \"true\", och fokusläget är antingen \"sloppy\" eller \"mouse\" "
"kommer fokus inte att ändras omedelbart när muspekaren går in över ett fönster, "
"utan först efter att muspekaren slutar röra sig."
"kommer fokus inte att ändras omedelbart när muspekaren går in över ett "
"fönster, utan först efter att muspekaren slutar röra sig."
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
@ -366,8 +367,8 @@ msgstr "Dragbar rambredd"
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are not "
"enough, invisible borders will be added to meet this value."
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
msgstr ""
"Mängd av totalt dragbara ramar. Om temats synliga ramar inte är tillräckliga "
"kommer osynliga ramar att läggas till för att möta detta värde."
@ -378,8 +379,8 @@ msgstr "Automatiskt maximera fönster vars storlek ligger nära skärmens storle
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
msgid ""
"If enabled, new windows that are initially the size of the monitor automatically "
"get maximized."
"If enabled, new windows that are initially the size of the monitor "
"automatically get maximized."
msgstr ""
"Om aktiverad kommer nya fönster med nästan samma storlek som skärmen att bli "
"automatiskt maximerade."
@ -390,11 +391,11 @@ msgstr "Placera nya fönster centrerat"
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
msgid ""
"When true, the new windows will always be put in the center of the active screen "
"of the monitor."
"When true, the new windows will always be put in the center of the active "
"screen of the monitor."
msgstr ""
"När satt till \"true\", kommer nya fönster alltid att placeras centrerat på den "
"aktiva skärmen."
"När satt till \"true\", kommer nya fönster alltid att placeras centrerat på "
"den aktiva skärmen."
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
msgid "Select window from tab popup"
@ -452,22 +453,22 @@ msgstr "Växla till VT 11"
msgid "Switch to VT 12"
msgstr "Växla till VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#: ../src/backends/meta-monitor-manager.c:518
msgid "Built-in display"
msgstr "Inbyggd display"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:544
msgid "Unknown"
msgstr "Okänd"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:546
msgid "Unknown Display"
msgstr "Okänd display"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:554
#, c-format
msgid "%s %s"
msgstr "%s %s"
@ -477,8 +478,9 @@ msgstr "%s %s"
#: ../src/compositor/compositor.c:456
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s\"."
msgstr "En annan compositing-hanterare körs redan på skärm %i på display \"%s\"."
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr "En annan kompositionshanterare körs redan på skärm %i på display ”%s”."
#: ../src/core/bell.c:185
msgid "Bell event"
@ -495,8 +497,8 @@ msgstr "Programmet svarar inte."
#: ../src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the application "
"to quit entirely."
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
msgstr ""
"Du kan välja att vänta en kort stund på det för att fortsätta eller tvinga "
"programmet att helt avslutas."
@ -509,40 +511,44 @@ msgstr "_Vänta"
msgid "_Force Quit"
msgstr "_Tvinga avslut"
#: ../src/core/display.c:562
#: ../src/core/display.c:555
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Misslyckades med att öppna X Window System-displayen ”%s”\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:181
msgid "Disable connection to session manager"
msgstr "Inaktivera anslutning till sessionshanteraren"
#: ../src/core/main.c:182
#: ../src/core/main.c:187
msgid "Replace the running window manager"
msgstr "Ersätt körande fönsterhanteraren"
#: ../src/core/main.c:188
#: ../src/core/main.c:193
msgid "Specify session management ID"
msgstr "Ange sessionshanteringsid"
#: ../src/core/main.c:193
#: ../src/core/main.c:198
msgid "X Display to use"
msgstr "X-display att använda"
#: ../src/core/main.c:199
#: ../src/core/main.c:204
msgid "Initialize session from savefile"
msgstr "Initiera session från sparandefil"
#: ../src/core/main.c:205
#: ../src/core/main.c:210
msgid "Make X calls synchronous"
msgstr "Gör X-anrop synkrona"
#: ../src/core/main.c:212
#: ../src/core/main.c:217
msgid "Run as a wayland compositor"
msgstr "Kör som en wayland-compositor"
msgstr "Kör som en wayland-kompositionshanterare"
#: ../src/core/main.c:220
#: ../src/core/main.c:223
msgid "Run as a nested compositor"
msgstr "Kör som en nästlad kompositionshanterare"
#: ../src/core/main.c:231
msgid "Run as a full display server, rather than nested"
msgstr "Kör som en full display-tjänst, i stället för nästlad"
@ -552,8 +558,8 @@ msgid ""
"mutter %s\n"
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
"This is free software; see the source for copying conditions.\n"
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR "
"PURPOSE.\n"
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
"PARTICULAR PURPOSE.\n"
msgstr ""
"mutter %s\n"
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc. och andra\n"
@ -569,33 +575,33 @@ msgstr "Skriv ut version"
msgid "Mutter plugin to use"
msgstr "Mutter-insticksmodul att använda"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Arbetsyta %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option to "
"replace the current window manager."
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
msgstr ""
"Display ”%s” har redan en fönsterhanterare; försök med flaggan --replace för att "
"ersätta den aktuella fönsterhanteraren."
"Display ”%s” har redan en fönsterhanterare; försök med flaggan --replace för "
"att ersätta den aktuella fönsterhanteraren."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:603
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skärm %d på display ”%s” är ogiltig\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:121
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter kompilerades utan stöd för utförligt läge\n"
#: ../src/x11/session.c:1815
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to be "
"restarted manually next time you log in."
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
msgstr ""
"Dessa fönster saknar stöd för &quot;spara nuvarande inställningar&quot; och "
"kommer att behöva startas om manuellt nästa gång du loggar in."

View File

@ -19,9 +19,9 @@ installedtestsdir = $(datadir)/installed-tests/mutter
installedtests_DATA = mutter-all.test
installedtestsbindir = $(libexecdir)/installed-tests/mutter
installedtestsbin_PROGRAMS = mutter-test-client mutter-test-runner
installedtestsbin_PROGRAMS = mutter-test-client mutter-test-runner mutter-test-unit-tests
else
noinst_PROGRAMS += mutter-test-client mutter-test-runner
noinst_PROGRAMS += mutter-test-client mutter-test-runner mutter-test-unit-tests
endif
EXTRA_DIST += tests/mutter-all.test.in
@ -32,11 +32,19 @@ mutter_test_client_LDADD = $(MUTTER_LIBS) libmutter.la
mutter_test_runner_SOURCES = tests/test-runner.c
mutter_test_runner_LDADD = $(MUTTER_LIBS) libmutter.la
.PHONY: run-tests
mutter_test_unit_tests_SOURCES = tests/unit-tests.c
mutter_test_unit_tests_LDADD = $(MUTTER_LIBS) libmutter.la
run-tests: mutter-test-client mutter-test-runner
.PHONY: run-tests run-test-runner-tests run-unit-tests
run-test-runner-tests: mutter-test-client mutter-test-runner
./mutter-test-runner $(dist_stacking_DATA)
run-unit-tests: mutter-test-unit-tests
./mutter-test-unit-tests
run-tests: run-test-runner-tests run-unit-tests
endif
# Some random test programs for bits of the code

View File

@ -49,6 +49,8 @@ mutter_built_sources += \
pointer-gestures-unstable-v1-server-protocol.h \
gtk-shell-protocol.c \
gtk-shell-server-protocol.h \
gtk-primary-selection-protocol.c \
gtk-primary-selection-server-protocol.h \
xdg-shell-unstable-v5-protocol.c \
xdg-shell-unstable-v5-server-protocol.h \
relative-pointer-unstable-v1-protocol.c \
@ -60,6 +62,7 @@ endif
wayland_protocols = \
wayland/protocol/gtk-shell.xml \
wayland/protocol/gtk-primary-selection.xml \
$(NULL)
libmutter_la_SOURCES = \

View File

@ -64,6 +64,8 @@ struct _MetaBackendPrivate
MetaInputSettings *input_settings;
ClutterActor *stage;
guint device_update_idle_id;
};
typedef struct _MetaBackendPrivate MetaBackendPrivate;
@ -78,6 +80,9 @@ meta_backend_finalize (GObject *object)
g_clear_object (&priv->monitor_manager);
g_clear_object (&priv->input_settings);
if (priv->device_update_idle_id)
g_source_remove (priv->device_update_idle_id);
g_hash_table_destroy (backend->device_monitors);
G_OBJECT_CLASS (meta_backend_parent_class)->finalize (object);
@ -517,12 +522,44 @@ meta_backend_get_stage (MetaBackend *backend)
return priv->stage;
}
static gboolean
update_last_device (MetaBackend *backend)
{
MetaCursorTracker *cursor_tracker = meta_cursor_tracker_get_for_screen (NULL);
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
ClutterInputDeviceType device_type;
ClutterDeviceManager *manager;
ClutterInputDevice *device;
priv->device_update_idle_id = 0;
manager = clutter_device_manager_get_default ();
device = clutter_device_manager_get_device (manager,
backend->current_device_id);
device_type = clutter_input_device_get_device_type (device);
g_signal_emit_by_name (backend, "last-device-changed",
backend->current_device_id);
switch (device_type)
{
case CLUTTER_KEYBOARD_DEVICE:
break;
case CLUTTER_TOUCHSCREEN_DEVICE:
meta_cursor_tracker_set_pointer_visible (cursor_tracker, FALSE);
break;
default:
meta_cursor_tracker_set_pointer_visible (cursor_tracker, TRUE);
break;
}
return G_SOURCE_REMOVE;
}
void
meta_backend_update_last_device (MetaBackend *backend,
int device_id)
{
ClutterInputDeviceType device_type;
MetaCursorTracker *cursor_tracker;
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
ClutterDeviceManager *manager;
ClutterInputDevice *device;
@ -536,23 +573,14 @@ meta_backend_update_last_device (MetaBackend *backend,
clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_MASTER)
return;
device_type = clutter_input_device_get_device_type (device);
cursor_tracker = meta_cursor_tracker_get_for_screen (NULL);
backend->current_device_id = device_id;
g_signal_emit_by_name (backend, "last-device-changed", device_id);
if (device_type == CLUTTER_KEYBOARD_DEVICE)
return;
switch (device_type)
if (priv->device_update_idle_id == 0)
{
case CLUTTER_TOUCHSCREEN_DEVICE:
meta_cursor_tracker_set_pointer_visible (cursor_tracker, FALSE);
break;
default:
meta_cursor_tracker_set_pointer_visible (cursor_tracker, TRUE);
break;
priv->device_update_idle_id =
g_idle_add ((GSourceFunc) update_last_device, backend);
g_source_set_name_by_id (priv->device_update_idle_id,
"[mutter] update_last_device");
}
}

View File

@ -27,8 +27,6 @@
#include "meta-cursor-renderer.h"
#include <meta/meta-backend.h>
#include <backends/meta-backend-private.h>
#include <backends/meta-monitor-manager-private.h>
#include <meta/util.h>
#include <cogl/cogl.h>
@ -118,14 +116,6 @@ meta_cursor_renderer_calculate_rect (MetaCursorRenderer *renderer,
};
}
static gboolean
is_cursor_in_monitors_area (int x, int y)
{
MetaMonitorManager *monitor_manager = meta_backend_get_monitor_manager (meta_get_backend ());
return meta_monitor_manager_get_monitor_at_point (monitor_manager,
(gfloat) x, (gfloat) y) >= 0;
}
static void
update_cursor (MetaCursorRenderer *renderer,
MetaCursorSprite *cursor_sprite)
@ -134,11 +124,6 @@ update_cursor (MetaCursorRenderer *renderer,
gboolean handled_by_backend;
gboolean should_redraw = FALSE;
/* do not render cursor if it is not on any monitor. Such situation
* can occur e. g. after monitor hot-plug */
if (!is_cursor_in_monitors_area (priv->current_x, priv->current_y))
return;
if (cursor_sprite)
meta_cursor_sprite_prepare_at (cursor_sprite,
priv->current_x,

View File

@ -60,4 +60,7 @@ void meta_end_modal_for_plugin (MetaCompositor *compositor,
gint64 meta_compositor_monotonic_time_to_server_time (MetaDisplay *display,
gint64 monotonic_time);
void meta_compositor_flash_window (MetaCompositor *compositor,
MetaWindow *window);
#endif /* META_COMPOSITOR_PRIVATE_H */

View File

@ -1249,6 +1249,48 @@ meta_compositor_flash_screen (MetaCompositor *compositor,
clutter_actor_restore_easing_state (flash);
}
static void
window_flash_out_completed (ClutterTimeline *timeline,
gboolean is_finished,
gpointer user_data)
{
ClutterActor *flash = CLUTTER_ACTOR (user_data);
clutter_actor_destroy (flash);
}
void
meta_compositor_flash_window (MetaCompositor *compositor,
MetaWindow *window)
{
ClutterActor *window_actor =
CLUTTER_ACTOR (meta_window_get_compositor_private (window));
ClutterActor *flash;
ClutterTransition *transition;
flash = clutter_actor_new ();
clutter_actor_set_background_color (flash, CLUTTER_COLOR_Black);
clutter_actor_set_size (flash, window->rect.width, window->rect.height);
clutter_actor_set_position (flash,
window->custom_frame_extents.left,
window->custom_frame_extents.top);
clutter_actor_set_opacity (flash, 0);
clutter_actor_add_child (window_actor, flash);
clutter_actor_save_easing_state (flash);
clutter_actor_set_easing_mode (flash, CLUTTER_EASE_IN_QUAD);
clutter_actor_set_easing_duration (flash, FLASH_TIME_MS);
clutter_actor_set_opacity (flash, 192);
transition = clutter_actor_get_transition (flash, "opacity");
clutter_timeline_set_auto_reverse (CLUTTER_TIMELINE (transition), TRUE);
clutter_timeline_set_repeat_count (CLUTTER_TIMELINE (transition), 2);
g_signal_connect (transition, "stopped",
G_CALLBACK (window_flash_out_completed), flash);
clutter_actor_restore_easing_state (flash);
}
/**
* meta_compositor_monotonic_time_to_server_time:
* @display: a #MetaDisplay

View File

@ -36,5 +36,6 @@ void meta_shaped_texture_set_fallback_size (MetaShapedTexture *stex,
guint fallback_width,
guint fallback_height);
gboolean meta_shaped_texture_is_obscured (MetaShapedTexture *self);
cairo_region_t * meta_shaped_texture_get_opaque_region (MetaShapedTexture *stex);
#endif

View File

@ -303,6 +303,7 @@ set_cogl_texture (MetaShapedTexture *stex,
{
priv->tex_width = width;
priv->tex_height = height;
meta_shaped_texture_set_mask_texture (stex, NULL);
clutter_actor_queue_relayout (CLUTTER_ACTOR (stex));
g_signal_emit (stex, signals[SIZE_CHANGED], 0);
}
@ -789,6 +790,13 @@ meta_shaped_texture_set_opaque_region (MetaShapedTexture *stex,
priv->opaque_region = NULL;
}
cairo_region_t *
meta_shaped_texture_get_opaque_region (MetaShapedTexture *stex)
{
MetaShapedTexturePrivate *priv = stex->priv;
return priv->opaque_region;
}
/**
* meta_shaped_texture_get_image:
* @stex: A #MetaShapedTexture

View File

@ -238,6 +238,33 @@ meta_surface_actor_x11_is_visible (MetaSurfaceActor *actor)
return is_visible (self);
}
static gboolean
meta_surface_actor_x11_is_opaque (MetaSurfaceActor *actor)
{
MetaSurfaceActorX11 *self = META_SURFACE_ACTOR_X11 (actor);
MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self);
/* If we're not ARGB32, then we're opaque. */
if (!meta_surface_actor_is_argb32 (actor))
return TRUE;
cairo_region_t *opaque_region = meta_surface_actor_get_opaque_region (actor);
/* If we have no opaque region, then no pixels are opaque. */
if (!opaque_region)
return FALSE;
MetaWindow *window = priv->window;
cairo_rectangle_int_t client_area;
meta_window_get_client_area_rect (window, &client_area);
/* Otherwise, check if our opaque region covers our entire surface. */
if (cairo_region_contains_rectangle (opaque_region, &client_area) == CAIRO_REGION_OVERLAP_IN)
return TRUE;
return FALSE;
}
static gboolean
meta_surface_actor_x11_should_unredirect (MetaSurfaceActor *actor)
{
@ -255,15 +282,15 @@ meta_surface_actor_x11_should_unredirect (MetaSurfaceActor *actor)
if (window->shape_region != NULL)
return FALSE;
if (meta_surface_actor_is_argb32 (actor) && !meta_window_requested_bypass_compositor (window))
return FALSE;
if (!meta_window_is_monitor_sized (window))
return FALSE;
if (meta_window_requested_bypass_compositor (window))
return TRUE;
if (!meta_surface_actor_x11_is_opaque (actor))
return FALSE;
if (meta_window_is_override_redirect (window))
return TRUE;

View File

@ -235,6 +235,13 @@ meta_surface_actor_set_opaque_region (MetaSurfaceActor *self,
meta_shaped_texture_set_opaque_region (priv->texture, region);
}
cairo_region_t *
meta_surface_actor_get_opaque_region (MetaSurfaceActor *actor)
{
MetaSurfaceActorPrivate *priv = actor->priv;
return meta_shaped_texture_get_opaque_region (priv->texture);
}
static gboolean
is_frozen (MetaSurfaceActor *self)
{

View File

@ -60,6 +60,7 @@ void meta_surface_actor_set_input_region (MetaSurfaceActor *self,
cairo_region_t *region);
void meta_surface_actor_set_opaque_region (MetaSurfaceActor *self,
cairo_region_t *region);
cairo_region_t * meta_surface_actor_get_opaque_region (MetaSurfaceActor *self);
void meta_surface_actor_process_damage (MetaSurfaceActor *actor,
int x, int y, int width, int height);

View File

@ -52,6 +52,7 @@
#include "screen-private.h"
#include "window-private.h"
#include "util-private.h"
#include "compositor/compositor-private.h"
#include <meta/prefs.h>
#include <meta/compositor.h>
#ifdef HAVE_LIBCANBERRA
@ -131,6 +132,12 @@ bell_flash_window_frame (MetaWindow *window)
g_source_set_name_by_id (id, "[mutter] bell_unflash_frame");
}
static void
bell_flash_window (MetaWindow *window)
{
meta_compositor_flash_window (window->display->compositor, window);
}
/**
* bell_flash_frame:
* @display: The display the bell event came in on
@ -145,6 +152,8 @@ bell_flash_frame (MetaDisplay *display,
{
if (window && window->frame)
bell_flash_window_frame (window);
else if (window)
bell_flash_window (window);
else
bell_flash_fullscreen (display);
}
@ -203,33 +212,18 @@ bell_audible_notify (MetaDisplay *display,
return FALSE;
}
void
gboolean
meta_bell_notify (MetaDisplay *display,
XkbAnyEvent *xkb_ev)
MetaWindow *window)
{
MetaWindow *window;
XkbBellNotifyEvent *xkb_bell_event = (XkbBellNotifyEvent*) xkb_ev;
window = meta_display_lookup_x_window (display, xkb_bell_event->window);
if (!window && display->focus_window && display->focus_window->frame)
window = display->focus_window;
/* flash something */
if (meta_prefs_get_visual_bell ())
bell_visual_notify (display, window);
if (meta_prefs_bell_is_audible ())
{
if (!bell_audible_notify (display, window))
{
/* Force a classic bell if the libcanberra bell failed. */
XkbForceDeviceBell (display->xdisplay,
xkb_bell_event->device,
xkb_bell_event->bell_class,
xkb_bell_event->bell_id,
xkb_bell_event->percent);
}
}
return bell_audible_notify (display, window);
return TRUE;
}
void

View File

@ -25,15 +25,14 @@
/**
* meta_bell_notify:
* @display: The display the bell event came in on
* @xkb_ev: The bell event we just received
* @window: The window the bell event was received on
*
* Gives the user some kind of visual bell; in fact, this is our response
* to any kind of bell request, but we set it up so that we only get
* notified about visual bells, and X deals with audible ones.
*
* If the configure script found we had no XKB, this does not exist.
* Gives the user some kind of aural or visual feedback, such as a bell sound
* or flash. What type of feedback is invoked depends on the configuration.
* If the aural feedback could not be invoked, FALSE is returned.
*/
void meta_bell_notify (MetaDisplay *display, XkbAnyEvent *xkb_ev);
gboolean meta_bell_notify (MetaDisplay *display,
MetaWindow *window);
/**
* meta_bell_set_audible:

View File

@ -1212,7 +1212,7 @@ meta_grab_op_is_moving (MetaGrabOp op)
}
/**
* meta_grab_op_windows_are_interactable:
* meta_display_windows_are_interactable:
* @op: A #MetaGrabOp
*
* Whether windows can be interacted with.

View File

@ -168,6 +168,7 @@ static gboolean opt_disable_sm;
static gboolean opt_sync;
#ifdef HAVE_WAYLAND
static gboolean opt_wayland;
static gboolean opt_nested;
#endif
#ifdef HAVE_NATIVE_BACKEND
static gboolean opt_display_server;
@ -216,6 +217,12 @@ static GOptionEntry meta_options[] = {
N_("Run as a wayland compositor"),
NULL
},
{
"nested", 0, 0, G_OPTION_ARG_NONE,
&opt_nested,
N_("Run as a nested compositor"),
NULL
},
#endif
#ifdef HAVE_NATIVE_BACKEND
{
@ -366,21 +373,30 @@ check_for_wayland_session_type (void)
static void
init_backend (void)
{
gboolean session_type_is_wayland = FALSE;
#ifdef HAVE_WAYLAND
gboolean run_as_wayland_compositor = opt_wayland;
#if defined(HAVE_WAYLAND) && defined(HAVE_NATIVE_BACKEND)
session_type_is_wayland = check_for_wayland_session_type ();
#endif
#ifdef HAVE_NATIVE_BACKEND
if (opt_nested && opt_display_server)
{
meta_warning ("Can't run both as nested and as a display server\n");
meta_exit (META_EXIT_ERROR);
}
#if defined(CLUTTER_WINDOWING_EGL) && defined(HAVE_NATIVE_BACKEND)
if (opt_display_server || session_type_is_wayland)
if (!run_as_wayland_compositor)
run_as_wayland_compositor = check_for_wayland_session_type ();
#ifdef CLUTTER_WINDOWING_EGL
if (opt_display_server || (run_as_wayland_compositor && !opt_nested))
clutter_set_windowing_backend (CLUTTER_WINDOWING_EGL);
else
#endif
#endif
#endif
clutter_set_windowing_backend (CLUTTER_WINDOWING_X11);
#ifdef HAVE_WAYLAND
meta_set_is_wayland_compositor (opt_wayland || session_type_is_wayland);
meta_set_is_wayland_compositor (run_as_wayland_compositor);
#endif
}

View File

@ -1233,7 +1233,8 @@ root_cursor_prepare_at (MetaCursorSprite *cursor_sprite,
monitor = meta_screen_get_monitor_for_point (screen, x, y);
/* Reload the cursor texture if the scale has changed. */
meta_cursor_sprite_set_theme_scale (cursor_sprite, monitor->scale);
if (monitor)
meta_cursor_sprite_set_theme_scale (cursor_sprite, monitor->scale);
}
static void

View File

@ -93,7 +93,7 @@ G_DECLARE_DERIVABLE_TYPE (MetaStartupNotificationSequence,
typedef struct {
gchar *id;
time_t timestamp;
gint64 timestamp;
} MetaStartupNotificationSequencePrivate;
struct _MetaStartupNotificationSequenceClass {
@ -385,9 +385,12 @@ meta_startup_notification_sequence_x11_class_init (MetaStartupNotificationSequen
static MetaStartupNotificationSequence *
meta_startup_notification_sequence_x11_new (SnStartupSequence *seq)
{
gint64 timestamp;
timestamp = sn_startup_sequence_get_timestamp (seq) * 1000;
return g_object_new (META_TYPE_STARTUP_NOTIFICATION_SEQUENCE_X11,
"id", sn_startup_sequence_get_id (seq),
"timestamp", sn_startup_sequence_get_timestamp (seq) * 1000,
"timestamp", timestamp,
"seq", seq,
NULL);
}

View File

@ -49,6 +49,9 @@ meta_topic_real_valist (MetaDebugTopic topic,
va_list args) G_GNUC_PRINTF(2, 0);
#endif
static gboolean
meta_later_remove_from_list (guint later_id, GSList **laters_list);
static gint verbose_topics = 0;
static gboolean is_debugging = FALSE;
static gboolean replace_current = FALSE;
@ -739,7 +742,14 @@ typedef struct
gboolean run_once;
} MetaLater;
static GSList *laters = NULL;
static GSList *laters[] = {
NULL, /* META_LATER_RESIZE */
NULL, /* META_LATER_CALC_SHOWING */
NULL, /* META_LATER_CHECK_FULLSCREEN */
NULL, /* META_LATER_SYNC_STACK */
NULL, /* META_LATER_BEFORE_REDRAW */
NULL, /* META_LATER_IDLE */
};
/* This is a dummy timeline used to get the Clutter master clock running */
static ClutterTimeline *later_timeline;
static guint later_repaint_func = 0;
@ -772,25 +782,14 @@ destroy_later (MetaLater *later)
unref_later (later);
}
/* Used to sort the list of laters with the highest priority
* functions first.
*/
static int
compare_laters (gconstpointer a,
gconstpointer b)
{
return ((const MetaLater *)a)->when - ((const MetaLater *)b)->when;
}
static gboolean
run_repaint_laters (gpointer data)
static void
run_repaint_laters (GSList **laters_list)
{
GSList *laters_copy;
GSList *l;
gboolean keep_timeline_running = FALSE;
laters_copy = NULL;
for (l = laters; l; l = l->next)
for (l = *laters_list; l; l = l->next)
{
MetaLater *later = l->data;
if (later->source == 0 ||
@ -806,22 +805,41 @@ run_repaint_laters (gpointer data)
{
MetaLater *later = l->data;
if (later->func && later->func (later->data))
if (!later->func || !later->func (later->data))
meta_later_remove_from_list (later->id, laters_list);
unref_later (later);
}
g_slist_free (laters_copy);
}
static gboolean
run_all_repaint_laters (gpointer data)
{
guint i;
GSList *l;
gboolean keep_timeline_running = FALSE;
for (i = 0; i < G_N_ELEMENTS (laters); i++)
{
run_repaint_laters (&laters[i]);
}
for (i = 0; i < G_N_ELEMENTS (laters); i++)
{
for (l = laters[i]; l; l = l->next)
{
MetaLater *later = l->data;
if (later->source == 0)
keep_timeline_running = TRUE;
}
else
meta_later_remove (later->id);
unref_later (later);
}
if (!keep_timeline_running)
clutter_timeline_stop (later_timeline);
g_slist_free (laters_copy);
/* Just keep the repaint func around - it's cheap if the list is empty */
/* Just keep the repaint func around - it's cheap if the lists are empty */
return TRUE;
}
@ -832,7 +850,7 @@ ensure_later_repaint_func (void)
later_timeline = clutter_timeline_new (G_MAXUINT);
if (later_repaint_func == 0)
later_repaint_func = clutter_threads_add_repaint_func (run_repaint_laters,
later_repaint_func = clutter_threads_add_repaint_func (run_all_repaint_laters,
NULL, NULL);
/* Make sure the repaint function gets run */
@ -888,7 +906,7 @@ meta_later_add (MetaLaterType when,
later->data = data;
later->notify = notify;
laters = g_slist_insert_sorted (laters, later, compare_laters);
laters[when] = g_slist_prepend (laters[when], later);
switch (when)
{
@ -920,6 +938,29 @@ meta_later_add (MetaLaterType when,
return later->id;
}
static gboolean
meta_later_remove_from_list (guint later_id, GSList **laters_list)
{
GSList *l;
for (l = *laters_list; l; l = l->next)
{
MetaLater *later = l->data;
if (later->id == later_id)
{
*laters_list = g_slist_delete_link (*laters_list, l);
/* If this was a "repaint func" later, we just let the
* repaint func run and get removed
*/
destroy_later (later);
return TRUE;
}
}
return FALSE;
}
/**
* meta_later_remove:
* @later_id: the integer ID returned from meta_later_add()
@ -929,20 +970,12 @@ meta_later_add (MetaLaterType when,
void
meta_later_remove (guint later_id)
{
GSList *l;
guint i;
for (l = laters; l; l = l->next)
for (i = 0; i < G_N_ELEMENTS (laters); i++)
{
MetaLater *later = l->data;
if (later->id == later_id)
{
laters = g_slist_delete_link (laters, l);
/* If this was a "repaint func" later, we just let the
* repaint func run and get removed
*/
destroy_later (later);
return;
}
if (meta_later_remove_from_list (later_id, &laters[i]))
return;
}
}

View File

@ -520,7 +520,6 @@ void meta_frame_borders_clear (MetaFrameBorders *self);
* @META_LAYER_TOP: Top layer
* @META_LAYER_DOCK: Dock layer
* @META_LAYER_FULLSCREEN: Fullscreen layer
* @META_LAYER_FOCUSED_WINDOW: Focused window layer
* @META_LAYER_OVERRIDE_REDIRECT: Override-redirect layer
* @META_LAYER_LAST: Marks the end of the #MetaStackLayer enumeration
*
@ -535,7 +534,6 @@ typedef enum
META_LAYER_TOP = 4, /* Same as DOCK; see EWMH and bug 330717 */
META_LAYER_DOCK = 4,
META_LAYER_FULLSCREEN = 5,
META_LAYER_FOCUSED_WINDOW = 6,
META_LAYER_OVERRIDE_REDIRECT = 7,
META_LAYER_LAST = 8
} MetaStackLayer;

View File

@ -1136,10 +1136,10 @@ main (int argc, char **argv)
/* Then initalize mutter with a different set of arguments */
char *fake_args[] = { NULL, (char *)"--wayland" };
char *fake_args[] = { NULL, (char *)"--wayland", (char *)"--nested" };
fake_args[0] = argv[0];
char **fake_argv = fake_args;
int fake_argc = 2;
int fake_argc = G_N_ELEMENTS (fake_args);
char *basename = g_path_get_basename (argv[0]);
char *dirname = g_path_get_dirname (argv[0]);

238
src/tests/unit-tests.c Normal file
View File

@ -0,0 +1,238 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2015 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
#include <glib.h>
#include <stdlib.h>
#include <meta/main.h>
#include <meta/util.h>
#include "compositor/meta-plugin-manager.h"
typedef struct _MetaTestLaterOrderCallbackData
{
GMainLoop *loop; /* Loop to terminate when done. */
int callback_num; /* Callback number integer. */
int *expected_callback_num; /* Pointer to the expected callback number. */
} MetaTestLaterOrderCallbackData;
static gboolean
test_later_order_callback (gpointer user_data)
{
MetaTestLaterOrderCallbackData *data = user_data;
g_assert_cmpint (data->callback_num, ==, *data->expected_callback_num);
if (*data->expected_callback_num == 0)
g_main_loop_quit (data->loop);
else
(*data->expected_callback_num)--;
return FALSE;
}
static void
meta_test_util_later_order (void)
{
GMainLoop *loop;
int expected_callback_num;
int i;
const int num_callbacks = 3;
MetaTestLaterOrderCallbackData callback_data[num_callbacks];
loop = g_main_loop_new (NULL, FALSE);
/* Schedule three BEFORE_DRAW callbacks each with its own number associated
* with it.
*/
for (i = 0; i < num_callbacks; i++)
{
callback_data[i] = (MetaTestLaterOrderCallbackData) {
.loop = loop,
.callback_num = i,
.expected_callback_num = &expected_callback_num,
};
meta_later_add (META_LATER_BEFORE_REDRAW,
test_later_order_callback,
&callback_data[i],
NULL);
}
/* Check that the callbacks are invoked in the opposite order that they were
* scheduled. Each callback will decrease the number by 1 after it checks the
* validity.
*/
expected_callback_num = num_callbacks - 1;
g_main_loop_run (loop);
g_assert_cmpint (expected_callback_num, ==, 0);
g_main_loop_unref (loop);
}
typedef enum _MetaTestLaterScheduleFromLaterState
{
META_TEST_LATER_EXPECT_CALC_SHOWING,
META_TEST_LATER_EXPECT_SYNC_STACK,
META_TEST_LATER_EXPECT_BEFORE_REDRAW,
META_TEST_LATER_FINISHED,
} MetaTestLaterScheduleFromLaterState;
typedef struct _MetaTestLaterScheduleFromLaterData
{
GMainLoop *loop;
MetaTestLaterScheduleFromLaterState state;
} MetaTestLaterScheduleFromLaterData;
static gboolean
test_later_schedule_from_later_sync_stack_callback (gpointer user_data);
static gboolean
test_later_schedule_from_later_calc_showing_callback (gpointer user_data)
{
MetaTestLaterScheduleFromLaterData *data = user_data;
g_assert_cmpint (data->state, ==, META_TEST_LATER_EXPECT_CALC_SHOWING);
meta_later_add (META_LATER_SYNC_STACK,
test_later_schedule_from_later_sync_stack_callback,
data,
NULL);
data->state = META_TEST_LATER_EXPECT_SYNC_STACK;
return FALSE;
}
static gboolean
test_later_schedule_from_later_sync_stack_callback (gpointer user_data)
{
MetaTestLaterScheduleFromLaterData *data = user_data;
g_assert_cmpint (data->state, ==, META_TEST_LATER_EXPECT_SYNC_STACK);
data->state = META_TEST_LATER_EXPECT_BEFORE_REDRAW;
return FALSE;
}
static gboolean
test_later_schedule_from_later_before_redraw_callback (gpointer user_data)
{
MetaTestLaterScheduleFromLaterData *data = user_data;
g_assert_cmpint (data->state, ==, META_TEST_LATER_EXPECT_BEFORE_REDRAW);
data->state = META_TEST_LATER_FINISHED;
g_main_loop_quit (data->loop);
return FALSE;
}
static void
meta_test_util_later_schedule_from_later (void)
{
MetaTestLaterScheduleFromLaterData data;
data.loop = g_main_loop_new (NULL, FALSE);
/* Test that scheduling a MetaLater with 'when' being later than the one being
* invoked causes it to be invoked before any callback with a later 'when'
* value being invoked.
*
* The first and last callback is queued here. The one to be invoked in
* between is invoked in test_later_schedule_from_later_calc_showing_callback.
*/
meta_later_add (META_LATER_CALC_SHOWING,
test_later_schedule_from_later_calc_showing_callback,
&data,
NULL);
meta_later_add (META_LATER_BEFORE_REDRAW,
test_later_schedule_from_later_before_redraw_callback,
&data,
NULL);
data.state = META_TEST_LATER_EXPECT_CALC_SHOWING;
g_main_loop_run (data.loop);
g_main_loop_unref (data.loop);
g_assert_cmpint (data.state, ==, META_TEST_LATER_FINISHED);
}
static gboolean
run_tests (gpointer data)
{
gboolean ret;
ret = g_test_run ();
meta_quit (ret != 0);
return FALSE;
}
static void
init_tests (int argc, char **argv)
{
g_test_init (&argc, &argv, NULL);
g_test_bug_base ("http://bugzilla.gnome.org/show_bug.cgi?id=");
g_test_add_func ("/util/meta-later/order", meta_test_util_later_order);
g_test_add_func ("/util/meta-later/schedule-from-later",
meta_test_util_later_schedule_from_later);
}
int
main (int argc, char *argv[])
{
GOptionContext *ctx;
GError *error = NULL;
ctx = g_option_context_new (NULL);
if (!g_option_context_parse (ctx,
&argc, &argv, &error))
{
g_printerr ("%s", error->message);
return 1;
}
g_option_context_free (ctx);
const char *fake_args[] = { NULL, "--wayland", "--nested" };
fake_args[0] = argv[0];
char **fake_argv = (char**)fake_args;
int fake_argc = G_N_ELEMENTS (fake_args);
ctx = meta_get_option_context ();
if (!g_option_context_parse (ctx, &fake_argc, &fake_argv, &error))
{
g_printerr ("mutter: %s\n", error->message);
exit (1);
}
g_option_context_free (ctx);
meta_plugin_manager_load ("default");
meta_init ();
meta_register_with_session ();
init_tests (argc, argv);
g_idle_add (run_tests, NULL);
return meta_run ();
}

View File

@ -30,6 +30,8 @@
#include <cogl/cogl-wayland-server.h>
#include <meta/util.h>
G_DEFINE_TYPE (MetaWaylandBuffer, meta_wayland_buffer, G_TYPE_OBJECT);
static void
meta_wayland_buffer_destroy_handler (struct wl_listener *listener,
void *data)
@ -37,32 +39,16 @@ meta_wayland_buffer_destroy_handler (struct wl_listener *listener,
MetaWaylandBuffer *buffer =
wl_container_of (listener, buffer, destroy_listener);
buffer->resource = NULL;
wl_signal_emit (&buffer->destroy_signal, buffer);
g_slice_free (MetaWaylandBuffer, buffer);
}
void
meta_wayland_buffer_ref (MetaWaylandBuffer *buffer)
{
buffer->ref_count++;
}
void
meta_wayland_buffer_unref (MetaWaylandBuffer *buffer)
{
buffer->ref_count--;
if (buffer->ref_count == 0)
{
g_warn_if_fail (buffer->use_count == 0);
g_clear_pointer (&buffer->texture, cogl_object_unref);
}
g_object_unref (buffer);
}
void
meta_wayland_buffer_ref_use_count (MetaWaylandBuffer *buffer)
{
g_warn_if_fail (buffer->resource);
buffer->use_count++;
}
@ -73,7 +59,7 @@ meta_wayland_buffer_unref_use_count (MetaWaylandBuffer *buffer)
buffer->use_count--;
if (buffer->use_count == 0)
if (buffer->use_count == 0 && buffer->resource)
wl_resource_queue_event (buffer->resource, WL_BUFFER_RELEASE);
}
@ -93,7 +79,7 @@ meta_wayland_buffer_from_resource (struct wl_resource *resource)
}
else
{
buffer = g_slice_new0 (MetaWaylandBuffer);
buffer = g_object_new (META_TYPE_WAYLAND_BUFFER, NULL);
buffer->resource = resource;
wl_signal_init (&buffer->destroy_signal);
@ -113,6 +99,7 @@ meta_wayland_buffer_ensure_texture (MetaWaylandBuffer *buffer)
struct wl_shm_buffer *shm_buffer;
g_return_val_if_fail (buffer->use_count != 0, NULL);
g_return_val_if_fail (buffer->resource, NULL);
if (buffer->texture)
goto out;
@ -172,3 +159,26 @@ meta_wayland_buffer_process_damage (MetaWaylandBuffer *buffer,
wl_shm_buffer_end_access (shm_buffer);
}
}
static void
meta_wayland_buffer_finalize (GObject *object)
{
MetaWaylandBuffer *buffer = META_WAYLAND_BUFFER (object);
g_clear_pointer (&buffer->texture, cogl_object_unref);
G_OBJECT_CLASS (meta_wayland_buffer_parent_class)->finalize (object);
}
static void
meta_wayland_buffer_init (MetaWaylandBuffer *buffer)
{
}
static void
meta_wayland_buffer_class_init (MetaWaylandBufferClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = meta_wayland_buffer_finalize;
}

View File

@ -33,18 +33,21 @@
struct _MetaWaylandBuffer
{
GObject parent;
struct wl_resource *resource;
struct wl_signal destroy_signal;
struct wl_listener destroy_listener;
CoglTexture *texture;
uint32_t ref_count;
uint32_t use_count;
};
#define META_TYPE_WAYLAND_BUFFER (meta_wayland_buffer_get_type ())
G_DECLARE_FINAL_TYPE (MetaWaylandBuffer, meta_wayland_buffer,
META, WAYLAND_BUFFER, GObject);
MetaWaylandBuffer * meta_wayland_buffer_from_resource (struct wl_resource *resource);
void meta_wayland_buffer_ref (MetaWaylandBuffer *buffer);
void meta_wayland_buffer_unref (MetaWaylandBuffer *buffer);
void meta_wayland_buffer_ref_use_count (MetaWaylandBuffer *buffer);
void meta_wayland_buffer_unref_use_count (MetaWaylandBuffer *buffer);
CoglTexture * meta_wayland_buffer_ensure_texture (MetaWaylandBuffer *buffer);

View File

@ -31,4 +31,10 @@ G_DECLARE_FINAL_TYPE (MetaWaylandDataSourceWayland,
META, WAYLAND_DATA_SOURCE_WAYLAND,
MetaWaylandDataSource);
#define META_TYPE_WAYLAND_DATA_SOURCE_PRIMARY (meta_wayland_data_source_primary_get_type ())
G_DECLARE_FINAL_TYPE (MetaWaylandDataSourcePrimary,
meta_wayland_data_source_primary,
META, WAYLAND_DATA_SOURCE_PRIMARY,
MetaWaylandDataSourceWayland);
#endif /* META_WAYLAND_DATA_DEVICE_PRIVATE_H */

View File

@ -29,6 +29,7 @@
#include <unistd.h>
#include <stdio.h>
#include <glib.h>
#include <glib-unix.h>
#include "meta-wayland-data-device.h"
#include "meta-wayland-data-device-private.h"
@ -37,6 +38,10 @@
#include "meta-wayland-private.h"
#include "meta-dnd-actor-private.h"
#include "gtk-primary-selection-server-protocol.h"
#define ROOTWINDOW_DROP_MIME "application/x-rootwindow-drop"
#define ALL_ACTIONS (WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY | \
WL_DATA_DEVICE_MANAGER_DND_ACTION_MOVE | \
WL_DATA_DEVICE_MANAGER_DND_ACTION_ASK)
@ -70,13 +75,24 @@ typedef struct _MetaWaylandDataSourceWayland
struct wl_resource *resource;
} MetaWaylandDataSourceWayland;
typedef struct _MetaWaylandDataSourcePrimary
{
MetaWaylandDataSourceWayland parent;
struct wl_resource *resource;
} MetaWaylandDataSourcePrimary;
G_DEFINE_TYPE_WITH_PRIVATE (MetaWaylandDataSource, meta_wayland_data_source,
G_TYPE_OBJECT);
G_DEFINE_TYPE (MetaWaylandDataSourceWayland, meta_wayland_data_source_wayland,
META_TYPE_WAYLAND_DATA_SOURCE);
G_DEFINE_TYPE (MetaWaylandDataSourcePrimary, meta_wayland_data_source_primary,
META_TYPE_WAYLAND_DATA_SOURCE);
static MetaWaylandDataSource *
meta_wayland_data_source_wayland_new (struct wl_resource *resource);
static MetaWaylandDataSource *
meta_wayland_data_source_primary_new (struct wl_resource *resource);
static void
drag_grab_data_source_destroyed (gpointer data, GObject *where_the_object_was);
@ -160,7 +176,8 @@ static void
meta_wayland_data_source_target (MetaWaylandDataSource *source,
const char *mime_type)
{
META_WAYLAND_DATA_SOURCE_GET_CLASS (source)->target (source, mime_type);
if (META_WAYLAND_DATA_SOURCE_GET_CLASS (source)->target)
META_WAYLAND_DATA_SOURCE_GET_CLASS (source)->target (source, mime_type);
}
void
@ -351,7 +368,8 @@ data_offer_receive (struct wl_client *client, struct wl_resource *resource,
}
static void
data_offer_destroy (struct wl_client *client, struct wl_resource *resource)
default_destructor (struct wl_client *client,
struct wl_resource *resource)
{
wl_resource_destroy (resource);
}
@ -425,11 +443,42 @@ data_offer_set_actions (struct wl_client *client,
static const struct wl_data_offer_interface data_offer_interface = {
data_offer_accept,
data_offer_receive,
data_offer_destroy,
default_destructor,
data_offer_finish,
data_offer_set_actions,
};
static void
primary_offer_receive (struct wl_client *client, struct wl_resource *resource,
const char *mime_type, int32_t fd)
{
MetaWaylandDataOffer *offer = wl_resource_get_user_data (resource);
MetaWaylandDataSource *source = offer->source;
MetaWaylandSeat *seat;
if (!offer->source)
{
close (fd);
return;
}
seat = meta_wayland_data_source_get_seat (source);
if (wl_resource_get_client (offer->resource) !=
meta_wayland_keyboard_get_focus_client (&seat->keyboard))
{
close (fd);
return;
}
meta_wayland_data_source_send (offer->source, mime_type, fd);
}
static const struct gtk_primary_selection_offer_interface primary_offer_interface = {
primary_offer_receive,
default_destructor,
};
static void
meta_wayland_data_source_notify_drop_performed (MetaWaylandDataSource *source)
{
@ -446,12 +495,16 @@ static void
destroy_data_offer (struct wl_resource *resource)
{
MetaWaylandDataOffer *offer = wl_resource_get_user_data (resource);
MetaWaylandSeat *seat;
if (offer->source)
{
seat = meta_wayland_data_source_get_seat (offer->source);
if (offer == meta_wayland_data_source_get_current_offer (offer->source))
{
if (wl_resource_get_version (offer->resource) <
if (seat && seat->data_device.dnd_data_source == offer->source &&
wl_resource_get_version (offer->resource) <
WL_DATA_OFFER_ACTION_SINCE_VERSION)
meta_wayland_data_source_notify_finish (offer->source);
else
@ -470,6 +523,28 @@ destroy_data_offer (struct wl_resource *resource)
g_slice_free (MetaWaylandDataOffer, offer);
}
static void
destroy_primary_offer (struct wl_resource *resource)
{
MetaWaylandDataOffer *offer = wl_resource_get_user_data (resource);
if (offer->source)
{
if (offer == meta_wayland_data_source_get_current_offer (offer->source))
{
meta_wayland_data_source_cancel (offer->source);
meta_wayland_data_source_set_current_offer (offer->source, NULL);
}
g_object_remove_weak_pointer (G_OBJECT (offer->source),
(gpointer *)&offer->source);
offer->source = NULL;
}
meta_display_sync_wayland_input_focus (meta_get_display ());
g_slice_free (MetaWaylandDataOffer, offer);
}
static struct wl_resource *
meta_wayland_data_source_send_offer (MetaWaylandDataSource *source,
struct wl_resource *target)
@ -500,6 +575,35 @@ meta_wayland_data_source_send_offer (MetaWaylandDataSource *source,
return offer->resource;
}
static struct wl_resource *
meta_wayland_data_source_send_primary_offer (MetaWaylandDataSource *source,
struct wl_resource *target)
{
MetaWaylandDataSourcePrivate *priv =
meta_wayland_data_source_get_instance_private (source);
MetaWaylandDataOffer *offer = g_slice_new0 (MetaWaylandDataOffer);
char **p;
offer->source = source;
g_object_add_weak_pointer (G_OBJECT (source), (gpointer *)&offer->source);
offer->resource = wl_resource_create (wl_resource_get_client (target),
&gtk_primary_selection_offer_interface,
wl_resource_get_version (target), 0);
wl_resource_set_implementation (offer->resource,
&primary_offer_interface,
offer,
destroy_primary_offer);
gtk_primary_selection_device_send_data_offer (target, offer->resource);
wl_array_for_each (p, &priv->mime_types)
gtk_primary_selection_offer_send_offer (offer->resource, *p);
meta_wayland_data_source_set_current_offer (source, offer);
return offer->resource;
}
static void
data_source_offer (struct wl_client *client,
struct wl_resource *resource, const char *type)
@ -510,12 +614,6 @@ data_source_offer (struct wl_client *client,
wl_resource_post_no_memory (resource);
}
static void
data_source_destroy (struct wl_client *client, struct wl_resource *resource)
{
wl_resource_destroy (resource);
}
static void
data_source_set_actions (struct wl_client *client,
struct wl_resource *resource,
@ -557,10 +655,26 @@ data_source_set_actions (struct wl_client *client,
static struct wl_data_source_interface data_source_interface = {
data_source_offer,
data_source_destroy,
default_destructor,
data_source_set_actions
};
static void
primary_source_offer (struct wl_client *client,
struct wl_resource *resource,
const char *type)
{
MetaWaylandDataSource *source = wl_resource_get_user_data (resource);
if (!meta_wayland_data_source_add_mime_type (source, type))
wl_resource_post_no_memory (resource);
}
static struct gtk_primary_selection_source_interface primary_source_interface = {
primary_source_offer,
default_destructor,
};
struct _MetaWaylandDragGrab {
MetaWaylandPointerGrab generic;
@ -585,6 +699,8 @@ struct _MetaWaylandDragGrab {
int drag_start_x, drag_start_y;
ClutterModifierType buttons;
guint need_initial_focus : 1;
};
static void
@ -613,30 +729,64 @@ meta_wayland_drag_grab_set_source (MetaWaylandDragGrab *drag_grab,
drag_grab);
}
static void
meta_wayland_drag_source_fake_acceptance (MetaWaylandDataSource *source,
const gchar *mimetype)
{
uint32_t actions, user_action, action = 0;
actions = meta_wayland_data_source_get_actions (source);
user_action = meta_wayland_data_source_get_user_action (source);
/* Pick a suitable action */
if ((user_action & actions) != 0)
action = user_action;
else if (actions != 0)
action = 1 << (ffs (actions) - 1);
/* Bail out if there is none, source didn't cooperate */
if (action == 0)
return;
meta_wayland_data_source_target (source, mimetype);
meta_wayland_data_source_set_current_action (source, action);
meta_wayland_data_source_set_has_target (source, TRUE);
}
void
meta_wayland_drag_grab_set_focus (MetaWaylandDragGrab *drag_grab,
MetaWaylandSurface *surface)
{
MetaWaylandSeat *seat = drag_grab->seat;
MetaWaylandDataSource *source = drag_grab->drag_data_source;
struct wl_client *client;
struct wl_resource *data_device_resource, *offer = NULL;
if (drag_grab->drag_focus == surface)
if (!drag_grab->need_initial_focus &&
drag_grab->drag_focus == surface)
return;
drag_grab->need_initial_focus = FALSE;
if (drag_grab->drag_focus)
{
meta_wayland_surface_drag_dest_focus_out (drag_grab->drag_focus);
drag_grab->drag_focus = NULL;
}
if (drag_grab->drag_data_source)
meta_wayland_data_source_set_current_offer (drag_grab->drag_data_source, NULL);
if (source)
meta_wayland_data_source_set_current_offer (source, NULL);
if (!surface && source &&
meta_wayland_data_source_has_mime_type (source, ROOTWINDOW_DROP_MIME))
meta_wayland_drag_source_fake_acceptance (source, ROOTWINDOW_DROP_MIME);
else if (source)
meta_wayland_data_source_target (source, NULL);
if (!surface)
return;
if (!drag_grab->drag_data_source &&
if (!source &&
wl_resource_get_client (surface->resource) != drag_grab->drag_client)
return;
@ -644,9 +794,8 @@ meta_wayland_drag_grab_set_focus (MetaWaylandDragGrab *drag_grab,
data_device_resource = wl_resource_find_for_client (&seat->data_device.resource_list, client);
if (drag_grab->drag_data_source && data_device_resource)
offer = meta_wayland_data_source_send_offer (drag_grab->drag_data_source,
data_device_resource);
if (source && data_device_resource)
offer = meta_wayland_data_source_send_offer (source, data_device_resource);
drag_grab->drag_focus = surface;
drag_grab->drag_focus_data_device = data_device_resource;
@ -739,6 +888,47 @@ data_device_end_drag_grab (MetaWaylandDragGrab *drag_grab)
g_slice_free (MetaWaylandDragGrab, drag_grab);
}
static gboolean
on_fake_read_hup (GIOChannel *channel,
GIOCondition condition,
gpointer data)
{
MetaWaylandDataSource *source = data;
meta_wayland_data_source_notify_finish (source);
g_io_channel_shutdown (channel, FALSE, NULL);
g_io_channel_unref (channel);
return G_SOURCE_REMOVE;
}
static void
meta_wayland_data_source_fake_read (MetaWaylandDataSource *source,
const gchar *mimetype)
{
GIOChannel *channel;
int p[2];
if (!g_unix_open_pipe (p, FD_CLOEXEC, NULL))
{
meta_wayland_data_source_notify_finish (source);
return;
}
if (!g_unix_set_fd_nonblocking (p[0], TRUE, NULL) ||
!g_unix_set_fd_nonblocking (p[1], TRUE, NULL))
{
meta_wayland_data_source_notify_finish (source);
close (p[0]);
close (p[1]);
return;
}
meta_wayland_data_source_send (source, mimetype, p[1]);
channel = g_io_channel_unix_new (p[0]);
g_io_add_watch (channel, G_IO_HUP, on_fake_read_hup, source);
}
static void
drag_grab_button (MetaWaylandPointerGrab *grab,
const ClutterEvent *event)
@ -767,6 +957,15 @@ drag_grab_button (MetaWaylandPointerGrab *grab,
meta_wayland_source_update_in_ask (source);
success = TRUE;
}
else if (!drag_grab->drag_focus && source &&
meta_wayland_data_source_has_target (source) &&
meta_wayland_data_source_get_current_action (source) &&
meta_wayland_data_source_has_mime_type (source, ROOTWINDOW_DROP_MIME))
{
/* Perform a fake read, that will lead to notify_finish() being called */
meta_wayland_data_source_fake_read (source, ROOTWINDOW_DROP_MIME);
success = TRUE;
}
else
{
meta_wayland_data_source_cancel (source);
@ -868,7 +1067,7 @@ meta_wayland_data_device_start_drag (MetaWaylandDataDevice *data
{
MetaWaylandSeat *seat = wl_container_of (data_device, seat, data_device);
MetaWaylandDragGrab *drag_grab;
ClutterPoint pos, stage_pos;
ClutterPoint pos, surface_pos;
ClutterModifierType modifiers;
data_device->current_grab = drag_grab = g_slice_new0 (MetaWaylandDragGrab);
@ -887,11 +1086,14 @@ meta_wayland_data_device_start_drag (MetaWaylandDataDevice *data
wl_resource_add_destroy_listener (surface->resource,
&drag_grab->drag_origin_listener);
clutter_input_device_get_coords (seat->pointer.device, NULL, &pos);
clutter_actor_transform_stage_point (CLUTTER_ACTOR (meta_surface_actor_get_texture (surface->surface_actor)),
pos.x, pos.y, &stage_pos.x, &stage_pos.y);
drag_grab->drag_start_x = stage_pos.x;
drag_grab->drag_start_y = stage_pos.y;
seat->pointer.grab_x,
seat->pointer.grab_y,
&surface_pos.x, &surface_pos.y);
drag_grab->drag_start_x = surface_pos.x;
drag_grab->drag_start_y = surface_pos.y;
drag_grab->need_initial_focus = TRUE;
modifiers = clutter_input_device_get_modifier_state (seat->pointer.device);
drag_grab->buttons = modifiers &
@ -919,6 +1121,7 @@ meta_wayland_data_device_start_drag (MetaWaylandDataDevice *data
clutter_actor_add_child (drag_grab->feedback_actor,
CLUTTER_ACTOR (drag_grab->drag_surface->surface_actor));
clutter_input_device_get_coords (seat->pointer.device, NULL, &pos);
meta_feedback_actor_set_position (META_FEEDBACK_ACTOR (drag_grab->feedback_actor),
pos.x, pos.y);
}
@ -1006,6 +1209,8 @@ selection_data_source_destroyed (gpointer data, GObject *object_was_here)
if (data_device_resource)
wl_data_device_send_selection (data_device_resource, NULL);
}
wl_signal_emit (&data_device->selection_ownership_signal, NULL);
}
static void
@ -1108,6 +1313,43 @@ meta_wayland_data_source_wayland_class_init (MetaWaylandDataSourceWaylandClass *
data_source_class->drag_finished = meta_wayland_source_drag_finished;
}
static void
meta_wayland_data_source_primary_send (MetaWaylandDataSource *source,
const gchar *mime_type,
gint fd)
{
MetaWaylandDataSourcePrimary *source_primary;
source_primary = META_WAYLAND_DATA_SOURCE_PRIMARY (source);
gtk_primary_selection_source_send_send (source_primary->resource,
mime_type, fd);
close (fd);
}
static void
meta_wayland_data_source_primary_cancel (MetaWaylandDataSource *source)
{
MetaWaylandDataSourcePrimary *source_primary;
source_primary = META_WAYLAND_DATA_SOURCE_PRIMARY (source);
gtk_primary_selection_source_send_cancelled (source_primary->resource);
}
static void
meta_wayland_data_source_primary_init (MetaWaylandDataSourcePrimary *source_primary)
{
}
static void
meta_wayland_data_source_primary_class_init (MetaWaylandDataSourcePrimaryClass *klass)
{
MetaWaylandDataSourceClass *data_source_class =
META_WAYLAND_DATA_SOURCE_CLASS (klass);
data_source_class->send = meta_wayland_data_source_primary_send;
data_source_class->cancel = meta_wayland_data_source_primary_cancel;
}
static void
meta_wayland_data_source_finalize (GObject *object)
{
@ -1299,6 +1541,7 @@ meta_wayland_data_device_set_selection (MetaWaylandDataDevice *data_device,
if (source)
{
meta_wayland_data_source_set_seat (source, seat);
g_object_weak_ref (G_OBJECT (source),
selection_data_source_destroyed,
data_device);
@ -1339,16 +1582,116 @@ data_device_set_selection (struct wl_client *client,
meta_wayland_data_device_set_selection (data_device, source, serial);
}
static void
data_device_release(struct wl_client *client, struct wl_resource *resource)
{
wl_resource_destroy(resource);
}
static const struct wl_data_device_interface data_device_interface = {
data_device_start_drag,
data_device_set_selection,
data_device_release,
default_destructor,
};
static void
primary_source_destroyed (gpointer data,
GObject *object_was_here)
{
MetaWaylandDataDevice *data_device = data;
MetaWaylandSeat *seat = wl_container_of (data_device, seat, data_device);
struct wl_client *focus_client = NULL;
data_device->primary_data_source = NULL;
focus_client = meta_wayland_keyboard_get_focus_client (&seat->keyboard);
if (focus_client)
{
struct wl_resource *data_device_resource;
data_device_resource = wl_resource_find_for_client (&data_device->primary_resource_list, focus_client);
if (data_device_resource)
gtk_primary_selection_device_send_selection (data_device_resource, NULL);
}
wl_signal_emit (&data_device->primary_ownership_signal, NULL);
}
void
meta_wayland_data_device_set_primary (MetaWaylandDataDevice *data_device,
MetaWaylandDataSource *source,
guint32 serial)
{
MetaWaylandSeat *seat = wl_container_of (data_device, seat, data_device);
struct wl_resource *data_device_resource, *offer;
struct wl_client *focus_client;
if (META_IS_WAYLAND_DATA_SOURCE_PRIMARY (source))
{
struct wl_resource *resource;
resource = META_WAYLAND_DATA_SOURCE_PRIMARY (source)->resource;
if (wl_resource_get_client (resource) !=
meta_wayland_keyboard_get_focus_client (&seat->keyboard))
return;
}
if (data_device->primary_data_source &&
data_device->primary_serial - serial < UINT32_MAX / 2)
return;
if (data_device->primary_data_source)
{
meta_wayland_data_source_cancel (data_device->primary_data_source);
g_object_weak_unref (G_OBJECT (data_device->primary_data_source),
primary_source_destroyed,
data_device);
}
data_device->primary_data_source = source;
data_device->primary_serial = serial;
focus_client = meta_wayland_keyboard_get_focus_client (&seat->keyboard);
if (focus_client)
{
data_device_resource = wl_resource_find_for_client (&data_device->primary_resource_list, focus_client);
if (data_device_resource)
{
if (data_device->primary_data_source)
{
offer = meta_wayland_data_source_send_primary_offer (data_device->primary_data_source,
data_device_resource);
gtk_primary_selection_device_send_selection (data_device_resource, offer);
}
else
{
gtk_primary_selection_device_send_selection (data_device_resource, NULL);
}
}
}
if (source)
{
meta_wayland_data_source_set_seat (source, seat);
g_object_weak_ref (G_OBJECT (source),
primary_source_destroyed,
data_device);
}
wl_signal_emit (&data_device->primary_ownership_signal, source);
}
static void
primary_device_set_selection (struct wl_client *client,
struct wl_resource *resource,
struct wl_resource *source_resource,
uint32_t serial)
{
MetaWaylandDataDevice *data_device = wl_resource_get_user_data (resource);
MetaWaylandDataSource *source;
source = wl_resource_get_user_data (source_resource);
meta_wayland_data_device_set_primary (data_device, source, serial);
}
static const struct gtk_primary_selection_device_interface primary_device_interface = {
primary_device_set_selection,
default_destructor,
};
static void
@ -1389,6 +1732,51 @@ static const struct wl_data_device_manager_interface manager_interface = {
get_data_device
};
static void
destroy_primary_source (struct wl_resource *resource)
{
MetaWaylandDataSourcePrimary *source = wl_resource_get_user_data (resource);
source->resource = NULL;
g_object_unref (source);
}
static void
primary_device_manager_create_source (struct wl_client *client,
struct wl_resource *manager_resource,
guint32 id)
{
struct wl_resource *source_resource;
source_resource =
wl_resource_create (client, &gtk_primary_selection_source_interface,
wl_resource_get_version (manager_resource),
id);
meta_wayland_data_source_primary_new (source_resource);
}
static void
primary_device_manager_get_device (struct wl_client *client,
struct wl_resource *manager_resource,
guint32 id,
struct wl_resource *seat_resource)
{
MetaWaylandSeat *seat = wl_resource_get_user_data (seat_resource);
struct wl_resource *cr;
cr = wl_resource_create (client, &gtk_primary_selection_device_interface,
wl_resource_get_version (manager_resource), id);
wl_resource_set_implementation (cr, &primary_device_interface,
&seat->data_device, unbind_resource);
wl_list_insert (&seat->data_device.primary_resource_list, wl_resource_get_link (cr));
}
static const struct gtk_primary_selection_device_manager_interface primary_manager_interface = {
primary_device_manager_create_source,
primary_device_manager_get_device,
default_destructor,
};
static void
bind_manager (struct wl_client *client,
void *data, guint32 version, guint32 id)
@ -1398,6 +1786,19 @@ bind_manager (struct wl_client *client,
wl_resource_set_implementation (resource, &manager_interface, NULL, NULL);
}
static void
bind_primary_manager (struct wl_client *client,
void *data,
uint32_t version,
uint32_t id)
{
struct wl_resource *resource;
resource = wl_resource_create (client, &gtk_primary_selection_device_manager_interface,
version, id);
wl_resource_set_implementation (resource, &primary_manager_interface, NULL, NULL);
}
void
meta_wayland_data_device_manager_init (MetaWaylandCompositor *compositor)
{
@ -1406,13 +1807,20 @@ meta_wayland_data_device_manager_init (MetaWaylandCompositor *compositor)
META_WL_DATA_DEVICE_MANAGER_VERSION,
NULL, bind_manager) == NULL)
g_error ("Could not create data_device");
if (wl_global_create (compositor->wayland_display,
&gtk_primary_selection_device_manager_interface,
1, NULL, bind_primary_manager) == NULL)
g_error ("Could not create data_device");
}
void
meta_wayland_data_device_init (MetaWaylandDataDevice *data_device)
{
wl_list_init (&data_device->resource_list);
wl_list_init (&data_device->primary_resource_list);
wl_signal_init (&data_device->selection_ownership_signal);
wl_signal_init (&data_device->primary_ownership_signal);
wl_signal_init (&data_device->dnd_ownership_signal);
}
@ -1435,17 +1843,34 @@ meta_wayland_data_device_set_keyboard_focus (MetaWaylandDataDevice *data_device)
return;
data_device_resource = wl_resource_find_for_client (&data_device->resource_list, focus_client);
if (!data_device_resource)
return;
source = data_device->selection_data_source;
if (source)
if (data_device_resource)
{
offer = meta_wayland_data_source_send_offer (source, data_device_resource);
wl_data_device_send_selection (data_device_resource, offer);
source = data_device->selection_data_source;
if (source)
{
offer = meta_wayland_data_source_send_offer (source, data_device_resource);
wl_data_device_send_selection (data_device_resource, offer);
}
else
{
wl_data_device_send_selection (data_device_resource, NULL);
}
}
data_device_resource = wl_resource_find_for_client (&data_device->primary_resource_list, focus_client);
if (data_device_resource)
{
source = data_device->primary_data_source;
if (source)
{
offer = meta_wayland_data_source_send_primary_offer (source, data_device_resource);
gtk_primary_selection_device_send_selection (data_device_resource, offer);
}
else
{
gtk_primary_selection_device_send_selection (data_device_resource, NULL);
}
}
else
wl_data_device_send_selection (data_device_resource, NULL);
}
gboolean
@ -1486,6 +1911,19 @@ meta_wayland_data_source_wayland_new (struct wl_resource *resource)
return META_WAYLAND_DATA_SOURCE (source_wayland);
}
static MetaWaylandDataSource *
meta_wayland_data_source_primary_new (struct wl_resource *resource)
{
MetaWaylandDataSourcePrimary *source_primary =
g_object_new (META_TYPE_WAYLAND_DATA_SOURCE_PRIMARY, NULL);
source_primary->resource = resource;
wl_resource_set_implementation (resource, &primary_source_interface,
source_primary, destroy_primary_source);
return META_WAYLAND_DATA_SOURCE (source_primary);
}
gboolean
meta_wayland_data_source_add_mime_type (MetaWaylandDataSource *source,
const gchar *mime_type)

View File

@ -55,15 +55,19 @@ struct _MetaWaylandDataSourceClass
struct _MetaWaylandDataDevice
{
uint32_t selection_serial;
uint32_t primary_serial;
MetaWaylandDataSource *selection_data_source;
MetaWaylandDataSource *dnd_data_source;
MetaWaylandDataSource *primary_data_source;
struct wl_listener selection_data_source_listener;
struct wl_list resource_list;
struct wl_list primary_resource_list;
MetaWaylandDragGrab *current_grab;
struct wl_client *focus_client;
struct wl_signal selection_ownership_signal;
struct wl_signal dnd_ownership_signal;
struct wl_signal primary_ownership_signal;
};
void meta_wayland_data_device_manager_init (MetaWaylandCompositor *compositor);
@ -80,6 +84,9 @@ void meta_wayland_data_device_set_dnd_source (MetaWaylandDataDevice *data_de
void meta_wayland_data_device_set_selection (MetaWaylandDataDevice *data_device,
MetaWaylandDataSource *source,
guint32 serial);
void meta_wayland_data_device_set_primary (MetaWaylandDataDevice *data_device,
MetaWaylandDataSource *source,
guint32 serial);
gboolean meta_wayland_data_source_add_mime_type (MetaWaylandDataSource *source,
const gchar *mime_type);

View File

@ -44,6 +44,7 @@
#include "pointer-constraints-unstable-v1-server-protocol.h"
static GQuark quark_pending_constraint_state = 0;
static GQuark quark_surface_pointer_constraints_data = 0;
struct _MetaWaylandPointerConstraint
{
@ -64,6 +65,14 @@ struct _MetaWaylandPointerConstraint
MetaPointerConstraint *constraint;
};
typedef struct _MetaWaylandSurfacePointerConstraintsData
{
GList *pointer_constraints;
MetaWindow *window;
gulong appears_changed_handler_id;
gulong raised_handler_id;
} MetaWaylandSurfacePointerConstraintsData;
typedef struct
{
MetaWaylandPointerConstraint *constraint;
@ -84,15 +93,137 @@ static const struct zwp_confined_pointer_v1_interface confined_pointer_interface
static const MetaWaylandPointerGrabInterface locked_pointer_grab_interface;
static const MetaWaylandPointerGrabInterface confined_pointer_grab_interface;
static cairo_region_t *
create_infinite_constraint_region (void)
static void
meta_wayland_pointer_constraint_destroy (MetaWaylandPointerConstraint *constraint);
static void
meta_wayland_pointer_constraint_maybe_enable_for_window (MetaWindow *window);
static void
meta_wayland_pointer_constraint_maybe_remove_for_seat (MetaWaylandSeat *seat,
MetaWindow *window);
static MetaWaylandSurfacePointerConstraintsData *
get_surface_constraints_data (MetaWaylandSurface *surface)
{
return cairo_region_create_rectangle (&(cairo_rectangle_int_t) {
.x = INT_MIN / 2,
.y = INT_MIN / 2,
.width = INT_MAX,
.height = INT_MAX,
});
return g_object_get_qdata (G_OBJECT (surface),
quark_surface_pointer_constraints_data);
}
static void
appears_focused_changed (MetaWindow *window,
GParamSpec *pspec,
gpointer user_data)
{
MetaWaylandCompositor *wayland_compositor;
wayland_compositor = meta_wayland_compositor_get_default ();
meta_wayland_pointer_constraint_maybe_remove_for_seat (wayland_compositor->seat,
window);
if (window->unmanaging)
return;
meta_wayland_pointer_constraint_maybe_enable_for_window (window);
}
static void
window_raised (MetaWindow *window)
{
meta_wayland_pointer_constraint_maybe_enable_for_window (window);
}
static MetaWaylandSurfacePointerConstraintsData *
surface_constraint_data_new (MetaWaylandSurface *surface)
{
MetaWaylandSurfacePointerConstraintsData *data;
data = g_new0 (MetaWaylandSurfacePointerConstraintsData, 1);
if (surface->window)
{
data->window = surface->window;
g_object_add_weak_pointer (G_OBJECT (data->window),
(gpointer *) &data->window);
data->appears_changed_handler_id =
g_signal_connect (data->window, "notify::appears-focused",
G_CALLBACK (appears_focused_changed), NULL);
data->raised_handler_id =
g_signal_connect (data->window, "raised",
G_CALLBACK (window_raised), NULL);
}
else
{
/* TODO: Support constraints on non-toplevel windows, such as subsurfaces.
*/
g_warn_if_reached ();
}
return data;
}
static void
surface_constraint_data_free (MetaWaylandSurfacePointerConstraintsData *data)
{
if (data->window)
{
g_signal_handler_disconnect (data->window,
data->appears_changed_handler_id);
g_signal_handler_disconnect (data->window,
data->raised_handler_id);
g_object_remove_weak_pointer (G_OBJECT (data->window),
(gpointer *) &data->window);
}
g_list_free_full (data->pointer_constraints,
(GDestroyNotify) meta_wayland_pointer_constraint_destroy);
g_free (data);
}
static MetaWaylandSurfacePointerConstraintsData *
ensure_surface_constraints_data (MetaWaylandSurface *surface)
{
MetaWaylandSurfacePointerConstraintsData *data;
data = get_surface_constraints_data (surface);
if (!data)
{
data = surface_constraint_data_new (surface);
g_object_set_qdata_full (G_OBJECT (surface),
quark_surface_pointer_constraints_data,
data,
(GDestroyNotify) surface_constraint_data_free);
}
return data;
}
static void
surface_add_pointer_constraint (MetaWaylandSurface *surface,
MetaWaylandPointerConstraint *constraint)
{
MetaWaylandSurfacePointerConstraintsData *data;
data = ensure_surface_constraints_data (surface);
data->pointer_constraints = g_list_append (data->pointer_constraints,
constraint);
}
static void
surface_remove_pointer_constraints (MetaWaylandSurface *surface,
MetaWaylandPointerConstraint *constraint)
{
MetaWaylandSurfacePointerConstraintsData *data;
data = get_surface_constraints_data (surface);
data->pointer_constraints =
g_list_remove (data->pointer_constraints, constraint);
if (!data->pointer_constraints)
{
g_object_set_qdata (G_OBJECT (surface),
quark_surface_pointer_constraints_data,
NULL);
}
}
static MetaWaylandPointerConstraint *
@ -122,7 +253,7 @@ meta_wayland_pointer_constraint_new (MetaWaylandSurface *su
}
else
{
constraint->region = create_infinite_constraint_region ();
constraint->region = NULL;
}
return constraint;
@ -212,6 +343,7 @@ meta_wayland_pointer_constraint_enable (MetaWaylandPointerConstraint *constraint
static void
meta_wayland_pointer_constraint_disable (MetaWaylandPointerConstraint *constraint)
{
constraint->is_enabled = FALSE;
meta_wayland_pointer_constraint_notify_deactivated (constraint);
meta_wayland_pointer_end_grab (constraint->grab.pointer);
meta_backend_set_client_pointer_constraint (meta_get_backend (), NULL);
@ -224,7 +356,7 @@ meta_wayland_pointer_constraint_destroy (MetaWaylandPointerConstraint *constrain
meta_wayland_pointer_constraint_disable (constraint);
wl_resource_set_user_data (constraint->resource, NULL);
cairo_region_destroy (constraint->region);
g_clear_pointer (&constraint->region, cairo_region_destroy);
g_object_unref (constraint);
}
@ -237,7 +369,7 @@ is_within_constraint_region (MetaWaylandPointerConstraint *constraint,
gboolean is_within;
region = meta_wayland_pointer_constraint_calculate_effective_region (constraint);
is_within = cairo_region_contains_point (constraint->region,
is_within = cairo_region_contains_point (region,
wl_fixed_to_int (sx),
wl_fixed_to_int (sy));
cairo_region_destroy (region);
@ -245,16 +377,21 @@ is_within_constraint_region (MetaWaylandPointerConstraint *constraint,
return is_within;
}
void
static void
meta_wayland_pointer_constraint_maybe_enable (MetaWaylandPointerConstraint *constraint)
{
MetaWaylandSeat *seat = constraint->seat;
wl_fixed_t sx, sy;
if (constraint->is_enabled)
return;
if (seat->keyboard.focus_surface != constraint->surface)
if (!constraint->surface->window)
{
g_warn_if_reached ();
return;
}
if (!meta_window_appears_focused (constraint->surface->window))
return;
meta_wayland_pointer_get_relative_coordinates (&constraint->seat->pointer,
@ -271,49 +408,59 @@ meta_wayland_pointer_constraint_remove (MetaWaylandPointerConstraint *constraint
{
MetaWaylandSurface *surface = constraint->surface;
meta_wayland_surface_remove_pointer_constraint (surface, constraint);
surface_remove_pointer_constraints (surface, constraint);
meta_wayland_pointer_constraint_destroy (constraint);
}
void
meta_wayland_pointer_constraint_maybe_remove_for_seat (MetaWaylandSeat *seat,
MetaWindow *focus_window)
MetaWindow *window)
{
MetaWaylandPointer *pointer = &seat->pointer;
MetaWaylandPointerConstraint *constraint;
if ((pointer->grab->interface == &confined_pointer_grab_interface ||
pointer->grab->interface == &locked_pointer_grab_interface) &&
pointer->focus_surface &&
pointer->focus_surface->window != focus_window)
if ((pointer->grab->interface != &confined_pointer_grab_interface &&
pointer->grab->interface != &locked_pointer_grab_interface))
return;
constraint = wl_container_of (pointer->grab, constraint, grab);
if (constraint->surface != window->surface)
return;
if (meta_window_appears_focused (window) &&
pointer->focus_surface == window->surface)
return;
switch (constraint->lifetime)
{
MetaWaylandPointerConstraint *constraint =
wl_container_of (pointer->grab, constraint, grab);
case ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ONESHOT:
meta_wayland_pointer_constraint_remove (constraint);
break;
switch (constraint->lifetime)
{
case ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ONESHOT:
meta_wayland_pointer_constraint_remove (constraint);
break;
case ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_PERSISTENT:
meta_wayland_pointer_constraint_disable (constraint);
break;
case ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_PERSISTENT:
meta_wayland_pointer_constraint_disable (constraint);
break;
default:
g_assert_not_reached ();
}
default:
g_assert_not_reached ();
}
}
void
static void
meta_wayland_pointer_constraint_maybe_enable_for_window (MetaWindow *window)
{
MetaWaylandSurface *surface = window->surface;
GList *it;
MetaWaylandSurfacePointerConstraintsData *surface_data;
GList *l;
for (it = surface->pointer_constraints; it; it = it->next)
surface_data = get_surface_constraints_data (surface);
if (!surface_data)
return;
for (l = surface_data->pointer_constraints; l; l = l->next)
{
MetaWaylandPointerConstraint *constraint = it->data;
MetaWaylandPointerConstraint *constraint = l->data;
meta_wayland_pointer_constraint_maybe_enable (constraint);
}
@ -330,18 +477,13 @@ meta_wayland_pointer_constraint_calculate_effective_region (MetaWaylandPointerCo
{
cairo_region_t *region;
region = cairo_region_copy (constraint->surface->input_region);
cairo_region_intersect (region, constraint->region);
region = meta_wayland_surface_calculate_input_region (constraint->surface);
if (constraint->region)
cairo_region_intersect (region, constraint->region);
return region;
}
cairo_region_t *
meta_wayland_pointer_constraint_get_region (MetaWaylandPointerConstraint *constraint)
{
return constraint->region;
}
MetaWaylandSurface *
meta_wayland_pointer_constraint_get_surface (MetaWaylandPointerConstraint *constraint)
{
@ -460,7 +602,7 @@ pending_constraint_state_applied (MetaWaylandPendingState *pending,
}
else
{
constraint->region = create_infinite_constraint_region ();
constraint->region = NULL;
}
g_signal_handler_disconnect (pending,
@ -516,6 +658,28 @@ meta_wayland_pointer_constraint_set_pending_region (MetaWaylandPointerConstraint
}
}
static MetaWaylandPointerConstraint *
get_pointer_constraint_for_seat (MetaWaylandSurface *surface,
MetaWaylandSeat *seat)
{
MetaWaylandSurfacePointerConstraintsData *surface_data;
GList *l;
surface_data = get_surface_constraints_data (surface);
if (!surface_data)
return NULL;
for (l = surface_data->pointer_constraints; l; l = l->next)
{
MetaWaylandPointerConstraint *constraint = l->data;
if (seat == constraint->seat)
return constraint;
}
return NULL;
}
static void
init_pointer_constraint (struct wl_resource *resource,
uint32_t id,
@ -531,7 +695,7 @@ init_pointer_constraint (struct wl_resource *resource,
struct wl_resource *cr;
MetaWaylandPointerConstraint *constraint;
if (meta_wayland_surface_get_pointer_constraint_for_seat (surface, seat))
if (get_pointer_constraint_for_seat (surface, seat))
{
wl_resource_post_error (resource,
WL_DISPLAY_ERROR_INVALID_OBJECT,
@ -559,7 +723,7 @@ init_pointer_constraint (struct wl_resource *resource,
return;
}
meta_wayland_surface_add_pointer_constraint (surface, constraint);
surface_add_pointer_constraint (surface, constraint);
wl_resource_set_implementation (cr, implementation, constraint,
pointer_constraint_resource_destroyed);
@ -610,7 +774,7 @@ locked_pointer_set_cursor_position_hint (struct wl_client *client,
/* Ignore a set cursor hint that was already sent after the constraint
* was cancelled. */
if (!constraint->resource || constraint->resource != resource)
if (!constraint || !constraint->resource || constraint->resource != resource)
return;
constraint->hint_set = TRUE;
@ -628,6 +792,9 @@ locked_pointer_set_region (struct wl_client *client,
MetaWaylandRegion *region =
region_resource ? wl_resource_get_user_data (region_resource) : NULL;
if (!constraint)
return;
meta_wayland_pointer_constraint_set_pending_region (constraint, region);
}
@ -741,6 +908,9 @@ confined_pointer_set_region (struct wl_client *client,
MetaWaylandRegion *region =
region_resource ? wl_resource_get_user_data (region_resource) : NULL;
if (!constraint)
return;
meta_wayland_pointer_constraint_set_pending_region (constraint, region);
}
@ -815,4 +985,6 @@ meta_wayland_pointer_constraint_class_init (MetaWaylandPointerConstraintClass *k
{
quark_pending_constraint_state =
g_quark_from_static_string ("-meta-wayland-pointer-constraint-pending_state");
quark_surface_pointer_constraints_data =
g_quark_from_static_string ("-meta-wayland-surface-constraints-data");
}

View File

@ -36,25 +36,12 @@ G_DECLARE_FINAL_TYPE (MetaWaylandPointerConstraint,
META, WAYLAND_POINTER_CONSTRAINT,
GObject);
typedef struct _MetaWaylandPointerConstraint MetaWaylandPointerConstraint;
void meta_wayland_pointer_constraints_init (MetaWaylandCompositor *compositor);
void meta_wayland_pointer_constraint_maybe_enable (MetaWaylandPointerConstraint *constraint);
void meta_wayland_pointer_constraint_destroy (MetaWaylandPointerConstraint *constraint);
MetaWaylandSeat * meta_wayland_pointer_constraint_get_seat (MetaWaylandPointerConstraint *constraint);
cairo_region_t * meta_wayland_pointer_constraint_calculate_effective_region (MetaWaylandPointerConstraint *constraint);
cairo_region_t * meta_wayland_pointer_constraint_get_region (MetaWaylandPointerConstraint *constraint);
MetaWaylandSurface * meta_wayland_pointer_constraint_get_surface (MetaWaylandPointerConstraint *constraint);
void meta_wayland_pointer_constraint_maybe_remove_for_seat (MetaWaylandSeat *seat,
MetaWindow *focus_window);
void meta_wayland_pointer_constraint_maybe_enable_for_window (MetaWindow *window);
#endif /* META_WAYLAND_POINTER_CONSTRAINTS_H */

View File

@ -863,8 +863,7 @@ meta_wayland_pointer_start_grab (MetaWaylandPointer *pointer,
interface = pointer->grab->interface;
grab->pointer = pointer;
if (pointer->current)
interface->focus (pointer->grab, pointer->current);
interface->focus (pointer->grab, pointer->current);
}
void
@ -967,28 +966,25 @@ update_cursor_sprite_texture (MetaWaylandSurface *surface)
MetaWaylandSurfaceRoleCursor *cursor_role =
META_WAYLAND_SURFACE_ROLE_CURSOR (surface->role);
MetaCursorSprite *cursor_sprite = cursor_role->cursor_sprite;
ClutterBackend *clutter_backend = clutter_get_default_backend ();
CoglContext *cogl_context =
clutter_backend_get_cogl_context (clutter_backend);
CoglTexture *texture;
g_return_if_fail (!surface->buffer || surface->buffer->texture);
if (surface->buffer)
{
struct wl_resource *buffer;
buffer = surface->buffer->resource;
texture = cogl_wayland_texture_2d_new_from_buffer (cogl_context,
buffer,
NULL);
meta_cursor_sprite_set_texture (cursor_sprite,
texture,
surface->buffer->texture,
cursor_role->hot_x * surface->scale,
cursor_role->hot_y * surface->scale);
meta_cursor_renderer_realize_cursor_from_wl_buffer (cursor_renderer,
cursor_sprite,
buffer);
cogl_object_unref (texture);
if (surface->using_buffer)
{
struct wl_resource *buffer;
buffer = surface->buffer->resource;
meta_cursor_renderer_realize_cursor_from_wl_buffer (cursor_renderer,
cursor_sprite,
buffer);
}
}
else
{
@ -1014,8 +1010,9 @@ cursor_sprite_prepare_at (MetaCursorSprite *cursor_sprite,
if (!meta_xwayland_is_xwayland_surface (surface))
{
monitor = meta_screen_get_monitor_for_point (screen, x, y);
meta_cursor_sprite_set_texture_scale (cursor_sprite,
(float)monitor->scale / surface->scale);
if (monitor)
meta_cursor_sprite_set_texture_scale (cursor_sprite,
(float)monitor->scale / surface->scale);
}
meta_wayland_surface_update_outputs (surface);
}
@ -1321,11 +1318,6 @@ cursor_surface_role_dispose (GObject *object)
meta_wayland_surface_role_get_surface (META_WAYLAND_SURFACE_ROLE (object));
MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
MetaWaylandPointer *pointer = &compositor->seat->pointer;
MetaCursorTracker *cursor_tracker = meta_cursor_tracker_get_for_screen (NULL);
g_signal_handlers_disconnect_by_func (cursor_tracker,
(gpointer) cursor_sprite_prepare_at,
cursor_role);
if (pointer->cursor_surface == surface)
pointer->cursor_surface = NULL;

View File

@ -48,6 +48,7 @@
#include "display-private.h"
#include "window-private.h"
#include "meta-window-wayland.h"
#include "bell.h"
#include "compositor/region-utils.h"
@ -201,28 +202,9 @@ surface_set_buffer (MetaWaylandSurface *surface,
return;
if (surface->buffer)
{
wl_list_remove (&surface->buffer_destroy_listener.link);
surface_stop_using_buffer (surface);
surface_stop_using_buffer (surface);
meta_wayland_buffer_unref (surface->buffer);
}
surface->buffer = buffer;
if (surface->buffer)
{
meta_wayland_buffer_ref (surface->buffer);
wl_signal_add (&surface->buffer->destroy_signal, &surface->buffer_destroy_listener);
}
}
static void
surface_handle_buffer_destroy (struct wl_listener *listener, void *data)
{
MetaWaylandSurface *surface = wl_container_of (listener, surface, buffer_destroy_listener);
surface_set_buffer (surface, NULL);
g_set_object (&surface->buffer, buffer);
}
static void
@ -1128,9 +1110,6 @@ wl_surface_destructor (struct wl_resource *resource)
if (surface->window)
destroy_window (surface);
g_list_free_full (surface->pointer_constraints,
(GDestroyNotify) meta_wayland_pointer_constraint_destroy);
surface_set_buffer (surface, NULL);
g_clear_object (&surface->pending);
@ -1192,7 +1171,6 @@ meta_wayland_surface_create (MetaWaylandCompositor *compositor,
surface->resource = wl_resource_create (client, &wl_surface_interface, wl_resource_get_version (compositor_resource), id);
wl_resource_set_implementation (surface->resource, &meta_wayland_wl_surface_interface, surface, wl_surface_destructor);
surface->buffer_destroy_listener.notify = surface_handle_buffer_destroy;
surface->surface_actor = g_object_ref_sink (meta_surface_actor_wayland_new (surface));
wl_list_init (&surface->pending_frame_callback_list);
@ -2039,17 +2017,33 @@ gtk_surface_unset_modal (struct wl_client *client,
meta_window_set_type (surface->window, META_WINDOW_NORMAL);
}
static const struct gtk_surface_interface meta_wayland_gtk_surface_interface = {
static void
gtk_surface_present (struct wl_client *client,
struct wl_resource *resource,
uint32_t timestamp)
{
MetaWaylandSurface *surface = wl_resource_get_user_data (resource);
MetaWindow *window = surface->window;
if (!window)
return;
meta_window_activate_full (window, timestamp,
META_CLIENT_TYPE_APPLICATION, NULL);
}
static const struct gtk_surface1_interface meta_wayland_gtk_surface_interface = {
gtk_surface_set_dbus_properties,
gtk_surface_set_modal,
gtk_surface_unset_modal,
gtk_surface_present,
};
static void
get_gtk_surface (struct wl_client *client,
struct wl_resource *resource,
guint32 id,
struct wl_resource *surface_resource)
gtk_shell_get_gtk_surface (struct wl_client *client,
struct wl_resource *resource,
guint32 id,
struct wl_resource *surface_resource)
{
MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource);
@ -2061,14 +2055,17 @@ get_gtk_surface (struct wl_client *client,
return;
}
surface->gtk_surface = wl_resource_create (client, &gtk_surface_interface, wl_resource_get_version (resource), id);
surface->gtk_surface = wl_resource_create (client,
&gtk_surface1_interface,
wl_resource_get_version (resource),
id);
wl_resource_set_implementation (surface->gtk_surface, &meta_wayland_gtk_surface_interface, surface, gtk_surface_destructor);
}
static void
set_startup_id (struct wl_client *client,
struct wl_resource *resource,
const char *startup_id)
gtk_shell_set_startup_id (struct wl_client *client,
struct wl_resource *resource,
const char *startup_id)
{
MetaDisplay *display;
@ -2077,9 +2074,33 @@ set_startup_id (struct wl_client *client,
startup_id);
}
static const struct gtk_shell_interface meta_wayland_gtk_shell_interface = {
get_gtk_surface,
set_startup_id
static void
gtk_shell_system_bell (struct wl_client *client,
struct wl_resource *resource,
struct wl_resource *gtk_surface_resource)
{
MetaDisplay *display = meta_get_display ();
if (gtk_surface_resource)
{
MetaWaylandSurface *surface =
wl_resource_get_user_data (gtk_surface_resource);
if (!surface->window)
return;
meta_bell_notify (display, surface->window);
}
else
{
meta_bell_notify (display, NULL);
}
}
static const struct gtk_shell1_interface meta_wayland_gtk_shell_interface = {
gtk_shell_get_gtk_surface,
gtk_shell_set_startup_id,
gtk_shell_system_bell,
};
static void
@ -2091,24 +2112,13 @@ bind_gtk_shell (struct wl_client *client,
struct wl_resource *resource;
uint32_t capabilities = 0;
resource = wl_resource_create (client, &gtk_shell_interface, version, id);
if (version < 2)
{
wl_resource_post_error (resource,
WL_DISPLAY_ERROR_INVALID_OBJECT,
"Incompatible gtk-shell version "
"(supported version: %d)",
META_GTK_SHELL_VERSION);
return;
}
resource = wl_resource_create (client, &gtk_shell1_interface, version, id);
wl_resource_set_implementation (resource, &meta_wayland_gtk_shell_interface, data, NULL);
if (!meta_prefs_get_show_fallback_app_menu ())
capabilities = GTK_SHELL_CAPABILITY_GLOBAL_APP_MENU;
capabilities = GTK_SHELL1_CAPABILITY_GLOBAL_APP_MENU;
gtk_shell_send_capabilities (resource, capabilities);
gtk_shell1_send_capabilities (resource, capabilities);
}
static void
@ -2371,8 +2381,8 @@ meta_wayland_shell_init (MetaWaylandCompositor *compositor)
g_error ("Failed to register a global wl-shell object");
if (wl_global_create (compositor->wayland_display,
&gtk_shell_interface,
META_GTK_SHELL_VERSION,
&gtk_shell1_interface,
META_GTK_SHELL1_VERSION,
compositor, bind_gtk_shell) == NULL)
g_error ("Failed to register a global gtk-shell object");
@ -2540,39 +2550,6 @@ meta_wayland_surface_get_toplevel_window (MetaWaylandSurface *surface)
return NULL;
}
void
meta_wayland_surface_add_pointer_constraint (MetaWaylandSurface *surface,
MetaWaylandPointerConstraint *constraint)
{
surface->pointer_constraints = g_list_append (surface->pointer_constraints,
constraint);
}
void
meta_wayland_surface_remove_pointer_constraint (MetaWaylandSurface *surface,
MetaWaylandPointerConstraint *constraint)
{
surface->pointer_constraints = g_list_remove (surface->pointer_constraints,
constraint);
}
MetaWaylandPointerConstraint *
meta_wayland_surface_get_pointer_constraint_for_seat (MetaWaylandSurface *surface,
MetaWaylandSeat *seat)
{
GList *iter;
for (iter = surface->pointer_constraints; iter; iter = iter->next)
{
MetaWaylandPointerConstraint *constraint = iter->data;
if (seat == meta_wayland_pointer_constraint_get_seat (constraint))
return constraint;
}
return NULL;
}
void
meta_wayland_surface_get_relative_coordinates (MetaWaylandSurface *surface,
float abs_x,
@ -2774,3 +2751,26 @@ meta_wayland_surface_role_subsurface_class_init (MetaWaylandSurfaceRoleSubsurfac
surface_role_class->commit = subsurface_surface_commit;
surface_role_class->is_on_output = actor_surface_is_on_output;
}
cairo_region_t *
meta_wayland_surface_calculate_input_region (MetaWaylandSurface *surface)
{
cairo_region_t *region;
cairo_rectangle_int_t buffer_rect;
CoglTexture *texture;
if (!surface->buffer)
return NULL;
texture = surface->buffer->texture;
buffer_rect = (cairo_rectangle_int_t) {
.width = cogl_texture_get_width (texture) / surface->scale,
.height = cogl_texture_get_height (texture) / surface->scale,
};
region = cairo_region_create_rectangle (&buffer_rect);
if (surface->input_region)
cairo_region_intersect (region, surface->input_region);
return region;
}

View File

@ -153,7 +153,6 @@ struct _MetaWaylandSurface
MetaWindow *window;
MetaWaylandBuffer *buffer;
gboolean using_buffer;
struct wl_listener buffer_destroy_listener;
cairo_region_t *input_region;
cairo_region_t *opaque_region;
int scale;
@ -219,8 +218,6 @@ struct _MetaWaylandSurface
gboolean pending_pos;
GSList *pending_placement_ops;
} sub;
GList *pointer_constraints;
};
void meta_wayland_shell_init (MetaWaylandCompositor *compositor);
@ -265,15 +262,6 @@ void meta_wayland_surface_queue_pending_frame_callbacks (MetaWayl
void meta_wayland_surface_queue_pending_state_frame_callbacks (MetaWaylandSurface *surface,
MetaWaylandPendingState *pending);
void meta_wayland_surface_add_pointer_constraint (MetaWaylandSurface *surface,
MetaWaylandPointerConstraint *constraint);
void meta_wayland_surface_remove_pointer_constraint (MetaWaylandSurface *surface,
MetaWaylandPointerConstraint *constraint);
MetaWaylandPointerConstraint *
meta_wayland_surface_get_pointer_constraint_for_seat (MetaWaylandSurface *surface,
MetaWaylandSeat *seat);
void meta_wayland_surface_get_relative_coordinates (MetaWaylandSurface *surface,
float abs_x,
float abs_y,
@ -288,4 +276,6 @@ void meta_wayland_surface_get_absolute_coordinates (MetaWaylandSu
MetaWaylandSurface * meta_wayland_surface_role_get_surface (MetaWaylandSurfaceRole *role);
cairo_region_t * meta_wayland_surface_calculate_input_region (MetaWaylandSurface *surface);
#endif

View File

@ -42,7 +42,7 @@
#define META_WL_SEAT_VERSION 5
#define META_WL_OUTPUT_VERSION 2
#define META_XSERVER_VERSION 1
#define META_GTK_SHELL_VERSION 3
#define META_GTK_SHELL1_VERSION 1
#define META_WL_SUBCOMPOSITOR_VERSION 1
#define META_ZWP_POINTER_GESTURES_V1_VERSION 1

View File

@ -403,11 +403,6 @@ appears_focused_changed (GObject *object,
gpointer user_data)
{
MetaWindow *window = META_WINDOW (object);
MetaWaylandCompositor *wayland_compositor;
wayland_compositor = meta_wayland_compositor_get_default ();
meta_wayland_pointer_constraint_maybe_remove_for_seat (wayland_compositor->seat,
window);
/* When we're unmanaging, we remove focus from the window,
* causing this to fire. Don't do anything in that case. */
@ -415,8 +410,6 @@ appears_focused_changed (GObject *object,
return;
surface_state_changed (window);
meta_wayland_pointer_constraint_maybe_enable_for_window (window);
}
static void

View File

@ -91,6 +91,7 @@ struct _MetaWaylandDataSourceXWayland
struct _MetaXWaylandSelection {
MetaSelectionBridge clipboard;
MetaSelectionBridge primary;
MetaDndBridge dnd;
};
@ -396,6 +397,8 @@ atom_to_selection_bridge (MetaWaylandCompositor *compositor,
if (selection_atom == selection_data->clipboard.selection_atom)
return &selection_data->clipboard;
else if (selection_atom == selection_data->primary.selection_atom)
return &selection_data->primary;
else if (selection_atom == selection_data->dnd.selection.selection_atom)
return &selection_data->dnd.selection;
else
@ -530,6 +533,8 @@ data_device_get_active_source_for_atom (MetaWaylandDataDevice *data_device,
{
if (selection_atom == gdk_x11_get_xatom_by_name ("CLIPBOARD"))
return data_device->selection_data_source;
else if (selection_atom == gdk_x11_get_xatom_by_name ("PRIMARY"))
return data_device->primary_data_source;
else if (selection_atom == xdnd_atoms[ATOM_DND_SELECTION])
return data_device->dnd_data_source;
else
@ -667,11 +672,17 @@ wayland_data_read_cb (GObject *object,
res, &error);
if (error)
{
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
g_error_free (error);
return;
}
g_warning ("Error transfering wayland clipboard to X11: %s\n",
error->message);
g_error_free (error);
if (data)
if (data && data->stream == G_INPUT_STREAM (object))
{
reply_selection_request (&data->request_event, FALSE);
g_clear_pointer (&selection->wayland_selection,
@ -1058,6 +1069,11 @@ meta_xwayland_selection_get_x11_targets (MetaWaylandCompositor *compositor,
meta_wayland_data_device_set_selection (&compositor->seat->data_device, data_source,
wl_display_next_serial (compositor->wayland_display));
}
else if (selection->selection_atom == gdk_x11_get_xatom_by_name ("PRIMARY"))
{
meta_wayland_data_device_set_primary (&compositor->seat->data_device, data_source,
wl_display_next_serial (compositor->wayland_display));
}
}
else
g_object_unref (data_source);
@ -1529,7 +1545,8 @@ meta_xwayland_selection_handle_xfixes_selection_notify (MetaWaylandCompositor *c
if (!selection)
return FALSE;
if (selection->selection_atom == gdk_x11_get_xatom_by_name ("CLIPBOARD"))
if (selection->selection_atom == gdk_x11_get_xatom_by_name ("CLIPBOARD") ||
selection->selection_atom == gdk_x11_get_xatom_by_name ("PRIMARY"))
{
if (event->owner == None)
{
@ -1712,6 +1729,9 @@ meta_xwayland_init_selection (void)
init_selection_bridge (&manager->selection_data->clipboard,
gdk_x11_get_xatom_by_name ("CLIPBOARD"),
&compositor->seat->data_device.selection_ownership_signal);
init_selection_bridge (&manager->selection_data->primary,
gdk_x11_get_xatom_by_name ("PRIMARY"),
&compositor->seat->data_device.primary_ownership_signal);
init_selection_bridge (&manager->selection_data->dnd.selection,
xdnd_atoms[ATOM_DND_SELECTION],
&compositor->seat->data_device.dnd_ownership_signal);
@ -1730,6 +1750,7 @@ meta_xwayland_shutdown_selection (void)
meta_xwayland_shutdown_dnd (manager);
shutdown_selection_bridge (&selection->clipboard);
shutdown_selection_bridge (&selection->primary);
shutdown_selection_bridge (&selection->dnd.selection);
g_slice_free (MetaXWaylandSelection, selection);

View File

@ -0,0 +1,225 @@
<?xml version="1.0" encoding="UTF-8"?>
<protocol name="gtk_primary_selection">
<copyright>
Copyright © 2015, 2016 Red Hat
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
</copyright>
<description summary="Primary selection protocol">
This protocol provides the ability to have a primary selection device to
match that of the X server. This primary selection is a shortcut to the
common clipboard selection, where text just needs to be selected in order
to allow copying it elsewhere. The de facto way to perform this action
is the middle mouse button, although it is not limited to this one.
Clients wishing to honor primary selection should create a primary
selection source and set it as the selection through
wp_primary_selection_device.set_selection whenever the text selection
changes. In order to minimize calls in pointer-driven text selection,
it should happen only once after the operation finished. Similarly,
a NULL source should be set when text is unselected.
wp_primary_selection_offer objects are first announced through the
wp_primary_selection_device.data_offer event. Immediately after this event,
the primary data offer will emit wp_primary_selection_offer.offer events
to let know of the mime types being offered.
When the primary selection changes, the client with the keyboard focus
will receive wp_primary_selection_device.selection events. Only the client
with the keyboard focus will receive such events with a non-NULL
wp_primary_selection_offer. Across keyboard focus changes, previously
focused clients will receive wp_primary_selection_device.events with a
NULL wp_primary_selection_offer.
In order to request the primary selection data, the client must pass
a recent serial pertaining to the press event that is triggering the
operation, if the compositor deems the serial valid and recent, the
wp_primary_selection_source.send event will happen in the other end
to let the transfer begin. The client owning the primary selection
should write the requested data, and close the file descriptor
immediately.
If the primary selection owner client disappeared during the transfer,
the client reading the data will receive a
wp_primary_selection_device.selection event with a NULL
wp_primary_selection_offer, the client should take this as a hint
to finish the reads related to the no longer existing offer.
The primary selection owner should be checking for errors during
writes, merely cancelling the ongoing transfer if any happened.
</description>
<interface name="gtk_primary_selection_device_manager" version="1">
<description summary="X primary selection emulation">
The primary selection device manager is a singleton global object that
provides access to the primary selection. It allows to create
wp_primary_selection_source objects, as well as retrieving the per-seat
wp_primary_selection_device objects.
</description>
<request name="create_source">
<description summary="create a new primary selection source">
Create a new primary selection source.
</description>
<arg name="id" type="new_id" interface="gtk_primary_selection_source"/>
</request>
<request name="get_device">
<description summary="create a new primary selection device">
Create a new data device for a given seat.
</description>
<arg name="id" type="new_id" interface="gtk_primary_selection_device"/>
<arg name="seat" type="object" interface="wl_seat"/>
</request>
<request name="destroy" type="destructor">
<description summary="destroy the primary selection device manager">
Destroy the primary selection device manager.
</description>
</request>
</interface>
<interface name="gtk_primary_selection_device" version="1">
<request name="set_selection">
<description summary="set the primary selection">
Replaces the current selection. The previous owner of the primary selection
will receive a wp_primary_selection_source.cancelled event.
To unset the selection, set the source to NULL.
</description>
<arg name="source" type="object" interface="gtk_primary_selection_source" allow-null="true"/>
<arg name="serial" type="uint" summary="serial of the event that triggered this request"/>
</request>
<event name="data_offer">
<description summary="introduce a new wp_primary_selection_offer">
Introduces a new wp_primary_selection_offer object that may be used
to receive the current primary selection. Immediately following this
event, the new wp_primary_selection_offer object will send
wp_primary_selection_offer.offer events to describe the offered mime
types.
</description>
<arg name="offer" type="new_id" interface="gtk_primary_selection_offer"/>
</event>
<event name="selection">
<description summary="advertise a new primary selection">
The wp_primary_selection_device.selection event is sent to notify the
client of a new primary selection. This event is sent after the
wp_primary_selection.data_offer event introducing this object, and after
the offer has announced its mimetypes through
wp_primary_selection_offer.offer.
The data_offer is valid until a new offer or NULL is received
or until the client loses keyboard focus. The client must destroy the
previous selection data_offer, if any, upon receiving this event.
</description>
<arg name="id" type="object" interface="gtk_primary_selection_offer" allow-null="true"/>
</event>
<request name="destroy" type="destructor">
<description summary="destroy the primary selection device">
Destroy the primary selection device.
</description>
</request>
</interface>
<interface name="gtk_primary_selection_offer" version="1">
<description summary="offer to transfer primary selection contents">
A wp_primary_selection_offer represents an offer to transfer the contents
of the primary selection clipboard to the client. Similar to
wl_data_offer, the offer also describes the mime types that the source
will transferthat the
data can be converted to and provides the mechanisms for transferring the
data directly to the client.
</description>
<request name="receive">
<description summary="request that the data is transferred">
To transfer the contents of the primary selection clipboard, the client
issues this request and indicates the mime type that it wants to
receive. The transfer happens through the passed file descriptor
(typically created with the pipe system call). The source client writes
the data in the mime type representation requested and then closes the
file descriptor.
The receiving client reads from the read end of the pipe until EOF and
closes its end, at which point the transfer is complete.
</description>
<arg name="mime_type" type="string"/>
<arg name="fd" type="fd"/>
</request>
<request name="destroy" type="destructor">
<description summary="destroy the primary selection offer">
Destroy the primary selection offer.
</description>
</request>
<event name="offer">
<description summary="advertise offered mime type">
Sent immediately after creating announcing the wp_primary_selection_offer
through wp_primary_selection_device.data_offer. One event is sent per
offered mime type.
</description>
<arg name="mime_type" type="string"/>
</event>
</interface>
<interface name="gtk_primary_selection_source" version="1">
<description summary="offer to replace the contents of the primary selection">
The source side of a wp_primary_selection_offer, it provides a way to
describe the offered data and respond to requests to transfer the
requested contents of the primary selection clipboard.
</description>
<request name="offer">
<description summary="add an offered mime type">
This request adds a mime type to the set of mime types advertised to
targets. Can be called several times to offer multiple types.
</description>
<arg name="mime_type" type="string"/>
</request>
<request name="destroy" type="destructor">
<description summary="destroy the primary selection source">
Destroy the primary selection source.
</description>
</request>
<event name="send">
<description summary="send the primary selection contents">
Request for the current primary selection contents from the client.
Send the specified mime type over the passed file descriptor, then
close it.
</description>
<arg name="mime_type" type="string"/>
<arg name="fd" type="fd"/>
</event>
<event name="cancelled">
<description summary="request for primary selection contents was canceled">
This primary selection source is no longer valid. The client should
clean up and destroy this primary selection source.
</description>
</event>
</interface>
</protocol>

View File

@ -1,12 +1,9 @@
<protocol name="gtk">
<interface name="gtk_shell" version="3">
<interface name="gtk_shell1" version="1">
<description summary="gtk specific extensions">
gtk_shell is a protocol extension providing additional features for
clients implementing it. It is not backward compatible, and a client must
always only bind to the specific version it implements. If a client binds
to a version different from the version the server provides, an error will
be raised.
clients implementing it.
</description>
<enum name="capability">
@ -20,16 +17,20 @@
</event>
<request name="get_gtk_surface">
<arg name="gtk_surface" type="new_id" interface="gtk_surface"/>
<arg name="gtk_surface" type="new_id" interface="gtk_surface1"/>
<arg name="surface" type="object" interface="wl_surface"/>
</request>
<request name="set_startup_id" since="3">
<request name="set_startup_id">
<arg name="startup_id" type="string" allow-null="true"/>
</request>
<request name="system_bell">
<arg name="surface" type="object" interface="gtk_surface1" allow-null="true"/>
</request>
</interface>
<interface name="gtk_surface" version="3">
<interface name="gtk_surface1" version="1">
<request name="set_dbus_properties">
<arg name="application_id" type="string" allow-null="true"/>
<arg name="app_menu_path" type="string" allow-null="true"/>
@ -41,6 +42,10 @@
<request name="set_modal"/>
<request name="unset_modal"/>
<request name="present">
<arg name="time" type="uint"/>
</request>
</interface>
</protocol>

View File

@ -1162,6 +1162,30 @@ process_selection_clear (MetaDisplay *display,
return TRUE;
}
static void
notify_bell (MetaDisplay *display,
XkbAnyEvent *xkb_ev)
{
XkbBellNotifyEvent *xkb_bell_event = (XkbBellNotifyEvent*) xkb_ev;
MetaWindow *window;
window = meta_display_lookup_x_window (display, xkb_bell_event->window);
if (!window && display->focus_window && display->focus_window->frame)
window = display->focus_window;
display->last_bell_time = xkb_ev->time;
if (!meta_bell_notify (display, window) &&
meta_prefs_bell_is_audible ())
{
/* Force a classic bell if the libcanberra bell failed. */
XkbForceDeviceBell (display->xdisplay,
xkb_bell_event->device,
xkb_bell_event->bell_class,
xkb_bell_event->bell_id,
xkb_bell_event->percent);
}
}
static gboolean
handle_other_xevent (MetaDisplay *display,
XEvent *event)
@ -1618,8 +1642,7 @@ handle_other_xevent (MetaDisplay *display,
if (XSERVER_TIME_IS_BEFORE(display->last_bell_time,
xkb_ev->time - 100))
{
display->last_bell_time = xkb_ev->time;
meta_bell_notify (display, xkb_ev);
notify_bell (display, xkb_ev);
}
break;
default: