Compare commits

...

45 Commits

Author SHA1 Message Date
Jasper St. Pierre
7947bcb0b0 dnd 2 2014-09-01 14:34:33 -07:00
Jasper St. Pierre
308cccc72c dnd 2014-09-01 14:34:33 -07:00
Jasper St. Pierre
074946ac0b hot offs 2014-09-01 14:34:33 -07:00
Jasper St. Pierre
9688a0d7bc wayland: Record the offset position
This is needed for DND surfaces. We should probably test to see if it's
used for cursor surfaces at all.
2014-09-01 14:34:33 -07:00
Jasper St. Pierre
604d2155ba window: Don't map the client window before placing it
A lot of applications assume that the window is fully positioned when it
gets the MapNotify, especially simple applications. Make sure that the
window is only mapped through the calc_showing logic.
2014-09-01 11:46:12 -07:00
Jasper St. Pierre
e7727d698f window: Make calc_showing private 2014-09-01 11:42:21 -07:00
Claude Paroz
a3f75f401c Updated French translation 2014-08-30 11:59:53 +02:00
Maria Mavridou
d342f7c429 Updated Greek translation 2014-08-28 19:33:49 +00:00
Yosef Or Boczko
bb2b26ca44 Updated Hebrew translation 2014-08-28 18:18:21 +03:00
Jasper St. Pierre
2f9840a51c compositor: Conditionalize some more Wayland support 2014-08-27 12:56:39 -04:00
Jasper St. Pierre
09aefdba43 compositor: Conditionalize more Wayland support 2014-08-27 12:41:26 -04:00
Jasper St. Pierre
4c8a408afc Only build Wayland protocols when we have Wayland 2014-08-27 12:07:11 -04:00
Jasper St. Pierre
4c08d9a53b configure: Don't conditionalize gbm
Let's just say it's required for now.
2014-08-27 12:05:00 -04:00
Jasper St. Pierre
b091cbf361 shaped-texture: Don't set a small minimum size
The shaped-texture is effectively fixed size. It doesn't make sense to
have less allocation than requested.
2014-08-27 10:00:19 -04:00
Jasper St. Pierre
a6fcda69ac shaped-texture: Remove the use of MetaWindowActor internals
I want to make this class an independent helper.
2014-08-27 10:00:19 -04:00
Jasper St. Pierre
9063e4568c configure: Conditionalize libinput and gbm too 2014-08-27 09:57:43 -04:00
Jasper St. Pierre
3d37b5d696 configure: Conditionalize WAYLAND_SCANNER too
It seems we forgot this.
2014-08-26 16:58:13 -04:00
Adel Gadllah
3a8bad1e6f meta-surface-actor: Fix is_argb32 for unredirected windows
meta_surface_actor_is_argb32 assumes that lack of stex means that a window is
ARGB32. When we unredirect a window we detach the texture so we end up without
a texture. Given that should_unredirect returns FALSE when a window is argb32,
we know that this window is indeed not ARGB32.

Returing TRUE in that case causes us to flip between redirected and
unredirected on every paint.

So fix that by returning FALSE in that case.
2014-08-26 18:59:02 +02:00
Carlos Garnacho
e822e51752 surface: Don't calculate geometry for buffer-less subsurfaces
A wl_surface may have a wl_subsurface interface, but no buffers attached
yet, even though the geometry calculation code for surfaces/subsurfaces
assumes everything has already a buffer.

Just skip subsurfaces that don't have a buffer, those can't be set
a geometry yet, and right now it's crashing accessing the texture from
the NULL surface->buffer.

https://bugzilla.gnome.org/show_bug.cgi?id=735452
2014-08-26 16:58:59 +02:00
Fran Diéguez
f9818f890b Updated Galician translations 2014-08-25 22:42:41 +02:00
Jasper St. Pierre
6526118d9f shaped-texture: Fix a typo in a comment 2014-08-25 10:52:07 -04:00
Jasper St. Pierre
c15b3b4a09 shaped-texture: Fix the logic when the blended region is empty
When the blended region was empty, meaning we didn't have to paint
anything blended -- the case for an app update -- was drawing the
entire window blended, because of a think-o in the complex and
complicated logic.

Fix this so that we don't draw anything for the blended region when
empty.
2014-08-25 09:30:15 -04:00
Jasper St. Pierre
e1acb69cf1 workspace: Don't try to move O-R windows when relocating workspaces
All we'll get for it is spam.
2014-08-25 09:00:00 -04:00
Jasper St. Pierre
8f757c7b80 workspace: Smarten assert in light of O-R windows
O-R windows appear in workspace->windows, which aren't relocatable,
so we can't simply check if the workspace is empty after relocating
all normal windows, since those windows remain.

Make sure that the only windows we have are those that are
on_all_workspaces.
2014-08-25 08:57:13 -04:00
Jasper St. Pierre
01a47c7d6d shaped-texture: If we have too many rectangles, don't paint the opaque
region first

If we're going to render the entire texture blended, then don't bother
painting the unblended stuff, since we're just going to draw on top
anyway.
2014-08-24 12:38:29 -04:00
Jasper St. Pierre
3ee09c6251 meta-monitor-xrandr: Assign a name to the mode
Based on a downstream Endless patch. They use this to show a proper mode
name to the users.
2014-08-23 08:54:06 -04:00
Kjartan Maraas
bb54f91dd1 Updated Norwegian bokmål translation. 2014-08-23 13:37:47 +02:00
Enrico Nicoletto
41a79530e9 Updated Brazilian Portuguese translation 2014-08-22 19:23:37 +00:00
Jasper St. Pierre
31f5a916f4 wayland: Tie XDG surfaces together with the Shell that created them
This means that we don't leak when a client binds an XdgShell for a
client more than once, and we send pings/pongs to the correct shell
interface.
2014-08-22 12:52:21 -04:00
Jasper St. Pierre
5657a671c1 xdg-shell: Bump unstable version 2014-08-22 12:07:56 -04:00
Rico Tzschichholz
ecc254c659 surface-actor-x11: Fix "incompatible pointer type" error
Caused by e73c46ce03
2014-08-22 07:38:08 +02:00
Jasper St. Pierre
9cb1c95e49 surface-actor: Call process_damage even when the actor is invisible
Otherwise, surface-actor-x11 won't be marked as having received damage,
which is vital to updating the actual surface.
2014-08-21 18:30:56 -04:00
Jasper St. Pierre
e73c46ce03 surface-actor-x11: Use the existing check for "visibility"
Instead of doing our own thing here.
2014-08-21 18:30:35 -04:00
Jasper St. Pierre
952e9c52bc surface-actor-x11: Merge a simple function inline
This is a one-liner, only used in one place.
2014-08-21 18:30:17 -04:00
Jasper St. Pierre
b879af46b3 stage: Refine our assertions for overlays in MetaStage
We indeed call this function if we're not an X11 compositor, but in this
case we're simply calling it to say that we have no cursor overlay. Make
sure not to assert fail in this case.
2014-08-21 18:06:53 -04:00
Jasper St. Pierre
9feb9d6bca events: Update the pointer position here
Rather than in the Wayland front-end, since it's really a core operation.
2014-08-21 17:00:55 -04:00
Jasper St. Pierre
dc0437a5b5 surface-actor-wayland: Pass in a CoglTexture, as well
This makes it so that MetaSurfaceActorWayland is effectively just a
wrapper actor around MetaShapedTexture with some extra scaling. I think
the MetaSurfaceActor subclassing was a bad idea -- we really should have
these abstractions in much higher levels in the stack than the
compositor.
2014-08-21 16:34:29 -04:00
Jasper St. Pierre
55331a0678 surface-actor-wayland: Don't store the buffer
We don't need to anymore -- we're purely texture based.
2014-08-21 16:24:30 -04:00
Jasper St. Pierre
f5580f61f9 wayland: Update the CoglTexture in the MetaWaylandSurface
It doesn't make sense to update it in the surface actor. It's also
theoretically wrong to update the buffer's texture on surface commit,
too, because it's buffer state, not surface state, but I don't think
there's any place we use a wl_buffer without a wl_surface.
2014-08-21 16:22:53 -04:00
Jasper St. Pierre
30953cf2d7 stage: Make the API take a CoglTexture
MetaCursorReference doesn't really need to be part of the API.
2014-08-21 15:04:58 -04:00
Jasper St. Pierre
c7fa446ee7 stage: Refactor the cursor drawing code into a generic "overlay" system
This isn't really anything but a really small actor system. This will be
used for DND cursors as well.
2014-08-21 15:04:57 -04:00
Jasper St. Pierre
9ecbac365b configure: Group X11 libraries at the end 2014-08-21 10:24:46 -04:00
Jasper St. Pierre
80f6fb6329 configure: Depend on at least libxkbcommon 0.4.3
This fixes a few bugs which we need for keybindings to work in mutter.
2014-08-21 10:13:30 -04:00
Jasper St. Pierre
1b596a114d configure: Add x11-xcb to required packages
We need to link against this library now because we're using
XGetXCBConnection. Whoops.
2014-08-21 10:12:51 -04:00
Chao-Hsiung Liao
265c00235b Updated Traditional Chinese translation(Hong Kong and Taiwan) 2014-08-21 18:55:35 +08:00
36 changed files with 2374 additions and 3500 deletions

View File

@@ -76,17 +76,23 @@ MUTTER_PC_MODULES="
pango >= 1.2.0 pango >= 1.2.0
cairo >= 1.10.0 cairo >= 1.10.0
gsettings-desktop-schemas >= 3.7.3 gsettings-desktop-schemas >= 3.7.3
xcomposite >= 0.2 xfixes xext xdamage xi >= 1.6.0
xcursor
$CLUTTER_PACKAGE >= 1.19.5 $CLUTTER_PACKAGE >= 1.19.5
clutter-egl-1.0 clutter-egl-1.0
cogl-1.0 >= 1.17.1 cogl-1.0 >= 1.17.1
libinput gbm
upower-glib >= 0.99.0 upower-glib >= 0.99.0
gnome-desktop-3.0 gnome-desktop-3.0
xcomposite >= 0.2
xcursor
xdamage
xext
xfixes
xi >= 1.6.0
xkbfile xkbfile
xkeyboard-config xkeyboard-config
xkbcommon >= 0.4.3
xkbcommon-x11 xkbcommon-x11
x11-xcb
xcb-randr xcb-randr
" "
@@ -186,15 +192,11 @@ if test x$found_introspection != xno; then
AC_SUBST(META_GIR) AC_SUBST(META_GIR)
fi fi
AC_PATH_PROG([WAYLAND_SCANNER],[wayland-scanner],[no])
AS_IF([test "x$WAYLAND_SCANNER" = "xno"],
AC_MSG_ERROR([Could not find wayland-scanner in your PATH, required for parsing wayland extension protocols]))
AC_SUBST([WAYLAND_SCANNER])
AC_SUBST(XWAYLAND_PATH) AC_SUBST(XWAYLAND_PATH)
PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES) PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES)
PKG_CHECK_MODULES(MUTTER_NATIVE_BACKEND, [libdrm libsystemd], [have_native_backend=yes], [have_native_backend=no]) PKG_CHECK_MODULES(MUTTER_NATIVE_BACKEND, [libdrm libsystemd libinput], [have_native_backend=yes], [have_native_backend=no])
if test $have_native_backend = yes; then if test $have_native_backend = yes; then
AC_DEFINE([HAVE_NATIVE_BACKEND],[1],[Define if you want to enable the native (KMS) backend based on systemd]) AC_DEFINE([HAVE_NATIVE_BACKEND],[1],[Define if you want to enable the native (KMS) backend based on systemd])
fi fi
@@ -202,6 +204,11 @@ AM_CONDITIONAL([HAVE_NATIVE_BACKEND],[test $have_native_backend = yes])
PKG_CHECK_MODULES(MUTTER_WAYLAND, [clutter-wayland-1.0 clutter-wayland-compositor-1.0 wayland-server >= 1.5.90], [have_wayland=yes], [have_wayland=no]) PKG_CHECK_MODULES(MUTTER_WAYLAND, [clutter-wayland-1.0 clutter-wayland-compositor-1.0 wayland-server >= 1.5.90], [have_wayland=yes], [have_wayland=no])
if test $have_wayland = yes; then if test $have_wayland = yes; then
AC_PATH_PROG([WAYLAND_SCANNER],[wayland-scanner],[no])
AS_IF([test $WAYLAND_SCANNER = "no"],
AC_MSG_ERROR([Could not find wayland-scanner in your PATH, required for parsing wayland extension protocols]))
AC_SUBST([WAYLAND_SCANNER])
AC_DEFINE([HAVE_WAYLAND],[1],[Define if you want to enable Wayland support]) AC_DEFINE([HAVE_WAYLAND],[1],[Define if you want to enable Wayland support])
fi fi
AM_CONDITIONAL([HAVE_WAYLAND],[test $have_wayland = yes]) AM_CONDITIONAL([HAVE_WAYLAND],[test $have_wayland = yes])

110
po/el.po
View File

@@ -18,16 +18,16 @@ msgstr ""
"Project-Id-Version: metacity.gnome-2-26\n" "Project-Id-Version: metacity.gnome-2-26\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-07-15 21:19+0000\n" "POT-Creation-Date: 2014-08-20 21:50+0000\n"
"PO-Revision-Date: 2014-07-16 13:25+0200\n" "PO-Revision-Date: 2014-08-21 12:13+0200\n"
"Last-Translator: Tom Tryfonidis <tomtryf@gmail.com>\n" "Last-Translator: Maria Mavridou <mavridou@gmail.com>\n"
"Language-Team: www.gnome.gr\n" "Language-Team: www.gnome.gr\n"
"Language: el\n" "Language: el\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.6.5\n" "X-Generator: Poedit 1.6.4\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: ../data/50-mutter-navigation.xml.in.h:1 #: ../data/50-mutter-navigation.xml.in.h:1
@@ -91,66 +91,100 @@ msgid "Switch applications"
msgstr "Εναλλαγή εφαρμογών" msgstr "Εναλλαγή εφαρμογών"
#: ../data/50-mutter-navigation.xml.in.h:16 #: ../data/50-mutter-navigation.xml.in.h:16
#| msgid "Switch applications"
msgid "Switch to previous application"
msgstr "Εναλλαγή στην προηγούμενη εφαρμογή"
#: ../data/50-mutter-navigation.xml.in.h:17
msgid "Switch windows" msgid "Switch windows"
msgstr "Εναλλαγή παραθύρων" msgstr "Εναλλαγή παραθύρων"
#: ../data/50-mutter-navigation.xml.in.h:17 #: ../data/50-mutter-navigation.xml.in.h:18
#| msgid "Switch windows"
msgid "Switch to previous window"
msgstr "Εναλλαγή στο προηγούμενο παράθυρο"
#: ../data/50-mutter-navigation.xml.in.h:19
msgid "Switch windows of an application" msgid "Switch windows of an application"
msgstr "Εναλλαγή παραθύρων μιας εφαρμογής" msgstr "Εναλλαγή παραθύρων μιας εφαρμογής"
#: ../data/50-mutter-navigation.xml.in.h:18 #: ../data/50-mutter-navigation.xml.in.h:20
#| msgid "Switch windows of an application"
msgid "Switch to previous window of an application"
msgstr "Εναλλαγή στο προηγούμενο παράθυρο μιας εφαρμογής"
#: ../data/50-mutter-navigation.xml.in.h:21
msgid "Switch system controls" msgid "Switch system controls"
msgstr "Εναλλαγή ελέγχων συστήματος" msgstr "Εναλλαγή ελέγχων συστήματος"
#: ../data/50-mutter-navigation.xml.in.h:19 #: ../data/50-mutter-navigation.xml.in.h:22
#| msgid "Switch system controls"
msgid "Switch to previous system control"
msgstr "Εναλλαγή σε προηγούμενους ελέγχους συστήματος"
#: ../data/50-mutter-navigation.xml.in.h:23
msgid "Switch windows directly" msgid "Switch windows directly"
msgstr "Άμεση εναλλαγή παραθύρων" msgstr "Άμεση εναλλαγή παραθύρων"
#: ../data/50-mutter-navigation.xml.in.h:20 #: ../data/50-mutter-navigation.xml.in.h:24
msgid "Switch directly to previous window"
msgstr "Άμεση εναλλαγή στο προηγούμενο παράθυρο"
#: ../data/50-mutter-navigation.xml.in.h:25
msgid "Switch windows of an app directly" msgid "Switch windows of an app directly"
msgstr "Άμεση εναλλαγή παραθύρων μιας εφαρμογής" msgstr "Άμεση εναλλαγή παραθύρων μιας εφαρμογής"
#: ../data/50-mutter-navigation.xml.in.h:21 #: ../data/50-mutter-navigation.xml.in.h:26
#| msgid "Switch windows of an application"
msgid "Switch directly to previous window of an app"
msgstr "Άμεση εναλλαγή στο προηγούμενο παράθυρο μιας εφαρμογής"
#: ../data/50-mutter-navigation.xml.in.h:27
msgid "Switch system controls directly" msgid "Switch system controls directly"
msgstr "Άμεση εναλλαγή ελέγχων συστήματος" msgstr "Άμεση εναλλαγή ελέγχων συστήματος"
#: ../data/50-mutter-navigation.xml.in.h:22 #: ../data/50-mutter-navigation.xml.in.h:28
#| msgid "Switch system controls"
msgid "Switch directly to previous system control"
msgstr "Άμεση εναλλαγή σε προηγούμενους ελέγχους συστήματος"
#: ../data/50-mutter-navigation.xml.in.h:29
msgid "Hide all normal windows" msgid "Hide all normal windows"
msgstr "Απόκρυψη όλων των κανονικών παραθύρων" msgstr "Απόκρυψη όλων των κανονικών παραθύρων"
#: ../data/50-mutter-navigation.xml.in.h:23 #: ../data/50-mutter-navigation.xml.in.h:30
msgid "Switch to workspace 1" msgid "Switch to workspace 1"
msgstr "Εναλλαγή στον χώρο εργασίας 1" msgstr "Εναλλαγή στον χώρο εργασίας 1"
#: ../data/50-mutter-navigation.xml.in.h:24 #: ../data/50-mutter-navigation.xml.in.h:31
msgid "Switch to workspace 2" msgid "Switch to workspace 2"
msgstr "Εναλλαγή στον χώρο εργασίας 2" msgstr "Εναλλαγή στον χώρο εργασίας 2"
#: ../data/50-mutter-navigation.xml.in.h:25 #: ../data/50-mutter-navigation.xml.in.h:32
msgid "Switch to workspace 3" msgid "Switch to workspace 3"
msgstr "Εναλλαγή στον χώρο εργασίας 3" msgstr "Εναλλαγή στον χώρο εργασίας 3"
#: ../data/50-mutter-navigation.xml.in.h:26 #: ../data/50-mutter-navigation.xml.in.h:33
msgid "Switch to workspace 4" msgid "Switch to workspace 4"
msgstr "Εναλλαγή στον χώρο εργασίας 4" msgstr "Εναλλαγή στον χώρο εργασίας 4"
#: ../data/50-mutter-navigation.xml.in.h:27 #: ../data/50-mutter-navigation.xml.in.h:34
msgid "Switch to last workspace" msgid "Switch to last workspace"
msgstr "Εναλλαγή στον τελευταίο χώρο εργασίας" msgstr "Εναλλαγή στον τελευταίο χώρο εργασίας"
#: ../data/50-mutter-navigation.xml.in.h:28 #: ../data/50-mutter-navigation.xml.in.h:35
msgid "Move to workspace left" msgid "Move to workspace left"
msgstr "Μετακίνηση στον χώρο εργασίας αριστερά" msgstr "Μετακίνηση στον χώρο εργασίας αριστερά"
#: ../data/50-mutter-navigation.xml.in.h:29 #: ../data/50-mutter-navigation.xml.in.h:36
msgid "Move to workspace right" msgid "Move to workspace right"
msgstr "Μετακίνηση στον χώρο εργασίας δεξιά" msgstr "Μετακίνηση στον χώρο εργασίας δεξιά"
#: ../data/50-mutter-navigation.xml.in.h:30 #: ../data/50-mutter-navigation.xml.in.h:37
msgid "Move to workspace above" msgid "Move to workspace above"
msgstr "Μετακίνηση στον χώρο εργασίας επάνω" msgstr "Μετακίνηση στον χώρο εργασίας επάνω"
#: ../data/50-mutter-navigation.xml.in.h:31 #: ../data/50-mutter-navigation.xml.in.h:38
msgid "Move to workspace below" msgid "Move to workspace below"
msgstr "Μετακίνηση στον χώρο εργασίας κάτω" msgstr "Μετακίνηση στον χώρο εργασίας κάτω"
@@ -444,7 +478,7 @@ msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:445 #: ../src/compositor/compositor.c:441
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display \"%s" "Another compositing manager is already running on screen %i on display \"%s"
@@ -452,11 +486,11 @@ msgid ""
msgstr "" msgstr ""
"Εκτελείται ένας άλλος διαχειριστής παραθύρων στην οθόνη %i προβολή \"%s\"." "Εκτελείται ένας άλλος διαχειριστής παραθύρων στην οθόνη %i προβολή \"%s\"."
#: ../src/compositor/meta-background.c:990 #: ../src/compositor/meta-background.c:1044
msgid "background texture could not be created from file" msgid "background texture could not be created from file"
msgstr "η υφή παρασκηνίου δεν μπόρεσε να δημιουργηθεί από αρχείο" msgstr "η υφή παρασκηνίου δεν μπόρεσε να δημιουργηθεί από αρχείο"
#: ../src/core/bell.c:215 #: ../src/core/bell.c:185
msgid "Bell event" msgid "Bell event"
msgstr "Ηχητικό συμβάν κουδουνιού" msgstr "Ηχητικό συμβάν κουδουνιού"
@@ -486,49 +520,49 @@ msgid "_Force Quit"
msgstr "_Εξαναγκασμός σε τερματισμό" msgstr "_Εξαναγκασμός σε τερματισμό"
# gconf/gconf-internals.c:2416 # gconf/gconf-internals.c:2416
#: ../src/core/display.c:464 #: ../src/core/display.c:547
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" msgid "Failed to open X Window System display '%s'\n"
msgstr "Αποτυχία ανοίγματος οθόνης του συστήματος παραθύρων Χ '%s'\n" msgstr "Αποτυχία ανοίγματος οθόνης του συστήματος παραθύρων Χ '%s'\n"
#: ../src/core/main.c:172 #: ../src/core/main.c:176
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
msgstr "Απενεργοποίηση σύνδεσης στο διαχειριστή συνεδρίας" msgstr "Απενεργοποίηση σύνδεσης στο διαχειριστή συνεδρίας"
#: ../src/core/main.c:178 #: ../src/core/main.c:182
msgid "Replace the running window manager" msgid "Replace the running window manager"
msgstr "Αντικατάσταση του τρέχοντος διαχειριστή παραθύρων" msgstr "Αντικατάσταση του τρέχοντος διαχειριστή παραθύρων"
#: ../src/core/main.c:184 #: ../src/core/main.c:188
msgid "Specify session management ID" msgid "Specify session management ID"
msgstr "Καθορισμός αναγνωριστικού διαχείρισης συνεδρίας" msgstr "Καθορισμός αναγνωριστικού διαχείρισης συνεδρίας"
#: ../src/core/main.c:189 #: ../src/core/main.c:193
msgid "X Display to use" msgid "X Display to use"
msgstr "Εμφάνιση Χ για χρήση" msgstr "Εμφάνιση Χ για χρήση"
#: ../src/core/main.c:195 #: ../src/core/main.c:199
msgid "Initialize session from savefile" msgid "Initialize session from savefile"
msgstr "Εκκίνηση συνεδρίας από savefile" msgstr "Εκκίνηση συνεδρίας από savefile"
#: ../src/core/main.c:201 #: ../src/core/main.c:205
msgid "Make X calls synchronous" msgid "Make X calls synchronous"
msgstr "Να καταστούν σύγχρονες οι κλήσεις του X" msgstr "Να καταστούν σύγχρονες οι κλήσεις του X"
#: ../src/core/main.c:207 #: ../src/core/main.c:212
msgid "Run as a wayland compositor" msgid "Run as a wayland compositor"
msgstr "Εκτέλεση ως συνθετητής wayland" msgstr "Εκτέλεση ως συνθετητής wayland"
#: ../src/core/main.c:214 #: ../src/core/main.c:220
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Εκτέλεση ως διακομιστής πλήρους οθόνης, αντί ενσωματωμένης" msgstr "Εκτέλεση ως διακομιστής πλήρους οθόνης, αντί ενσωματωμένης"
#: ../src/core/main.c:448 #: ../src/core/main.c:459
#, c-format #, c-format
msgid "Failed to scan themes directory: %s\n" msgid "Failed to scan themes directory: %s\n"
msgstr "Αποτυχία σάρωσης καταλόγου θεμάτων: %s\n" msgstr "Αποτυχία σάρωσης καταλόγου θεμάτων: %s\n"
#: ../src/core/main.c:464 #: ../src/core/main.c:475
#, c-format #, c-format
msgid "" msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n" "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -560,17 +594,17 @@ msgstr "Εμφάνιση έκδοσης"
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "Πρόσθετα του Mutter για χρήση" msgstr "Πρόσθετα του Mutter για χρήση"
#: ../src/core/prefs.c:2086 #: ../src/core/prefs.c:2101
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Χώρος εργασίας %d" msgstr "Χώρος εργασίας %d"
#: ../src/core/screen.c:553 #: ../src/core/screen.c:548
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "Η οθόνη %d στην προβολή '%s' δεν είναι έγκυρη\n" msgstr "Η οθόνη %d στην προβολή '%s' δεν είναι έγκυρη\n"
#: ../src/core/screen.c:569 #: ../src/core/screen.c:564
#, c-format #, c-format
msgid "" msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --" "Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -580,7 +614,7 @@ msgstr ""
"προσπαθήστε να χρησιμοποιήσετε την επιλογή --replace για να αντικαταστήσετε " "προσπαθήστε να χρησιμοποιήσετε την επιλογή --replace για να αντικαταστήσετε "
"τον τρέχων διαχειριστή παραθύρων.\n" "τον τρέχων διαχειριστή παραθύρων.\n"
#: ../src/core/screen.c:662 #: ../src/core/screen.c:657
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Η οθόνη %d στην προβολή \"%s\" έχει ήδη ένα διαχειριστή παραθύρων\n" msgstr "Η οθόνη %d στην προβολή \"%s\" έχει ήδη ένα διαχειριστή παραθύρων\n"
@@ -1310,7 +1344,7 @@ msgstr ""
"εγκατάστασης&quot; και θα πρέπει να επανεκκινηθούν χειροκίνητα στην επόμενη " "εγκατάστασης&quot; και θα πρέπει να επανεκκινηθούν χειροκίνητα στην επόμενη "
"είσοδο σας." "είσοδο σας."
#: ../src/x11/window-props.c:513 #: ../src/x11/window-props.c:515
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (σε %s)" msgstr "%s (σε %s)"

1056
po/fr.po

File diff suppressed because it is too large Load Diff

206
po/gl.po
View File

@@ -14,8 +14,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gl\n" "Project-Id-Version: gl\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-07-01 21:56+0200\n" "POT-Creation-Date: 2014-08-25 22:40+0200\n"
"PO-Revision-Date: 2014-07-01 21:58+0200\n" "PO-Revision-Date: 2014-08-25 22:42+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n" "Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n" "Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\n" "Language: gl\n"
@@ -86,66 +86,94 @@ msgid "Switch applications"
msgstr "Cambiar entre aplicativos" msgstr "Cambiar entre aplicativos"
#: ../data/50-mutter-navigation.xml.in.h:16 #: ../data/50-mutter-navigation.xml.in.h:16
msgid "Switch to previous application"
msgstr "Cambiar ao aplicativo aplicativos"
#: ../data/50-mutter-navigation.xml.in.h:17
msgid "Switch windows" msgid "Switch windows"
msgstr "Cambiar xanelas" msgstr "Cambiar xanelas"
#: ../data/50-mutter-navigation.xml.in.h:17 #: ../data/50-mutter-navigation.xml.in.h:18
msgid "Switch to previous window"
msgstr "Cambiar á xanela anterior"
#: ../data/50-mutter-navigation.xml.in.h:19
msgid "Switch windows of an application" msgid "Switch windows of an application"
msgstr "Cambiar entre as xanelas dun aplicativo" msgstr "Cambiar entre as xanelas dun aplicativo"
#: ../data/50-mutter-navigation.xml.in.h:18 #: ../data/50-mutter-navigation.xml.in.h:20
msgid "Switch to previous window of an application"
msgstr "Cambia á xanela anterior dun aplicativo"
#: ../data/50-mutter-navigation.xml.in.h:21
msgid "Switch system controls" msgid "Switch system controls"
msgstr "Cambiar entre os controles do sistema" msgstr "Cambiar entre os controles do sistema"
#: ../data/50-mutter-navigation.xml.in.h:19 #: ../data/50-mutter-navigation.xml.in.h:22
msgid "Switch to previous system control"
msgstr "Cambia ao control do sistema anterior"
#: ../data/50-mutter-navigation.xml.in.h:23
msgid "Switch windows directly" msgid "Switch windows directly"
msgstr "Cambiar xanelas directamente" msgstr "Cambiar xanelas directamente"
#: ../data/50-mutter-navigation.xml.in.h:20 #: ../data/50-mutter-navigation.xml.in.h:24
msgid "Switch directly to previous window"
msgstr "Cambia directamente á xanela anterior"
#: ../data/50-mutter-navigation.xml.in.h:25
msgid "Switch windows of an app directly" msgid "Switch windows of an app directly"
msgstr "Cambiar entre as xanelas dun aplicativo directamente" msgstr "Cambiar entre as xanelas dun aplicativo directamente"
#: ../data/50-mutter-navigation.xml.in.h:21 #: ../data/50-mutter-navigation.xml.in.h:26
msgid "Switch directly to previous window of an app"
msgstr "Cambia directamente á xanela anterior do aplicativo"
#: ../data/50-mutter-navigation.xml.in.h:27
msgid "Switch system controls directly" msgid "Switch system controls directly"
msgstr "Cambiar entre os controles do sistema directamente" msgstr "Cambiar entre os controles do sistema directamente"
#: ../data/50-mutter-navigation.xml.in.h:22 #: ../data/50-mutter-navigation.xml.in.h:28
msgid "Switch directly to previous system control"
msgstr "Cambiar directamente ao control do sistema anterior"
#: ../data/50-mutter-navigation.xml.in.h:29
msgid "Hide all normal windows" msgid "Hide all normal windows"
msgstr "Ocultar todas as xanelas normais" msgstr "Ocultar todas as xanelas normais"
#: ../data/50-mutter-navigation.xml.in.h:23 #: ../data/50-mutter-navigation.xml.in.h:30
msgid "Switch to workspace 1" msgid "Switch to workspace 1"
msgstr "Cambiar ao espazo de traballo 1" msgstr "Cambiar ao espazo de traballo 1"
#: ../data/50-mutter-navigation.xml.in.h:24 #: ../data/50-mutter-navigation.xml.in.h:31
msgid "Switch to workspace 2" msgid "Switch to workspace 2"
msgstr "Cambiar ao espazo de traballo 2" msgstr "Cambiar ao espazo de traballo 2"
#: ../data/50-mutter-navigation.xml.in.h:25 #: ../data/50-mutter-navigation.xml.in.h:32
msgid "Switch to workspace 3" msgid "Switch to workspace 3"
msgstr "Cambiar ao espazo de traballo 3" msgstr "Cambiar ao espazo de traballo 3"
#: ../data/50-mutter-navigation.xml.in.h:26 #: ../data/50-mutter-navigation.xml.in.h:33
msgid "Switch to workspace 4" msgid "Switch to workspace 4"
msgstr "Cambiar ao espazo de traballo 4" msgstr "Cambiar ao espazo de traballo 4"
#: ../data/50-mutter-navigation.xml.in.h:27 #: ../data/50-mutter-navigation.xml.in.h:34
msgid "Switch to last workspace" msgid "Switch to last workspace"
msgstr "Cambiar ao último espazo de traballo" msgstr "Cambiar ao último espazo de traballo"
#: ../data/50-mutter-navigation.xml.in.h:28 #: ../data/50-mutter-navigation.xml.in.h:35
msgid "Move to workspace left" msgid "Move to workspace left"
msgstr "Mover ao espazo da esquerda" msgstr "Mover ao espazo da esquerda"
#: ../data/50-mutter-navigation.xml.in.h:29 #: ../data/50-mutter-navigation.xml.in.h:36
msgid "Move to workspace right" msgid "Move to workspace right"
msgstr "Mover ao espazo da dereita" msgstr "Mover ao espazo da dereita"
#: ../data/50-mutter-navigation.xml.in.h:30 #: ../data/50-mutter-navigation.xml.in.h:37
msgid "Move to workspace above" msgid "Move to workspace above"
msgstr "Mover ao espazo de arriba" msgstr "Mover ao espazo de arriba"
#: ../data/50-mutter-navigation.xml.in.h:31 #: ../data/50-mutter-navigation.xml.in.h:38
msgid "Move to workspace below" msgid "Move to workspace below"
msgstr "Mover ao espazo de traballo de abaixo" msgstr "Mover ao espazo de traballo de abaixo"
@@ -434,7 +462,7 @@ msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:464 #: ../src/compositor/compositor.c:441
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display \"%s" "Another compositing manager is already running on screen %i on display \"%s"
@@ -443,24 +471,24 @@ msgstr ""
"Xa se está a executar outro xestor de composición na pantalla %i na " "Xa se está a executar outro xestor de composición na pantalla %i na "
"visualización «%s»" "visualización «%s»"
#: ../src/compositor/meta-background.c:990 #: ../src/compositor/meta-background.c:1044
msgid "background texture could not be created from file" msgid "background texture could not be created from file"
msgstr "a textura do fondo non puido crearse desde o ficheiro" msgstr "a textura do fondo non puido crearse desde o ficheiro"
#: ../src/core/bell.c:215 #: ../src/core/bell.c:185
msgid "Bell event" msgid "Bell event"
msgstr "Evento de campá" msgstr "Evento de campá"
#: ../src/core/delete.c:129 #: ../src/core/delete.c:127
#, c-format #, c-format
msgid "“%s” is not responding." msgid "“%s” is not responding."
msgstr "«%s» non está respondendo." msgstr "«%s» non está respondendo."
#: ../src/core/delete.c:131 #: ../src/core/delete.c:129
msgid "Application is not responding." msgid "Application is not responding."
msgstr "O Aplicativo non está respondendo." msgstr "O Aplicativo non está respondendo."
#: ../src/core/delete.c:136 #: ../src/core/delete.c:134
msgid "" msgid ""
"You may choose to wait a short while for it to continue or force the " "You may choose to wait a short while for it to continue or force the "
"application to quit entirely." "application to quit entirely."
@@ -468,57 +496,57 @@ msgstr ""
"Pode elixir esperar un momento para ver se continúa ou forzar ao aplicativo " "Pode elixir esperar un momento para ver se continúa ou forzar ao aplicativo "
"a pechar completamente." "a pechar completamente."
#: ../src/core/delete.c:143 #: ../src/core/delete.c:141
msgid "_Wait" msgid "_Wait"
msgstr "Espe_rar" msgstr "Espe_rar"
#: ../src/core/delete.c:143 #: ../src/core/delete.c:141
msgid "_Force Quit" msgid "_Force Quit"
msgstr "_Forzar a saída" msgstr "_Forzar a saída"
#: ../src/core/display.c:448 #: ../src/core/display.c:547
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" 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" msgstr "Produciuse un erro ao abrir a visualización do X Window System «%s»\n"
#: ../src/core/main.c:172 #: ../src/core/main.c:176
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
msgstr "Desactivar a conexión ao xestor de sesión" msgstr "Desactivar a conexión ao xestor de sesión"
#: ../src/core/main.c:178 #: ../src/core/main.c:182
msgid "Replace the running window manager" msgid "Replace the running window manager"
msgstr "Substituír o xestor de xanelas en execución" msgstr "Substituír o xestor de xanelas en execución"
#: ../src/core/main.c:184 #: ../src/core/main.c:188
msgid "Specify session management ID" msgid "Specify session management ID"
msgstr "Especificar o ID de xestión de sesión" msgstr "Especificar o ID de xestión de sesión"
#: ../src/core/main.c:189 #: ../src/core/main.c:193
msgid "X Display to use" msgid "X Display to use"
msgstr "Pantalla X que se vai usar" msgstr "Pantalla X que se vai usar"
#: ../src/core/main.c:195 #: ../src/core/main.c:199
msgid "Initialize session from savefile" msgid "Initialize session from savefile"
msgstr "Inicializar sesión desde o ficheiro de salvagarda" msgstr "Inicializar sesión desde o ficheiro de salvagarda"
#: ../src/core/main.c:201 #: ../src/core/main.c:205
msgid "Make X calls synchronous" msgid "Make X calls synchronous"
msgstr "Facer que as chamadas a X sexan sincrónicas" msgstr "Facer que as chamadas a X sexan sincrónicas"
#: ../src/core/main.c:207 #: ../src/core/main.c:212
msgid "Run as a wayland compositor" msgid "Run as a wayland compositor"
msgstr "Executar como compositor de wayland" msgstr "Executar como compositor de wayland"
#: ../src/core/main.c:214 #: ../src/core/main.c:220
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Executar como un servidor de pantalla completo, fronte a un aniñado" msgstr "Executar como un servidor de pantalla completo, fronte a un aniñado"
#: ../src/core/main.c:448 #: ../src/core/main.c:459
#, c-format #, c-format
msgid "Failed to scan themes directory: %s\n" msgid "Failed to scan themes directory: %s\n"
msgstr "Produciuse un erro ao dixitalizar o directorio de temas: %s\n" msgstr "Produciuse un erro ao dixitalizar o directorio de temas: %s\n"
#: ../src/core/main.c:464 #: ../src/core/main.c:475
#, c-format #, c-format
msgid "" msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n" "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -549,17 +577,17 @@ msgstr "Imprimir versión"
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "Engadido de mutter que usar" msgstr "Engadido de mutter que usar"
#: ../src/core/prefs.c:2086 #: ../src/core/prefs.c:2101
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Espazo de traballo %d" msgstr "Espazo de traballo %d"
#: ../src/core/screen.c:539 #: ../src/core/screen.c:548
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "A pantalla %d na visualización «%s» non é válida\n" msgstr "A pantalla %d na visualización «%s» non é válida\n"
#: ../src/core/screen.c:555 #: ../src/core/screen.c:564
#, c-format #, c-format
msgid "" msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --" "Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -568,7 +596,7 @@ msgstr ""
"A visualización %d na pantalla «%s» ten xa un xestor de xanelas, tente usar " "A visualización %d na pantalla «%s» ten xa un xestor de xanelas, tente usar "
"a opción --replace para substituír o xestor de xanelas.\n" "a opción --replace para substituír o xestor de xanelas.\n"
#: ../src/core/screen.c:660 #: ../src/core/screen.c:657
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "A visualización %d na pantalla «%s» ten xa un xestor de xanelas\n" msgstr "A visualización %d na pantalla «%s» ten xa un xestor de xanelas\n"
@@ -585,48 +613,48 @@ msgstr "Mutter foi compilado sen compatibilidade para o modo detallado\n"
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
#: ../src/ui/theme.c:232 #: ../src/ui/theme.c:233
msgid "top" msgid "top"
msgstr "superior" msgstr "superior"
#: ../src/ui/theme.c:234 #: ../src/ui/theme.c:235
msgid "bottom" msgid "bottom"
msgstr "inferior" msgstr "inferior"
#: ../src/ui/theme.c:236 #: ../src/ui/theme.c:237
msgid "left" msgid "left"
msgstr "esquerda" msgstr "esquerda"
#: ../src/ui/theme.c:238 #: ../src/ui/theme.c:239
msgid "right" msgid "right"
msgstr "dereita" msgstr "dereita"
#: ../src/ui/theme.c:266 #: ../src/ui/theme.c:267
#, c-format #, c-format
msgid "frame geometry does not specify \"%s\" dimension" msgid "frame geometry does not specify \"%s\" dimension"
msgstr "a xeometría do marco non especifica a dimensión «%s»" msgstr "a xeometría do marco non especifica a dimensión «%s»"
#: ../src/ui/theme.c:285 #: ../src/ui/theme.c:286
#, c-format #, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "a xeometría do marco non especifica a dimensión «%s» para o bordo «%s»" msgstr "a xeometría do marco non especifica a dimensión «%s» para o bordo «%s»"
#: ../src/ui/theme.c:322 #: ../src/ui/theme.c:323
#, c-format #, c-format
msgid "Button aspect ratio %g is not reasonable" msgid "Button aspect ratio %g is not reasonable"
msgstr "A proporción de aspecto do botón %g non é razoábel" msgstr "A proporción de aspecto do botón %g non é razoábel"
#: ../src/ui/theme.c:334 #: ../src/ui/theme.c:335
#, c-format #, c-format
msgid "Frame geometry does not specify size of buttons" msgid "Frame geometry does not specify size of buttons"
msgstr "A xeometría do marco non especifica o tamaño dos botóns" msgstr "A xeometría do marco non especifica o tamaño dos botóns"
#: ../src/ui/theme.c:1060 #: ../src/ui/theme.c:1061
#, c-format #, c-format
msgid "Gradients should have at least two colors" msgid "Gradients should have at least two colors"
msgstr "As gradacións deben ter polo menos dúas cores" msgstr "As gradacións deben ter polo menos dúas cores"
#: ../src/ui/theme.c:1210 #: ../src/ui/theme.c:1211
#, c-format #, c-format
msgid "" msgid ""
"GTK custom color specification must have color name and fallback in " "GTK custom color specification must have color name and fallback in "
@@ -636,7 +664,7 @@ msgstr ""
"entre parénteses, por exemplo: gtk:custom(foo,bar); non foi posíbel analizar " "entre parénteses, por exemplo: gtk:custom(foo,bar); non foi posíbel analizar "
"«%s»." "«%s»."
#: ../src/ui/theme.c:1226 #: ../src/ui/theme.c:1227
#, c-format #, c-format
msgid "" msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
@@ -645,7 +673,7 @@ msgstr ""
"O carácter «%c» non é válido no parámetro «color_name» de «gtk:custom», só " "O carácter «%c» non é válido no parámetro «color_name» de «gtk:custom», só "
"«A-Za-z0-9» son válidos" "«A-Za-z0-9» son válidos"
#: ../src/ui/theme.c:1240 #: ../src/ui/theme.c:1241
#, c-format #, c-format
msgid "" msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
@@ -654,7 +682,7 @@ msgstr ""
"O formato de «gtk:custom» é «gtk:custom(nome_de_cor,nome_alternativo», «%s» " "O formato de «gtk:custom» é «gtk:custom(nome_de_cor,nome_alternativo», «%s» "
"non respecta o formato" "non respecta o formato"
#: ../src/ui/theme.c:1285 #: ../src/ui/theme.c:1286
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@@ -663,7 +691,7 @@ msgstr ""
"A especificación de cor do GTK debe ter o estado entre parénteses, exemplo. " "A especificación de cor do GTK debe ter o estado entre parénteses, exemplo. "
"gtk:fg[NORMAL] onde NORMAL é o estado; non foi posíbel analizar «%s»" "gtk:fg[NORMAL] onde NORMAL é o estado; non foi posíbel analizar «%s»"
#: ../src/ui/theme.c:1299 #: ../src/ui/theme.c:1300
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:" "GTK color specification must have a close bracket after the state, e.g. gtk:"
@@ -673,17 +701,17 @@ msgstr ""
"estado, exemplo. gtk:fg[NORMAL] onde NORMAL é o estado; non foi posíbel " "estado, exemplo. gtk:fg[NORMAL] onde NORMAL é o estado; non foi posíbel "
"analizar «%s»" "analizar «%s»"
#: ../src/ui/theme.c:1310 #: ../src/ui/theme.c:1311
#, c-format #, c-format
msgid "Did not understand state \"%s\" in color specification" msgid "Did not understand state \"%s\" in color specification"
msgstr "Non se entende o estado «%s» na especificación da cor" msgstr "Non se entende o estado «%s» na especificación da cor"
#: ../src/ui/theme.c:1323 #: ../src/ui/theme.c:1324
#, c-format #, c-format
msgid "Did not understand color component \"%s\" in color specification" msgid "Did not understand color component \"%s\" in color specification"
msgstr "Non se entende o compoñente de cor «%s» na especificación da cor" msgstr "Non se entende o compoñente de cor «%s» na especificación da cor"
#: ../src/ui/theme.c:1351 #: ../src/ui/theme.c:1352
#, c-format #, c-format
msgid "" msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@@ -692,17 +720,17 @@ msgstr ""
"O formato de blend é «blend/bg_color/fg_color/alpha», «%s»non coincide co " "O formato de blend é «blend/bg_color/fg_color/alpha», «%s»non coincide co "
"formato" "formato"
#: ../src/ui/theme.c:1362 #: ../src/ui/theme.c:1363
#, c-format #, c-format
msgid "Could not parse alpha value \"%s\" in blended color" msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Non foi posíbel analizar o valor alfa «%s» na cor mesturada" msgstr "Non foi posíbel analizar o valor alfa «%s» na cor mesturada"
#: ../src/ui/theme.c:1372 #: ../src/ui/theme.c:1373
#, c-format #, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "O valor alfa «%s» na cor mesturada non está entre 0.0 e 1.0" msgstr "O valor alfa «%s» na cor mesturada non está entre 0.0 e 1.0"
#: ../src/ui/theme.c:1418 #: ../src/ui/theme.c:1419
#, c-format #, c-format
msgid "" msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
@@ -710,28 +738,28 @@ msgstr ""
"O formato de sombreado é \"shade/base_color/factor\", «%s» non coincide co " "O formato de sombreado é \"shade/base_color/factor\", «%s» non coincide co "
"formato" "formato"
#: ../src/ui/theme.c:1429 #: ../src/ui/theme.c:1430
#, c-format #, c-format
msgid "Could not parse shade factor \"%s\" in shaded color" msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Non foi posíbel analizar o factor de sombreado «%s» na cor sombreada" msgstr "Non foi posíbel analizar o factor de sombreado «%s» na cor sombreada"
#: ../src/ui/theme.c:1439 #: ../src/ui/theme.c:1440
#, c-format #, c-format
msgid "Shade factor \"%s\" in shaded color is negative" msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "O factor de sombreado «%s» na cor sombreada é negativo" msgstr "O factor de sombreado «%s» na cor sombreada é negativo"
#: ../src/ui/theme.c:1468 #: ../src/ui/theme.c:1469
#, c-format #, c-format
msgid "Could not parse color \"%s\"" msgid "Could not parse color \"%s\""
msgstr "Non foi posíbel analizar a cor «%s»" msgstr "Non foi posíbel analizar a cor «%s»"
#: ../src/ui/theme.c:1777 #: ../src/ui/theme.c:1778
#, c-format #, c-format
msgid "Coordinate expression contains character '%s' which is not allowed" msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "" msgstr ""
"A expresión de coordenadas contén un carácter «%s» que non está permitido" "A expresión de coordenadas contén un carácter «%s» que non está permitido"
#: ../src/ui/theme.c:1804 #: ../src/ui/theme.c:1805
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contains floating point number '%s' which could not be " "Coordinate expression contains floating point number '%s' which could not be "
@@ -740,14 +768,14 @@ msgstr ""
"A expresión de coordenadas contén un número de coma flotante «%s» que non " "A expresión de coordenadas contén un número de coma flotante «%s» que non "
"foi posíbel analizar" "foi posíbel analizar"
#: ../src/ui/theme.c:1818 #: ../src/ui/theme.c:1819
#, c-format #, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed" msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "" msgstr ""
"A expresión de coordenadas contén un enteiro «%s» que non foi posíbel " "A expresión de coordenadas contén un enteiro «%s» que non foi posíbel "
"analizar" "analizar"
#: ../src/ui/theme.c:1939 #: ../src/ui/theme.c:1940
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contained unknown operator at the start of this text: " "Coordinate expression contained unknown operator at the start of this text: "
@@ -756,17 +784,17 @@ msgstr ""
"A expresión de coordenadas contén un operador non válido ao inicio do seu " "A expresión de coordenadas contén un operador non válido ao inicio do seu "
"texto: «%s»" "texto: «%s»"
#: ../src/ui/theme.c:1996 #: ../src/ui/theme.c:1997
#, c-format #, c-format
msgid "Coordinate expression was empty or not understood" msgid "Coordinate expression was empty or not understood"
msgstr "A expresión de coordenadas está baleira ou non se entendeu" msgstr "A expresión de coordenadas está baleira ou non se entendeu"
#: ../src/ui/theme.c:2109 ../src/ui/theme.c:2119 ../src/ui/theme.c:2153 #: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
#, c-format #, c-format
msgid "Coordinate expression results in division by zero" msgid "Coordinate expression results in division by zero"
msgstr "A expresión de coordenadas resultou nun erro de división por cero" msgstr "A expresión de coordenadas resultou nun erro de división por cero"
#: ../src/ui/theme.c:2161 #: ../src/ui/theme.c:2162
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression tries to use mod operator on a floating-point number" "Coordinate expression tries to use mod operator on a floating-point number"
@@ -774,25 +802,25 @@ msgstr ""
"A expresión de coordenadas tentou usar un operador mod cun número de coma " "A expresión de coordenadas tentou usar un operador mod cun número de coma "
"flotante" "flotante"
#: ../src/ui/theme.c:2217 #: ../src/ui/theme.c:2218
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected" "Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "" msgstr ""
"A expresión de coordenadas ten un operador «%s» onde se esperaba un operando" "A expresión de coordenadas ten un operador «%s» onde se esperaba un operando"
#: ../src/ui/theme.c:2226 #: ../src/ui/theme.c:2227
#, c-format #, c-format
msgid "Coordinate expression had an operand where an operator was expected" msgid "Coordinate expression had an operand where an operator was expected"
msgstr "" msgstr ""
"A expresión de coordenadas ten un operando onde se esperaba un operador" "A expresión de coordenadas ten un operando onde se esperaba un operador"
#: ../src/ui/theme.c:2234 #: ../src/ui/theme.c:2235
#, c-format #, c-format
msgid "Coordinate expression ended with an operator instead of an operand" msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "A expresión de coordenadas remata cun operador en vez dun operando" msgstr "A expresión de coordenadas remata cun operador en vez dun operando"
#: ../src/ui/theme.c:2244 #: ../src/ui/theme.c:2245
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no " "Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@@ -801,42 +829,42 @@ msgstr ""
"A expresión de coordenadas ten un operador \"%c\" seguido do operador \"%c\" " "A expresión de coordenadas ten un operador \"%c\" seguido do operador \"%c\" "
"sen un operando entre eles" "sen un operando entre eles"
#: ../src/ui/theme.c:2395 ../src/ui/theme.c:2440 #: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
#, c-format #, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\"" msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "" msgstr ""
"A expresión de coordenadas ten unha variábel ou constante descoñecida «%s»" "A expresión de coordenadas ten unha variábel ou constante descoñecida «%s»"
#: ../src/ui/theme.c:2494 #: ../src/ui/theme.c:2495
#, c-format #, c-format
msgid "Coordinate expression parser overflowed its buffer." msgid "Coordinate expression parser overflowed its buffer."
msgstr "O analizador da expresión de coordenadas desbordou o seu búfer." msgstr "O analizador da expresión de coordenadas desbordou o seu búfer."
#: ../src/ui/theme.c:2523 #: ../src/ui/theme.c:2524
#, c-format #, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis" msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "" msgstr ""
"A expresión de coordenadas ten unha paréntese pechada sen unha paréntese " "A expresión de coordenadas ten unha paréntese pechada sen unha paréntese "
"aberta" "aberta"
#: ../src/ui/theme.c:2587 #: ../src/ui/theme.c:2588
#, c-format #, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis" msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "" msgstr ""
"A expresión de coordenadas ten unha paréntese aberta sen unha paréntese " "A expresión de coordenadas ten unha paréntese aberta sen unha paréntese "
"pechada" "pechada"
#: ../src/ui/theme.c:2598 #: ../src/ui/theme.c:2599
#, c-format #, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands" msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "A expresión de coordenadas non parece ter nin operadores nin operandos" msgstr "A expresión de coordenadas non parece ter nin operadores nin operandos"
#: ../src/ui/theme.c:2811 ../src/ui/theme.c:2831 ../src/ui/theme.c:2851 #: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
#, c-format #, c-format
msgid "Theme contained an expression that resulted in an error: %s\n" msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "O tema contiña unha expresión que resultou ser un erro: %s\n" msgstr "O tema contiña unha expresión que resultou ser un erro: %s\n"
#: ../src/ui/theme.c:4466 #: ../src/ui/theme.c:4455
#, c-format #, c-format
msgid "" msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@@ -845,24 +873,24 @@ msgstr ""
"<button function=«%s» state=«%s» draw_ops=\"whatever\"/> débese especificar " "<button function=«%s» state=«%s» draw_ops=\"whatever\"/> débese especificar "
"para este estilo de marco" "para este estilo de marco"
#: ../src/ui/theme.c:4981 ../src/ui/theme.c:5006 #: ../src/ui/theme.c:4970 ../src/ui/theme.c:4995
#, c-format #, c-format
msgid "" msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr "Falta <frame state=«%s» resize=«%s» focus=«%s» style=\"whatever\"/>" msgstr "Falta <frame state=«%s» resize=«%s» focus=«%s» style=\"whatever\"/>"
#: ../src/ui/theme.c:5052 #: ../src/ui/theme.c:5041
#, c-format #, c-format
msgid "Failed to load theme \"%s\": %s\n" msgid "Failed to load theme \"%s\": %s\n"
msgstr "Produciuse un erro ao cargar o tema «%s»: %s\n" msgstr "Produciuse un erro ao cargar o tema «%s»: %s\n"
#: ../src/ui/theme.c:5188 ../src/ui/theme.c:5195 ../src/ui/theme.c:5202 #: ../src/ui/theme.c:5177 ../src/ui/theme.c:5184 ../src/ui/theme.c:5191
#: ../src/ui/theme.c:5209 ../src/ui/theme.c:5216 #: ../src/ui/theme.c:5198 ../src/ui/theme.c:5205
#, c-format #, c-format
msgid "No <%s> set for theme \"%s\"" msgid "No <%s> set for theme \"%s\""
msgstr "Non se configurou <%s> para o tema «%s»" msgstr "Non se configurou <%s> para o tema «%s»"
#: ../src/ui/theme.c:5224 #: ../src/ui/theme.c:5213
#, c-format #, c-format
msgid "" msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window " "No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@@ -871,7 +899,7 @@ msgstr ""
"Non hai un estilo de marco para o tipo de xanela «%s» no tema «%s», engada " "Non hai un estilo de marco para o tipo de xanela «%s» no tema «%s», engada "
"un elemento <window type=«%s» style_set=\"whatever\"/>" "un elemento <window type=«%s» style_set=\"whatever\"/>"
#: ../src/ui/theme.c:5631 ../src/ui/theme.c:5693 ../src/ui/theme.c:5756 #: ../src/ui/theme.c:5620 ../src/ui/theme.c:5682 ../src/ui/theme.c:5745
#, c-format #, c-format
msgid "" msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not" "User-defined constants must begin with a capital letter; \"%s\" does not"
@@ -879,7 +907,7 @@ msgstr ""
"As constantes definidas polo usuario deben comezar cunha letra maiúscula; " "As constantes definidas polo usuario deben comezar cunha letra maiúscula; "
"«%s» non o fai" "«%s» non o fai"
#: ../src/ui/theme.c:5639 ../src/ui/theme.c:5701 ../src/ui/theme.c:5764 #: ../src/ui/theme.c:5628 ../src/ui/theme.c:5690 ../src/ui/theme.c:5753
#, c-format #, c-format
msgid "Constant \"%s\" has already been defined" msgid "Constant \"%s\" has already been defined"
msgstr "A constante «%s» xa foi definida" msgstr "A constante «%s» xa foi definida"
@@ -1279,7 +1307,7 @@ msgstr ""
"Estas xanelas non soportan &quot;save current setup&quot; e terán que " "Estas xanelas non soportan &quot;save current setup&quot; e terán que "
"reiniciarse manualmente a próxima vez que inicie a sesión." "reiniciarse manualmente a próxima vez que inicie a sesión."
#: ../src/x11/window-props.c:465 #: ../src/x11/window-props.c:515
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (en %s)" msgstr "%s (en %s)"

880
po/he.po

File diff suppressed because it is too large Load Diff

100
po/nb.po
View File

@@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter 3.13.x\n" "Project-Id-Version: mutter 3.13.x\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-07-23 15:01+0200\n" "POT-Creation-Date: 2014-08-23 13:36+0200\n"
"PO-Revision-Date: 2014-07-23 15:02+0200\n" "PO-Revision-Date: 2014-08-23 13:37+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n" "Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
"Language: \n" "Language: \n"
@@ -76,66 +76,94 @@ msgid "Switch applications"
msgstr "Bytt programmer" msgstr "Bytt programmer"
#: ../data/50-mutter-navigation.xml.in.h:16 #: ../data/50-mutter-navigation.xml.in.h:16
msgid "Switch to previous application"
msgstr "Bytt til forrige program"
#: ../data/50-mutter-navigation.xml.in.h:17
msgid "Switch windows" msgid "Switch windows"
msgstr "Bytt vinduer" msgstr "Bytt vinduer"
#: ../data/50-mutter-navigation.xml.in.h:17 #: ../data/50-mutter-navigation.xml.in.h:18
msgid "Switch to previous window"
msgstr "Bytt forrige vindu"
#: ../data/50-mutter-navigation.xml.in.h:19
msgid "Switch windows of an application" msgid "Switch windows of an application"
msgstr "Bytt mellom et programs vinduer" msgstr "Bytt mellom et programs vinduer"
#: ../data/50-mutter-navigation.xml.in.h:18 #: ../data/50-mutter-navigation.xml.in.h:20
msgid "Switch to previous window of an application"
msgstr "Bytt til forrige vindu i et program"
#: ../data/50-mutter-navigation.xml.in.h:21
msgid "Switch system controls" msgid "Switch system controls"
msgstr "Bytt systemkontroller" msgstr "Bytt systemkontroller"
#: ../data/50-mutter-navigation.xml.in.h:19 #: ../data/50-mutter-navigation.xml.in.h:22
msgid "Switch to previous system control"
msgstr "Bytt til forrige systemkontroll"
#: ../data/50-mutter-navigation.xml.in.h:23
msgid "Switch windows directly" msgid "Switch windows directly"
msgstr "Bytt vinduer direkte" msgstr "Bytt vinduer direkte"
#: ../data/50-mutter-navigation.xml.in.h:20 #: ../data/50-mutter-navigation.xml.in.h:24
msgid "Switch directly to previous window"
msgstr "Bytt direkte til forrige vindu"
#: ../data/50-mutter-navigation.xml.in.h:25
msgid "Switch windows of an app directly" msgid "Switch windows of an app directly"
msgstr "Bytt mellom et programs vinduer direkte" msgstr "Bytt mellom et programs vinduer direkte"
#: ../data/50-mutter-navigation.xml.in.h:21 #: ../data/50-mutter-navigation.xml.in.h:26
msgid "Switch directly to previous window of an app"
msgstr "Bytt direkte til forrive vindu i et program"
#: ../data/50-mutter-navigation.xml.in.h:27
msgid "Switch system controls directly" msgid "Switch system controls directly"
msgstr "Bytt systemkontroller direkte" msgstr "Bytt systemkontroller direkte"
#: ../data/50-mutter-navigation.xml.in.h:22 #: ../data/50-mutter-navigation.xml.in.h:28
msgid "Switch directly to previous system control"
msgstr "Bytt direkte til forrige systemkontroll"
#: ../data/50-mutter-navigation.xml.in.h:29
msgid "Hide all normal windows" msgid "Hide all normal windows"
msgstr "Skjul alle normale vinduer" msgstr "Skjul alle normale vinduer"
#: ../data/50-mutter-navigation.xml.in.h:23 #: ../data/50-mutter-navigation.xml.in.h:30
msgid "Switch to workspace 1" msgid "Switch to workspace 1"
msgstr "Bytt til arbeidsområde 1" msgstr "Bytt til arbeidsområde 1"
#: ../data/50-mutter-navigation.xml.in.h:24 #: ../data/50-mutter-navigation.xml.in.h:31
msgid "Switch to workspace 2" msgid "Switch to workspace 2"
msgstr "Bytt til arbeidsområde 2" msgstr "Bytt til arbeidsområde 2"
#: ../data/50-mutter-navigation.xml.in.h:25 #: ../data/50-mutter-navigation.xml.in.h:32
msgid "Switch to workspace 3" msgid "Switch to workspace 3"
msgstr "Bytt til arbeidsområde 3" msgstr "Bytt til arbeidsområde 3"
#: ../data/50-mutter-navigation.xml.in.h:26 #: ../data/50-mutter-navigation.xml.in.h:33
msgid "Switch to workspace 4" msgid "Switch to workspace 4"
msgstr "Bytt til arbeidsområde 4" msgstr "Bytt til arbeidsområde 4"
#: ../data/50-mutter-navigation.xml.in.h:27 #: ../data/50-mutter-navigation.xml.in.h:34
msgid "Switch to last workspace" msgid "Switch to last workspace"
msgstr "Bytt til siste arbeidsområde" msgstr "Bytt til siste arbeidsområde"
#: ../data/50-mutter-navigation.xml.in.h:28 #: ../data/50-mutter-navigation.xml.in.h:35
msgid "Move to workspace left" msgid "Move to workspace left"
msgstr "Flytt til arbeidsområdet til venstre" msgstr "Flytt til arbeidsområdet til venstre"
#: ../data/50-mutter-navigation.xml.in.h:29 #: ../data/50-mutter-navigation.xml.in.h:36
msgid "Move to workspace right" msgid "Move to workspace right"
msgstr "Flytt til arbeidsområdet til høyre" msgstr "Flytt til arbeidsområdet til høyre"
#: ../data/50-mutter-navigation.xml.in.h:30 #: ../data/50-mutter-navigation.xml.in.h:37
msgid "Move to workspace above" msgid "Move to workspace above"
msgstr "Flytt til arbeidsområdet over" msgstr "Flytt til arbeidsområdet over"
#: ../data/50-mutter-navigation.xml.in.h:31 #: ../data/50-mutter-navigation.xml.in.h:38
msgid "Move to workspace below" msgid "Move to workspace below"
msgstr "Flytt til arbeidsområdet under" msgstr "Flytt til arbeidsområdet under"
@@ -417,18 +445,18 @@ msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:445 #: ../src/compositor/compositor.c:441
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display \"%s" "Another compositing manager is already running on screen %i on display \"%s"
"\"." "\"."
msgstr "En annen compositing manager kjører skjerm %i på display «%s»." msgstr "En annen compositing manager kjører skjerm %i på display «%s»."
#: ../src/compositor/meta-background.c:990 #: ../src/compositor/meta-background.c:1044
msgid "background texture could not be created from file" msgid "background texture could not be created from file"
msgstr "bakgrunnstekstur kunne ikke lages fra fil" msgstr "bakgrunnstekstur kunne ikke lages fra fil"
#: ../src/core/bell.c:215 #: ../src/core/bell.c:185
msgid "Bell event" msgid "Bell event"
msgstr "Klokkehendelse" msgstr "Klokkehendelse"
@@ -457,49 +485,49 @@ msgstr "_Vent"
msgid "_Force Quit" msgid "_Force Quit"
msgstr "_Tvungen nedstenging" msgstr "_Tvungen nedstenging"
#: ../src/core/display.c:519 #: ../src/core/display.c:547
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" msgid "Failed to open X Window System display '%s'\n"
msgstr "Feil under åpning av X Window System skjerm «%s»\n" msgstr "Feil under åpning av X Window System skjerm «%s»\n"
#: ../src/core/main.c:172 #: ../src/core/main.c:176
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
msgstr "Deaktiver tilkobling til sesjonshåndtereren" msgstr "Deaktiver tilkobling til sesjonshåndtereren"
#: ../src/core/main.c:178 #: ../src/core/main.c:182
msgid "Replace the running window manager" msgid "Replace the running window manager"
msgstr "Erstatt kjørende vindushåndterer" msgstr "Erstatt kjørende vindushåndterer"
#: ../src/core/main.c:184 #: ../src/core/main.c:188
msgid "Specify session management ID" msgid "Specify session management ID"
msgstr "Oppgi sesjonshåndterings-ID" msgstr "Oppgi sesjonshåndterings-ID"
#: ../src/core/main.c:189 #: ../src/core/main.c:193
msgid "X Display to use" msgid "X Display to use"
msgstr "X-skjerm som skal brukes" msgstr "X-skjerm som skal brukes"
#: ../src/core/main.c:195 #: ../src/core/main.c:199
msgid "Initialize session from savefile" msgid "Initialize session from savefile"
msgstr "Initier sesjonen fra en lagret fil" msgstr "Initier sesjonen fra en lagret fil"
#: ../src/core/main.c:201 #: ../src/core/main.c:205
msgid "Make X calls synchronous" msgid "Make X calls synchronous"
msgstr "Gjør X-kall synkrone" msgstr "Gjør X-kall synkrone"
#: ../src/core/main.c:207 #: ../src/core/main.c:212
msgid "Run as a wayland compositor" msgid "Run as a wayland compositor"
msgstr "Kjør som en wayland-kompositør" msgstr "Kjør som en wayland-kompositør"
#: ../src/core/main.c:214 #: ../src/core/main.c:220
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Kjør som en full skjermtjener, heller enn nøstet" msgstr "Kjør som en full skjermtjener, heller enn nøstet"
#: ../src/core/main.c:450 #: ../src/core/main.c:459
#, c-format #, c-format
msgid "Failed to scan themes directory: %s\n" msgid "Failed to scan themes directory: %s\n"
msgstr "Feil under søk i temakatalog: %s\n" msgstr "Feil under søk i temakatalog: %s\n"
#: ../src/core/main.c:466 #: ../src/core/main.c:475
#, c-format #, c-format
msgid "" msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n" "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -529,17 +557,17 @@ msgstr "Skriv versjonsnummer"
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "Mutter-tillegg som skal brukes" msgstr "Mutter-tillegg som skal brukes"
#: ../src/core/prefs.c:2086 #: ../src/core/prefs.c:2101
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Arbeidsområde %d" msgstr "Arbeidsområde %d"
#: ../src/core/screen.c:553 #: ../src/core/screen.c:548
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skjerm %d på display «%s» er ugyldig\n" msgstr "Skjerm %d på display «%s» er ugyldig\n"
#: ../src/core/screen.c:569 #: ../src/core/screen.c:564
#, c-format #, c-format
msgid "" msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --" "Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -548,7 +576,7 @@ msgstr ""
"Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke " "Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke "
"flagget --replace for å erstatte aktiv vindushåndterer.\n" "flagget --replace for å erstatte aktiv vindushåndterer.\n"
#: ../src/core/screen.c:662 #: ../src/core/screen.c:657
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n" msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n"
@@ -1237,7 +1265,7 @@ msgstr ""
"Disse vinduene støtter ikke &quot;lagre aktiv konfigurasjon&quot;og vil " "Disse vinduene støtter ikke &quot;lagre aktiv konfigurasjon&quot;og vil "
"måtte startes på nytt manuelt neste gang du logger inn." "måtte startes på nytt manuelt neste gang du logger inn."
#: ../src/x11/window-props.c:513 #: ../src/x11/window-props.c:515
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (på %s)" msgstr "%s (på %s)"

View File

@@ -21,8 +21,8 @@ msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-07-18 09:51+0000\n" "POT-Creation-Date: 2014-08-22 09:52+0000\n"
"PO-Revision-Date: 2014-07-18 14:53-0300\n" "PO-Revision-Date: 2014-08-22 16:18-0300\n"
"Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n" "Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n" "Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n" "Language: pt_BR\n"
@@ -53,7 +53,6 @@ msgid "Move window to workspace 4"
msgstr "Mover a janela para o espaço de trabalho 4" msgstr "Mover a janela para o espaço de trabalho 4"
#: ../data/50-mutter-navigation.xml.in.h:6 #: ../data/50-mutter-navigation.xml.in.h:6
#| msgid "Move window to workspace 1"
msgid "Move window to last workspace" msgid "Move window to last workspace"
msgstr "Mover a janela para o último espaço de trabalho" msgstr "Mover a janela para o último espaço de trabalho"
@@ -98,67 +97,100 @@ msgid "Switch applications"
msgstr "Alternar aplicativos" msgstr "Alternar aplicativos"
#: ../data/50-mutter-navigation.xml.in.h:16 #: ../data/50-mutter-navigation.xml.in.h:16
#| msgid "Switch applications"
msgid "Switch to previous application"
msgstr "Alternar para o aplicativo anterior"
#: ../data/50-mutter-navigation.xml.in.h:17
msgid "Switch windows" msgid "Switch windows"
msgstr "Alternar janelas" msgstr "Alternar janelas"
#: ../data/50-mutter-navigation.xml.in.h:17 #: ../data/50-mutter-navigation.xml.in.h:18
#| msgid "Switch windows"
msgid "Switch to previous window"
msgstr "Alternar para a janela anterior"
#: ../data/50-mutter-navigation.xml.in.h:19
msgid "Switch windows of an application" msgid "Switch windows of an application"
msgstr "Alternar as janelas de um aplicativo" msgstr "Alternar as janelas de um aplicativo"
#: ../data/50-mutter-navigation.xml.in.h:18 #: ../data/50-mutter-navigation.xml.in.h:20
#| msgid "Switch windows of an application"
msgid "Switch to previous window of an application"
msgstr "Alternar para a janela anterior de um aplicativo"
#: ../data/50-mutter-navigation.xml.in.h:21
msgid "Switch system controls" msgid "Switch system controls"
msgstr "Alternar os controles de sistema" msgstr "Alternar os controles de sistema"
#: ../data/50-mutter-navigation.xml.in.h:19 #: ../data/50-mutter-navigation.xml.in.h:22
#| msgid "Switch system controls"
msgid "Switch to previous system control"
msgstr "Alternar para o controle de sistema anterior"
#: ../data/50-mutter-navigation.xml.in.h:23
msgid "Switch windows directly" msgid "Switch windows directly"
msgstr "Alternar as janelas diretamente" msgstr "Alternar as janelas diretamente"
#: ../data/50-mutter-navigation.xml.in.h:20 #: ../data/50-mutter-navigation.xml.in.h:24
msgid "Switch directly to previous window"
msgstr "Alternar diretamente para a janela anterior"
#: ../data/50-mutter-navigation.xml.in.h:25
msgid "Switch windows of an app directly" msgid "Switch windows of an app directly"
msgstr "Alternar as janelas de um aplicativo diretamente" msgstr "Alternar as janelas de um aplicativo diretamente"
#: ../data/50-mutter-navigation.xml.in.h:21 #: ../data/50-mutter-navigation.xml.in.h:26
#| msgid "Switch windows of an application"
msgid "Switch directly to previous window of an app"
msgstr "Alternar diretamente para a janela anterior de um aplicativo"
#: ../data/50-mutter-navigation.xml.in.h:27
msgid "Switch system controls directly" msgid "Switch system controls directly"
msgstr "Alternar os controles de sistema diretamente" msgstr "Alternar os controles de sistema diretamente"
#: ../data/50-mutter-navigation.xml.in.h:22 #: ../data/50-mutter-navigation.xml.in.h:28
#| msgid "Switch system controls"
msgid "Switch directly to previous system control"
msgstr "Alternar diretamente para o controle de sistema anterior"
#: ../data/50-mutter-navigation.xml.in.h:29
msgid "Hide all normal windows" msgid "Hide all normal windows"
msgstr "Ocultar todas as janelas normais" msgstr "Ocultar todas as janelas normais"
#: ../data/50-mutter-navigation.xml.in.h:23 #: ../data/50-mutter-navigation.xml.in.h:30
msgid "Switch to workspace 1" msgid "Switch to workspace 1"
msgstr "Trocar para o espaço de trabalho 1" msgstr "Trocar para o espaço de trabalho 1"
#: ../data/50-mutter-navigation.xml.in.h:24 #: ../data/50-mutter-navigation.xml.in.h:31
msgid "Switch to workspace 2" msgid "Switch to workspace 2"
msgstr "Trocar para o espaço de trabalho 2" msgstr "Trocar para o espaço de trabalho 2"
#: ../data/50-mutter-navigation.xml.in.h:25 #: ../data/50-mutter-navigation.xml.in.h:32
msgid "Switch to workspace 3" msgid "Switch to workspace 3"
msgstr "Trocar para o espaço de trabalho 3" msgstr "Trocar para o espaço de trabalho 3"
#: ../data/50-mutter-navigation.xml.in.h:26 #: ../data/50-mutter-navigation.xml.in.h:33
msgid "Switch to workspace 4" msgid "Switch to workspace 4"
msgstr "Trocar para o espaço de trabalho 4" msgstr "Trocar para o espaço de trabalho 4"
#: ../data/50-mutter-navigation.xml.in.h:27 #: ../data/50-mutter-navigation.xml.in.h:34
#| msgid "Switch to workspace 1"
msgid "Switch to last workspace" msgid "Switch to last workspace"
msgstr "Trocar para o último espaço de trabalho" msgstr "Trocar para o último espaço de trabalho"
#: ../data/50-mutter-navigation.xml.in.h:28 #: ../data/50-mutter-navigation.xml.in.h:35
msgid "Move to workspace left" msgid "Move to workspace left"
msgstr "Move para o espaço de trabalho à esquerda" msgstr "Move para o espaço de trabalho à esquerda"
#: ../data/50-mutter-navigation.xml.in.h:29 #: ../data/50-mutter-navigation.xml.in.h:36
msgid "Move to workspace right" msgid "Move to workspace right"
msgstr "Move para o espaço de trabalho à direita" msgstr "Move para o espaço de trabalho à direita"
#: ../data/50-mutter-navigation.xml.in.h:30 #: ../data/50-mutter-navigation.xml.in.h:37
msgid "Move to workspace above" msgid "Move to workspace above"
msgstr "Mover para o espaço de trabalho acima" msgstr "Mover para o espaço de trabalho acima"
#: ../data/50-mutter-navigation.xml.in.h:31 #: ../data/50-mutter-navigation.xml.in.h:38
msgid "Move to workspace below" msgid "Move to workspace below"
msgstr "Mover para o espaço de trabalho abaixo" msgstr "Mover para o espaço de trabalho abaixo"
@@ -399,37 +431,30 @@ msgid "Cancel tab popup"
msgstr "Cancelar aba instantânea" msgstr "Cancelar aba instantânea"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
#| msgid "Switch to workspace 1"
msgid "Switch to VT 1" msgid "Switch to VT 1"
msgstr "Trocar para o VT 1" msgstr "Trocar para o VT 1"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
#| msgid "Switch to workspace 2"
msgid "Switch to VT 2" msgid "Switch to VT 2"
msgstr "Trocar para o VT 2" msgstr "Trocar para o VT 2"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
#| msgid "Switch to workspace 3"
msgid "Switch to VT 3" msgid "Switch to VT 3"
msgstr "Trocar para o VT 3" msgstr "Trocar para o VT 3"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
#| msgid "Switch to workspace 4"
msgid "Switch to VT 4" msgid "Switch to VT 4"
msgstr "Trocar para o VT 4" msgstr "Trocar para o VT 4"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
#| msgid "Switch to workspace 5"
msgid "Switch to VT 5" msgid "Switch to VT 5"
msgstr "Trocar para o VT 5" msgstr "Trocar para o VT 5"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
#| msgid "Switch to workspace 6"
msgid "Switch to VT 6" msgid "Switch to VT 6"
msgstr "Trocar para o VT 6" msgstr "Trocar para o VT 6"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7 #: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
#| msgid "Switch to workspace 7"
msgid "Switch to VT 7" msgid "Switch to VT 7"
msgstr "Trocar para o VT 7" msgstr "Trocar para o VT 7"
@@ -455,7 +480,7 @@ msgstr "%s de %s"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:445 #: ../src/compositor/compositor.c:441
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display \"%s" "Another compositing manager is already running on screen %i on display \"%s"
@@ -463,11 +488,11 @@ msgid ""
msgstr "" msgstr ""
"Outro compositor de janelas está em execução na tela %i na área \"%s\"." "Outro compositor de janelas está em execução na tela %i na área \"%s\"."
#: ../src/compositor/meta-background.c:990 #: ../src/compositor/meta-background.c:1044
msgid "background texture could not be created from file" msgid "background texture could not be created from file"
msgstr "textura de plano de fundo não pôde ser criado de arquivo" msgstr "textura de plano de fundo não pôde ser criado de arquivo"
#: ../src/core/bell.c:215 #: ../src/core/bell.c:185
msgid "Bell event" msgid "Bell event"
msgstr "Evento de som" msgstr "Evento de som"
@@ -496,49 +521,49 @@ msgstr "_Esperar"
msgid "_Force Quit" msgid "_Force Quit"
msgstr "_Forçar sair" msgstr "_Forçar sair"
#: ../src/core/display.c:519 #: ../src/core/display.c:547
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" msgid "Failed to open X Window System display '%s'\n"
msgstr "Falha ao abrir a exibição \"%s\" do sistema de janelas X\n" msgstr "Falha ao abrir a exibição \"%s\" do sistema de janelas X\n"
#: ../src/core/main.c:172 #: ../src/core/main.c:176
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
msgstr "Desabilitar a conexão com o gerenciador de sessões" msgstr "Desabilitar a conexão com o gerenciador de sessões"
#: ../src/core/main.c:178 #: ../src/core/main.c:182
msgid "Replace the running window manager" msgid "Replace the running window manager"
msgstr "Substituir o gerenciador de janelas em execução" msgstr "Substituir o gerenciador de janelas em execução"
#: ../src/core/main.c:184 #: ../src/core/main.c:188
msgid "Specify session management ID" msgid "Specify session management ID"
msgstr "Especificar o ID do gerenciador de sessões" msgstr "Especificar o ID do gerenciador de sessões"
#: ../src/core/main.c:189 #: ../src/core/main.c:193
msgid "X Display to use" msgid "X Display to use"
msgstr "Exibição do X a ser utilizada" msgstr "Exibição do X a ser utilizada"
#: ../src/core/main.c:195 #: ../src/core/main.c:199
msgid "Initialize session from savefile" msgid "Initialize session from savefile"
msgstr "Inicializar a sessão a partir do arquivo salvo" msgstr "Inicializar a sessão a partir do arquivo salvo"
#: ../src/core/main.c:201 #: ../src/core/main.c:205
msgid "Make X calls synchronous" msgid "Make X calls synchronous"
msgstr "Fazer X chamadas síncronas" msgstr "Fazer X chamadas síncronas"
#: ../src/core/main.c:207 #: ../src/core/main.c:212
msgid "Run as a wayland compositor" msgid "Run as a wayland compositor"
msgstr "Executar como um compositor wayland" msgstr "Executar como um compositor wayland"
#: ../src/core/main.c:214 #: ../src/core/main.c:220
msgid "Run as a full display server, rather than nested" msgid "Run as a full display server, rather than nested"
msgstr "Executar como um servidor de tela cheia, ao invés de aninhado" msgstr "Executar como um servidor de tela cheia, ao invés de aninhado"
#: ../src/core/main.c:450 #: ../src/core/main.c:459
#, c-format #, c-format
msgid "Failed to scan themes directory: %s\n" msgid "Failed to scan themes directory: %s\n"
msgstr "Falha ao varrer a pasta de temas: %s\n" msgstr "Falha ao varrer a pasta de temas: %s\n"
#: ../src/core/main.c:466 #: ../src/core/main.c:475
#, c-format #, c-format
msgid "" msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n" "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -570,17 +595,17 @@ msgstr "Versão impressa"
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "Plug-in do Mutter para usar" msgstr "Plug-in do Mutter para usar"
#: ../src/core/prefs.c:2086 #: ../src/core/prefs.c:2101
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Espaço de trabalho %d" msgstr "Espaço de trabalho %d"
#: ../src/core/screen.c:553 #: ../src/core/screen.c:548
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "A tela %d na exibição \"%s\" é inválida\n" msgstr "A tela %d na exibição \"%s\" é inválida\n"
#: ../src/core/screen.c:569 #: ../src/core/screen.c:564
#, c-format #, c-format
msgid "" msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --" "Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -589,7 +614,7 @@ msgstr ""
"A tela %d na exibição \"%s\" já possui um gerenciador de janelas; tente usar " "A tela %d na exibição \"%s\" já possui um gerenciador de janelas; tente usar "
"a opção --replace para substituir o gerenciador de janelas atual.\n" "a opção --replace para substituir o gerenciador de janelas atual.\n"
#: ../src/core/screen.c:662 #: ../src/core/screen.c:657
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "A tela %d na exibição \"%s\" já possui um gerenciador de janelas\n" msgstr "A tela %d na exibição \"%s\" já possui um gerenciador de janelas\n"
@@ -1304,7 +1329,7 @@ msgstr ""
"atual&quot; e precisarão ser reiniciadas manualmente quando você reiniciar a " "atual&quot; e precisarão ser reiniciadas manualmente quando você reiniciar a "
"sessão." "sessão."
#: ../src/x11/window-props.c:513 #: ../src/x11/window-props.c:515
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (em %s)" msgstr "%s (em %s)"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -36,11 +36,15 @@ mutter_built_sources = \
$(dbus_display_config_built_sources) \ $(dbus_display_config_built_sources) \
$(dbus_login1_built_sources) \ $(dbus_login1_built_sources) \
mutter-enum-types.h \ mutter-enum-types.h \
mutter-enum-types.c \ mutter-enum-types.c
if HAVE_WAYLAND
mutter_built_sources += \
gtk-shell-protocol.c \ gtk-shell-protocol.c \
gtk-shell-server-protocol.h \ gtk-shell-server-protocol.h \
xdg-shell-protocol.c \ xdg-shell-protocol.c \
xdg-shell-server-protocol.h xdg-shell-server-protocol.h
endif
wayland_protocols = \ wayland_protocols = \
wayland/protocol/gtk-shell.xml \ wayland/protocol/gtk-shell.xml \

View File

@@ -30,7 +30,7 @@
typedef struct { typedef struct {
CoglTexture2D *texture; CoglTexture2D *texture;
struct gbm_bo *bo; struct gbm_bo *bo;
int hot_x, hot_y; int offset_x, offset_y;
} MetaCursorImage; } MetaCursorImage;
struct _MetaCursorReference { struct _MetaCursorReference {
@@ -41,11 +41,11 @@ struct _MetaCursorReference {
}; };
CoglTexture *meta_cursor_reference_get_cogl_texture (MetaCursorReference *cursor, CoglTexture *meta_cursor_reference_get_cogl_texture (MetaCursorReference *cursor,
int *hot_x, int *offset_x,
int *hot_y); int *offset_y);
struct gbm_bo *meta_cursor_reference_get_gbm_bo (MetaCursorReference *cursor, struct gbm_bo *meta_cursor_reference_get_gbm_bo (MetaCursorReference *cursor,
int *hot_x, int *offset_x,
int *hot_y); int *offset_y);
#endif /* META_CURSOR_PRIVATE_H */ #endif /* META_CURSOR_PRIVATE_H */

View File

@@ -35,13 +35,21 @@
#include "meta-stage.h" #include "meta-stage.h"
typedef struct
{
CoglTexture *texture;
MetaRectangle current_rect;
gboolean handled_by_backend;
} MetaCursorLayer;
struct _MetaCursorRendererPrivate struct _MetaCursorRendererPrivate
{ {
int current_x, current_y; int current_x, current_y;
MetaRectangle current_rect;
MetaCursorLayer core_layer;
MetaCursorLayer dnd_layer;
MetaCursorReference *displayed_cursor; MetaCursorReference *displayed_cursor;
gboolean handled_by_backend;
}; };
typedef struct _MetaCursorRendererPrivate MetaCursorRendererPrivate; typedef struct _MetaCursorRendererPrivate MetaCursorRendererPrivate;
@@ -58,10 +66,9 @@ queue_redraw (MetaCursorRenderer *renderer)
if (!stage) if (!stage)
return; return;
if (priv->handled_by_backend) if (priv->core_layer.texture && !priv->core_layer.handled_by_backend)
meta_stage_set_cursor (META_STAGE (stage), NULL, &priv->current_rect); meta_stage_set_cursor (META_STAGE (stage), layer->texture, &priv->current_rect);
else meta_stage_set_dnd_surface (META_STAGE (stage),
meta_stage_set_cursor (META_STAGE (stage), priv->displayed_cursor, &priv->current_rect);
} }
static gboolean static gboolean
@@ -81,33 +88,68 @@ meta_cursor_renderer_init (MetaCursorRenderer *renderer)
{ {
} }
static void
update_layer (MetaCursorRenderer *renderer,
MetaCursorLayer *layer,
CoglTexture *texture,
int offset_x,
int offset_y)
{
MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
layer->texture = texture;
if (layer->texture)
{
layer->current_rect.x = priv->current_x + offset_x;
layer->current_rect.y = priv->current_y + offset_y;
layer->current_rect.width = cogl_texture_get_width (layer->texture);
layer->current_rect.height = cogl_texture_get_height (layer->texture);
}
else
{
layer->current_rect.x = 0;
layer->current_rect.y = 0;
layer->current_rect.width = 0;
layer->current_rect.height = 0;
}
}
static void static void
update_cursor (MetaCursorRenderer *renderer) update_cursor (MetaCursorRenderer *renderer)
{ {
MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer); MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
gboolean handled_by_backend; gboolean handled_by_backend;
gboolean should_redraw = FALSE; gboolean should_redraw = FALSE;
if (priv->displayed_cursor)
{
CoglTexture *texture; CoglTexture *texture;
int hot_x, hot_y; int hot_x, hot_y;
texture = meta_cursor_reference_get_cogl_texture (priv->displayed_cursor, &hot_x, &hot_y); if (priv->displayed_cursor)
{
<<<<<<< HEAD
CoglTexture *texture;
int offset_x, offset_y;
priv->current_rect.x = priv->current_x - hot_x; texture = meta_cursor_reference_get_cogl_texture (priv->displayed_cursor, &offset_x, &offset_y);
priv->current_rect.y = priv->current_y - hot_y;
priv->current_rect.x = priv->current_x + offset_x;
priv->current_rect.y = priv->current_y + offset_y;
priv->current_rect.width = cogl_texture_get_width (COGL_TEXTURE (texture)); priv->current_rect.width = cogl_texture_get_width (COGL_TEXTURE (texture));
priv->current_rect.height = cogl_texture_get_height (COGL_TEXTURE (texture)); priv->current_rect.height = cogl_texture_get_height (COGL_TEXTURE (texture));
=======
texture = meta_cursor_reference_get_cogl_texture (priv->displayed_cursor, &hot_x, &hot_y);
>>>>>>> 75e7834... dnd 2
} }
else else
{ {
priv->current_rect.x = 0; texture = NULL;
priv->current_rect.y = 0; hot_x = 0;
priv->current_rect.width = 0; hot_y = 0;
priv->current_rect.height = 0;
} }
update_layer (renderer, &priv->core_layer, texture, hot_x, hot_y);
update_layer (renderer, &priv->
handled_by_backend = META_CURSOR_RENDERER_GET_CLASS (renderer)->update_cursor (renderer); handled_by_backend = META_CURSOR_RENDERER_GET_CLASS (renderer)->update_cursor (renderer);
if (handled_by_backend != priv->handled_by_backend) if (handled_by_backend != priv->handled_by_backend)
{ {
@@ -141,6 +183,17 @@ meta_cursor_renderer_set_cursor (MetaCursorRenderer *renderer,
update_cursor (renderer); update_cursor (renderer);
} }
void
meta_cursor_renderer_set_dnd_surface (MetaCursorRenderer *renderer,
CoglTexture *texture,
int offset_x,
int offset_y)
{
MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
update_layer (renderer, &priv->dnd_layer,
}
void void
meta_cursor_renderer_set_position (MetaCursorRenderer *renderer, meta_cursor_renderer_set_position (MetaCursorRenderer *renderer,
int x, int y) int x, int y)
@@ -168,5 +221,5 @@ meta_cursor_renderer_get_rect (MetaCursorRenderer *renderer)
{ {
MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer); MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
return &priv->current_rect; return &priv->core_layer.current_rect;
} }

View File

@@ -310,6 +310,7 @@ meta_cursor_tracker_get_hot (MetaCursorTracker *tracker,
int *y) int *y)
{ {
MetaCursorReference *cursor; MetaCursorReference *cursor;
int offset_x, offset_y;
g_return_if_fail (META_IS_CURSOR_TRACKER (tracker)); g_return_if_fail (META_IS_CURSOR_TRACKER (tracker));
@@ -324,14 +325,19 @@ meta_cursor_tracker_get_hot (MetaCursorTracker *tracker,
} }
if (cursor) if (cursor)
meta_cursor_reference_get_cogl_texture (cursor, x, y); {
meta_cursor_reference_get_cogl_texture (cursor, &offset_x, &offset_y);
}
else else
{ {
if (x) offset_x = 0;
*x = 0; offset_y = 0;
if (y)
*y = 0;
} }
if (x)
*x = -offset_x;
if (y)
*y = -offset_y;
} }
void void

View File

@@ -352,25 +352,25 @@ meta_cursor_reference_from_buffer (struct wl_resource *buffer,
CoglTexture * CoglTexture *
meta_cursor_reference_get_cogl_texture (MetaCursorReference *cursor, meta_cursor_reference_get_cogl_texture (MetaCursorReference *cursor,
int *hot_x, int *offset_x,
int *hot_y) int *offset_y)
{ {
if (hot_x) if (offset_x)
*hot_x = cursor->image.hot_x; *offset_x = cursor->image.offset_x;
if (hot_y) if (offset_y)
*hot_y = cursor->image.hot_y; *offset_y = cursor->image.offset_y;
return COGL_TEXTURE (cursor->image.texture); return COGL_TEXTURE (cursor->image.texture);
} }
struct gbm_bo * struct gbm_bo *
meta_cursor_reference_get_gbm_bo (MetaCursorReference *cursor, meta_cursor_reference_get_gbm_bo (MetaCursorReference *cursor,
int *hot_x, int *offset_x,
int *hot_y) int *offset_y)
{ {
if (hot_x) if (offset_x)
*hot_x = cursor->image.hot_x; *offset_x = cursor->image.offset_x;
if (hot_y) if (offset_y)
*hot_y = cursor->image.hot_y; *offset_y = cursor->image.offset_y;
return cursor->image.bo; return cursor->image.bo;
} }

View File

@@ -34,8 +34,7 @@ MetaCursorReference * meta_cursor_reference_from_theme (MetaCursor cur
#ifdef HAVE_WAYLAND #ifdef HAVE_WAYLAND
#include <wayland-server.h> #include <wayland-server.h>
MetaCursorReference * meta_cursor_reference_from_buffer (struct wl_resource *buffer, MetaCursorReference * meta_cursor_reference_from_buffer (struct wl_resource *buffer,
int hot_x, int offset_x, int offset_y);
int hot_y);
#endif #endif
MetaCursor meta_cursor_reference_get_meta_cursor (MetaCursorReference *cursor); MetaCursor meta_cursor_reference_get_meta_cursor (MetaCursorReference *cursor);

View File

@@ -28,31 +28,83 @@
#include <meta/meta-backend.h> #include <meta/meta-backend.h>
#include <meta/util.h> #include <meta/util.h>
struct _MetaStagePrivate { typedef struct {
CoglPipeline *pipeline; gboolean enabled;
MetaCursorReference *cursor; CoglPipeline *pipeline;
CoglTexture *texture;
MetaRectangle current_rect; MetaRectangle current_rect;
MetaRectangle previous_rect; MetaRectangle previous_rect;
gboolean previous_is_valid; gboolean previous_is_valid;
} MetaOverlay;
struct _MetaStagePrivate {
MetaOverlay dnd_overlay;
MetaOverlay cursor_overlay;
}; };
typedef struct _MetaStagePrivate MetaStagePrivate; typedef struct _MetaStagePrivate MetaStagePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (MetaStage, meta_stage, CLUTTER_TYPE_STAGE); G_DEFINE_TYPE_WITH_PRIVATE (MetaStage, meta_stage, CLUTTER_TYPE_STAGE);
static void static void
update_pipeline (MetaStage *stage) meta_overlay_init (MetaOverlay *overlay)
{ {
MetaStagePrivate *priv = meta_stage_get_instance_private (stage); CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
if (priv->cursor) overlay->pipeline = cogl_pipeline_new (ctx);
}
static void
meta_overlay_free (MetaOverlay *overlay)
{
if (overlay->pipeline)
cogl_object_unref (overlay->pipeline);
}
static void
meta_overlay_set (MetaOverlay *overlay,
CoglTexture *texture,
MetaRectangle *rect)
{
if (overlay->texture != texture)
{ {
CoglTexture *texture = meta_cursor_reference_get_cogl_texture (priv->cursor, NULL, NULL); overlay->texture = texture;
cogl_pipeline_set_layer_texture (priv->pipeline, 0, texture);
if (texture)
{
cogl_pipeline_set_layer_texture (overlay->pipeline, 0, texture);
overlay->enabled = TRUE;
} }
else else
cogl_pipeline_set_layer_texture (priv->pipeline, 0, NULL); {
cogl_pipeline_set_layer_texture (overlay->pipeline, 0, NULL);
overlay->enabled = FALSE;
}
}
overlay->current_rect = *rect;
}
static void
meta_overlay_paint (MetaOverlay *overlay)
{
if (!overlay->enabled)
return;
g_assert (meta_is_wayland_compositor ());
cogl_framebuffer_draw_rectangle (cogl_get_draw_framebuffer (),
overlay->pipeline,
overlay->current_rect.x,
overlay->current_rect.y,
overlay->current_rect.x +
overlay->current_rect.width,
overlay->current_rect.y +
overlay->current_rect.height);
overlay->previous_rect = overlay->current_rect;
overlay->previous_is_valid = TRUE;
} }
static void static void
@@ -61,42 +113,20 @@ meta_stage_finalize (GObject *object)
MetaStage *stage = META_STAGE (object); MetaStage *stage = META_STAGE (object);
MetaStagePrivate *priv = meta_stage_get_instance_private (stage); MetaStagePrivate *priv = meta_stage_get_instance_private (stage);
if (priv->pipeline) meta_overlay_free (&priv->dnd_overlay);
cogl_object_unref (priv->pipeline); meta_overlay_free (&priv->cursor_overlay);
}
static void
paint_cursor (MetaStage *stage)
{
MetaStagePrivate *priv = meta_stage_get_instance_private (stage);
g_assert (meta_is_wayland_compositor ());
if (!priv->cursor)
return;
cogl_framebuffer_draw_rectangle (cogl_get_draw_framebuffer (),
priv->pipeline,
priv->current_rect.x,
priv->current_rect.y,
priv->current_rect.x +
priv->current_rect.width,
priv->current_rect.y +
priv->current_rect.height);
priv->previous_rect = priv->current_rect;
priv->previous_is_valid = TRUE;
} }
static void static void
meta_stage_paint (ClutterActor *actor) meta_stage_paint (ClutterActor *actor)
{ {
MetaStage *stage = META_STAGE (actor); MetaStage *stage = META_STAGE (actor);
MetaStagePrivate *priv = meta_stage_get_instance_private (stage);
CLUTTER_ACTOR_CLASS (meta_stage_parent_class)->paint (actor); CLUTTER_ACTOR_CLASS (meta_stage_parent_class)->paint (actor);
if (meta_is_wayland_compositor ()) meta_overlay_paint (&priv->dnd_overlay);
paint_cursor (stage); meta_overlay_paint (&priv->cursor_overlay);
} }
static void static void
@@ -113,10 +143,10 @@ meta_stage_class_init (MetaStageClass *klass)
static void static void
meta_stage_init (MetaStage *stage) meta_stage_init (MetaStage *stage)
{ {
CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
MetaStagePrivate *priv = meta_stage_get_instance_private (stage); MetaStagePrivate *priv = meta_stage_get_instance_private (stage);
priv->pipeline = cogl_pipeline_new (ctx); meta_overlay_init (&priv->dnd_overlay);
meta_overlay_init (&priv->cursor_overlay);
clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), FALSE); clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), FALSE);
} }
@@ -130,46 +160,55 @@ meta_stage_new (void)
} }
static void static void
queue_redraw (MetaStage *stage) queue_redraw_for_overlay (MetaStage *stage,
MetaOverlay *overlay)
{ {
MetaStagePrivate *priv = meta_stage_get_instance_private (stage);
cairo_rectangle_int_t clip; cairo_rectangle_int_t clip;
/* Clear the location the cursor was at before, if we need to. */ /* Clear the location the overlay was at before, if we need to. */
if (priv->previous_is_valid) if (overlay->previous_is_valid)
{ {
clip.x = priv->previous_rect.x; clip.x = overlay->previous_rect.x;
clip.y = priv->previous_rect.y; clip.y = overlay->previous_rect.y;
clip.width = priv->previous_rect.width; clip.width = overlay->previous_rect.width;
clip.height = priv->previous_rect.height; clip.height = overlay->previous_rect.height;
clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stage), &clip); clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stage), &clip);
priv->previous_is_valid = FALSE; overlay->previous_is_valid = FALSE;
} }
/* And queue a redraw for the current cursor location. */ /* Draw the overlay at the new position */
if (priv->cursor) if (overlay->enabled)
{ {
clip.x = priv->current_rect.x; clip.x = overlay->current_rect.x;
clip.y = priv->current_rect.y; clip.y = overlay->current_rect.y;
clip.width = priv->current_rect.width; clip.width = overlay->current_rect.width;
clip.height = priv->current_rect.height; clip.height = overlay->current_rect.height;
clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stage), &clip); clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stage), &clip);
} }
} }
void void
meta_stage_set_cursor (MetaStage *stage, meta_stage_set_dnd_surface (MetaStage *stage,
MetaCursorReference *cursor, CoglTexture *texture,
MetaRectangle *rect) MetaRectangle *rect)
{ {
MetaStagePrivate *priv = meta_stage_get_instance_private (stage); MetaStagePrivate *priv = meta_stage_get_instance_private (stage);
if (priv->cursor != cursor) g_assert (meta_is_wayland_compositor ());
{
priv->cursor = cursor;
update_pipeline (stage);
}
priv->current_rect = *rect; meta_overlay_set (&priv->dnd_overlay, texture, rect);
queue_redraw (stage); queue_redraw_for_overlay (stage, &priv->dnd_overlay);
}
void
meta_stage_set_cursor (MetaStage *stage,
CoglTexture *texture,
MetaRectangle *rect)
{
MetaStagePrivate *priv = meta_stage_get_instance_private (stage);
g_assert (meta_is_wayland_compositor () || texture == NULL);
meta_overlay_set (&priv->cursor_overlay, texture, rect);
queue_redraw_for_overlay (stage, &priv->cursor_overlay);
} }

View File

@@ -51,9 +51,14 @@ GType meta_stage_get_type (void) G_GNUC_CONST;
ClutterActor *meta_stage_new (void); ClutterActor *meta_stage_new (void);
void meta_stage_set_cursor (MetaStage *stage, void meta_stage_set_dnd_surface (MetaStage *stage,
MetaCursorReference *cursor, CoglTexture *texture,
MetaRectangle *rect); MetaRectangle *rect);
void meta_stage_set_cursor (MetaStage *stage,
CoglTexture *texture,
MetaRectangle *rect);
G_END_DECLS G_END_DECLS
#endif /* META_STAGE_H */ #endif /* META_STAGE_H */

View File

@@ -72,16 +72,16 @@ set_crtc_cursor (MetaCursorRendererNative *native,
struct gbm_bo *bo; struct gbm_bo *bo;
union gbm_bo_handle handle; union gbm_bo_handle handle;
int width, height; int width, height;
int hot_x, hot_y; int offset_x, offset_y;
bo = meta_cursor_reference_get_gbm_bo (cursor, &hot_x, &hot_y); bo = meta_cursor_reference_get_gbm_bo (cursor, &offset_x, &offset_y);
handle = gbm_bo_get_handle (bo); handle = gbm_bo_get_handle (bo);
width = gbm_bo_get_width (bo); width = gbm_bo_get_width (bo);
height = gbm_bo_get_height (bo); height = gbm_bo_get_height (bo);
drmModeSetCursor2 (priv->drm_fd, crtc->crtc_id, handle.u32, drmModeSetCursor2 (priv->drm_fd, crtc->crtc_id, handle.u32,
width, height, hot_x, hot_y); width, height, -offset_x, -offset_y);
} }
else else
{ {

View File

@@ -330,6 +330,21 @@ output_get_hotplug_mode_update (MetaMonitorManagerXrandr *manager_xrandr,
return output_get_boolean_property (manager_xrandr, output, "hotplug_mode_update"); return output_get_boolean_property (manager_xrandr, output, "hotplug_mode_update");
} }
static char *
get_xmode_name (XRRModeInfo *xmode)
{
int width = xmode->width;
int height = xmode->height;
if (xmode->hSkew != 0)
{
width += 2 * (xmode->hSkew >> 8);
height += 2 * (xmode->hSkew & 0xff);
}
return g_strdup_printf ("%dx%d", width, height);
}
static void static void
meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager) meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
{ {
@@ -415,6 +430,7 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
mode->height = xmode->height; mode->height = xmode->height;
mode->refresh_rate = (xmode->dotClock / mode->refresh_rate = (xmode->dotClock /
((float)xmode->hTotal * xmode->vTotal)); ((float)xmode->hTotal * xmode->vTotal));
mode->name = get_xmode_name (xmode);
} }
for (i = 0; i < (unsigned)resources->ncrtc; i++) for (i = 0; i < (unsigned)resources->ncrtc; i++)

View File

@@ -82,7 +82,9 @@
#include "backends/x11/meta-backend-x11.h" #include "backends/x11/meta-backend-x11.h"
#ifdef HAVE_WAYLAND
#include "wayland/meta-wayland-private.h" #include "wayland/meta-wayland-private.h"
#endif
static gboolean static gboolean
is_modal (MetaDisplay *display) is_modal (MetaDisplay *display)

View File

@@ -28,16 +28,14 @@
#include <config.h> #include <config.h>
#include <meta/meta-shaped-texture.h> #include <meta/meta-shaped-texture.h>
#include <meta/util.h> #include "meta-shaped-texture-private.h"
#include <cogl/cogl.h>
#include <gdk/gdk.h> /* for gdk_rectangle_intersect() */
#include "clutter-utils.h" #include "clutter-utils.h"
#include "meta-texture-tower.h" #include "meta-texture-tower.h"
#include "meta-shaped-texture-private.h"
#include "meta-window-actor-private.h"
#include <clutter/clutter.h>
#include <cogl/cogl.h>
#include <gdk/gdk.h> /* for gdk_rectangle_intersect() */
#include "meta-cullable.h" #include "meta-cullable.h"
static void meta_shaped_texture_dispose (GObject *object); static void meta_shaped_texture_dispose (GObject *object);
@@ -298,10 +296,8 @@ meta_shaped_texture_paint (ClutterActor *actor)
guchar opacity; guchar opacity;
CoglContext *ctx; CoglContext *ctx;
CoglFramebuffer *fb; CoglFramebuffer *fb;
CoglPipeline *pipeline = NULL;
CoglTexture *paint_tex; CoglTexture *paint_tex;
ClutterActorBox alloc; ClutterActorBox alloc;
cairo_region_t *blended_region = NULL;
CoglPipelineFilter filter; CoglPipelineFilter filter;
if (priv->clip_region && cairo_region_is_empty (priv->clip_region)) if (priv->clip_region && cairo_region_is_empty (priv->clip_region))
@@ -339,6 +335,8 @@ meta_shaped_texture_paint (ClutterActor *actor)
if (tex_width == 0 || tex_height == 0) /* no contents yet */ if (tex_width == 0 || tex_height == 0) /* no contents yet */
return; return;
cairo_rectangle_int_t tex_rect = { 0, 0, tex_width, tex_height };
/* Use nearest-pixel interpolation if the texture is unscaled. This /* Use nearest-pixel interpolation if the texture is unscaled. This
* improves performance, especially with software rendering. * improves performance, especially with software rendering.
*/ */
@@ -354,7 +352,45 @@ meta_shaped_texture_paint (ClutterActor *actor)
opacity = clutter_actor_get_paint_opacity (actor); opacity = clutter_actor_get_paint_opacity (actor);
clutter_actor_get_allocation_box (actor, &alloc); clutter_actor_get_allocation_box (actor, &alloc);
if (priv->opaque_region != NULL && opacity == 255) cairo_region_t *blended_region;
gboolean use_opaque_region = (priv->opaque_region != NULL && opacity == 255);
if (use_opaque_region)
{
if (priv->clip_region != NULL)
blended_region = cairo_region_copy (priv->clip_region);
else
blended_region = cairo_region_create_rectangle (&tex_rect);
cairo_region_subtract (blended_region, priv->opaque_region);
}
else
{
if (priv->clip_region != NULL)
blended_region = cairo_region_reference (priv->clip_region);
else
blended_region = NULL;
}
/* Limit to how many separate rectangles we'll draw; beyond this just
* fall back and draw the whole thing */
#define MAX_RECTS 16
if (blended_region != NULL)
{
int n_rects = cairo_region_num_rectangles (blended_region);
if (n_rects > MAX_RECTS)
{
/* Fall back to taking the fully blended path. */
use_opaque_region = FALSE;
cairo_region_destroy (blended_region);
blended_region = NULL;
}
}
/* First, paint the unblended parts, which are part of the opaque region. */
if (use_opaque_region)
{ {
CoglPipeline *opaque_pipeline; CoglPipeline *opaque_pipeline;
cairo_region_t *region; cairo_region_t *region;
@@ -371,9 +407,8 @@ meta_shaped_texture_paint (ClutterActor *actor)
region = cairo_region_reference (priv->opaque_region); region = cairo_region_reference (priv->opaque_region);
} }
if (cairo_region_is_empty (region)) if (!cairo_region_is_empty (region))
goto paint_blended; {
opaque_pipeline = get_unblended_pipeline (ctx); opaque_pipeline = get_unblended_pipeline (ctx);
cogl_pipeline_set_layer_texture (opaque_pipeline, 0, paint_tex); cogl_pipeline_set_layer_texture (opaque_pipeline, 0, paint_tex);
cogl_pipeline_set_layer_filters (opaque_pipeline, 0, filter, filter); cogl_pipeline_set_layer_filters (opaque_pipeline, 0, filter, filter);
@@ -387,87 +422,72 @@ meta_shaped_texture_paint (ClutterActor *actor)
} }
cogl_object_unref (opaque_pipeline); cogl_object_unref (opaque_pipeline);
if (priv->clip_region != NULL)
{
blended_region = cairo_region_copy (priv->clip_region);
}
else
{
cairo_rectangle_int_t rect = { 0, 0, tex_width, tex_height };
blended_region = cairo_region_create_rectangle (&rect);
} }
cairo_region_subtract (blended_region, priv->opaque_region);
paint_blended:
cairo_region_destroy (region); cairo_region_destroy (region);
} }
if (blended_region == NULL && priv->clip_region != NULL) /* Now, go ahead and paint the blended parts. */
blended_region = cairo_region_reference (priv->clip_region);
if (blended_region != NULL && cairo_region_is_empty (blended_region)) /* We have three cases:
goto out; * 1) blended_region has rectangles - paint the rectangles.
* 2) blended_region is empty - don't paint anything
* 3) blended_region is NULL - paint fully-blended.
*
* 1) and 3) are the times where we have to paint stuff. This tests
* for 1) and 3).
*/
if (blended_region == NULL || !cairo_region_is_empty (blended_region))
{
CoglPipeline *blended_pipeline;
if (priv->mask_texture == NULL) if (priv->mask_texture == NULL)
{ {
pipeline = get_unmasked_pipeline (ctx); blended_pipeline = get_unmasked_pipeline (ctx);
} }
else else
{ {
pipeline = get_masked_pipeline (ctx); blended_pipeline = get_masked_pipeline (ctx);
cogl_pipeline_set_layer_texture (pipeline, 1, priv->mask_texture); cogl_pipeline_set_layer_texture (blended_pipeline, 1, priv->mask_texture);
cogl_pipeline_set_layer_filters (pipeline, 1, filter, filter); cogl_pipeline_set_layer_filters (blended_pipeline, 1, filter, filter);
} }
cogl_pipeline_set_layer_texture (pipeline, 0, paint_tex); cogl_pipeline_set_layer_texture (blended_pipeline, 0, paint_tex);
cogl_pipeline_set_layer_filters (pipeline, 0, filter, filter); cogl_pipeline_set_layer_filters (blended_pipeline, 0, filter, filter);
{
CoglColor color; CoglColor color;
cogl_color_init_from_4ub (&color, opacity, opacity, opacity, opacity); cogl_color_init_from_4ub (&color, opacity, opacity, opacity, opacity);
cogl_pipeline_set_color (pipeline, &color); cogl_pipeline_set_color (blended_pipeline, &color);
}
if (blended_region != NULL) if (blended_region != NULL)
{ {
int n_rects; /* 1) blended_region is not empty. Paint the rectangles. */
/* Limit to how many separate rectangles we'll draw; beyond this just
* fall back and draw the whole thing */
# define MAX_RECTS 16
n_rects = cairo_region_num_rectangles (blended_region);
if (n_rects <= MAX_RECTS)
{
int i; int i;
cairo_rectangle_int_t tex_rect = { 0, 0, tex_width, tex_height }; int n_rects = cairo_region_num_rectangles (blended_region);
for (i = 0; i < n_rects; i++) for (i = 0; i < n_rects; i++)
{ {
cairo_rectangle_int_t rect; cairo_rectangle_int_t rect;
cairo_region_get_rectangle (blended_region, i, &rect); cairo_region_get_rectangle (blended_region, i, &rect);
if (!gdk_rectangle_intersect (&tex_rect, &rect, &rect)) if (!gdk_rectangle_intersect (&tex_rect, &rect, &rect))
continue; continue;
paint_clipped_rectangle (fb, pipeline, &rect, &alloc); paint_clipped_rectangle (fb, blended_pipeline, &rect, &alloc);
}
goto out;
} }
} }
else
cogl_framebuffer_draw_rectangle (fb, pipeline, {
/* 3) blended_region is NULL. Do a full paint. */
cogl_framebuffer_draw_rectangle (fb, blended_pipeline,
0, 0, 0, 0,
alloc.x2 - alloc.x1, alloc.x2 - alloc.x1,
alloc.y2 - alloc.y1); alloc.y2 - alloc.y1);
}
cogl_object_unref (blended_pipeline);
}
out:
if (pipeline != NULL)
cogl_object_unref (pipeline);
if (blended_region != NULL) if (blended_region != NULL)
cairo_region_destroy (blended_region); cairo_region_destroy (blended_region);
} }
@@ -485,7 +505,7 @@ meta_shaped_texture_get_preferred_width (ClutterActor *self,
priv = META_SHAPED_TEXTURE (self)->priv; priv = META_SHAPED_TEXTURE (self)->priv;
if (min_width_p) if (min_width_p)
*min_width_p = 0; *min_width_p = priv->tex_width;
if (natural_width_p) if (natural_width_p)
*natural_width_p = priv->tex_width; *natural_width_p = priv->tex_width;
@@ -504,7 +524,7 @@ meta_shaped_texture_get_preferred_height (ClutterActor *self,
priv = META_SHAPED_TEXTURE (self)->priv; priv = META_SHAPED_TEXTURE (self)->priv;
if (min_height_p) if (min_height_p)
*min_height_p = 0; *min_height_p = priv->tex_height;
if (natural_height_p) if (natural_height_p)
*natural_height_p = priv->tex_height; *natural_height_p = priv->tex_height;
@@ -514,16 +534,17 @@ static cairo_region_t *
effective_unobscured_region (MetaShapedTexture *self) effective_unobscured_region (MetaShapedTexture *self)
{ {
MetaShapedTexturePrivate *priv = self->priv; MetaShapedTexturePrivate *priv = self->priv;
ClutterActor *parent = clutter_actor_get_parent (CLUTTER_ACTOR (self)); ClutterActor *actor;
if (clutter_actor_has_mapped_clones (CLUTTER_ACTOR (self))) /* Fail if we have any mapped clones. */
return NULL; actor = CLUTTER_ACTOR (self);
do
while (parent && !META_IS_WINDOW_ACTOR (parent)) {
parent = clutter_actor_get_parent (parent); if (clutter_actor_has_mapped_clones (actor))
if (parent && clutter_actor_has_mapped_clones (parent))
return NULL; return NULL;
actor = clutter_actor_get_parent (actor);
}
while (actor != NULL);
return priv->unobscured_region; return priv->unobscured_region;
} }

View File

@@ -34,45 +34,15 @@
struct _MetaSurfaceActorWaylandPrivate struct _MetaSurfaceActorWaylandPrivate
{ {
MetaWaylandSurface *surface; MetaWaylandSurface *surface;
MetaWaylandBuffer *buffer;
struct wl_listener buffer_destroy_listener;
}; };
typedef struct _MetaSurfaceActorWaylandPrivate MetaSurfaceActorWaylandPrivate; typedef struct _MetaSurfaceActorWaylandPrivate MetaSurfaceActorWaylandPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (MetaSurfaceActorWayland, meta_surface_actor_wayland, META_TYPE_SURFACE_ACTOR) G_DEFINE_TYPE_WITH_PRIVATE (MetaSurfaceActorWayland, meta_surface_actor_wayland, META_TYPE_SURFACE_ACTOR)
static void
meta_surface_actor_handle_buffer_destroy (struct wl_listener *listener, void *data)
{
MetaSurfaceActorWaylandPrivate *priv = wl_container_of (listener, priv, buffer_destroy_listener);
/* If the buffer is destroyed while we're attached to it,
* we want to unset priv->buffer so we don't access freed
* memory. Keep the texture set however so the user doesn't
* see the window disappear. */
priv->buffer = NULL;
}
static void static void
meta_surface_actor_wayland_process_damage (MetaSurfaceActor *actor, meta_surface_actor_wayland_process_damage (MetaSurfaceActor *actor,
int x, int y, int width, int height) int x, int y, int width, int height)
{ {
MetaSurfaceActorWayland *self = META_SURFACE_ACTOR_WAYLAND (actor);
MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self);
if (priv->buffer)
{
struct wl_resource *resource = priv->buffer->resource;
struct wl_shm_buffer *shm_buffer = wl_shm_buffer_get (resource);
if (shm_buffer)
{
CoglTexture2D *texture = COGL_TEXTURE_2D (priv->buffer->texture);
cogl_wayland_texture_set_region_from_shm_buffer (texture, x, y, width, height, shm_buffer, x, y, 0, NULL);
}
meta_surface_actor_update_area (META_SURFACE_ACTOR (self), x, y, width, height);
}
} }
static void static void
@@ -213,7 +183,7 @@ meta_surface_actor_wayland_dispose (GObject *object)
{ {
MetaSurfaceActorWayland *self = META_SURFACE_ACTOR_WAYLAND (object); MetaSurfaceActorWayland *self = META_SURFACE_ACTOR_WAYLAND (object);
meta_surface_actor_wayland_set_buffer (self, NULL); meta_surface_actor_wayland_set_texture (self, NULL);
G_OBJECT_CLASS (meta_surface_actor_wayland_parent_class)->dispose (object); G_OBJECT_CLASS (meta_surface_actor_wayland_parent_class)->dispose (object);
} }
@@ -244,9 +214,6 @@ meta_surface_actor_wayland_class_init (MetaSurfaceActorWaylandClass *klass)
static void static void
meta_surface_actor_wayland_init (MetaSurfaceActorWayland *self) meta_surface_actor_wayland_init (MetaSurfaceActorWayland *self)
{ {
MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self);
priv->buffer_destroy_listener.notify = meta_surface_actor_handle_buffer_destroy;
} }
MetaSurfaceActor * MetaSurfaceActor *
@@ -263,24 +230,11 @@ meta_surface_actor_wayland_new (MetaWaylandSurface *surface)
} }
void void
meta_surface_actor_wayland_set_buffer (MetaSurfaceActorWayland *self, meta_surface_actor_wayland_set_texture (MetaSurfaceActorWayland *self,
MetaWaylandBuffer *buffer) CoglTexture *texture)
{ {
MetaSurfaceActorWaylandPrivate *priv = meta_surface_actor_wayland_get_instance_private (self);
MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self)); MetaShapedTexture *stex = meta_surface_actor_get_texture (META_SURFACE_ACTOR (self));
meta_shaped_texture_set_texture (stex, texture);
if (priv->buffer)
wl_list_remove (&priv->buffer_destroy_listener.link);
priv->buffer = buffer;
if (priv->buffer)
{
wl_signal_add (&priv->buffer->destroy_signal, &priv->buffer_destroy_listener);
meta_shaped_texture_set_texture (stex, priv->buffer->texture);
}
else
meta_shaped_texture_set_texture (stex, NULL);
} }
MetaWaylandSurface * MetaWaylandSurface *

View File

@@ -58,8 +58,8 @@ GType meta_surface_actor_wayland_get_type (void);
MetaSurfaceActor * meta_surface_actor_wayland_new (MetaWaylandSurface *surface); MetaSurfaceActor * meta_surface_actor_wayland_new (MetaWaylandSurface *surface);
MetaWaylandSurface * meta_surface_actor_wayland_get_surface (MetaSurfaceActorWayland *self); MetaWaylandSurface * meta_surface_actor_wayland_get_surface (MetaSurfaceActorWayland *self);
void meta_surface_actor_wayland_set_buffer (MetaSurfaceActorWayland *self, void meta_surface_actor_wayland_set_texture (MetaSurfaceActorWayland *self,
MetaWaylandBuffer *buffer); CoglTexture *texture);
double meta_surface_actor_wayland_get_scale (MetaSurfaceActorWayland *actor); double meta_surface_actor_wayland_get_scale (MetaSurfaceActorWayland *actor);

View File

@@ -179,19 +179,6 @@ is_visible (MetaSurfaceActorX11 *self)
return (priv->pixmap != None) && !priv->unredirected; return (priv->pixmap != None) && !priv->unredirected;
} }
static void
damage_area (MetaSurfaceActorX11 *self,
int x, int y, int width, int height)
{
MetaSurfaceActorX11Private *priv = meta_surface_actor_x11_get_instance_private (self);
if (!is_visible (self))
return;
cogl_texture_pixmap_x11_update_area (priv->texture, x, y, width, height);
meta_surface_actor_update_area (META_SURFACE_ACTOR (self), x, y, width, height);
}
static void static void
meta_surface_actor_x11_process_damage (MetaSurfaceActor *actor, meta_surface_actor_x11_process_damage (MetaSurfaceActor *actor,
int x, int y, int width, int height) int x, int y, int width, int height)
@@ -218,11 +205,10 @@ meta_surface_actor_x11_process_damage (MetaSurfaceActor *actor,
priv->does_full_damage = TRUE; priv->does_full_damage = TRUE;
} }
/* Drop damage event for unredirected windows */ if (!is_visible (self))
if (priv->unredirected)
return; return;
damage_area (self, x, y, width, height); cogl_texture_pixmap_x11_update_area (priv->texture, x, y, width, height);
} }
static void static void

View File

@@ -188,7 +188,7 @@ meta_surface_actor_get_texture (MetaSurfaceActor *self)
return self->priv->texture; return self->priv->texture;
} }
void static void
meta_surface_actor_update_area (MetaSurfaceActor *self, meta_surface_actor_update_area (MetaSurfaceActor *self,
int x, int y, int width, int height) int x, int y, int width, int height)
{ {
@@ -262,6 +262,9 @@ meta_surface_actor_process_damage (MetaSurfaceActor *self,
} }
META_SURFACE_ACTOR_GET_CLASS (self)->process_damage (self, x, y, width, height); META_SURFACE_ACTOR_GET_CLASS (self)->process_damage (self, x, y, width, height);
if (meta_surface_actor_is_visible (self))
meta_surface_actor_update_area (self, x, y, width, height);
} }
void void
@@ -277,9 +280,15 @@ meta_surface_actor_is_argb32 (MetaSurfaceActor *self)
CoglTexture *texture = meta_shaped_texture_get_texture (stex); CoglTexture *texture = meta_shaped_texture_get_texture (stex);
/* If we don't have a texture, like during initialization, assume /* If we don't have a texture, like during initialization, assume
* that we're ARGB32. */ * that we're ARGB32.
*
* If we are unredirected and we have no texture assume that we are
* not ARGB32 otherwise we wouldn't be unredirected in the first
* place. This prevents us from continually redirecting and
* unredirecting on every paint.
*/
if (!texture) if (!texture)
return TRUE; return !meta_surface_actor_is_unredirected (self);
switch (cogl_texture_get_components (texture)) switch (cogl_texture_get_components (texture))
{ {

View File

@@ -61,9 +61,6 @@ void meta_surface_actor_set_input_region (MetaSurfaceActor *self,
void meta_surface_actor_set_opaque_region (MetaSurfaceActor *self, void meta_surface_actor_set_opaque_region (MetaSurfaceActor *self,
cairo_region_t *region); cairo_region_t *region);
void meta_surface_actor_update_area (MetaSurfaceActor *actor,
int x, int y, int width, int height);
void meta_surface_actor_process_damage (MetaSurfaceActor *actor, void meta_surface_actor_process_damage (MetaSurfaceActor *actor,
int x, int y, int width, int height); int x, int y, int width, int height);
void meta_surface_actor_pre_paint (MetaSurfaceActor *actor); void meta_surface_actor_pre_paint (MetaSurfaceActor *actor);

View File

@@ -35,9 +35,8 @@
#ifdef HAVE_WAYLAND #ifdef HAVE_WAYLAND
#include "meta-surface-actor-wayland.h" #include "meta-surface-actor-wayland.h"
#endif
#include "wayland/meta-wayland-surface.h" #include "wayland/meta-wayland-surface.h"
#endif
typedef enum { typedef enum {
INITIALLY_FROZEN, INITIALLY_FROZEN,
@@ -407,9 +406,12 @@ meta_window_actor_update_surface (MetaWindowActor *self)
MetaWindow *window = priv->window; MetaWindow *window = priv->window;
MetaSurfaceActor *surface_actor; MetaSurfaceActor *surface_actor;
#ifdef HAVE_WAYLAND
if (window->surface) if (window->surface)
surface_actor = window->surface->surface_actor; surface_actor = window->surface->surface_actor;
else if (!meta_is_wayland_compositor ()) else
#endif
if (!meta_is_wayland_compositor ())
surface_actor = meta_surface_actor_x11_new (window); surface_actor = meta_surface_actor_x11_new (window);
else else
surface_actor = NULL; surface_actor = NULL;

View File

@@ -35,6 +35,7 @@
#endif #endif
#ifdef HAVE_WAYLAND #ifdef HAVE_WAYLAND
#include "backends/meta-cursor-tracker-private.h"
#include "wayland/meta-wayland-private.h" #include "wayland/meta-wayland-private.h"
#endif #endif
#include "meta-surface-actor.h" #include "meta-surface-actor.h"
@@ -187,6 +188,14 @@ meta_display_handle_event (MetaDisplay *display,
} }
#endif #endif
#ifdef HAVE_WAYLAND
if (meta_is_wayland_compositor () && event->type == CLUTTER_MOTION)
{
MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (NULL);
meta_cursor_tracker_update_position (tracker, event->motion.x, event->motion.y);
}
#endif
handle_idletime_for_event (event); handle_idletime_for_event (event);
window = get_window_for_event (display, event); window = get_window_for_event (display, event);

View File

@@ -518,7 +518,6 @@ MetaWindow * _meta_window_shared_new (MetaDisplay *display,
void meta_window_unmanage (MetaWindow *window, void meta_window_unmanage (MetaWindow *window,
guint32 timestamp); guint32 timestamp);
void meta_window_calc_showing (MetaWindow *window);
void meta_window_queue (MetaWindow *window, void meta_window_queue (MetaWindow *window,
guint queuebits); guint queuebits);
void meta_window_tile (MetaWindow *window); void meta_window_tile (MetaWindow *window);

View File

@@ -1157,9 +1157,6 @@ _meta_window_shared_new (MetaDisplay *display,
/* disable show desktop mode unless we're a desktop component */ /* disable show desktop mode unless we're a desktop component */
maybe_leave_show_desktop_mode (window); maybe_leave_show_desktop_mode (window);
if (!window->override_redirect)
sync_client_window_mapped (window);
meta_window_queue (window, META_QUEUE_CALC_SHOWING); meta_window_queue (window, META_QUEUE_CALC_SHOWING);
/* See bug 303284; a transient of the given window can already exist, in which /* See bug 303284; a transient of the given window can already exist, in which
* case we think it should probably be shown. * case we think it should probably be shown.
@@ -1523,9 +1520,6 @@ implement_showing (MetaWindow *window,
meta_verbose ("Implement showing = %d for window %s\n", meta_verbose ("Implement showing = %d for window %s\n",
showing, window->desc); showing, window->desc);
if (!window->override_redirect)
sync_client_window_mapped (window);
if (!showing) if (!showing)
{ {
/* When we manage a new window, we normally delay placing it /* When we manage a new window, we normally delay placing it
@@ -1541,9 +1535,12 @@ implement_showing (MetaWindow *window,
} }
else else
meta_window_show (window); meta_window_show (window);
if (!window->override_redirect)
sync_client_window_mapped (window);
} }
void static void
meta_window_calc_showing (MetaWindow *window) meta_window_calc_showing (MetaWindow *window)
{ {
implement_showing (window, meta_window_should_be_showing (window)); implement_showing (window, meta_window_should_be_showing (window));

View File

@@ -241,6 +241,19 @@ workspace_free_builtin_struts (MetaWorkspace *workspace)
workspace->builtin_struts = NULL; workspace->builtin_struts = NULL;
} }
/* Ensure that the workspace is empty by making sure that
* all of our windows are on-all-workspaces. */
static void
assert_workspace_empty (MetaWorkspace *workspace)
{
GList *l;
for (l = workspace->windows; l != NULL; l = l->next)
{
MetaWindow *window = l->data;
g_assert (window->on_all_workspaces);
}
}
void void
meta_workspace_remove (MetaWorkspace *workspace) meta_workspace_remove (MetaWorkspace *workspace)
{ {
@@ -249,7 +262,7 @@ meta_workspace_remove (MetaWorkspace *workspace)
g_return_if_fail (workspace != workspace->screen->active_workspace); g_return_if_fail (workspace != workspace->screen->active_workspace);
g_assert (workspace->windows == NULL); assert_workspace_empty (workspace);
screen = workspace->screen; screen = workspace->screen;
@@ -344,12 +357,14 @@ meta_workspace_relocate_windows (MetaWorkspace *workspace,
for (l = copy; l != NULL; l = l->next) for (l = copy; l != NULL; l = l->next)
{ {
MetaWindow *window = l->data; MetaWindow *window = l->data;
if (!window->override_redirect)
meta_window_change_workspace (window, new_home); meta_window_change_workspace (window, new_home);
} }
g_list_free (copy); g_list_free (copy);
g_assert (workspace->windows == NULL); assert_workspace_empty (workspace);
} }
void void

View File

@@ -315,14 +315,6 @@ meta_wayland_pointer_update (MetaWaylandPointer *pointer,
repick_for_event (pointer, event); repick_for_event (pointer, event);
pointer->button_count = count_buttons (event); pointer->button_count = count_buttons (event);
if (pointer->cursor_tracker)
{
ClutterPoint pos;
clutter_input_device_get_coords (pointer->device, NULL, &pos);
meta_cursor_tracker_update_position (pointer->cursor_tracker, pos.x, pos.y);
}
} }
static void static void

View File

@@ -109,11 +109,15 @@ surface_process_damage (MetaWaylandSurface *surface,
int i, n_rectangles; int i, n_rectangles;
cairo_rectangle_int_t buffer_rect; cairo_rectangle_int_t buffer_rect;
int scale = surface->scale; int scale = surface->scale;
CoglTexture *texture;
struct wl_shm_buffer *shm_buffer;
/* Damage without a buffer makes no sense so ignore that, otherwise we would crash */ /* Damage without a buffer makes no sense so ignore that, otherwise we would crash */
if (!surface->buffer) if (!surface->buffer)
return; return;
texture = surface->buffer->texture;
buffer_rect.x = 0; buffer_rect.x = 0;
buffer_rect.y = 0; buffer_rect.y = 0;
buffer_rect.width = cogl_texture_get_width (surface->buffer->texture); buffer_rect.width = cogl_texture_get_width (surface->buffer->texture);
@@ -125,10 +129,16 @@ surface_process_damage (MetaWaylandSurface *surface,
n_rectangles = cairo_region_num_rectangles (region); n_rectangles = cairo_region_num_rectangles (region);
shm_buffer = wl_shm_buffer_get (surface->buffer->resource);
for (i = 0; i < n_rectangles; i++) for (i = 0; i < n_rectangles; i++)
{ {
cairo_rectangle_int_t rect; cairo_rectangle_int_t rect;
cairo_region_get_rectangle (region, i, &rect); cairo_region_get_rectangle (region, i, &rect);
if (shm_buffer)
cogl_wayland_texture_set_region_from_shm_buffer (texture, rect.x, rect.y, rect.width, rect.height, shm_buffer, rect.x, rect.y, 0, NULL);
meta_surface_actor_process_damage (surface->surface_actor, meta_surface_actor_process_damage (surface->surface_actor,
rect.x * scale, rect.y * scale, rect.width * scale, rect.height * scale); rect.x * scale, rect.y * scale, rect.width * scale, rect.height * scale);
} }
@@ -177,6 +187,9 @@ calculate_surface_window_geometry (MetaWaylandSurface *surface,
if (!CLUTTER_ACTOR_IS_VISIBLE (surface_actor)) if (!CLUTTER_ACTOR_IS_VISIBLE (surface_actor))
return; return;
if (!surface->buffer)
return;
/* XXX: Is there a better way to do this using Clutter APIs? */ /* XXX: Is there a better way to do this using Clutter APIs? */
clutter_actor_get_position (surface_actor, &x, &y); clutter_actor_get_position (surface_actor, &x, &y);
@@ -403,7 +416,7 @@ commit_pending_state (MetaWaylandSurface *surface,
if (pending->buffer) if (pending->buffer)
{ {
ensure_buffer_texture (pending->buffer); ensure_buffer_texture (pending->buffer);
meta_surface_actor_wayland_set_buffer (META_SURFACE_ACTOR_WAYLAND (surface->surface_actor), pending->buffer); meta_surface_actor_wayland_set_texture (META_SURFACE_ACTOR_WAYLAND (surface->surface_actor), pending->buffer->texture);
} }
} }
@@ -413,6 +426,9 @@ commit_pending_state (MetaWaylandSurface *surface,
if (!cairo_region_is_empty (pending->damage)) if (!cairo_region_is_empty (pending->damage))
surface_process_damage (surface, pending->damage); surface_process_damage (surface, pending->damage);
surface->offset_x += pending->dx;
surface->offset_y += pending->dy;
if (pending->opaque_region) if (pending->opaque_region)
{ {
pending->opaque_region = scale_region (pending->opaque_region, surface->scale); pending->opaque_region = scale_region (pending->opaque_region, surface->scale);
@@ -1008,6 +1024,8 @@ xdg_shell_get_xdg_surface (struct wl_client *client,
return; return;
} }
surface->xdg_shell_resource = resource;
window = meta_window_wayland_new (meta_get_display (), surface); window = meta_window_wayland_new (meta_get_display (), surface);
meta_wayland_surface_set_window (surface, window); meta_wayland_surface_set_window (surface, window);
} }
@@ -1064,6 +1082,8 @@ xdg_shell_get_xdg_popup (struct wl_client *client,
return; return;
} }
surface->xdg_shell_resource = resource;
window = meta_window_wayland_new (meta_get_display (), surface); window = meta_window_wayland_new (meta_get_display (), surface);
meta_window_move_frame (window, FALSE, meta_window_move_frame (window, FALSE,
parent_surf->window->rect.x + x, parent_surf->window->rect.x + x,
@@ -1085,41 +1105,13 @@ static const struct xdg_shell_interface meta_wayland_xdg_shell_interface = {
xdg_shell_pong, xdg_shell_pong,
}; };
typedef struct {
struct wl_resource *resource;
struct wl_listener client_destroy_listener;
} XdgShell;
static void
xdg_shell_handle_client_destroy (struct wl_listener *listener, void *data)
{
XdgShell *xdg_shell = wl_container_of (listener, xdg_shell, client_destroy_listener);
g_slice_free (XdgShell, xdg_shell);
}
static struct wl_resource *
get_xdg_shell_for_client (struct wl_client *client)
{
struct wl_listener *listener;
XdgShell *xdg_shell;
listener = wl_client_get_destroy_listener (client, xdg_shell_handle_client_destroy);
/* No xdg_shell has been bound for this client */
if (listener == NULL)
return NULL;
xdg_shell = wl_container_of (listener, xdg_shell, client_destroy_listener);
return xdg_shell->resource;
}
static void static void
bind_xdg_shell (struct wl_client *client, bind_xdg_shell (struct wl_client *client,
void *data, void *data,
guint32 version, guint32 version,
guint32 id) guint32 id)
{ {
XdgShell *xdg_shell; struct wl_resource *resource;
if (version != META_XDG_SHELL_VERSION) if (version != META_XDG_SHELL_VERSION)
{ {
@@ -1127,13 +1119,8 @@ bind_xdg_shell (struct wl_client *client,
return; return;
} }
xdg_shell = g_slice_new (XdgShell); resource = wl_resource_create (client, &xdg_shell_interface, version, id);
wl_resource_set_implementation (resource, &meta_wayland_xdg_shell_interface, data, NULL);
xdg_shell->resource = wl_resource_create (client, &xdg_shell_interface, version, id);
wl_resource_set_implementation (xdg_shell->resource, &meta_wayland_xdg_shell_interface, data, NULL);
xdg_shell->client_destroy_listener.notify = xdg_shell_handle_client_destroy;
wl_client_add_destroy_listener (client, &xdg_shell->client_destroy_listener);
} }
static void static void
@@ -1846,23 +1833,10 @@ void
meta_wayland_surface_ping (MetaWaylandSurface *surface, meta_wayland_surface_ping (MetaWaylandSurface *surface,
guint32 serial) guint32 serial)
{ {
if (surface->xdg_surface.resource) if (surface->xdg_shell_resource)
{ xdg_shell_send_ping (surface->xdg_shell_resource, serial);
struct wl_client *client = wl_resource_get_client (surface->resource);
struct wl_resource *xdg_shell = get_xdg_shell_for_client (client);
if (xdg_shell == NULL)
{
g_warning ("Trying to ping a surface without an xdg_shell bound. How does this happen?");
return;
}
xdg_shell_send_ping (xdg_shell, serial);
}
else if (surface->wl_shell_surface.resource) else if (surface->wl_shell_surface.resource)
{
wl_shell_surface_send_ping (surface->wl_shell_surface.resource, serial); wl_shell_surface_send_ping (surface->wl_shell_surface.resource, serial);
}
} }
void void

View File

@@ -81,6 +81,7 @@ struct _MetaWaylandSurface
MetaWaylandCompositor *compositor; MetaWaylandCompositor *compositor;
MetaSurfaceActor *surface_actor; MetaSurfaceActor *surface_actor;
MetaWindow *window; MetaWindow *window;
struct wl_resource *xdg_shell_resource;
MetaWaylandSurfaceExtension xdg_surface; MetaWaylandSurfaceExtension xdg_surface;
MetaWaylandSurfaceExtension xdg_popup; MetaWaylandSurfaceExtension xdg_popup;
MetaWaylandSurfaceExtension wl_shell_surface; MetaWaylandSurfaceExtension wl_shell_surface;
@@ -114,6 +115,8 @@ struct _MetaWaylandSurface
GSList *pending_placement_ops; GSList *pending_placement_ops;
} sub; } sub;
int32_t offset_x, offset_y;
gboolean has_set_geometry; gboolean has_set_geometry;
/* All the pending state that wl_surface.commit will apply. */ /* All the pending state that wl_surface.commit will apply. */

View File

@@ -32,6 +32,10 @@
#include "meta-surface-actor-wayland.h" #include "meta-surface-actor-wayland.h"
#include "meta-wayland-private.h" #include "meta-wayland-private.h"
#ifdef HAVE_NATIVE_BACKEND
#include "backends/native/meta-backend-native.h"
#endif
struct _MetaWaylandTouchSurface struct _MetaWaylandTouchSurface
{ {
MetaWaylandSurface *surface; MetaWaylandSurface *surface;
@@ -472,6 +476,7 @@ meta_wayland_touch_cancel (MetaWaylandTouch *touch)
g_list_free (surfaces); g_list_free (surfaces);
} }
#ifdef HAVE_NATIVE_BACKEND
static gboolean static gboolean
evdev_filter_func (struct libinput_event *event, evdev_filter_func (struct libinput_event *event,
gpointer data) gpointer data)
@@ -508,6 +513,7 @@ evdev_filter_func (struct libinput_event *event,
return CLUTTER_EVENT_PROPAGATE; return CLUTTER_EVENT_PROPAGATE;
} }
#endif
void void
meta_wayland_touch_init (MetaWaylandTouch *touch, meta_wayland_touch_init (MetaWaylandTouch *touch,
@@ -527,13 +533,23 @@ meta_wayland_touch_init (MetaWaylandTouch *touch,
manager = clutter_device_manager_get_default (); manager = clutter_device_manager_get_default ();
touch->device = clutter_device_manager_get_core_device (manager, CLUTTER_TOUCHSCREEN_DEVICE); touch->device = clutter_device_manager_get_core_device (manager, CLUTTER_TOUCHSCREEN_DEVICE);
#ifdef HAVE_NATIVE_BACKEND
MetaBackend *backend = meta_get_backend ();
if (META_IS_BACKEND_NATIVE (backend))
clutter_evdev_add_filter (evdev_filter_func, touch, NULL); clutter_evdev_add_filter (evdev_filter_func, touch, NULL);
#endif
} }
void void
meta_wayland_touch_release (MetaWaylandTouch *touch) meta_wayland_touch_release (MetaWaylandTouch *touch)
{ {
#ifdef HAVE_NATIVE_BACKEND
MetaBackend *backend = meta_get_backend ();
if (META_IS_BACKEND_NATIVE (backend))
clutter_evdev_remove_filter (evdev_filter_func, touch); clutter_evdev_remove_filter (evdev_filter_func, touch);
#endif
g_clear_pointer (&touch->touch_surfaces, (GDestroyNotify) g_hash_table_unref); g_clear_pointer (&touch->touch_surfaces, (GDestroyNotify) g_hash_table_unref);
g_clear_pointer (&touch->touches, (GDestroyNotify) g_hash_table_unref); g_clear_pointer (&touch->touches, (GDestroyNotify) g_hash_table_unref);
touch->display = NULL; touch->display = NULL;

View File

@@ -45,7 +45,7 @@
they implement using static_assert to ensure the protocol and they implement using static_assert to ensure the protocol and
implementation versions match. implementation versions match.
</description> </description>
<entry name="current" value="3" summary="Always the latest version"/> <entry name="current" value="4" summary="Always the latest version"/>
</enum> </enum>
@@ -239,8 +239,8 @@
<description summary="types of state on the surface"> <description summary="types of state on the surface">
The different state values used on the surface. This is designed for The different state values used on the surface. This is designed for
state values like maximized, fullscreen. It is paired with the state values like maximized, fullscreen. It is paired with the
request_change_state event to ensure that both the client and the configure event to ensure that both the client and the compositor
compositor setting the state can be synchronized. setting the state can be synchronized.
States set in this way are double-buffered. They will get applied on States set in this way are double-buffered. They will get applied on
the next commit. the next commit.