Compare commits

..

64 Commits

Author SHA1 Message Date
Florian Müllner
a601639dd3 Bump version to 3.22.2
Update NEWS.
2016-11-10 15:11:39 +01:00
Rui Matos
462d504ca0 compositor: End a wayland popup grab when starting a compositor grab
Wayland popup grabs, unlike other grab types, can be safely cancelled
so there's no reason to deny compositor grab requests if a wayland
popup is on.

In particular, this allows entering the overview via a keybinding or
locking the screen while a wayland popup has a grab which is something
that's been advertised as a wayland improvement over X.

https://bugzilla.gnome.org/show_bug.cgi?id=771235
2016-11-02 14:06:41 +01:00
Rui Matos
374bba2d4e MetaInputSettings: fix two finger preference over edge scrolling logic
Enabling edge scrolling before disabling two finger would result in
edge scrolling not actually being enabled because two finger is still
enabled at the time and we bail out.

This patch moves this logic to common code for both the native and X
backends and fixes it by ensuring that both settings are never set at
the same time and still re-checking if edge scrolling should be
enabled after two finger scrolling gets disabled.

We also simplify the code by not checking for supported/available
settings since the underlying devices will just reject those values
and there isn't anything we can do about it here. It's the UI's job to
only show supported/available settings to users.

https://bugzilla.gnome.org/show_bug.cgi?id=771744
2016-11-02 14:06:40 +01:00
Rui Matos
1b4b361a92 MetaInputSettingsNative: allow unsetting click and scroll methods
Checking for supported methods isn't needed since libinput will just
error out and do nothing itself if a requested method isn't supported
and, in fact, this logic was preventing the enum values 0 from being
set.

https://bugzilla.gnome.org/show_bug.cgi?id=771744
2016-11-02 14:06:39 +01:00
Rui Matos
6054b1cdbd stack: Stack docks below other windows on fullscreen monitors
Commit fcc7501eb8 had the side-effect of
stacking fullscreen windows below docks which went unnoticed since we
don't use docks in GNOME anymore.

Instead of re-introducing the fullscreen layer, which we don't need
otherwise, we can fix this issue by ensuring we stack docks below all
other windows when the monitor they're on is marked fullscreen. This
has the added benefit that the visibility rule for 3rd party docks
becomes the same as gnome-shell's chrome.

https://bugzilla.gnome.org/show_bug.cgi?id=772937
2016-11-02 14:06:37 +01:00
YunQiang Su
f3a9465fbd Update zh_CN translation 2016-10-30 02:34:13 +08:00
liushuyu
ac5ea45319 Update zh_CN translation 2016-10-30 02:20:39 +08:00
Olivier Fourdan
c52808b30d wayland: do not explicitly focus xdg_popup
The keyboard focus semantics for non-grabbing xdg_shell v6 popups is
pretty undefined.

Same applies for subsurfaces, but in practice, subsurfaces never receive
keyboard focus, so it makes sense to do the same for non-grabbing
popups.

https://bugzilla.gnome.org/show_bug.cgi?id=773210
2016-10-27 17:27:40 +02:00
Olivier Fourdan
5919a4a779 window: Do not unfocus on new window
mutter would remove focus from a toplevel when showing one of its
transient window which is not on top and not focused.

When using xdg_popup without grab as allowed in xdg_shell v6, the popup
wouldn't be focused, and if an intermediate event occurs before the
popup is shown, it's not placed on top either, which could randomly
trigger a loss of focus in the corresponding toplevel window.

Remove that special case, it doesn't make much sense to globally unset
focus when mapping a new window.

https://bugzilla.gnome.org/show_bug.cgi?id=773210
2016-10-27 17:27:35 +02:00
Olivier Fourdan
e8fc09064a wayland: apply size hints after placing the window
Otherwise the window will be shown initially in the wrong position then
moved quickly as soon as it's made visible, which is confusing.

https://bugzilla.gnome.org/show_bug.cgi?id=772729
2016-10-19 17:31:44 +08:00
Jonas Ådahl
d911c5aac4 wayland: Don't cancel the pointer grab on compositor grabs
We shouldn't cancel the pointer grab when there is a compositor grab,
since that'd break things like drag-n-drop via the overview and
alt-tabs.

The original reason for cancelling the pointer grab on compositor grabs
was to avoid a re-entry when a compositor grab was activated while
there was an active pointer constraint grab. The re-entry would happen
when the compositor grab cleared the pointer focus. Clearing the focus
would trigger the pointer constraint to be deactivated, which would end
its grab. Ending the grab would reset the grab to the default one, which
could focus the same surface again, triggering the constraint to
re-enable before it finished disabling.

This is now avoided because the default grab handler is now aware of
compositor grabs, and won't override the cleared pointer focus until
the compositor grab ends.

https://bugzilla.gnome.org/show_bug.cgi?id=772914
2016-10-19 17:23:26 +08:00
Jonas Ådahl
84134aa78e wayland/pointer: Don't set focus while during compositor grab
Teach the default grab about compositor grabs (i.e.
display->event_route) so that it can avoid setting a pointer focus when
after the compositor grab actively unset the pointer focus.

https://bugzilla.gnome.org/show_bug.cgi?id=772914
2016-10-19 17:23:16 +08:00
Jonas Ådahl
f9d1bb4e6c wayland/pointer-constraints: Don't include window frame in region
When Xwayland confines, the surface dimensions will include the server
side window manager decorations. We don't want the decorations to be
included in the constraint region so intersect the calculated input
region with the parts of the buffer rect that is not part of the window
frame.

https://bugzilla.gnome.org/show_bug.cgi?id=771859
2016-10-19 17:20:14 +08:00
Jonas Ådahl
1da239c83c wayland/pointer-constraints: Unify requirements for enablement
Put the conditions for enabling a pointer constraint in a helper
function, and use that in both maybe_enable() and maybe_remove(). The
constraint region checking is still only done in maybe_enable()
however.

This changes the conditions for maybe disabling the constraint on focus
change and other trigger points, namely it makes constraints by Xwayland
not disable when they shouldn't due to the constraining window being an
override-redirect window.

https://bugzilla.gnome.org/show_bug.cgi?id=771859
2016-10-19 17:20:14 +08:00
Jonas Ådahl
d22db60a2b wayland/pointer-constraints: Disable or remove when grab is cancelled
When the grab is cancelled, for example because of an Alt-tab, VT
switch etc, disable or remove (depending on the constraint type) the
constraint. This avoids a re-entry issue when the focus is returned and
the focus listener tries to re-enable a disabled constraint.

https://bugzilla.gnome.org/show_bug.cgi?id=771859
2016-10-19 17:20:14 +08:00
Jonas Ådahl
ab21c3cad7 MetaWaylandPopup: Dismiss popup when grab is cancelled
Dismiss the popup when the grab is cancelled, so that if the grab is
ended for whatever reason (such as VT switching or the last pointer
being disconnected), it doesn't try to end the grab when it isn't
active.

This fixes a crash when VT switching back and forth while a popup grab
is active.

https://bugzilla.gnome.org/show_bug.cgi?id=771858
2016-10-19 17:03:27 +08:00
Jonas Ådahl
20efdfcb41 wayland/pointer: Add way to cancel current grab
Previously a grab could suddenly end without the grabber knowing
anything about it. Some grabs assume they won't suddenly end without
notice, and can use then new 'cancel' vfunc to be notified.

Currently a grab is cancelled when a new one is started (i.e. in
meta_wayland_pointer_grab_start()), when a non-popup compositor wide
event route is initiated, and when the seat looses the pointer
capability.

https://bugzilla.gnome.org/show_bug.cgi?id=771858
2016-10-19 17:03:16 +08:00
Jonas Ådahl
1d8bb58990 constraints: Use ConstraintInfo window size when placing
The frame rect will at this point not be set for Wayland popups, since
the popup is placed and constrained before the actual buffer will be
attached. To still be able to calculate a proper monitor to be used for
constraining, use the ConstraintInfo::current dimensions instead, since
they will have the expected size. This should not cause any issues with
present paths since when a window is otherwise placed, it usually
doesn't change monitor calculation result.

This fixes opening a popup menu that would be positioned on the left
edge of a not-left-most monitor, for example a 'File' menu on a window
maximized on a second monitor.

https://bugzilla.gnome.org/show_bug.cgi?id=773141
2016-10-19 15:16:46 +08:00
Rui Matos
32877118c3 MetaOnscreenNative: fix mirror mode with stage views
Using the view's MetaMonitorInfo to find all the crtcs which should be
configured to display a given onscreen doesn't work unfortunately. The
association runs only the other way around, i.e. we need to go through
each crtc and find the ones corresponding to our monitor info.

https://bugzilla.gnome.org/show_bug.cgi?id=773115
2016-10-18 14:19:23 +02:00
Rui Matos
6567e235a4 MetaRendererNative: don't call drmModeGetResources()
There's no need to call this and we were leaking the returned memory.

https://bugzilla.gnome.org/show_bug.cgi?id=773116
2016-10-18 14:19:22 +02:00
Rui Matos
0289925101 MetaMonitorManageKms: plug a GArray leak
https://bugzilla.gnome.org/show_bug.cgi?id=773116
2016-10-18 14:19:20 +02:00
Jonas Ådahl
ffea28e05d wayland/xdg-shell: Scale positioner coordinates
When the monitor is scaled (i.e. HiDPI scaling) the placement coordinates
ere still in unscaled xdg_surface window geometry coordinate space when
used to place the window. Fix this by scaling the coordinates by the
monitor scale of the parent toplevel window before using them.

https://bugzilla.gnome.org/show_bug.cgi?id=771841
2016-10-18 13:21:06 +08:00
Sjoerd Simons
43a1ac3b5f wayland/xdg-shell: update popup window monitor early
As meta_window_place_with_placement_rule will trigger a configure event
being sent ensure that the popup is placed on the correct monitor first
to ensure the right scale factor is applied.

Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>

https://bugzilla.gnome.org/show_bug.cgi?id=771841
2016-10-18 13:21:06 +08:00
Sjoerd Simons
a15d61ba9b wayland/xdg-popup: Force monitor of the top-level
Directly set the monitor of the toplevel window for the popup to avoid
the change not being applied due to later constraints calculation.

Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>

https://bugzilla.gnome.org/show_bug.cgi?id=771841
2016-10-18 13:21:06 +08:00
Jonas Ådahl
2eaa9de9da wayland/xdg-shell: Scale configure relative popup coordinate
The parent local popup coordinate needs to be scaled according to the
monitor scale it is assigned.

https://bugzilla.gnome.org/show_bug.cgi?id=771841
2016-10-18 13:21:06 +08:00
Jonas Ådahl
c042c835a5 wayland/xdg-popup: Always use monitor of toplevel
Always use the monitor of the toplevel surface's window, so that the
popup menu and the parent will always have the same scale. This fixes
the dimensions sent in the xdg_popup configure event.

https://bugzilla.gnome.org/show_bug.cgi?id=771841
2016-10-18 13:21:06 +08:00
Jonas Ådahl
803148ed1f wayland/touch: Use surface relative coordinate helper
Use the global to surface local coordinate converter helper, as that
will currently convert coordinates for Xwayland client more correctly.

https://bugzilla.gnome.org/show_bug.cgi?id=768039
2016-10-18 13:21:06 +08:00
Jonas Ådahl
006c83f99d wayland/touch: Use helper for getting the next event serial
https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
9f071fdc87 wayland/pointer: Use grab helper that doesn't focus when disabling
Instead of using meta_wayland_pointer_end_grab() which focuses the new
grab, add a new helper mean to be used to reset the grab state without
changing the pointer focus. When using this function, the call site is
supposed to explicitly manage focus.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
5216137146 wayland/pointer: Naming and coding style fixes
Some very long lines that stood out were shortened, and an old naming
convention from weston was removed.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
35be843f52 wayland/pointer: Check pointer presence at set focus call site
Make the caller of focus setting check whether there is a pointer to
update the focus state of. It makes it more obvious what to expect, as
the call would be a no-op in when no pointer is present.

Grabbing is still allowed without the presence of a pointer because it
is used by popups even on touch-only systems.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
6c2e43f76c wayland/pointer: Use helper for getting the next event serial
Use the MetaWaylandInputDevice helper for serial retrieval.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
b171668ae0 wayland/keyboard: Check keyboard presence at set focus call site
Make the caller of focus setting and grab starting check whether there
is a keyboard to update the focus state or start grabbing. It makes it
more obvious what to expect, as the call would be a no-op in when no
keyboard is present.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
8916e47d56 wayland/seat: Use seat capability checking helper
https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
94623f475c wayland/keyboard: Cleanup resource list management
Initialize on init(), unlink and reinitialize the list headers on
disable() so that any delayed resource destruction doesn't affect future
state.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
5c4c946f64 wayland/keyboard: Cleanup grab state managing
Initialize on init() and just end grab on disable().

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
2783375f8f wayland/keyboard: Cleanup xkb state managing
Initialize and cleanup properly in a _init()/_destroy() function pair.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
35b8f8c072 wayland/keyboard: Initialize static state in GObject init func
https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
89d22addbd wayland/keyboard: Naming and coding style fixes
Some very long lines that stood out were shortened, and an old naming
convention from weston was removed.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
15a4ad4c38 wayland/keyboard: Scope variable correctly
https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
1c28f85173 wayland/keyboard: Stop using temporary wl_list 'l'
The variable name 'l' usually refers to a GList iterator, but here it's
just a short hand for a specific list. Stop using this shorthand, since
it just makes it harder to read what list is used.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
d8a0275418 wayland/keyboard: Simplify getting the serial serial
Use the MetaWaylandInputDevice helper for getting the next event serial
number.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Jonas Ådahl
aeeffbe1f7 wayland/input-device: Add next serial helper
Add a helper function for getting the next input device serial number.
Will be used by keyboard, pointer and touch devices.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-18 13:20:48 +08:00
Rui Matos
ac9a113478 MetaIdleMonitorNative: initialize last event timestamp
If this isn't initialized and an idle watch gets instanced before
meta_idle_monitor_native_reset_idletime() gets called, that idle watch
would get triggered as soon as we hit the main loop.

This was causing gnome-session to go into idle mode at session start
thus making gnome-shell lock the screen.

In the past this bug was being masked by either logind emiting
session active signals or a stray input event making it through at
startup.

https://bugzilla.gnome.org/show_bug.cgi?id=772839
2016-10-17 13:48:56 +02:00
Rui Matos
5ec5e29422 clutter/stage: Fix framebuffer capture origin offset (again)
Commit 5fbb479301 was wrong too. What we
really want to do here is getting view relative coordinates given the
view's and the rectangle's global coordinates so we need to subtract
the view's origin from the rectangle's.

https://bugzilla.gnome.org/show_bug.cgi?id=771502
2016-10-17 13:48:56 +02:00
Rui Matos
95e5786833 MetaWaylandDataSourcePrimary: use the correct parent GType
https://bugzilla.gnome.org/show_bug.cgi?id=771019
2016-10-17 13:48:56 +02:00
Kjartan Maraas
325e9d374b Updated Norwegian bokmål translation from Kjartan Maraas. 2016-10-16 19:09:09 +02:00
Kjartan Maraas
31043dd58a Updated Norwegian bokmål translation from Kjartan Maraas. 2016-10-16 19:07:02 +02:00
Kjartan Maraas
e1685f6ac2 Updated Norwegian bokmål translation. 2016-10-15 17:11:35 +02:00
Theppitak Karoonboonyanan
3071c9efbc Fix typo in Thai translation 2016-10-13 11:23:10 +07:00
Florian Müllner
f63bb024fa Bump version to 3.22.1
Update NEWS.
2016-10-11 00:34:34 +02:00
Florian Müllner
bccff5bdd8 window: Expose Flatpak application ID
GNOME Shell's window matching currently fails frequently with Flatpak
applications, as one of the primary hints used to link windows with
.desktop files - the WM_CLASS - no longer matches when flatpak renames
the exported .desktop file. Luckily, Flatpak provides us with a fail-safe
way to map from the PID to the corresponding application ID, so expose an
appropriate method that allows GNOME Shell to reliably match windows to
the corresponding Flatpak app.

https://bugzilla.gnome.org/show_bug.cgi?id=772614
2016-10-10 23:35:02 +02:00
Florian Müllner
e9944350d3 delete: Share some code between X11 and wayland
In order to kill a window, on both X11 and wayland we first try to
kill(3) the corresponding process, so we can add the newly added
get_client_pid() method to share that code.

https://bugzilla.gnome.org/show_bug.cgi?id=772613
2016-10-10 23:35:02 +02:00
Florian Müllner
1fab6e69b7 window: Add get_client_pid() method
It is often useful to identify the client process that created
a particular window, however the existing meta_window_get_pid()
method relies on _NET_WM_PID, which is only available on X11 and
depends on applications to set it correctly (which may not even
be possible when the app runs in its own PID namespace as Flatpak
apps do). So add a get_client_pid() method that uses windowing
system facilities to resolve the PID associated with a particular
window.

https://bugzilla.gnome.org/show_bug.cgi?id=772613
2016-10-10 23:35:01 +02:00
Jonas Ådahl
f89162ee73 wayland/pointer: Unset pointer focus when disabled
Previously the focus was reset implicitly by a memset() on the whole
MetaWaylandPointer struct. When MetaWaylandPointer was turned into a
GObject, this was not possible any more, and the focus was not updated
properly.

https://bugzilla.gnome.org/show_bug.cgi?id=771646
2016-10-10 23:35:01 +02:00
Rui Matos
5261638bfd meta-monitor-config: Look at an output's modes directly when assigning
Going through the global mode pool and then checking if the mode is
available for a given output is pointless work since we can look at
the output's available modes directly.

This implicitly changes how we choose the default mode since, instead
of relying on the sort order of the global modes array, we now rely on
the sort order of the output modes array. Still not ideal, but at
least it makes more sense since the global array is essentially
unsorted.

https://bugzilla.gnome.org/show_bug.cgi?id=772176
2016-10-10 22:37:13 +02:00
Rui Matos
04b75c45f8 MetaMonitorManagerKms: stop taking drmModeModeInfo.vrefresh directly
As in the previous commit, this value already has mode flags baked in
and we can always get the value we need by computing it ourselves.

https://bugzilla.gnome.org/show_bug.cgi?id=772176
2016-10-10 22:37:11 +02:00
Rui Matos
a50950cf8f MetaMonitorManagerKms: stop accounting for mode flags in refresh rates
This isn't technically needed and, in fact, makes us default to
interlaced modes in some cases which isn't desirable.

Note that X doesn't account for these flags either for its mode
refresh rates.

https://bugzilla.gnome.org/show_bug.cgi?id=772176
2016-10-10 22:36:47 +02:00
Florian Müllner
f1850e0d61 monitor-manager-kms: Fix compiler warning
As the m format specifier doesn't consume any arguments, the number
of varargs currently doesn't match the number of specifiers; the
failed transform may be relevant, so include it in the message
instead of removing the excess argument.
2016-10-08 22:38:26 +02:00
Carlos Garnacho
e3dab70754 backends: Use fallback rotation if native DRM plane rotation failed
Blacklist the HW mode so we fallback gracefully to our own paths.

https://bugzilla.gnome.org/show_bug.cgi?id=772512
2016-10-07 17:19:46 +02:00
Carlos Garnacho
b3eac93c4c xwayland: Ignore selection request not meant to our internal window
There may be other windows managing selection whose events are seen in
our GDK event filter, like st-clipboard in gnome-shell, we should in
that case not interfere on Selection/SelectionRequest events that are
not meant for us.

This fixes an odd feedback loop where requesting clipboard contents from
wayland results in a XConvertRequest call and a SelectionRequest event
that is interpreted by mutter as a request from another X11 client, so
the current data source is poked for content, which happens to be the
X11 bridge, which does a XConvertRequest to get contents... This is only
broken after the many nested async operations create enough pipes and
cancellables to run out of fds.

Adding checks to ensure only events meant to our "selection owner"
window are managed prevent this unintended loop to happen in the first
place.

https://bugzilla.gnome.org/show_bug.cgi?id=760745
2016-10-07 16:05:22 +02:00
Milo Casagrande
a9e386e1af Updated Italian translation 2016-10-03 09:50:50 +00:00
Olav Vitters
028157081c Fix string format build error
backends/meta-input-settings.c:1245:27: error: format '%lx' expects
argument of type 'long unsigned int', but argument 3 has type 'guint64
{aka long long unsigned int}' [-Werror=format=]
2016-09-22 21:00:29 +02:00
Inaki Larranaga Murgoitio
a65c344743 Update Basque language 2016-09-19 13:44:45 +02:00
37 changed files with 1929 additions and 1949 deletions

35
NEWS
View File

@@ -1,3 +1,38 @@
3.22.2
======
* Really fix framebuffer capture origin offset [Rui; #771502]
* Fix session going into idle mode immediately on startup [Rui; #772839]
* Fix mirror mode with stage views [Rui; #773115]
* Improve pointer constraints support [Jonas; #771859]
* Stack docks below other windows on fullscreen monitors [Rui; #772937]
* Fix switching between two finger- and edge scrolling on wayland [Rui; #771744]
* Fix popup grabs blocking screen lock on wayland [Rui; #771235]
* Fix various crashes on wayland [Jonas; #771646, #771858]
* Fix various placement issues on wayland [Jonas, Sjoerd, Olivier; #768039,
#771841, #773141, #772729]
* Misc. bug fixes [Rui, Jonas, Olivier; #771019, #773116, #772914, #773210]
Contributors:
Jonas Ådahl, Olivier Fourdan, Rui Matos, Sjoerd Simons
Translations:
Theppitak Karoonboonyanan [th], Kjartan Maraas [nb], liushuyu [zh_CN],
YunQiang Su [zh_CN]
3.22.1
======
* Fix feedback loop between StClipboard and X11 bridge [Carlos; #760745]
* Fall back gracefully if DRM plane rotation fails [Carlos; #772512]
* Approximate native monitor backend behavior to X [Rui; #772176]
* Fix crash on VT switch on wayland [Jonas; #771646]
* Expose Flatpak ID for application matching [Florian; #772613, #772614]
Contributors:
Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner, Olav Vitters
Translations:
Inaki Larranaga Murgoitio [eu], Milo Casagrande [it]
3.22.0
======
* Fix wayland crashes [Jonas; #771305, #771345, #770940, #771495]

View File

@@ -4712,8 +4712,8 @@ capture_view (ClutterStage *stage,
clutter_stage_view_get_layout (view, &view_layout);
cogl_framebuffer_read_pixels_into_bitmap (framebuffer,
view_layout.x + rect->x,
view_layout.y + rect->y,
rect->x - view_layout.x,
rect->y - view_layout.y,
COGL_READ_PIXELS_COLOR_BUFFER,
bitmap);

View File

@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [22])
m4_define([mutter_micro_version], [0])
m4_define([mutter_micro_version], [2])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])
@@ -85,6 +85,7 @@ MUTTER_PC_MODULES="
xrender
x11-xcb
xcb-randr
xcb-res
"
GLIB_GSETTINGS

271
po/eu.po
View File

@@ -9,9 +9,10 @@
msgid ""
msgstr ""
"Project-Id-Version: mutter master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-03-23 17:05+0100\n"
"PO-Revision-Date: 2016-03-23 17:06+0100\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
"&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2016-09-07 09:27+0000\n"
"PO-Revision-Date: 2016-09-18 19:02+0100\n"
"Last-Translator: dooteo <dooteo@zundan.com>\n"
"Language-Team: Basque <librezale@librezale.org>\n"
"Language: eu\n"
@@ -21,255 +22,255 @@ msgstr ""
"X-Generator: Lokalize 2.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../data/50-mutter-navigation.xml.in.h:1
#: data/50-mutter-navigation.xml:6
msgid "Navigation"
msgstr "Nabigazioa"
#: ../data/50-mutter-navigation.xml.in.h:2
#: data/50-mutter-navigation.xml:9
msgid "Move window to workspace 1"
msgstr "Eraman leihoa 1. laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:3
#: data/50-mutter-navigation.xml:12
msgid "Move window to workspace 2"
msgstr "Eraman leihoa 2. laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:4
#: data/50-mutter-navigation.xml:15
msgid "Move window to workspace 3"
msgstr "Eraman leihoa 3. laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:5
#: data/50-mutter-navigation.xml:18
msgid "Move window to workspace 4"
msgstr "Eraman leihoa 4. laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:6
#: data/50-mutter-navigation.xml:21
msgid "Move window to last workspace"
msgstr "Eraman leihoa azkeneko laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:7
#: data/50-mutter-navigation.xml:24
msgid "Move window one workspace to the left"
msgstr "Eraman leihoa laneko area bat ezkerrera"
#: ../data/50-mutter-navigation.xml.in.h:8
#: data/50-mutter-navigation.xml:27
msgid "Move window one workspace to the right"
msgstr "Eraman leihoa laneko area bat eskuinera"
#: ../data/50-mutter-navigation.xml.in.h:9
#: data/50-mutter-navigation.xml:30
msgid "Move window one workspace up"
msgstr "Eraman leihoa laneko area bat gora"
#: ../data/50-mutter-navigation.xml.in.h:10
#: data/50-mutter-navigation.xml:33
msgid "Move window one workspace down"
msgstr "Eraman leihoa laneko area bat behera"
#: ../data/50-mutter-navigation.xml.in.h:11
#: data/50-mutter-navigation.xml:36
msgid "Move window one monitor to the left"
msgstr "Eraman leihoa monitore bat ezkerrera"
#: ../data/50-mutter-navigation.xml.in.h:12
#: data/50-mutter-navigation.xml:39
msgid "Move window one monitor to the right"
msgstr "Eraman leihoa monitore bat eskuinera"
#: ../data/50-mutter-navigation.xml.in.h:13
#: data/50-mutter-navigation.xml:42
msgid "Move window one monitor up"
msgstr "Eraman leihoa monitore bat gora"
#: ../data/50-mutter-navigation.xml.in.h:14
#: data/50-mutter-navigation.xml:45
msgid "Move window one monitor down"
msgstr "Eraman leihoa monitore bat behera"
#: ../data/50-mutter-navigation.xml.in.h:15
#: data/50-mutter-navigation.xml:49
msgid "Switch applications"
msgstr "Aldatu aplikazioz"
#: ../data/50-mutter-navigation.xml.in.h:16
#: data/50-mutter-navigation.xml:54
msgid "Switch to previous application"
msgstr "Aldatu aurreko aplikaziora"
#: ../data/50-mutter-navigation.xml.in.h:17
#: data/50-mutter-navigation.xml:58
msgid "Switch windows"
msgstr "Aldatu leihoz"
#: ../data/50-mutter-navigation.xml.in.h:18
#: data/50-mutter-navigation.xml:63
msgid "Switch to previous window"
msgstr "Aldatu aurreko leihora"
#: ../data/50-mutter-navigation.xml.in.h:19
#: data/50-mutter-navigation.xml:67
msgid "Switch windows of an application"
msgstr "Aldatu aplikazio baten leihoen artean"
#: ../data/50-mutter-navigation.xml.in.h:20
#: data/50-mutter-navigation.xml:72
msgid "Switch to previous window of an application"
msgstr "Aldatu aplikazio baten aurreko leihora"
#: ../data/50-mutter-navigation.xml.in.h:21
#: data/50-mutter-navigation.xml:76
msgid "Switch system controls"
msgstr "Aldatu sistemaren kontrolak"
#: ../data/50-mutter-navigation.xml.in.h:22
#: data/50-mutter-navigation.xml:81
msgid "Switch to previous system control"
msgstr "Aldatu aurreko sistemaren kontrolera"
#: ../data/50-mutter-navigation.xml.in.h:23
#: data/50-mutter-navigation.xml:85
msgid "Switch windows directly"
msgstr "Aldatu leihoa zuzenean"
#: ../data/50-mutter-navigation.xml.in.h:24
#: data/50-mutter-navigation.xml:90
msgid "Switch directly to previous window"
msgstr "Aldatu zuzenean aurreko leihora"
#: ../data/50-mutter-navigation.xml.in.h:25
#: data/50-mutter-navigation.xml:94
msgid "Switch windows of an app directly"
msgstr "Aldatu aplikazio baten leihoa zuzenean"
#: ../data/50-mutter-navigation.xml.in.h:26
#: data/50-mutter-navigation.xml:99
msgid "Switch directly to previous window of an app"
msgstr "Aldatu zuzenean aplik. baten aurreko leihora"
#: ../data/50-mutter-navigation.xml.in.h:27
#: data/50-mutter-navigation.xml:103
msgid "Switch system controls directly"
msgstr "Aldatu sistemaren kontrolak zuzenean"
#: ../data/50-mutter-navigation.xml.in.h:28
#: data/50-mutter-navigation.xml:108
msgid "Switch directly to previous system control"
msgstr "Aldatu zuzenean aurreko sistemaren kontrolera"
#: ../data/50-mutter-navigation.xml.in.h:29
#: data/50-mutter-navigation.xml:111
msgid "Hide all normal windows"
msgstr "Ezkutatu leiho arrunt guztiak"
#: ../data/50-mutter-navigation.xml.in.h:30
#: data/50-mutter-navigation.xml:114
msgid "Switch to workspace 1"
msgstr "Aldatu 1. laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:31
#: data/50-mutter-navigation.xml:117
msgid "Switch to workspace 2"
msgstr "Aldatu 2. laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:32
#: data/50-mutter-navigation.xml:120
msgid "Switch to workspace 3"
msgstr "Aldatu 3. laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:33
#: data/50-mutter-navigation.xml:123
msgid "Switch to workspace 4"
msgstr "Aldatu 4. laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:34
#: data/50-mutter-navigation.xml:126
msgid "Switch to last workspace"
msgstr "Aldatu azkeneko laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:35
#: data/50-mutter-navigation.xml:129
msgid "Move to workspace left"
msgstr "Eraman ezkerreko laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:36
#: data/50-mutter-navigation.xml:132
msgid "Move to workspace right"
msgstr "Eraman eskuineko laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:37
#: data/50-mutter-navigation.xml:135
msgid "Move to workspace above"
msgstr "Eraman gaineko laneko areara"
#: ../data/50-mutter-navigation.xml.in.h:38
#: data/50-mutter-navigation.xml:138
msgid "Move to workspace below"
msgstr "Eraman azpiko laneko areara"
#: ../data/50-mutter-system.xml.in.h:1
#: data/50-mutter-system.xml:6
msgid "System"
msgstr "Sistema"
#: ../data/50-mutter-system.xml.in.h:2
#: data/50-mutter-system.xml:8
msgid "Show the run command prompt"
msgstr "Erakutsi gonbitea komandoa exekutatzeko"
#: ../data/50-mutter-system.xml.in.h:3
#: data/50-mutter-system.xml:10
msgid "Show the activities overview"
msgstr "Erakutsi jardueren aurkezpen orokorra"
#: ../data/50-mutter-windows.xml.in.h:1
#: data/50-mutter-windows.xml:6
msgid "Windows"
msgstr "Leihoak"
#: ../data/50-mutter-windows.xml.in.h:2
#: data/50-mutter-windows.xml:8
msgid "Activate the window menu"
msgstr "Aktibatu leiho-menua"
#: ../data/50-mutter-windows.xml.in.h:3
#: data/50-mutter-windows.xml:10
msgid "Toggle fullscreen mode"
msgstr "Txandakatu pantaila osoaren modua"
#: ../data/50-mutter-windows.xml.in.h:4
#: data/50-mutter-windows.xml:12
msgid "Toggle maximization state"
msgstr "Txandakatu maximizatze-egoera"
#: ../data/50-mutter-windows.xml.in.h:5
#: data/50-mutter-windows.xml:14
msgid "Maximize window"
msgstr "Maximizatu leihoa"
#: ../data/50-mutter-windows.xml.in.h:6
#: data/50-mutter-windows.xml:16
msgid "Restore window"
msgstr "Leheneratu leihoa"
#: ../data/50-mutter-windows.xml.in.h:7
#: data/50-mutter-windows.xml:18
msgid "Toggle shaded state"
msgstr "Txandakatu bildutako egoera"
#: ../data/50-mutter-windows.xml.in.h:8
#: data/50-mutter-windows.xml:20
msgid "Close window"
msgstr "Itxi leihoa"
#: ../data/50-mutter-windows.xml.in.h:9
#: data/50-mutter-windows.xml:22
msgid "Hide window"
msgstr "Ezkutatu leihoa"
#: ../data/50-mutter-windows.xml.in.h:10
#: data/50-mutter-windows.xml:24
msgid "Move window"
msgstr "Aldatu leihoa lekuz"
#: ../data/50-mutter-windows.xml.in.h:11
#: data/50-mutter-windows.xml:26
msgid "Resize window"
msgstr "Aldatu leihoaren tamaina"
#: ../data/50-mutter-windows.xml.in.h:12
#: data/50-mutter-windows.xml:29
msgid "Toggle window on all workspaces or one"
msgstr "Txandakatu leihoa laneko area guztietan edo bakar batean egotea"
#: ../data/50-mutter-windows.xml.in.h:13
#: data/50-mutter-windows.xml:31
msgid "Raise window if covered, otherwise lower it"
msgstr "Goratu leihoa beste leiho batek estaltzen badu, bestela beheratu"
#: ../data/50-mutter-windows.xml.in.h:14
#: data/50-mutter-windows.xml:33
msgid "Raise window above other windows"
msgstr "Goratu leihoa beste leihoen gainera"
#: ../data/50-mutter-windows.xml.in.h:15
#: data/50-mutter-windows.xml:35
msgid "Lower window below other windows"
msgstr "Beheratu leihoa beste leihoen azpira"
#: ../data/50-mutter-windows.xml.in.h:16
#: data/50-mutter-windows.xml:37
msgid "Maximize window vertically"
msgstr "Maximizatu leihoa bertikalki"
#: ../data/50-mutter-windows.xml.in.h:17
#: data/50-mutter-windows.xml:39
msgid "Maximize window horizontally"
msgstr "Maximizatu leihoa horizontalki"
#: ../data/50-mutter-windows.xml.in.h:18
#: data/50-mutter-windows.xml:43
msgid "View split on left"
msgstr "Ikusi zatia ezkerrean"
#: ../data/50-mutter-windows.xml.in.h:19
#: data/50-mutter-windows.xml:47
msgid "View split on right"
msgstr "Ikusi zatia eskuinean"
#: ../data/mutter.desktop.in.h:1
#: data/mutter.desktop.in:4
msgid "Mutter"
msgstr "Mutter"
#: ../data/org.gnome.mutter.gschema.xml.in.h:1
#: data/org.gnome.mutter.gschema.xml.in:7
msgid "Modifier to use for extended window management operations"
msgstr "Aldatzailea leihoak kudeatzeko eragiketa hedatuetan erabiltzeko"
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
#: data/org.gnome.mutter.gschema.xml.in:8
msgid ""
"This key will initiate the \"overlay\", which is a combination window "
"overview and application launching system. The default is intended to be the "
@@ -281,11 +282,11 @@ msgstr ""
"Lehenetsi gisa, PC ordenagailuko \"Windows tekla\" da. Tekla konbinazio hau "
"lehenetsia izatea edo kate hutz gisa ezartzea da."
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
#: data/org.gnome.mutter.gschema.xml.in:20
msgid "Attach modal dialogs"
msgstr "Erantsi elkarrizketa-koadro modala"
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
#: data/org.gnome.mutter.gschema.xml.in:21
msgid ""
"When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with "
@@ -295,11 +296,11 @@ msgstr ""
"koadro modalak agertuko dira leiho gurasoko titulu-barrari erantsita eta "
"leiho gurasoarekin batera mugituko dira."
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
#: data/org.gnome.mutter.gschema.xml.in:30
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Ertzeko lauza gaitzea pantailaren ertzetan leihoak jaregitean "
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
#: data/org.gnome.mutter.gschema.xml.in:31
msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available "
@@ -310,11 +311,11 @@ msgstr ""
"erabilgarriaren erdia estaltzeko. Pantailaren goiko ertzean leihoak "
"jaregitean, hauek erabat maximizatuko dira."
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
#: data/org.gnome.mutter.gschema.xml.in:40
msgid "Workspaces are managed dynamically"
msgstr "Laneko areak dinamikoki kudeatzen dira"
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
#: data/org.gnome.mutter.gschema.xml.in:41
msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
@@ -324,11 +325,11 @@ msgstr ""
"('org.gnome.desktop.wm.preferences'-eko 'num-workspaces' gakoak zehazten du) "
"daukan zehazten du ."
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
#: data/org.gnome.mutter.gschema.xml.in:50
msgid "Workspaces only on primary"
msgstr "Laneko areak soilik nagusian"
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
#: data/org.gnome.mutter.gschema.xml.in:51
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
@@ -336,11 +337,11 @@ msgstr ""
"Laneko areaz aldatzean pantaila guztietako leihoei eragingo dien edo "
"pantaila nagusiko leihoei soilik zehazten du."
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
#: data/org.gnome.mutter.gschema.xml.in:59
msgid "No tab popup"
msgstr "Laster-fitxarik ez"
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
#: data/org.gnome.mutter.gschema.xml.in:60
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
@@ -348,11 +349,11 @@ msgstr ""
"Leihoen artean aldatzean laster-leiho eta nabarmentzeko markoen erabilpena "
"desgaitu behar den edo ez zehazten du."
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
#: data/org.gnome.mutter.gschema.xml.in:68
msgid "Delay focus changes until the pointer stops moving"
msgstr "Atzeratu fokuaren aldaketa erakuslea mugitzeari utzi arte"
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
#: data/org.gnome.mutter.gschema.xml.in:69
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
@@ -362,11 +363,11 @@ msgstr ""
"bada, fokua ez da berehala aldatuko leiho batean sartzean baizik eta soilik "
"erakuslea gelditzean."
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
#: data/org.gnome.mutter.gschema.xml.in:79
msgid "Draggable border width"
msgstr "Ertz arrastragarriaren zabalera"
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
#: data/org.gnome.mutter.gschema.xml.in:80
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -374,11 +375,11 @@ msgstr ""
"Ertz arrastragarri guztien kopurua. Gaiaren ertz ikusgaiak ez badira "
"nahikoak, ertz ikusezinak gehituko dira balio honekin bat etortzeko."
#: ../data/org.gnome.mutter.gschema.xml.in.h:17
#: data/org.gnome.mutter.gschema.xml.in:89
msgid "Auto maximize nearly monitor sized windows"
msgstr "Maximizatu automatikoki monitorearen tamainaren gertuko leihoak"
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
#: data/org.gnome.mutter.gschema.xml.in:90
msgid ""
"If enabled, new windows that are initially the size of the monitor "
"automatically get maximized."
@@ -386,11 +387,11 @@ msgstr ""
"Gaituta badago, ia monitorearen tamainara iristen diren leiho berriak "
"automatikoki maximizatuko ditu."
#: ../data/org.gnome.mutter.gschema.xml.in.h:19
#: data/org.gnome.mutter.gschema.xml.in:98
msgid "Place new windows in the center"
msgstr "Jarri leiho berriak zentroan"
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
#: data/org.gnome.mutter.gschema.xml.in:99
msgid ""
"When true, the new windows will always be put in the center of the active "
"screen of the monitor."
@@ -398,85 +399,94 @@ msgstr ""
"TRUE (egia) denean, leiho berriak beti jarriko dira monitorearen pantaila "
"aktiboaren zentroan."
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
#: data/org.gnome.mutter.gschema.xml.in:120
msgid "Select window from tab popup"
msgstr "Hautatu leihoa laster-fitxatik"
#: ../data/org.gnome.mutter.gschema.xml.in.h:22
#: data/org.gnome.mutter.gschema.xml.in:125
msgid "Cancel tab popup"
msgstr "Utzi laster-fitxa"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1"
msgstr "Aldatu 1. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
#: data/org.gnome.mutter.wayland.gschema.xml.in:10
msgid "Switch to VT 2"
msgstr "Aldatu 2. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
#: data/org.gnome.mutter.wayland.gschema.xml.in:14
msgid "Switch to VT 3"
msgstr "Aldatu 3. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
#: data/org.gnome.mutter.wayland.gschema.xml.in:18
msgid "Switch to VT 4"
msgstr "Aldatu 4. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
#: data/org.gnome.mutter.wayland.gschema.xml.in:22
msgid "Switch to VT 5"
msgstr "Aldatu 5. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
#: data/org.gnome.mutter.wayland.gschema.xml.in:26
msgid "Switch to VT 6"
msgstr "Aldatu 6. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
#: data/org.gnome.mutter.wayland.gschema.xml.in:30
msgid "Switch to VT 7"
msgstr "Aldatu 7. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#: data/org.gnome.mutter.wayland.gschema.xml.in:34
msgid "Switch to VT 8"
msgstr "Aldatu 8. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#: data/org.gnome.mutter.wayland.gschema.xml.in:38
msgid "Switch to VT 9"
msgstr "Aldatu 9. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#: data/org.gnome.mutter.wayland.gschema.xml.in:42
msgid "Switch to VT 10"
msgstr "Aldatu 10. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#: data/org.gnome.mutter.wayland.gschema.xml.in:46
msgid "Switch to VT 11"
msgstr "Aldatu 11. TBra"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#: data/org.gnome.mutter.wayland.gschema.xml.in:50
msgid "Switch to VT 12"
msgstr "Aldatu 12. TBra"
#: ../src/backends/meta-monitor-manager.c:518
#: src/backends/meta-input-settings.c:1707
#| msgid "Switch system controls"
msgid "Switch monitor"
msgstr "Aldatu monitorea"
#: src/backends/meta-input-settings.c:1709
msgid "Show on-screen help"
msgstr "Erakutsi pantailako laguntza"
#: src/backends/meta-monitor-manager.c:514
msgid "Built-in display"
msgstr "Bertako pantaila"
#: ../src/backends/meta-monitor-manager.c:544
#: src/backends/meta-monitor-manager.c:537
msgid "Unknown"
msgstr "Ezezaguna"
#: ../src/backends/meta-monitor-manager.c:546
#: src/backends/meta-monitor-manager.c:539
msgid "Unknown Display"
msgstr "Pantaila ezezaguna"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:554
#: src/backends/meta-monitor-manager.c:547
#, c-format
msgid "%s %s"
msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:456
#: src/compositor/compositor.c:463
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
@@ -485,20 +495,20 @@ msgstr ""
"Dagoeneko beste konposatze-kudeatzailea ari da exekutatzen \"%2$s\" "
"pantailako %1$i. monitorean \"."
#: ../src/core/bell.c:194
#: src/core/bell.c:194
msgid "Bell event"
msgstr "Soinuaren gertaera"
#: ../src/core/delete.c:127
#: src/core/delete.c:127
#, c-format
msgid "“%s” is not responding."
msgstr "'%s'(e)k ez du erantzuten."
#: ../src/core/delete.c:129
#: src/core/delete.c:129
msgid "Application is not responding."
msgstr "Aplikazioak ez du erantzuten."
#: ../src/core/delete.c:134
#: src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -506,56 +516,56 @@ msgstr ""
"Aukeratu piskatean zai egotea aplikazioak jarraitzeko edo derrigortu "
"aplikazioa erabat ixtea."
#: ../src/core/delete.c:141
#: src/core/delete.c:141
msgid "_Wait"
msgstr "_Itxaron"
#: ../src/core/delete.c:141
#: src/core/delete.c:141
msgid "_Force Quit"
msgstr "_Behartu ixtera"
#: ../src/core/display.c:555
#: src/core/display.c:590
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Huts egin du X Window sistemaren '%s' pantaila irekitzean\n"
#: ../src/core/main.c:181
#: src/core/main.c:182
msgid "Disable connection to session manager"
msgstr "Desgaitu saio-kudeatzailearen konexioa"
#: ../src/core/main.c:187
#: src/core/main.c:188
msgid "Replace the running window manager"
msgstr "Ordeztu exekutatzen dagoen leiho-kudeatzailea"
#: ../src/core/main.c:193
#: src/core/main.c:194
msgid "Specify session management ID"
msgstr "Zehaztu saio-kudeatzailearen IDa"
#: ../src/core/main.c:198
#: src/core/main.c:199
msgid "X Display to use"
msgstr "X pantaila erabiltzeko"
#: ../src/core/main.c:204
#: src/core/main.c:205
msgid "Initialize session from savefile"
msgstr "Hasieratu saioa babes-fitxategitik"
#: ../src/core/main.c:210
#: src/core/main.c:211
msgid "Make X calls synchronous"
msgstr "Egin X deiak sinkronoak izatea"
#: ../src/core/main.c:217
#: src/core/main.c:218
msgid "Run as a wayland compositor"
msgstr "Exekutatu wayland konposatzaile gisa"
#: ../src/core/main.c:223
#: src/core/main.c:224
msgid "Run as a nested compositor"
msgstr "Exekutatu habiaratutako konposatzaile gisa"
#: ../src/core/main.c:231
#: src/core/main.c:232
msgid "Run as a full display server, rather than nested"
msgstr "Exekutatu pantaila-zerbitzari oso bezala, habiaratuta baino"
#: ../src/core/mutter.c:39
#: src/core/mutter.c:39
#, c-format
msgid ""
"mutter %s\n"
@@ -570,20 +580,20 @@ msgstr ""
"EZ du bermerik; ezta MERKATURATZEKO edo XEDE JAKIN BATERAKO EGOKITASUNAREN "
"BERMERIK ERE.\n"
#: ../src/core/mutter.c:53
#: src/core/mutter.c:53
msgid "Print version"
msgstr "Erakutsi bertsioa"
#: ../src/core/mutter.c:59
#: src/core/mutter.c:59
msgid "Mutter plugin to use"
msgstr "Mutter-en osagaia erabiltzeko"
#: ../src/core/prefs.c:1997
#: src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "%d. laneko area"
#: ../src/core/screen.c:521
#: src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@@ -592,16 +602,21 @@ msgstr ""
"'%s' pantailak badu leiho-kudeatzailea; erabili --replace aukera uneko leiho-"
"kudeatzailea ordezteko."
#: ../src/core/screen.c:603
#: src/core/screen.c:606
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "'%2$s' bistaratzeko %1$d pantaila ez da baliozkoa\n"
#: ../src/core/util.c:121
#: src/core/util.c:120
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter modu xehatuaren euskarririk gabe konpilatu da\n"
#: ../src/x11/session.c:1815
#: src/wayland/meta-wayland-tablet-pad.c:595
#, c-format
msgid "Mode Switch: Mode %d"
msgstr "Modu aldaketa: %d modua"
#: src/x11/session.c:1815
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
@@ -609,7 +624,7 @@ msgstr ""
"Leiho hauek ez dute onartzen &quot;gorde uneko konfigurazioa&quot; eta eskuz "
"berrabiarazi beharko dituzu hurrengo saioa hasten duzunean."
#: ../src/x11/window-props.c:549
#: src/x11/window-props.c:548
#, c-format
msgid "%s (on %s)"
msgstr "%s (%s)"

269
po/it.po
View File

@@ -12,8 +12,8 @@ msgstr ""
"Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2016-03-17 13:44+0000\n"
"PO-Revision-Date: 2016-03-17 21:24+0100\n"
"POT-Creation-Date: 2016-09-07 09:27+0000\n"
"PO-Revision-Date: 2016-10-03 11:50+0200\n"
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"Language: it\n"
@@ -21,261 +21,261 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Poedit 1.8.7\n"
"X-Generator: Poedit 1.8.9\n"
#: ../data/50-mutter-navigation.xml.in.h:1
#: data/50-mutter-navigation.xml:6
msgid "Navigation"
msgstr "Navigazione"
#: ../data/50-mutter-navigation.xml.in.h:2
#: data/50-mutter-navigation.xml:9
msgid "Move window to workspace 1"
msgstr "Sposta la finestra sullo spazio di lavoro 1"
#: ../data/50-mutter-navigation.xml.in.h:3
#: data/50-mutter-navigation.xml:12
msgid "Move window to workspace 2"
msgstr "Sposta la finestra sullo spazio di lavoro 2"
#: ../data/50-mutter-navigation.xml.in.h:4
#: data/50-mutter-navigation.xml:15
msgid "Move window to workspace 3"
msgstr "Sposta la finestra sullo spazio di lavoro 3"
#: ../data/50-mutter-navigation.xml.in.h:5
#: data/50-mutter-navigation.xml:18
msgid "Move window to workspace 4"
msgstr "Sposta la finestra sullo spazio di lavoro 4"
#: ../data/50-mutter-navigation.xml.in.h:6
#: data/50-mutter-navigation.xml:21
msgid "Move window to last workspace"
msgstr "Sposta la finestra sull'ultimo spazio di lavoro"
#: ../data/50-mutter-navigation.xml.in.h:7
#: data/50-mutter-navigation.xml:24
msgid "Move window one workspace to the left"
msgstr "Sposta la finestra sullo spazio di lavoro a sinistra"
#: ../data/50-mutter-navigation.xml.in.h:8
#: data/50-mutter-navigation.xml:27
msgid "Move window one workspace to the right"
msgstr "Sposta la finestra sullo spazio di lavoro a destra"
#: ../data/50-mutter-navigation.xml.in.h:9
#: data/50-mutter-navigation.xml:30
msgid "Move window one workspace up"
msgstr "Sposta la finestra sullo spazio di lavoro in alto"
#: ../data/50-mutter-navigation.xml.in.h:10
#: data/50-mutter-navigation.xml:33
msgid "Move window one workspace down"
msgstr "Sposta la finestra sullo spazio di lavoro in basso"
#: ../data/50-mutter-navigation.xml.in.h:11
#: data/50-mutter-navigation.xml:36
msgid "Move window one monitor to the left"
msgstr "Sposta la finestra un monitor a sinistra"
#: ../data/50-mutter-navigation.xml.in.h:12
#: data/50-mutter-navigation.xml:39
msgid "Move window one monitor to the right"
msgstr "Sposta la finestra un monitor a destra"
#: ../data/50-mutter-navigation.xml.in.h:13
#: data/50-mutter-navigation.xml:42
msgid "Move window one monitor up"
msgstr "Sposta la finestra un monitor in su"
#: ../data/50-mutter-navigation.xml.in.h:14
#: data/50-mutter-navigation.xml:45
msgid "Move window one monitor down"
msgstr "Sposta la finestra un monitor in giù"
#: ../data/50-mutter-navigation.xml.in.h:15
#: data/50-mutter-navigation.xml:49
msgid "Switch applications"
msgstr "Evidenzia le applicazioni"
#: ../data/50-mutter-navigation.xml.in.h:16
#: data/50-mutter-navigation.xml:54
msgid "Switch to previous application"
msgstr "Evidenzia l'applicazione precedente"
#: ../data/50-mutter-navigation.xml.in.h:17
#: data/50-mutter-navigation.xml:58
msgid "Switch windows"
msgstr "Evidenzia direttamente le finestre"
#: ../data/50-mutter-navigation.xml.in.h:18
#: data/50-mutter-navigation.xml:63
msgid "Switch to previous window"
msgstr "Evidenzia la finestra precedente"
#: ../data/50-mutter-navigation.xml.in.h:19
#: data/50-mutter-navigation.xml:67
msgid "Switch windows of an application"
msgstr "Evidenzia le finestre di un'applicazione"
#: ../data/50-mutter-navigation.xml.in.h:20
#: data/50-mutter-navigation.xml:72
msgid "Switch to previous window of an application"
msgstr "Evidenzia la finestra precedente di un'applicazione"
#: ../data/50-mutter-navigation.xml.in.h:21
#: data/50-mutter-navigation.xml:76
msgid "Switch system controls"
msgstr "Evidenzia i controlli di sistema"
#: ../data/50-mutter-navigation.xml.in.h:22
#: data/50-mutter-navigation.xml:81
msgid "Switch to previous system control"
msgstr "Evidenzia i controlli di sistema precedenti"
#: ../data/50-mutter-navigation.xml.in.h:23
#: data/50-mutter-navigation.xml:85
msgid "Switch windows directly"
msgstr "Evidenzia direttamente le finestre"
#: ../data/50-mutter-navigation.xml.in.h:24
#: data/50-mutter-navigation.xml:90
msgid "Switch directly to previous window"
msgstr "Evidenzia direttamente la finestra precedente"
#: ../data/50-mutter-navigation.xml.in.h:25
#: data/50-mutter-navigation.xml:94
msgid "Switch windows of an app directly"
msgstr "Evidenzia direttamente le finestre di una applicazione"
#: ../data/50-mutter-navigation.xml.in.h:26
#: data/50-mutter-navigation.xml:99
msgid "Switch directly to previous window of an app"
msgstr "Evidenzia direttamente la finestra precedente di un'applicazione"
#: ../data/50-mutter-navigation.xml.in.h:27
#: data/50-mutter-navigation.xml:103
msgid "Switch system controls directly"
msgstr "Evidenzia direttamente i controlli di sistema"
#: ../data/50-mutter-navigation.xml.in.h:28
#: data/50-mutter-navigation.xml:108
msgid "Switch directly to previous system control"
msgstr "Evidenzia direttamente i controlli di sistema precedenti"
#: ../data/50-mutter-navigation.xml.in.h:29
#: data/50-mutter-navigation.xml:111
msgid "Hide all normal windows"
msgstr "Nasconde tutte le finestre normali"
#: ../data/50-mutter-navigation.xml.in.h:30
#: data/50-mutter-navigation.xml:114
msgid "Switch to workspace 1"
msgstr "Passa allo spazio di lavoro 1"
#: ../data/50-mutter-navigation.xml.in.h:31
#: data/50-mutter-navigation.xml:117
msgid "Switch to workspace 2"
msgstr "Passa allo spazio di lavoro 2"
#: ../data/50-mutter-navigation.xml.in.h:32
#: data/50-mutter-navigation.xml:120
msgid "Switch to workspace 3"
msgstr "Passa allo spazio di lavoro 3"
#: ../data/50-mutter-navigation.xml.in.h:33
#: data/50-mutter-navigation.xml:123
msgid "Switch to workspace 4"
msgstr "Passa allo spazio di lavoro 4"
#: ../data/50-mutter-navigation.xml.in.h:34
#: data/50-mutter-navigation.xml:126
msgid "Switch to last workspace"
msgstr "Passa all'ultimo spazio di lavoro"
#: ../data/50-mutter-navigation.xml.in.h:35
#: data/50-mutter-navigation.xml:129
msgid "Move to workspace left"
msgstr "Sposta su spazio di lavoro a sinistra"
#: ../data/50-mutter-navigation.xml.in.h:36
#: data/50-mutter-navigation.xml:132
msgid "Move to workspace right"
msgstr "Sposta su spazio di lavoro a destra"
#: ../data/50-mutter-navigation.xml.in.h:37
#: data/50-mutter-navigation.xml:135
msgid "Move to workspace above"
msgstr "Sposta su spazio di lavoro in alto"
#: ../data/50-mutter-navigation.xml.in.h:38
#: data/50-mutter-navigation.xml:138
msgid "Move to workspace below"
msgstr "Sposta su spazio di lavoro in basso"
#: ../data/50-mutter-system.xml.in.h:1
#: data/50-mutter-system.xml:6
msgid "System"
msgstr "Sistema"
#: ../data/50-mutter-system.xml.in.h:2
#: data/50-mutter-system.xml:8
msgid "Show the run command prompt"
msgstr "Mostra il prompt esegui comando"
#: ../data/50-mutter-system.xml.in.h:3
#: data/50-mutter-system.xml:10
msgid "Show the activities overview"
msgstr "Mostra la panoramica delle attività"
#: ../data/50-mutter-windows.xml.in.h:1
#: data/50-mutter-windows.xml:6
msgid "Windows"
msgstr "Finestre"
#: ../data/50-mutter-windows.xml.in.h:2
#: data/50-mutter-windows.xml:8
msgid "Activate the window menu"
msgstr "Attiva il menù della finestra"
#: ../data/50-mutter-windows.xml.in.h:3
#: data/50-mutter-windows.xml:10
msgid "Toggle fullscreen mode"
msgstr "Attiva/Disattiva la modalità schermo intero"
#: ../data/50-mutter-windows.xml.in.h:4
#: data/50-mutter-windows.xml:12
msgid "Toggle maximization state"
msgstr "Attiva/Disattiva lo stato massimizzazione"
#: ../data/50-mutter-windows.xml.in.h:5
#: data/50-mutter-windows.xml:14
msgid "Maximize window"
msgstr "Massimizza la finestra"
#: ../data/50-mutter-windows.xml.in.h:6
#: data/50-mutter-windows.xml:16
msgid "Restore window"
msgstr "Ripristina la finestra"
#: ../data/50-mutter-windows.xml.in.h:7
#: data/50-mutter-windows.xml:18
msgid "Toggle shaded state"
msgstr "Attiva/Disattiva lo stato arrotolato"
#: ../data/50-mutter-windows.xml.in.h:8
#: data/50-mutter-windows.xml:20
msgid "Close window"
msgstr "Chiudi la finestra"
#: ../data/50-mutter-windows.xml.in.h:9
#: data/50-mutter-windows.xml:22
msgid "Hide window"
msgstr "Ridimensiona la finestra"
#: ../data/50-mutter-windows.xml.in.h:10
#: data/50-mutter-windows.xml:24
msgid "Move window"
msgstr "Muovi la finestra"
#: ../data/50-mutter-windows.xml.in.h:11
#: data/50-mutter-windows.xml:26
msgid "Resize window"
msgstr "Ridimensiona la finestra"
#: ../data/50-mutter-windows.xml.in.h:12
#: data/50-mutter-windows.xml:29
msgid "Toggle window on all workspaces or one"
msgstr ""
"Attiva/Disattiva la stato «su tutti gli spazi di lavoro» per la finestra"
#: ../data/50-mutter-windows.xml.in.h:13
#: data/50-mutter-windows.xml:31
msgid "Raise window if covered, otherwise lower it"
msgstr "Solleva la finestra se è coperta, in caso contrario l'abbassa"
#: ../data/50-mutter-windows.xml.in.h:14
#: data/50-mutter-windows.xml:33
msgid "Raise window above other windows"
msgstr "Solleva la finestra sopra le altre"
#: ../data/50-mutter-windows.xml.in.h:15
#: data/50-mutter-windows.xml:35
msgid "Lower window below other windows"
msgstr "Abbassa la finestra sotto le altre"
#: ../data/50-mutter-windows.xml.in.h:16
#: data/50-mutter-windows.xml:37
msgid "Maximize window vertically"
msgstr "Massimizza verticalmente la finestra"
#: ../data/50-mutter-windows.xml.in.h:17
#: data/50-mutter-windows.xml:39
msgid "Maximize window horizontally"
msgstr "Massimizza orizzontalmente la finestra"
# scorciatoia per mettere la finestra a mezzo schermo intero sulla sinistra
#
# traduzione infedele, ma "frazionamento della vista a sn/ds" mi pare peggio
#: ../data/50-mutter-windows.xml.in.h:18
#: data/50-mutter-windows.xml:43
msgid "View split on left"
msgstr "Massimizza a sinistra"
#: ../data/50-mutter-windows.xml.in.h:19
#: data/50-mutter-windows.xml:47
msgid "View split on right"
msgstr "Massimizza a destra"
#: ../data/mutter.desktop.in.h:1
#: data/mutter.desktop.in:4
msgid "Mutter"
msgstr "Mutter"
#: ../data/org.gnome.mutter.gschema.xml.in.h:1
#: data/org.gnome.mutter.gschema.xml.in:7
msgid "Modifier to use for extended window management operations"
msgstr "Modificatore da utilizzare per le azioni di gestione finestre estese"
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
#: data/org.gnome.mutter.gschema.xml.in:8
msgid ""
"This key will initiate the \"overlay\", which is a combination window "
"overview and application launching system. The default is intended to be the "
@@ -288,11 +288,11 @@ msgstr ""
"questa scorciatoia sia o il valore predefinito, oppure che sia impostata "
"alla stringa vuota."
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
#: data/org.gnome.mutter.gschema.xml.in:20
msgid "Attach modal dialogs"
msgstr "Dialoghi modali attaccati"
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
#: data/org.gnome.mutter.gschema.xml.in:21
msgid ""
"When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with "
@@ -302,13 +302,13 @@ msgstr ""
"dialoghi modali appaiono attaccati alla barra del titolo della finestra "
"genitore, muovendosi assieme ad essa."
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
#: data/org.gnome.mutter.gschema.xml.in:30
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Abilita il tiling di bordo quando si trascinano le finestre sui bordi dello "
"schermo"
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
#: data/org.gnome.mutter.gschema.xml.in:31
msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available "
@@ -319,11 +319,11 @@ msgstr ""
"in modo da coprire metà dell'area disponibile. Trascinandole sul bordo "
"superiore dello schermo le massimizza completamente."
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
#: data/org.gnome.mutter.gschema.xml.in:40
msgid "Workspaces are managed dynamically"
msgstr "Spazi di lavoro gestiti dinamicamente"
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
#: data/org.gnome.mutter.gschema.xml.in:41
msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
@@ -333,12 +333,12 @@ msgstr ""
"loro numero è fisso (determinato dalla chiave num-workspaces in org.gnome."
"desktop.wm.preferences)."
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
#: data/org.gnome.mutter.gschema.xml.in:50
msgid "Workspaces only on primary"
msgstr "Spazi di lavoro solo sul primario"
# mica ho capito cosa fa...
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
#: data/org.gnome.mutter.gschema.xml.in:51
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
@@ -347,11 +347,11 @@ msgstr ""
"tutti i monitor oppure solo per le finestre sul monitor primario."
# mah... sarebbe "popup quando si fa alt-tab", credo
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
#: data/org.gnome.mutter.gschema.xml.in:59
msgid "No tab popup"
msgstr "Nessun tab popup"
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
#: data/org.gnome.mutter.gschema.xml.in:60
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
@@ -359,11 +359,11 @@ msgstr ""
"Determina se disabilitare l'uso di popup e cornici di evidenziatura nel "
"passare da una finestra all'altra."
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
#: data/org.gnome.mutter.gschema.xml.in:68
msgid "Delay focus changes until the pointer stops moving"
msgstr "Ritarda il cambio del focus fino a quando il puntatore si ferma"
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
#: data/org.gnome.mutter.gschema.xml.in:69
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
@@ -373,11 +373,11 @@ msgstr ""
"\"mouse\", il focus non viene spostato immediatamente quando si passa su una "
"finestra, ma solo quando il puntatore si ferma."
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
#: data/org.gnome.mutter.gschema.xml.in:79
msgid "Draggable border width"
msgstr "Larghezza bordo trascinabile"
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
#: data/org.gnome.mutter.gschema.xml.in:80
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
@@ -386,11 +386,11 @@ msgstr ""
"del tema non sono sufficienti, vengono aggiunti dei bordi invisibili per "
"raggiungere questo valore."
#: ../data/org.gnome.mutter.gschema.xml.in.h:17
#: data/org.gnome.mutter.gschema.xml.in:89
msgid "Auto maximize nearly monitor sized windows"
msgstr "Massimizza automaticamente finestre grandi quasi quanto lo schermo"
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
#: data/org.gnome.mutter.gschema.xml.in:90
msgid ""
"If enabled, new windows that are initially the size of the monitor "
"automatically get maximized."
@@ -398,11 +398,11 @@ msgstr ""
"Se abilitato, le nuove finestre che hanno inizialmente la stessa dimensione "
"del monitor vengono massimizzate automaticamente."
#: ../data/org.gnome.mutter.gschema.xml.in.h:19
#: data/org.gnome.mutter.gschema.xml.in:98
msgid "Place new windows in the center"
msgstr "Posiziona le nuove finestre al centro"
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
#: data/org.gnome.mutter.gschema.xml.in:99
msgid ""
"When true, the new windows will always be put in the center of the active "
"screen of the monitor."
@@ -410,85 +410,93 @@ msgstr ""
"Se impostata a VERO, le nuove finestre verranno sempre posizionate al centro "
"dello schermo attivo."
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
#: data/org.gnome.mutter.gschema.xml.in:120
msgid "Select window from tab popup"
msgstr "Seleziona finestra dal tab popup"
#: ../data/org.gnome.mutter.gschema.xml.in.h:22
#: data/org.gnome.mutter.gschema.xml.in:125
msgid "Cancel tab popup"
msgstr "Annulla tab popup"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
msgid "Switch to VT 1"
msgstr "Passa al VT 1"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
#: data/org.gnome.mutter.wayland.gschema.xml.in:10
msgid "Switch to VT 2"
msgstr "Passa al VT 2"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
#: data/org.gnome.mutter.wayland.gschema.xml.in:14
msgid "Switch to VT 3"
msgstr "Passa al VT 3"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
#: data/org.gnome.mutter.wayland.gschema.xml.in:18
msgid "Switch to VT 4"
msgstr "Passa al VT 4"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
#: data/org.gnome.mutter.wayland.gschema.xml.in:22
msgid "Switch to VT 5"
msgstr "Passa al VT 5"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
#: data/org.gnome.mutter.wayland.gschema.xml.in:26
msgid "Switch to VT 6"
msgstr "Passa al VT 6"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
#: data/org.gnome.mutter.wayland.gschema.xml.in:30
msgid "Switch to VT 7"
msgstr "Passa al VT 7"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
#: data/org.gnome.mutter.wayland.gschema.xml.in:34
msgid "Switch to VT 8"
msgstr "Passa al VT 8"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
#: data/org.gnome.mutter.wayland.gschema.xml.in:38
msgid "Switch to VT 9"
msgstr "Passa al VT 9"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
#: data/org.gnome.mutter.wayland.gschema.xml.in:42
msgid "Switch to VT 10"
msgstr "Passa al VT 10"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
#: data/org.gnome.mutter.wayland.gschema.xml.in:46
msgid "Switch to VT 11"
msgstr "Passa al VT 11"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
#: data/org.gnome.mutter.wayland.gschema.xml.in:50
msgid "Switch to VT 12"
msgstr "Passa al VT 12"
#: ../src/backends/meta-monitor-manager.c:518
#: src/backends/meta-input-settings.c:1707
msgid "Switch monitor"
msgstr "Cambia monitor"
#: src/backends/meta-input-settings.c:1709
msgid "Show on-screen help"
msgstr "Mostra aiuto sullo schermo"
#: src/backends/meta-monitor-manager.c:514
msgid "Built-in display"
msgstr "Display integrato"
#: ../src/backends/meta-monitor-manager.c:544
#: src/backends/meta-monitor-manager.c:537
msgid "Unknown"
msgstr "Sconosciuto"
#: ../src/backends/meta-monitor-manager.c:546
#: src/backends/meta-monitor-manager.c:539
msgid "Unknown Display"
msgstr "Display sconosciuto"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:554
#: src/backends/meta-monitor-manager.c:547
#, c-format
msgid "%s %s"
msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:456
#: src/compositor/compositor.c:463
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
@@ -497,20 +505,20 @@ msgstr ""
"Un altro compositing manager è già in esecuzione sullo schermo %i sul "
"display «%s»."
#: ../src/core/bell.c:192
#: src/core/bell.c:194
msgid "Bell event"
msgstr "Evento campanella"
#: ../src/core/delete.c:127
#: src/core/delete.c:127
#, c-format
msgid "“%s” is not responding."
msgstr "Nessuna risposta da %s."
#: ../src/core/delete.c:129
#: src/core/delete.c:129
msgid "Application is not responding."
msgstr "L'applicazione non risponde."
#: ../src/core/delete.c:134
#: src/core/delete.c:134
msgid ""
"You may choose to wait a short while for it to continue or force the "
"application to quit entirely."
@@ -518,56 +526,56 @@ msgstr ""
"È possibile scegliere di attendere un po' lasciando che l'applicazione "
"continui, oppure forzare la terminazione dell'applicazione."
#: ../src/core/delete.c:141
#: src/core/delete.c:141
msgid "_Wait"
msgstr "_Attendi"
#: ../src/core/delete.c:141
#: src/core/delete.c:141
msgid "_Force Quit"
msgstr "_Forza uscita"
#: ../src/core/display.c:555
#: src/core/display.c:590
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Apertura del display «%s» di X Window System non riuscita\n"
#: ../src/core/main.c:181
#: src/core/main.c:182
msgid "Disable connection to session manager"
msgstr "Disabilita la connessione al gestore di sessione"
#: ../src/core/main.c:187
#: src/core/main.c:188
msgid "Replace the running window manager"
msgstr "Sostituisce il window manager in esecuzione"
#: ../src/core/main.c:193
#: src/core/main.c:194
msgid "Specify session management ID"
msgstr "Specifica l'ID di gestione sessione"
#: ../src/core/main.c:198
#: src/core/main.c:199
msgid "X Display to use"
msgstr "Display X da usare"
#: ../src/core/main.c:204
#: src/core/main.c:205
msgid "Initialize session from savefile"
msgstr "Inizializza la sessione da file salvato"
#: ../src/core/main.c:210
#: src/core/main.c:211
msgid "Make X calls synchronous"
msgstr "Rende le chiamate X sincrone"
#: ../src/core/main.c:217
#: src/core/main.c:218
msgid "Run as a wayland compositor"
msgstr "Esegui come compositor Wayland"
#: ../src/core/main.c:223
#: src/core/main.c:224
msgid "Run as a nested compositor"
msgstr "Esegui come compositor annidato"
#: ../src/core/main.c:231
#: src/core/main.c:232
msgid "Run as a full display server, rather than nested"
msgstr "Esegui come display server invece che annidato"
#: ../src/core/mutter.c:39
#: src/core/mutter.c:39
#, c-format
msgid ""
"mutter %s\n"
@@ -582,20 +590,20 @@ msgstr ""
"NON è fornita alcuna garanzia; neanche di COMMERCIABILITÀ o\n"
"APPLICABILITÀ PER UNO SCOPO PARTICOLARE.\n"
#: ../src/core/mutter.c:53
#: src/core/mutter.c:53
msgid "Print version"
msgstr "Stampa la versione"
#: ../src/core/mutter.c:59
#: src/core/mutter.c:59
msgid "Mutter plugin to use"
msgstr "Plugin Mutter da usare"
#: ../src/core/prefs.c:1997
#: src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Spazio di lavoro %d"
#: ../src/core/screen.c:521
#: src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
@@ -604,17 +612,22 @@ msgstr ""
"Il display «%s» ha già un window manager; provare a utilizzare l'opzione --"
"replace per sostituirlo."
#: ../src/core/screen.c:603
#: src/core/screen.c:606
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Lo schermo %d nel display «%s» non è valido\n"
#: ../src/core/util.c:121
#: src/core/util.c:120
msgid "Mutter was compiled without support for verbose mode\n"
msgstr ""
"Mutter è stato compilato escludendo il supporto per la modalità prolissa\n"
#: ../src/x11/session.c:1815
#: src/wayland/meta-wayland-tablet-pad.c:595
#, c-format
msgid "Mode Switch: Mode %d"
msgstr "Cambio modalità: modalità %d"
#: src/x11/session.c:1815
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
"be restarted manually next time you log in."
@@ -622,7 +635,7 @@ msgstr ""
"Queste finestre non supportano la funzione &quot;salva impostazioni "
"attuali&quot; e dovranno essere riavviate manualmente al prossimo accesso."
#: ../src/x11/window-props.c:549
#: src/x11/window-props.c:548
#, c-format
msgid "%s (on %s)"
msgstr "%s (su %s)"

850
po/nb.po
View File

@@ -1,13 +1,13 @@
# Norwegian bokmål translation of mutter.
# Copyright © 2002-2004 Free Software Foundation, Inc.
# Kjartan Maraas <kmaraas@gnome.org>, 2002-2015.
# Kjartan Maraas <kmaraas@gnome.org>, 2002-2016.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter 3.15.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-03-19 21:23+0100\n"
"PO-Revision-Date: 2015-03-19 21:24+0100\n"
"Project-Id-Version: mutter 3.23.x\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2016-10-15 17:12+0200\n"
"PO-Revision-Date: 2016-10-15 17:12+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
"Language: nb\n"
@@ -15,469 +15,47 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../data/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
msgstr "Navigering"
#: ../data/50-mutter-navigation.xml.in.h:2
msgid "Move window to workspace 1"
msgstr "Flytt vindu til arbeidsområde 1"
#: ../data/50-mutter-navigation.xml.in.h:3
msgid "Move window to workspace 2"
msgstr "Flytt vindu til arbeidsområde 2"
#: ../data/50-mutter-navigation.xml.in.h:4
msgid "Move window to workspace 3"
msgstr "Flytt vindu til arbeidsområde 3"
#: ../data/50-mutter-navigation.xml.in.h:5
msgid "Move window to workspace 4"
msgstr "Flytt vindu til arbeidsområde 4"
#: ../data/50-mutter-navigation.xml.in.h:6
msgid "Move window to last workspace"
msgstr "Flytt vindu til siste arbeidsområde"
#: ../data/50-mutter-navigation.xml.in.h:7
msgid "Move window one workspace to the left"
msgstr "Flytt vindu ett arbeidsområde til venstre"
#: ../data/50-mutter-navigation.xml.in.h:8
msgid "Move window one workspace to the right"
msgstr "Flytt vindu ett arbeidsområde til høyre"
#: ../data/50-mutter-navigation.xml.in.h:9
msgid "Move window one workspace up"
msgstr "Flytt vindu ett arbeidsområde opp"
#: ../data/50-mutter-navigation.xml.in.h:10
msgid "Move window one workspace down"
msgstr "Flytt vindu ett arbeidsområde ned"
#: ../data/50-mutter-navigation.xml.in.h:11
msgid "Move window one monitor to the left"
msgstr "Flytt vindu en skjerm til venstre"
#: ../data/50-mutter-navigation.xml.in.h:12
msgid "Move window one monitor to the right"
msgstr "Flytt vindu en skjerm til høyre"
#: ../data/50-mutter-navigation.xml.in.h:13
msgid "Move window one monitor up"
msgstr "Flytt vindu en skjerm opp"
#: ../data/50-mutter-navigation.xml.in.h:14
msgid "Move window one monitor down"
msgstr "Flytt vindu en skjerm ned"
#: ../data/50-mutter-navigation.xml.in.h:15
msgid "Switch applications"
msgstr "Bytt programmer"
#: ../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"
msgstr "Bytt vinduer"
#: ../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"
msgstr "Bytt mellom et programs vinduer"
#: ../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"
msgstr "Bytt systemkontroller"
#: ../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"
msgstr "Bytt vinduer direkte"
#: ../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"
msgstr "Bytt mellom et programs vinduer direkte"
#: ../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"
msgstr "Bytt systemkontroller direkte"
#: ../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"
msgstr "Skjul alle normale vinduer"
#: ../data/50-mutter-navigation.xml.in.h:30
msgid "Switch to workspace 1"
msgstr "Bytt til arbeidsområde 1"
#: ../data/50-mutter-navigation.xml.in.h:31
msgid "Switch to workspace 2"
msgstr "Bytt til arbeidsområde 2"
#: ../data/50-mutter-navigation.xml.in.h:32
msgid "Switch to workspace 3"
msgstr "Bytt til arbeidsområde 3"
#: ../data/50-mutter-navigation.xml.in.h:33
msgid "Switch to workspace 4"
msgstr "Bytt til arbeidsområde 4"
#: ../data/50-mutter-navigation.xml.in.h:34
msgid "Switch to last workspace"
msgstr "Bytt til siste arbeidsområde"
#: ../data/50-mutter-navigation.xml.in.h:35
msgid "Move to workspace left"
msgstr "Flytt til arbeidsområdet til venstre"
#: ../data/50-mutter-navigation.xml.in.h:36
msgid "Move to workspace right"
msgstr "Flytt til arbeidsområdet til høyre"
#: ../data/50-mutter-navigation.xml.in.h:37
msgid "Move to workspace above"
msgstr "Flytt til arbeidsområdet over"
#: ../data/50-mutter-navigation.xml.in.h:38
msgid "Move to workspace below"
msgstr "Flytt til arbeidsområdet under"
#: ../data/50-mutter-system.xml.in.h:1
msgid "System"
msgstr "System"
#: ../data/50-mutter-system.xml.in.h:2
msgid "Show the run command prompt"
msgstr "Vis kommandolinje"
#: ../data/50-mutter-system.xml.in.h:3
msgid "Show the activities overview"
msgstr "Vis oversikt over aktiviteter"
#: ../data/50-mutter-windows.xml.in.h:1
msgid "Windows"
msgstr "Vinduer"
#: ../data/50-mutter-windows.xml.in.h:2
msgid "Activate the window menu"
msgstr "Aktiver vindumenyen"
#: ../data/50-mutter-windows.xml.in.h:3
msgid "Toggle fullscreen mode"
msgstr "Slå av/på fullskjermmodus"
#: ../data/50-mutter-windows.xml.in.h:4
msgid "Toggle maximization state"
msgstr "Endre tilstand for maksimering"
#: ../data/50-mutter-windows.xml.in.h:5
msgid "Maximize window"
msgstr "Maksimer vindu"
#: ../data/50-mutter-windows.xml.in.h:6
msgid "Restore window"
msgstr "Gjenopprett vindu"
#: ../data/50-mutter-windows.xml.in.h:7
msgid "Toggle shaded state"
msgstr "Endre tilstand for skyggelegging"
#: ../data/50-mutter-windows.xml.in.h:8
msgid "Close window"
msgstr "Lukk vindu"
#: ../data/50-mutter-windows.xml.in.h:9
msgid "Hide window"
msgstr "Skjul vindu"
#: ../data/50-mutter-windows.xml.in.h:10
msgid "Move window"
msgstr "Flytt vindu"
#: ../data/50-mutter-windows.xml.in.h:11
msgid "Resize window"
msgstr "Endre størrelse på vindu"
#: ../data/50-mutter-windows.xml.in.h:12
msgid "Toggle window on all workspaces or one"
msgstr "Slå av/på om vinduet skal vises på alle arbeidsområder eller bare ett"
#: ../data/50-mutter-windows.xml.in.h:13
msgid "Raise window if covered, otherwise lower it"
msgstr "Hev vindu hvis skjult av et annet vindu, senk det ellers"
#: ../data/50-mutter-windows.xml.in.h:14
msgid "Raise window above other windows"
msgstr "Hev vinduet over andre vinduer"
#: ../data/50-mutter-windows.xml.in.h:15
msgid "Lower window below other windows"
msgstr "Senk vinduet under andre vinduer"
#: ../data/50-mutter-windows.xml.in.h:16
msgid "Maximize window vertically"
msgstr "Maksimer vinduet vertikalt"
#: ../data/50-mutter-windows.xml.in.h:17
msgid "Maximize window horizontally"
msgstr "Maksimer vinduet horisontalt"
#: ../data/50-mutter-windows.xml.in.h:18
msgid "View split on left"
msgstr "Visning delt til venstre"
#: ../data/50-mutter-windows.xml.in.h:19
msgid "View split on right"
msgstr "Visning delt til høyre"
#: ../data/mutter.desktop.in.h:1
msgid "Mutter"
msgstr "Mutter"
#: ../data/org.gnome.mutter.gschema.xml.in.h:1
msgid "Modifier to use for extended window management operations"
msgstr "Endringstast som skal brukes for utvidede vindushåndteringsoperasjoner"
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
msgid ""
"This key will initiate the \"overlay\", which is a combination window "
"overview and application launching system. The default is intended to be the "
"\"Windows key\" on PC hardware. It's expected that this binding either the "
"default or set to the empty string."
msgstr ""
"Denne tasten vil initiere «overlay», som er en kombinasjon av vindusoversikt "
"og et system for å starte programmer. Forvalget er ment å være «Windows-"
"tasten» på PC-maskinvare. Det forventes at denne bindingen er satt til "
"forvalg eller en tom streng."
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
msgid "Attach modal dialogs"
msgstr "Fest modale dialoger"
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
msgid ""
"When true, instead of having independent titlebars, modal dialogs appear "
"attached to the titlebar of the parent window and are moved together with "
"the parent window."
msgstr ""
"Hvis denne er satt til sann vil modale dialoger vises festet til "
"tittellinjen på opphavsvinduet og flyttes sammen med dette i stedet for å ha "
"individuelle tittellinjer."
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Slå på kantflising ved slipp av vinduer på skjermkantene"
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
msgid ""
"If enabled, dropping windows on vertical screen edges maximizes them "
"vertically and resizes them horizontally to cover half of the available "
"area. Dropping windows on the top screen edge maximizes them completely."
msgstr ""
"Maksimerer vinduer vertikalt og endrer størrelse horisontalt slik at de "
"dekker halve det tilgjengeligeområdet hvis de slippes på vertikale "
"skjermkanter. Hvis vindu slippes på øverste kant av skjermen maksimeres de "
"fullstendig."
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically"
msgstr "Arbeidsområder håndteres dynamisk"
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
msgid ""
"Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)."
msgstr ""
"Bestemmer om arbeidsområder skal håndteres dynamisk eller om det er et fast "
"antall arbeidsområder (bestemt av num-workspaces nøkkelen i org.gnome."
"desktop.wm.preferences)."
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary"
msgstr "Arbeidsområder kun på primær skjerm"
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
msgid ""
"Determines whether workspace switching should happen for windows on all "
"monitors or only for windows on the primary monitor."
msgstr ""
"Bestemmer om bytting mellom arbeidsområder skal skje for vinduer på alle "
"skjermer eller kun på primær skjerm."
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup"
msgstr "Ingen tabulatordialog"
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
msgid ""
"Determines whether the use of popup and highlight frame should be disabled "
"for window cycling."
msgstr ""
"Bestemmer om bruk av dialog og uthevingsramme skal slås av for bytting "
"mellom vinduer."
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
msgid "Delay focus changes until the pointer stops moving"
msgstr "Utsett fokusendringer til pekeren slutter å bevege seg"
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
msgid ""
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
"the focus will not be changed immediately when entering a window, but only "
"after the pointer stops moving."
msgstr ""
"Hvis denne settes til «true» og fokusmodus er enten «sloppy» eller «mouse» "
"så vil fokus ikke endres med en gang markøren kommer inn i et vindu, men i "
"stedet når markørens bevegelse stopper."
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width"
msgstr "Bredde på drakant"
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
msgid ""
"The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value."
msgstr ""
"Total mengde med drakant. Hvis temas synlige kanter ikke er nok vil usynlige "
"kanter legges til for å imøtekomme denne verdien."
#: ../data/org.gnome.mutter.gschema.xml.in.h:17
msgid "Auto maximize nearly monitor sized windows"
msgstr "Maksimer vinduer automatisk hvis de er nesten like store som skjermen"
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
msgid ""
"If enabled, new windows that are initially the size of the monitor "
"automatically get maximized."
msgstr ""
"Nye vinduer som i utgangspunktet er samme størrelse som skjermen vil "
"automatisk bli maksimert hvis denne slås på."
#: ../data/org.gnome.mutter.gschema.xml.in.h:19
msgid "Place new windows in the center"
msgstr "Plasser nye vinduer i senter"
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
msgid ""
"When true, the new windows will always be put in the center of the active "
"screen of the monitor."
msgstr ""
"Når denne er «true» vil mye vinduer alltid plasseres midt på aktivt område "
"på skjermen."
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
msgid "Select window from tab popup"
msgstr "Fjern vindu fra tabulatordialog"
#: ../data/org.gnome.mutter.gschema.xml.in.h:22
msgid "Cancel tab popup"
msgstr "Avbryt tabulatordialog"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
msgid "Switch to VT 1"
msgstr "Bytt til VT 1"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
msgid "Switch to VT 2"
msgstr "Bytt til VT 2"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
msgid "Switch to VT 3"
msgstr "Bytt til VT 3"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
msgid "Switch to VT 4"
msgstr "Bytt til VT 4"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
msgid "Switch to VT 5"
msgstr "Bytt til VT 5"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
msgid "Switch to VT 6"
msgstr "Bytt til VT 6"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
msgid "Switch to VT 7"
msgstr "Bytt til VT 7"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
msgid "Switch to VT 8"
msgstr "Bytt til VT 8"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
msgid "Switch to VT 9"
msgstr "Bytt til VT 9"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
msgid "Switch to VT 10"
msgstr "Bytt til VT 10"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
msgid "Switch to VT 11"
msgstr "Bytt til VT 11"
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
msgid "Switch to VT 12"
msgstr "Bytt til VT 12"
#: ../src/backends/meta-monitor-manager.c:364
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
#. * mapping through the available outputs.
#.
#: ../src/backends/meta-input-settings.c:1847
msgid "Switch monitor"
msgstr "Bytt skjerm"
#: ../src/backends/meta-input-settings.c:1849
msgid "Show on-screen help"
msgstr "Vis hjelp på skjermen"
#: ../src/backends/meta-monitor-manager.c:514
msgid "Built-in display"
msgstr "Innebygget skjerm"
#: ../src/backends/meta-monitor-manager.c:391
#: ../src/backends/meta-monitor-manager.c:537
msgid "Unknown"
msgstr "Ukjent"
#: ../src/backends/meta-monitor-manager.c:393
#: ../src/backends/meta-monitor-manager.c:539
msgid "Unknown Display"
msgstr "Ukjent skjerm"
#. TRANSLATORS: this is a monitor vendor name, followed by a
#. * size in inches, like 'Dell 15"'
#.
#: ../src/backends/meta-monitor-manager.c:401
#: ../src/backends/meta-monitor-manager.c:547
#, c-format
msgid "%s %s"
msgstr "%s %s"
#. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit
#: ../src/compositor/compositor.c:456
#: ../src/compositor/compositor.c:463
#, c-format
msgid ""
"Another compositing manager is already running on screen %i on display \"%s"
"\"."
msgstr "En annen compositing manager kjører skjerm %i på display «%s»."
#: ../src/core/bell.c:185
#: ../src/core/bell.c:194
msgid "Bell event"
msgstr "Klokkehendelse"
@@ -498,48 +76,52 @@ msgstr ""
"Du kan velge å vente en kort stund for å se om det fortsetter eller tvinge "
"programmet til å avslutte helt."
#: ../src/core/delete.c:141
msgid "_Wait"
msgstr "_Vent"
#: ../src/core/delete.c:141
msgid "_Force Quit"
msgstr "_Tvungen nedstenging"
#: ../src/core/display.c:562
#: ../src/core/delete.c:141
msgid "_Wait"
msgstr "_Vent"
#: ../src/core/display.c:590
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Feil under åpning av X Window System skjerm «%s»\n"
#: ../src/core/main.c:176
#: ../src/core/main.c:182
msgid "Disable connection to session manager"
msgstr "Deaktiver tilkobling til sesjonshåndtereren"
#: ../src/core/main.c:182
#: ../src/core/main.c:188
msgid "Replace the running window manager"
msgstr "Erstatt kjørende vindushåndterer"
#: ../src/core/main.c:188
#: ../src/core/main.c:194
msgid "Specify session management ID"
msgstr "Oppgi sesjonshåndterings-ID"
#: ../src/core/main.c:193
#: ../src/core/main.c:199
msgid "X Display to use"
msgstr "X-skjerm som skal brukes"
#: ../src/core/main.c:199
#: ../src/core/main.c:205
msgid "Initialize session from savefile"
msgstr "Initier sesjonen fra en lagret fil"
#: ../src/core/main.c:205
#: ../src/core/main.c:211
msgid "Make X calls synchronous"
msgstr "Gjør X-kall synkrone"
#: ../src/core/main.c:212
#: ../src/core/main.c:218
msgid "Run as a wayland compositor"
msgstr "Kjør som en wayland-kompositør"
#: ../src/core/main.c:220
#: ../src/core/main.c:224
msgid "Run as a nested compositor"
msgstr "Kjør som en nøstet kompositør"
#: ../src/core/main.c:232
msgid "Run as a full display server, rather than nested"
msgstr "Kjør som en full skjermtjener, heller enn nøstet"
@@ -565,27 +147,34 @@ msgstr "Skriv versjonsnummer"
msgid "Mutter plugin to use"
msgstr "Mutter-tillegg som skal brukes"
#: ../src/core/prefs.c:2004
#: ../src/core/prefs.c:1997
#, c-format
msgid "Workspace %d"
msgstr "Arbeidsområde %d"
#: ../src/core/screen.c:525
#: ../src/core/screen.c:521
#, c-format
msgid ""
"Display \"%s\" already has a window manager; try using the --replace option "
"to replace the current window manager."
msgstr "Skjerm «%s» har allerede en vindushåndterer; prøv å bruke flagget --replace for å erstatte aktiv vindushåndterer."
msgstr ""
"Skjerm «%s» har allerede en vindushåndterer; prøv å bruke flagget --replace "
"for å erstatte aktiv vindushåndterer."
#: ../src/core/screen.c:607
#: ../src/core/screen.c:606
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skjerm %d på display «%s» er ugyldig\n"
#: ../src/core/util.c:118
#: ../src/core/util.c:120
msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter er kompilert uten støtte for «verbose» modus\n"
#: ../src/wayland/meta-wayland-tablet-pad.c:595
#, c-format
msgid "Mode Switch: Mode %d"
msgstr "Modusbytte: Modus %d"
#: ../src/x11/session.c:1815
msgid ""
"These windows do not support &quot;save current setup&quot; and will have to "
@@ -594,11 +183,346 @@ msgstr ""
"Disse vinduene støtter ikke &quot;lagre aktiv konfigurasjon&quot;og vil "
"måtte startes på nytt manuelt neste gang du logger inn."
#: ../src/x11/window-props.c:549
#: ../src/x11/window-props.c:548
#, c-format
msgid "%s (on %s)"
msgstr "%s (på %s)"
#~ msgid "Move window to workspace 1"
#~ msgstr "Flytt vindu til arbeidsområde 1"
#~ msgid "Move window to workspace 2"
#~ msgstr "Flytt vindu til arbeidsområde 2"
#~ msgid "Move window to workspace 3"
#~ msgstr "Flytt vindu til arbeidsområde 3"
#~ msgid "Move window to workspace 4"
#~ msgstr "Flytt vindu til arbeidsområde 4"
#~ msgid "Move window to last workspace"
#~ msgstr "Flytt vindu til siste arbeidsområde"
#~ msgid "Move window one workspace to the left"
#~ msgstr "Flytt vindu ett arbeidsområde til venstre"
#~ msgid "Move window one workspace to the right"
#~ msgstr "Flytt vindu ett arbeidsområde til høyre"
#~ msgid "Move window one workspace up"
#~ msgstr "Flytt vindu ett arbeidsområde opp"
#~ msgid "Move window one workspace down"
#~ msgstr "Flytt vindu ett arbeidsområde ned"
#~ msgid "Move window one monitor to the left"
#~ msgstr "Flytt vindu en skjerm til venstre"
#~ msgid "Move window one monitor to the right"
#~ msgstr "Flytt vindu en skjerm til høyre"
#~ msgid "Move window one monitor up"
#~ msgstr "Flytt vindu en skjerm opp"
#~ msgid "Move window one monitor down"
#~ msgstr "Flytt vindu en skjerm ned"
#~ msgid "Switch applications"
#~ msgstr "Bytt programmer"
#~ msgid "Switch to previous application"
#~ msgstr "Bytt til forrige program"
#~ msgid "Switch windows"
#~ msgstr "Bytt vinduer"
#~ msgid "Switch to previous window"
#~ msgstr "Bytt forrige vindu"
#~ msgid "Switch windows of an application"
#~ msgstr "Bytt mellom et programs vinduer"
#~ msgid "Switch to previous window of an application"
#~ msgstr "Bytt til forrige vindu i et program"
#~ msgid "Switch to previous system control"
#~ msgstr "Bytt til forrige systemkontroll"
#~ msgid "Switch windows directly"
#~ msgstr "Bytt vinduer direkte"
#~ msgid "Switch directly to previous window"
#~ msgstr "Bytt direkte til forrige vindu"
#~ msgid "Switch windows of an app directly"
#~ msgstr "Bytt mellom et programs vinduer direkte"
#~ msgid "Switch directly to previous window of an app"
#~ msgstr "Bytt direkte til forrive vindu i et program"
#~ msgid "Switch system controls directly"
#~ msgstr "Bytt systemkontroller direkte"
#~ msgid "Switch directly to previous system control"
#~ msgstr "Bytt direkte til forrige systemkontroll"
#~ msgid "Hide all normal windows"
#~ msgstr "Skjul alle normale vinduer"
#~ msgid "Switch to workspace 1"
#~ msgstr "Bytt til arbeidsområde 1"
#~ msgid "Switch to workspace 2"
#~ msgstr "Bytt til arbeidsområde 2"
#~ msgid "Switch to workspace 3"
#~ msgstr "Bytt til arbeidsområde 3"
#~ msgid "Switch to workspace 4"
#~ msgstr "Bytt til arbeidsområde 4"
#~ msgid "Switch to last workspace"
#~ msgstr "Bytt til siste arbeidsområde"
#~ msgid "Move to workspace left"
#~ msgstr "Flytt til arbeidsområdet til venstre"
#~ msgid "Move to workspace right"
#~ msgstr "Flytt til arbeidsområdet til høyre"
#~ msgid "Move to workspace above"
#~ msgstr "Flytt til arbeidsområdet over"
#~ msgid "Move to workspace below"
#~ msgstr "Flytt til arbeidsområdet under"
#~ msgid "System"
#~ msgstr "System"
#~ msgid "Show the run command prompt"
#~ msgstr "Vis kommandolinje"
#~ msgid "Show the activities overview"
#~ msgstr "Vis oversikt over aktiviteter"
#~ msgid "Windows"
#~ msgstr "Vinduer"
#~ msgid "Activate the window menu"
#~ msgstr "Aktiver vindumenyen"
#~ msgid "Toggle fullscreen mode"
#~ msgstr "Slå av/på fullskjermmodus"
#~ msgid "Toggle maximization state"
#~ msgstr "Endre tilstand for maksimering"
#~ msgid "Maximize window"
#~ msgstr "Maksimer vindu"
#~ msgid "Restore window"
#~ msgstr "Gjenopprett vindu"
#~ msgid "Toggle shaded state"
#~ msgstr "Endre tilstand for skyggelegging"
#~ msgid "Close window"
#~ msgstr "Lukk vindu"
#~ msgid "Hide window"
#~ msgstr "Skjul vindu"
#~ msgid "Move window"
#~ msgstr "Flytt vindu"
#~ msgid "Resize window"
#~ msgstr "Endre størrelse på vindu"
#~ msgid "Toggle window on all workspaces or one"
#~ msgstr ""
#~ "Slå av/på om vinduet skal vises på alle arbeidsområder eller bare ett"
#~ msgid "Raise window if covered, otherwise lower it"
#~ msgstr "Hev vindu hvis skjult av et annet vindu, senk det ellers"
#~ msgid "Raise window above other windows"
#~ msgstr "Hev vinduet over andre vinduer"
#~ msgid "Lower window below other windows"
#~ msgstr "Senk vinduet under andre vinduer"
#~ msgid "Maximize window vertically"
#~ msgstr "Maksimer vinduet vertikalt"
#~ msgid "Maximize window horizontally"
#~ msgstr "Maksimer vinduet horisontalt"
#~ msgid "View split on left"
#~ msgstr "Visning delt til venstre"
#~ msgid "View split on right"
#~ msgstr "Visning delt til høyre"
#~ msgid "Mutter"
#~ msgstr "Mutter"
#~ msgid "Modifier to use for extended window management operations"
#~ msgstr ""
#~ "Endringstast som skal brukes for utvidede vindushåndteringsoperasjoner"
#~ msgid ""
#~ "This key will initiate the \"overlay\", which is a combination window "
#~ "overview and application launching system. The default is intended to be "
#~ "the \"Windows key\" on PC hardware. It's expected that this binding "
#~ "either the default or set to the empty string."
#~ msgstr ""
#~ "Denne tasten vil initiere «overlay», som er en kombinasjon av "
#~ "vindusoversikt og et system for å starte programmer. Forvalget er ment å "
#~ "være «Windows-tasten» på PC-maskinvare. Det forventes at denne bindingen "
#~ "er satt til forvalg eller en tom streng."
#~ msgid "Attach modal dialogs"
#~ msgstr "Fest modale dialoger"
#~ msgid ""
#~ "When true, instead of having independent titlebars, modal dialogs appear "
#~ "attached to the titlebar of the parent window and are moved together with "
#~ "the parent window."
#~ msgstr ""
#~ "Hvis denne er satt til sann vil modale dialoger vises festet til "
#~ "tittellinjen på opphavsvinduet og flyttes sammen med dette i stedet for å "
#~ "ha individuelle tittellinjer."
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr "Slå på kantflising ved slipp av vinduer på skjermkantene"
#~ msgid ""
#~ "If enabled, dropping windows on vertical screen edges maximizes them "
#~ "vertically and resizes them horizontally to cover half of the available "
#~ "area. Dropping windows on the top screen edge maximizes them completely."
#~ msgstr ""
#~ "Maksimerer vinduer vertikalt og endrer størrelse horisontalt slik at de "
#~ "dekker halve det tilgjengeligeområdet hvis de slippes på vertikale "
#~ "skjermkanter. Hvis vindu slippes på øverste kant av skjermen maksimeres "
#~ "de fullstendig."
#~ msgid "Workspaces are managed dynamically"
#~ msgstr "Arbeidsområder håndteres dynamisk"
#~ msgid ""
#~ "Determines whether workspaces are managed dynamically or whether there's "
#~ "a static number of workspaces (determined by the num-workspaces key in "
#~ "org.gnome.desktop.wm.preferences)."
#~ msgstr ""
#~ "Bestemmer om arbeidsområder skal håndteres dynamisk eller om det er et "
#~ "fast antall arbeidsområder (bestemt av num-workspaces nøkkelen i org."
#~ "gnome.desktop.wm.preferences)."
#~ msgid "Workspaces only on primary"
#~ msgstr "Arbeidsområder kun på primær skjerm"
#~ msgid ""
#~ "Determines whether workspace switching should happen for windows on all "
#~ "monitors or only for windows on the primary monitor."
#~ msgstr ""
#~ "Bestemmer om bytting mellom arbeidsområder skal skje for vinduer på alle "
#~ "skjermer eller kun på primær skjerm."
#~ msgid "No tab popup"
#~ msgstr "Ingen tabulatordialog"
#~ msgid ""
#~ "Determines whether the use of popup and highlight frame should be "
#~ "disabled for window cycling."
#~ msgstr ""
#~ "Bestemmer om bruk av dialog og uthevingsramme skal slås av for bytting "
#~ "mellom vinduer."
#~ msgid "Delay focus changes until the pointer stops moving"
#~ msgstr "Utsett fokusendringer til pekeren slutter å bevege seg"
#~ msgid ""
#~ "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
#~ "the focus will not be changed immediately when entering a window, but "
#~ "only after the pointer stops moving."
#~ msgstr ""
#~ "Hvis denne settes til «true» og fokusmodus er enten «sloppy» eller "
#~ "«mouse» så vil fokus ikke endres med en gang markøren kommer inn i et "
#~ "vindu, men i stedet når markørens bevegelse stopper."
#~ msgid "Draggable border width"
#~ msgstr "Bredde på drakant"
#~ msgid ""
#~ "The amount of total draggable borders. If the theme's visible borders are "
#~ "not enough, invisible borders will be added to meet this value."
#~ msgstr ""
#~ "Total mengde med drakant. Hvis temas synlige kanter ikke er nok vil "
#~ "usynlige kanter legges til for å imøtekomme denne verdien."
#~ msgid "Auto maximize nearly monitor sized windows"
#~ msgstr ""
#~ "Maksimer vinduer automatisk hvis de er nesten like store som skjermen"
#~ msgid ""
#~ "If enabled, new windows that are initially the size of the monitor "
#~ "automatically get maximized."
#~ msgstr ""
#~ "Nye vinduer som i utgangspunktet er samme størrelse som skjermen vil "
#~ "automatisk bli maksimert hvis denne slås på."
#~ msgid "Place new windows in the center"
#~ msgstr "Plasser nye vinduer i senter"
#~ msgid ""
#~ "When true, the new windows will always be put in the center of the active "
#~ "screen of the monitor."
#~ msgstr ""
#~ "Når denne er «true» vil mye vinduer alltid plasseres midt på aktivt "
#~ "område på skjermen."
#~ msgid "Select window from tab popup"
#~ msgstr "Fjern vindu fra tabulatordialog"
#~ msgid "Cancel tab popup"
#~ msgstr "Avbryt tabulatordialog"
#~ msgid "Switch to VT 1"
#~ msgstr "Bytt til VT 1"
#~ msgid "Switch to VT 2"
#~ msgstr "Bytt til VT 2"
#~ msgid "Switch to VT 3"
#~ msgstr "Bytt til VT 3"
#~ msgid "Switch to VT 4"
#~ msgstr "Bytt til VT 4"
#~ msgid "Switch to VT 5"
#~ msgstr "Bytt til VT 5"
#~ msgid "Switch to VT 6"
#~ msgstr "Bytt til VT 6"
#~ msgid "Switch to VT 7"
#~ msgstr "Bytt til VT 7"
#~ msgid "Switch to VT 8"
#~ msgstr "Bytt til VT 8"
#~ msgid "Switch to VT 9"
#~ msgstr "Bytt til VT 9"
#~ msgid "Switch to VT 10"
#~ msgstr "Bytt til VT 10"
#~ msgid "Switch to VT 11"
#~ msgstr "Bytt til VT 11"
#~ msgid "Switch to VT 12"
#~ msgstr "Bytt til VT 12"
#~ msgid ""
#~ "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit "
#~ "the format"

View File

@@ -1,11 +1,11 @@
# Thai translation for mutter.
# Copyright (C) 2003-2015 Free Software Foundation, Inc.
# Copyright (C) 2003-2016 Free Software Foundation, Inc.
# This file is distributed under the same license as the mutter package.
#
# Phakhinee Thangnithirat <sc442535@angsila.compsci.buu.ac.th>, 2003
# Chanchai Junlouchai <taz@opentle.org>, 2003
# Paisa Seeluangsawat <paisa@users.sf.net>, 2004.
# Theppitak Karoonboonyanan <theppitak@gmail.com>, 2004-2012.
# Theppitak Karoonboonyanan <theppitak@gmail.com>, 2004-2012, 2016.
# Akom Chotiphantawanon <knight2000@gmail.com>, 2015.
#
msgid ""
@@ -14,8 +14,8 @@ msgstr ""
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-07-18 22:50+0000\n"
"PO-Revision-Date: 2015-08-01 17:29+0700\n"
"Last-Translator: Akom Chotiphantawanon <knight2000@gmail.com>\n"
"PO-Revision-Date: 2016-10-13 11:22+0700\n"
"Last-Translator: Theppitak Karoonboonyanan <theppitak@gmail.com>\n"
"Language-Team: Thai <thai-l10n@googlegroups.com>\n"
"Language: th\n"
"MIME-Version: 1.0\n"
@@ -170,7 +170,7 @@ msgstr "ย้ายไปพื้นที่ทำงานขวา"
#: ../data/50-mutter-navigation.xml.in.h:37
msgid "Move to workspace above"
msgstr "ย้ายไปพื้นที่ทำงานซ้าย"
msgstr "ย้ายไปพื้นที่ทำงานบน"
#: ../data/50-mutter-navigation.xml.in.h:38
msgid "Move to workspace below"

File diff suppressed because it is too large Load Diff

View File

@@ -483,6 +483,7 @@ update_touchpad_edge_scroll (MetaInputSettings *input_settings,
{
MetaInputSettingsClass *input_settings_class;
gboolean edge_scroll_enabled;
gboolean two_finger_scroll_enabled;
MetaInputSettingsPrivate *priv;
if (device &&
@@ -492,6 +493,11 @@ update_touchpad_edge_scroll (MetaInputSettings *input_settings,
priv = meta_input_settings_get_instance_private (input_settings);
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
edge_scroll_enabled = g_settings_get_boolean (priv->touchpad_settings, "edge-scrolling-enabled");
two_finger_scroll_enabled = g_settings_get_boolean (priv->touchpad_settings, "two-finger-scrolling-enabled");
/* If both are enabled we prefer two finger. */
if (edge_scroll_enabled && two_finger_scroll_enabled)
edge_scroll_enabled = FALSE;
if (device)
{
@@ -523,6 +529,10 @@ update_touchpad_two_finger_scroll (MetaInputSettings *input_settings,
input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
two_finger_scroll_enabled = g_settings_get_boolean (priv->touchpad_settings, "two-finger-scrolling-enabled");
/* Disable edge since they can't both be set. */
if (two_finger_scroll_enabled)
update_touchpad_edge_scroll (input_settings, device);
if (device)
{
settings_device_set_bool_setting (input_settings, device,
@@ -535,6 +545,10 @@ update_touchpad_two_finger_scroll (MetaInputSettings *input_settings,
(ConfigBoolFunc) input_settings_class->set_two_finger_scroll,
two_finger_scroll_enabled);
}
/* Edge might have been disabled because two finger was on. */
if (!two_finger_scroll_enabled)
update_touchpad_edge_scroll (input_settings, device);
}
static void
@@ -1242,7 +1256,7 @@ lookup_tool_settings (ClutterInputDeviceTool *tool,
tool_id = clutter_input_device_tool_get_id (tool);
device_id = get_tablet_settings_id (device, lookup_mapping_info (device));
path = g_strdup_printf ("/org/gnome/settings-daemon/peripherals/wacom/%s/%lx/",
path = g_strdup_printf ("/org/gnome/settings-daemon/peripherals/wacom/%s/%" G_GUINT64_FORMAT "/",
device_id, tool_id);
tool_settings = tool_settings_new (tool, path);
g_object_set_qdata_full (G_OBJECT (tool), quark_tool_settings, tool_settings,

View File

@@ -1801,19 +1801,6 @@ crtc_can_drive_output (MetaCRTC *crtc,
return FALSE;
}
static gboolean
output_supports_mode (MetaOutput *output,
MetaMonitorMode *mode)
{
unsigned int i;
for (i = 0; i < output->n_modes; i++)
if (output->modes[i] == mode)
return TRUE;
return FALSE;
}
static gboolean
crtc_assignment_assign (CrtcAssignment *assign,
MetaCRTC *crtc,
@@ -1828,9 +1815,6 @@ crtc_assignment_assign (CrtcAssignment *assign,
if (!crtc_can_drive_output (crtc, output))
return FALSE;
if (!output_supports_mode (output, mode))
return FALSE;
if ((crtc->all_transforms & (1 << transform)) == 0)
return FALSE;
@@ -1917,10 +1901,9 @@ static gboolean
real_assign_crtcs (CrtcAssignment *assignment,
unsigned int output_num)
{
MetaMonitorMode *modes;
MetaCRTC *crtcs;
MetaOutput *outputs;
unsigned int n_crtcs, n_modes, n_outputs;
unsigned int n_crtcs, n_outputs;
MetaOutputKey *output_key;
MetaOutputConfig *output_config;
unsigned int i;
@@ -1936,7 +1919,7 @@ real_assign_crtcs (CrtcAssignment *assignment,
return real_assign_crtcs (assignment, output_num + 1);
meta_monitor_manager_get_resources (assignment->manager,
&modes, &n_modes,
NULL, NULL,
&crtcs, &n_crtcs,
&outputs, &n_outputs);
@@ -1953,9 +1936,9 @@ real_assign_crtcs (CrtcAssignment *assignment,
MetaOutput *output = find_output_by_key (outputs, n_outputs, output_key);
unsigned int j;
for (j = 0; j < n_modes; j++)
for (j = 0; j < output->n_modes; j++)
{
MetaMonitorMode *mode = &modes[j];
MetaMonitorMode *mode = output->modes[j];
int width, height;
if (meta_monitor_transform_is_rotated (output_config->transform))
@@ -1980,7 +1963,7 @@ real_assign_crtcs (CrtcAssignment *assignment,
output_config->transform,
pass);
if (crtc_assignment_assign (assignment, crtc, &modes[j],
if (crtc_assignment_assign (assignment, crtc, mode,
output_config->rect.x, output_config->rect.y,
output_config->transform,
output))

View File

@@ -162,6 +162,7 @@ meta_idle_monitor_native_init (MetaIdleMonitorNative *monitor_native)
MetaIdleMonitor *monitor = META_IDLE_MONITOR (monitor_native);
monitor->watches = g_hash_table_new_full (NULL, NULL, NULL, free_watch);
monitor_native->last_event_time = g_get_monotonic_time ();
}
void

View File

@@ -141,28 +141,18 @@ static gboolean
device_set_scroll_method (struct libinput_device *libinput_device,
enum libinput_config_scroll_method method)
{
enum libinput_config_scroll_method supported;
supported = libinput_device_config_scroll_get_methods (libinput_device);
if (method & supported)
enum libinput_config_status status =
libinput_device_config_scroll_set_method (libinput_device, method);
return (method & supported) != 0;
return status == LIBINPUT_CONFIG_STATUS_SUCCESS;
}
static gboolean
device_set_click_method (struct libinput_device *libinput_device,
enum libinput_config_click_method method)
{
enum libinput_config_click_method supported;
supported = libinput_device_config_click_get_methods (libinput_device);
if (method & supported)
enum libinput_config_status status =
libinput_device_config_click_set_method (libinput_device, method);
return (method & supported) != 0;
return status == LIBINPUT_CONFIG_STATUS_SUCCESS;
}
static void
@@ -170,32 +160,16 @@ meta_input_settings_native_set_edge_scroll (MetaInputSettings *settin
ClutterInputDevice *device,
gboolean edge_scrolling_enabled)
{
enum libinput_config_scroll_method scroll_method = 0;
struct libinput_device *libinput_device;
enum libinput_config_scroll_method supported;
enum libinput_config_scroll_method current;
enum libinput_config_scroll_method current, method;
libinput_device = clutter_evdev_input_device_get_libinput_device (device);
if (!libinput_device)
return;
supported = libinput_device_config_scroll_get_methods (libinput_device);
method = edge_scrolling_enabled ? LIBINPUT_CONFIG_SCROLL_EDGE : LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
current = libinput_device_config_scroll_get_method (libinput_device);
current &= ~LIBINPUT_CONFIG_SCROLL_EDGE;
/* Don't set edge scrolling if two-finger scrolling is enabled and available */
if (current == LIBINPUT_CONFIG_SCROLL_2FG)
return;
if (supported & LIBINPUT_CONFIG_SCROLL_EDGE &&
edge_scrolling_enabled)
{
scroll_method = LIBINPUT_CONFIG_SCROLL_EDGE;
}
else
{
scroll_method = LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
}
device_set_scroll_method (libinput_device, scroll_method);
device_set_scroll_method (libinput_device, current | method);
}
static void
@@ -203,31 +177,16 @@ meta_input_settings_native_set_two_finger_scroll (MetaInputSettings *
ClutterInputDevice *device,
gboolean two_finger_scroll_enabled)
{
enum libinput_config_scroll_method scroll_method = 0;
struct libinput_device *libinput_device;
enum libinput_config_scroll_method supported;
enum libinput_config_scroll_method current;
enum libinput_config_scroll_method current, method;
libinput_device = clutter_evdev_input_device_get_libinput_device (device);
supported = libinput_device_config_scroll_get_methods (libinput_device);
method = two_finger_scroll_enabled ? LIBINPUT_CONFIG_SCROLL_2FG : LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
current = libinput_device_config_scroll_get_method (libinput_device);
current &= ~LIBINPUT_CONFIG_SCROLL_2FG;
if (two_finger_scroll_enabled &&
!(supported & LIBINPUT_CONFIG_SCROLL_2FG))
return;
if (two_finger_scroll_enabled)
{
scroll_method = LIBINPUT_CONFIG_SCROLL_2FG;
}
else if (current != LIBINPUT_CONFIG_SCROLL_EDGE)
{
scroll_method = LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
}
else
return;
device_set_scroll_method (libinput_device, scroll_method);
device_set_scroll_method (libinput_device, current | method);
}
static void

View File

@@ -401,19 +401,12 @@ drm_mode_vrefresh (const drmModeModeInfo *mode)
{
float refresh = 0.0;
if (mode->vrefresh > 0.0)
return mode->vrefresh;
if (mode->htotal > 0 && mode->vtotal > 0)
{
/* Calculate refresh rate in milliHz first for extra precision. */
refresh = (mode->clock * 1000000LL) / mode->htotal;
refresh += (mode->vtotal / 2);
refresh /= mode->vtotal;
if (mode->flags & DRM_MODE_FLAG_INTERLACE)
refresh *= 2;
if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
refresh /= 2;
if (mode->vscan > 1)
refresh /= mode->vscan;
refresh /= 1000.0;
@@ -1357,11 +1350,19 @@ meta_monitor_manager_kms_apply_configuration (MetaMonitorManager *manager,
else
hw_transform = META_MONITOR_TRANSFORM_NORMAL;
drmModeObjectSetProperty (manager_kms->fd,
crtc_kms->primary_plane_id,
DRM_MODE_OBJECT_PLANE,
crtc_kms->rotation_prop_id,
crtc_kms->rotation_map[hw_transform]);
if (drmModeObjectSetProperty (manager_kms->fd,
crtc_kms->primary_plane_id,
DRM_MODE_OBJECT_PLANE,
crtc_kms->rotation_prop_id,
crtc_kms->rotation_map[hw_transform]) != 0)
{
g_warning ("Failed to apply DRM plane transform %d: %m", hw_transform);
/* Blacklist this HW transform, we want to fallback to our
* fallbacks in this case.
*/
crtc_kms->all_hw_transforms &= ~(1 << hw_transform);
}
}
/* Disable CRTCs not mentioned in the list (they have is_dirty == FALSE,
because they weren't seen in the first loop) */
@@ -1530,31 +1531,19 @@ get_crtc_connectors (MetaMonitorManager *manager,
uint32_t **connectors,
unsigned int *n_connectors)
{
GArray *connectors_array = NULL;
unsigned int i;
GArray *connectors_array = g_array_new (FALSE, FALSE, sizeof (uint32_t));
for (i = 0; i < manager->n_outputs; i++)
{
MetaOutput *output = &manager->outputs[i];
if (output->crtc == crtc)
{
if (!connectors_array)
connectors_array = g_array_new (FALSE, FALSE, sizeof (uint32_t));
g_array_append_val (connectors_array, output->winsys_id);
}
g_array_append_val (connectors_array, output->winsys_id);
}
if (connectors_array)
{
*connectors = (uint32_t *) connectors_array->data;
*n_connectors = connectors_array->len;
}
else
{
*connectors = NULL;
*n_connectors = 0;
}
*n_connectors = connectors_array->len;
*connectors = (uint32_t *) g_array_free (connectors_array, FALSE);
}
void

View File

@@ -466,16 +466,19 @@ meta_onscreen_native_set_crtc_modes (MetaOnscreenNative *onscreen_native)
monitor_info = meta_renderer_view_get_monitor_info (view);
if (monitor_info)
{
int i;
unsigned int i;
for (i = 0; i < monitor_info->n_outputs; i++)
for (i = 0; i < monitor_manager->n_crtcs; i++)
{
MetaOutput *output = monitor_info->outputs[i];
int x = output->crtc->rect.x - monitor_info->rect.x;
int y = output->crtc->rect.y - monitor_info->rect.y;
MetaCRTC *crtc = &monitor_manager->crtcs[i];
int x = crtc->rect.x - monitor_info->rect.x;
int y = crtc->rect.y - monitor_info->rect.y;
if (crtc->logical_monitor != monitor_info)
continue;
meta_monitor_manager_kms_apply_crtc_mode (monitor_manager_kms,
output->crtc,
crtc,
x, y,
next_fb_id);
}
@@ -530,16 +533,19 @@ meta_onscreen_native_flip_crtcs (CoglOnscreen *onscreen)
monitor_info = meta_renderer_view_get_monitor_info (view);
if (monitor_info)
{
int i;
unsigned int i;
for (i = 0; i < monitor_info->n_outputs; i++)
for (i = 0; i < monitor_manager->n_crtcs; i++)
{
MetaOutput *output = monitor_info->outputs[i];
int x = output->crtc->rect.x - monitor_info->rect.x;
int y = output->crtc->rect.y - monitor_info->rect.y;
MetaCRTC *crtc = &monitor_manager->crtcs[i];
int x = crtc->rect.x - monitor_info->rect.x;
int y = crtc->rect.y - monitor_info->rect.y;
if (crtc->logical_monitor != monitor_info)
continue;
meta_onscreen_native_flip_crtc (onscreen_native, flip_closure,
output->crtc, x, y,
crtc, x, y,
&fb_in_use);
}
}
@@ -1235,7 +1241,6 @@ meta_renderer_native_initable_init (GInitable *initable,
GError **error)
{
MetaRendererNative *renderer_native = META_RENDERER_NATIVE (initable);
drmModeRes *resources;
renderer_native->gbm = gbm_create_device (renderer_native->kms_fd);
if (!renderer_native->gbm)
@@ -1243,25 +1248,10 @@ meta_renderer_native_initable_init (GInitable *initable,
g_set_error (error, G_IO_ERROR,
G_IO_ERROR_FAILED,
"Failed to create gbm device");
goto err;
}
resources = drmModeGetResources (renderer_native->kms_fd);
if (!resources)
{
g_set_error (error, G_IO_ERROR,
G_IO_ERROR_FAILED,
"drmModeGetResources failed");
goto err_resources;
return FALSE;
}
return TRUE;
err_resources:
g_clear_pointer (&renderer_native->gbm, gbm_device_destroy);
err:
return FALSE;
}
static void

View File

@@ -222,32 +222,19 @@ meta_input_settings_x11_set_edge_scroll (MetaInputSettings *settings,
gboolean edge_scroll_enabled)
{
guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */
guchar *defaults;
guchar *available;
guchar *current;
available = get_property (device, "libinput Scroll Methods Available",
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
defaults = get_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
if (!available || !defaults)
goto out;
current = get_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
if (!current)
return;
memcpy (values, defaults, SCROLL_METHOD_NUM_FIELDS);
memcpy (values, current, SCROLL_METHOD_NUM_FIELDS);
/* Don't set edge scrolling if two-finger scrolling is enabled and available */
if (available[SCROLL_METHOD_FIELD_EDGE] &&
!(available[SCROLL_METHOD_FIELD_2FG] && values[SCROLL_METHOD_FIELD_2FG]))
{
values[1] = !!edge_scroll_enabled;
change_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
}
out:
if (available)
meta_XFree (available);
if (defaults)
meta_XFree (defaults);
values[SCROLL_METHOD_FIELD_EDGE] = !!edge_scroll_enabled;
change_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
meta_XFree (current);
}
static void
@@ -256,44 +243,19 @@ meta_input_settings_x11_set_two_finger_scroll (MetaInputSettings *set
gboolean two_finger_scroll_enabled)
{
guchar values[SCROLL_METHOD_NUM_FIELDS] = { 0 }; /* 2fg, edge, button. The last value is unused */
guchar *defaults;
guchar *available;
gboolean changed;
guchar *current;
available = get_property (device, "libinput Scroll Methods Available",
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
defaults = get_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
if (!available || !defaults)
goto out;
current = get_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, SCROLL_METHOD_NUM_FIELDS);
if (!current)
return;
memcpy (values, defaults, SCROLL_METHOD_NUM_FIELDS);
changed = FALSE;
memcpy (values, current, SCROLL_METHOD_NUM_FIELDS);
if (available[SCROLL_METHOD_FIELD_2FG])
{
values[SCROLL_METHOD_FIELD_2FG] = !!two_finger_scroll_enabled;
changed = TRUE;
}
/* Disable edge scrolling when two-finger scrolling is enabled */
if (values[SCROLL_METHOD_FIELD_2FG] && values[SCROLL_METHOD_FIELD_EDGE])
{
values[SCROLL_METHOD_FIELD_EDGE] = 0;
changed = TRUE;
}
if (changed)
{
change_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
}
out:
if (available)
meta_XFree (available);
if (defaults)
meta_XFree (defaults);
values[SCROLL_METHOD_FIELD_2FG] = !!two_finger_scroll_enabled;
change_property (device, "libinput Scroll Method Enabled",
XA_INTEGER, 8, &values, SCROLL_METHOD_NUM_FIELDS);
meta_XFree (current);
}
static void

View File

@@ -352,6 +352,14 @@ meta_begin_modal_for_plugin (MetaCompositor *compositor,
*/
MetaDisplay *display = compositor->display;
#ifdef HAVE_WAYLAND
if (display->grab_op == META_GRAB_OP_WAYLAND_POPUP)
{
MetaWaylandSeat *seat = meta_wayland_compositor_get_default ()->seat;
meta_wayland_pointer_end_popup_grab (seat->pointer);
}
#endif
if (is_modal (display) || display->grab_op != META_GRAB_OP_NONE)
return FALSE;

View File

@@ -465,7 +465,12 @@ place_window_if_needed(MetaWindow *window,
MetaWorkspace *cur_workspace;
const MetaMonitorInfo *monitor_info;
meta_window_get_frame_rect (window, &placed_rect);
placed_rect = (MetaRectangle) {
.x = window->rect.x,
.y = window->rect.y,
.width = info->current.width,
.height = info->current.height
};
orig_rect = info->orig;

View File

@@ -185,6 +185,22 @@ meta_window_delete (MetaWindow *window,
void
meta_window_kill (MetaWindow *window)
{
pid_t pid = meta_window_get_client_pid (window);
if (pid > 0)
{
meta_topic (META_DEBUG_WINDOW_OPS,
"Killing %s with kill()\n",
window->desc);
if (kill (pid, 9) == 0)
return;
meta_topic (META_DEBUG_WINDOW_OPS,
"Failed to signal %s: %s\n",
window->desc, strerror (errno));
}
META_WINDOW_GET_CLASS (window)->kill (window);
}

View File

@@ -2888,7 +2888,15 @@ check_fullscreen_func (gpointer data)
g_slist_free (fullscreen_monitors);
if (in_fullscreen_changed)
g_signal_emit (screen, screen_signals[IN_FULLSCREEN_CHANGED], 0, NULL);
{
/* DOCK window stacking depends on the monitor's fullscreen
status so we need to trigger a re-layering. */
MetaWindow *window = meta_stack_get_top (screen->stack);
if (window)
meta_stack_update_layer (screen->stack, window);
g_signal_emit (screen, screen_signals[IN_FULLSCREEN_CHANGED], 0, NULL);
}
return FALSE;
}

View File

@@ -286,8 +286,8 @@ get_standalone_layer (MetaWindow *window)
break;
case META_WINDOW_DOCK:
/* still experimenting here */
if (window->wm_state_below)
if (window->wm_state_below ||
(window->monitor && window->monitor->in_fullscreen))
layer = META_LAYER_BOTTOM;
else
layer = META_LAYER_DOCK;

View File

@@ -164,6 +164,7 @@ struct _MetaWindow
char *startup_id;
char *mutter_hints;
char *flatpak_id;
char *gtk_theme_variant;
char *gtk_application_id;
char *gtk_unique_bus_name;
@@ -524,6 +525,7 @@ struct _MetaWindowClass
gboolean (*update_icon) (MetaWindow *window,
cairo_surface_t **icon,
cairo_surface_t **mini_icon);
uint32_t (*get_client_pid) (MetaWindow *window);
void (*update_main_monitor) (MetaWindow *window);
void (*main_monitor_changed) (MetaWindow *window,
const MetaMonitorInfo *old);
@@ -705,6 +707,8 @@ void meta_window_handle_leave (MetaWindow *window);
void meta_window_handle_ungrabbed_event (MetaWindow *window,
const ClutterEvent *event);
uint32_t meta_window_get_client_pid (MetaWindow *window);
void meta_window_get_client_area_rect (const MetaWindow *window,
cairo_rectangle_int_t *rect);
void meta_window_get_titlebar_rect (MetaWindow *window,

View File

@@ -253,6 +253,12 @@ meta_window_real_update_icon (MetaWindow *window,
return FALSE;
}
static uint32_t
meta_window_real_get_client_pid (MetaWindow *window)
{
return 0;
}
static void
meta_window_finalize (GObject *object)
{
@@ -287,6 +293,7 @@ meta_window_finalize (GObject *object)
g_free (window->res_name);
g_free (window->title);
g_free (window->desc);
g_free (window->flatpak_id);
g_free (window->gtk_theme_variant);
g_free (window->gtk_application_id);
g_free (window->gtk_unique_bus_name);
@@ -420,6 +427,7 @@ meta_window_class_init (MetaWindowClass *klass)
klass->update_struts = meta_window_real_update_struts;
klass->get_default_skip_hints = meta_window_real_get_default_skip_hints;
klass->update_icon = meta_window_real_update_icon;
klass->get_client_pid = meta_window_real_get_client_pid;
obj_props[PROP_TITLE] =
g_param_spec_string ("title",
@@ -757,6 +765,27 @@ sync_client_window_mapped (MetaWindow *window)
meta_error_trap_pop (window->display);
}
static void
meta_window_update_flatpak_id (MetaWindow *window)
{
uint32_t pid = meta_window_get_client_pid (window);
g_autoptr(GKeyFile) key_file = NULL;
g_autofree char *info_filename = NULL;
g_clear_pointer (&window->flatpak_id, g_free);
if (pid == 0)
return;
key_file = g_key_file_new ();
info_filename = g_strdup_printf ("/proc/%u/root/.flatpak-info", pid);
if (!g_key_file_load_from_file (key_file, info_filename, G_KEY_FILE_NONE, NULL))
return;
window->flatpak_id = g_key_file_get_string (key_file, "Application", "name", NULL);
}
static void
meta_window_update_desc (MetaWindow *window)
{
@@ -856,6 +885,7 @@ _meta_window_shared_new (MetaDisplay *display,
window->screen = screen;
meta_window_update_flatpak_id (window);
meta_window_update_desc (window);
window->override_redirect = attrs->override_redirect;
@@ -2237,27 +2267,7 @@ meta_window_show (MetaWindow *window)
( (!place_on_top_on_map && !takes_focus_on_map) ||
window_would_be_covered (window) )
) {
if (meta_window_is_ancestor_of_transient (focus_window, window))
{
guint32 timestamp;
timestamp = meta_display_get_current_time_roundtrip (window->display);
/* This happens for error dialogs or alerts; these need to remain on
* top, but it would be confusing to have its ancestor remain
* focused.
*/
meta_topic (META_DEBUG_STARTUP,
"The focus window %s is an ancestor of the newly mapped "
"window %s which isn't being focused. Unfocusing the "
"ancestor.\n",
focus_window->desc, window->desc);
meta_display_focus_the_no_focus_window (window->display,
window->screen,
timestamp);
}
else
if (!meta_window_is_ancestor_of_transient (focus_window, window))
{
needs_stacking_adjustment = TRUE;
if (!window->placed)
@@ -6890,6 +6900,18 @@ meta_window_get_wm_class_instance (MetaWindow *window)
return window->res_name;
}
/**
* meta_window_get_flatpak_id:
* @window: a #MetaWindow
*
* Return value: (transfer none): the Flatpak application ID or %NULL
**/
const char *
meta_window_get_flatpak_id (MetaWindow *window)
{
return window->flatpak_id;
}
/**
* meta_window_get_gtk_theme_variant:
* @window: a #MetaWindow
@@ -7055,6 +7077,21 @@ meta_window_get_transient_for (MetaWindow *window)
return NULL;
}
/**
* meta_window_get_client_pid:
* @window: a #MetaWindow
*
* Returns the pid of the process that created this window, if available
* to the windowing system.
*
* Return value: the pid, or 0 if not known.
*/
uint32_t
meta_window_get_client_pid (MetaWindow *window)
{
return META_WINDOW_GET_CLASS (window)->get_client_pid (window);
}
/**
* meta_window_get_pid:
* @window: a #MetaWindow

View File

@@ -138,6 +138,7 @@ const char * meta_window_get_wm_class (MetaWindow *window);
const char * meta_window_get_wm_class_instance (MetaWindow *window);
gboolean meta_window_showing_on_its_workspace (MetaWindow *window);
const char * meta_window_get_flatpak_id (MetaWindow *window);
const char * meta_window_get_gtk_theme_variant (MetaWindow *window);
const char * meta_window_get_gtk_application_id (MetaWindow *window);
const char * meta_window_get_gtk_unique_bus_name (MetaWindow *window);

View File

@@ -89,7 +89,7 @@ G_DEFINE_TYPE_WITH_PRIVATE (MetaWaylandDataSource, meta_wayland_data_source,
G_DEFINE_TYPE (MetaWaylandDataSourceWayland, meta_wayland_data_source_wayland,
META_TYPE_WAYLAND_DATA_SOURCE);
G_DEFINE_TYPE (MetaWaylandDataSourcePrimary, meta_wayland_data_source_primary,
META_TYPE_WAYLAND_DATA_SOURCE);
META_TYPE_WAYLAND_DATA_SOURCE_WAYLAND);
static MetaWaylandDataSource *
meta_wayland_data_source_wayland_new (struct wl_resource *resource);
@@ -1195,9 +1195,12 @@ data_device_start_drag (struct wl_client *client,
&drag_grab_interface,
surface, drag_source, icon_surface);
meta_wayland_keyboard_set_focus (seat->keyboard, NULL);
meta_wayland_keyboard_start_grab (seat->keyboard,
&seat->data_device.current_grab->keyboard_grab);
if (meta_wayland_seat_has_keyboard (seat))
{
meta_wayland_keyboard_set_focus (seat->keyboard, NULL);
meta_wayland_keyboard_start_grab (seat->keyboard,
&seat->data_device.current_grab->keyboard_grab);
}
}
static void

View File

@@ -26,6 +26,10 @@
#include "wayland/meta-wayland-input-device.h"
#include <wayland-server.h>
#include "wayland/meta-wayland-seat.h"
enum
{
PROP_0,
@@ -51,6 +55,14 @@ meta_wayland_input_device_get_seat (MetaWaylandInputDevice *input_device)
return priv->seat;
}
uint32_t
meta_wayland_input_device_next_serial (MetaWaylandInputDevice *input_device)
{
MetaWaylandSeat *seat = meta_wayland_input_device_get_seat (input_device);
return wl_display_next_serial (seat->wl_display);
}
static void
meta_wayland_input_device_set_property (GObject *object,
guint prop_id,

View File

@@ -26,6 +26,7 @@
#define META_WAYLAND_INPUT_DEVICE_H
#include <glib-object.h>
#include <stdint.h>
#include "wayland/meta-wayland-types.h"
@@ -42,4 +43,6 @@ struct _MetaWaylandInputDeviceClass
MetaWaylandSeat * meta_wayland_input_device_get_seat (MetaWaylandInputDevice *input_device);
uint32_t meta_wayland_input_device_next_serial (MetaWaylandInputDevice *input_device);
#endif /* META_WAYLAND_INPUT_DEVICE_H */

View File

@@ -252,7 +252,8 @@ on_keymap_layout_group_changed (MetaBackend *backend,
static void
keyboard_handle_focus_surface_destroy (struct wl_listener *listener, void *data)
{
MetaWaylandKeyboard *keyboard = wl_container_of (listener, keyboard, focus_surface_listener);
MetaWaylandKeyboard *keyboard = wl_container_of (listener, keyboard,
focus_surface_listener);
meta_wayland_keyboard_set_focus (keyboard, NULL);
}
@@ -264,17 +265,16 @@ meta_wayland_keyboard_broadcast_key (MetaWaylandKeyboard *keyboard,
uint32_t state)
{
struct wl_resource *resource;
struct wl_list *l;
l = &keyboard->focus_resource_list;
if (!wl_list_empty (l))
if (!wl_list_empty (&keyboard->focus_resource_list))
{
struct wl_client *client = wl_resource_get_client (keyboard->focus_surface->resource);
struct wl_display *display = wl_client_get_display (client);
MetaWaylandInputDevice *input_device =
META_WAYLAND_INPUT_DEVICE (keyboard);
keyboard->key_serial = wl_display_next_serial (display);
keyboard->key_serial =
meta_wayland_input_device_next_serial (input_device);
wl_resource_for_each (resource, l)
wl_resource_for_each (resource, &keyboard->focus_resource_list)
{
wl_keyboard_send_key (resource, keyboard->key_serial, time, key, state);
}
@@ -349,19 +349,16 @@ static void
meta_wayland_keyboard_broadcast_modifiers (MetaWaylandKeyboard *keyboard)
{
struct wl_resource *resource;
struct wl_list *l;
l = &keyboard->focus_resource_list;
if (!wl_list_empty (l))
if (!wl_list_empty (&keyboard->focus_resource_list))
{
MetaWaylandInputDevice *input_device =
META_WAYLAND_INPUT_DEVICE (keyboard);
MetaWaylandSeat *seat = meta_wayland_input_device_get_seat (input_device);
uint32_t serial;
serial = wl_display_next_serial (seat->wl_display);
serial = meta_wayland_input_device_next_serial (input_device);
wl_resource_for_each (resource, l)
wl_resource_for_each (resource, &keyboard->focus_resource_list)
keyboard_send_modifiers (keyboard, resource, serial);
}
}
@@ -611,17 +608,6 @@ meta_wayland_keyboard_enable (MetaWaylandKeyboard *keyboard)
MetaBackend *backend = meta_get_backend ();
GSettingsSchema *schema;
wl_list_init (&keyboard->resource_list);
wl_list_init (&keyboard->focus_resource_list);
keyboard->focus_surface_listener.notify = keyboard_handle_focus_surface_destroy;
keyboard->xkb_info.keymap_fd = -1;
keyboard->default_grab.interface = &default_keyboard_grab_interface;
keyboard->default_grab.keyboard = keyboard;
keyboard->grab = &keyboard->default_grab;
keyboard->settings = g_settings_new ("org.gnome.desktop.peripherals.keyboard");
g_signal_connect (keyboard->settings, "changed",
G_CALLBACK (settings_changed), keyboard);
@@ -647,6 +633,12 @@ meta_wayland_keyboard_enable (MetaWaylandKeyboard *keyboard)
maybe_restore_numlock_state (keyboard);
}
static void
meta_wayland_xkb_info_init (MetaWaylandXkbInfo *xkb_info)
{
xkb_info->keymap_fd = -1;
}
static void
meta_wayland_xkb_info_destroy (MetaWaylandXkbInfo *xkb_info)
{
@@ -659,7 +651,10 @@ meta_wayland_xkb_info_destroy (MetaWaylandXkbInfo *xkb_info)
xkb_info->keymap_area = NULL;
}
if (xkb_info->keymap_fd >= 0)
close (xkb_info->keymap_fd);
{
close (xkb_info->keymap_fd);
xkb_info->keymap_fd = -1;
}
}
void
@@ -670,10 +665,14 @@ meta_wayland_keyboard_disable (MetaWaylandKeyboard *keyboard)
g_signal_handlers_disconnect_by_func (backend, on_keymap_changed, keyboard);
g_signal_handlers_disconnect_by_func (backend, on_keymap_layout_group_changed, keyboard);
meta_wayland_keyboard_end_grab (keyboard);
meta_wayland_keyboard_set_focus (keyboard, NULL);
meta_wayland_xkb_info_destroy (&keyboard->xkb_info);
/* XXX: What about keyboard->resource_list? */
wl_list_remove (&keyboard->resource_list);
wl_list_init (&keyboard->resource_list);
wl_list_remove (&keyboard->focus_resource_list);
wl_list_init (&keyboard->focus_resource_list);
g_clear_object (&keyboard->settings);
if (keyboard->gsd_settings)
@@ -826,32 +825,27 @@ meta_wayland_keyboard_set_focus (MetaWaylandKeyboard *keyboard,
MetaWaylandSurface *surface)
{
MetaWaylandInputDevice *input_device = META_WAYLAND_INPUT_DEVICE (keyboard);
MetaWaylandSeat *seat = meta_wayland_input_device_get_seat (input_device);
if (!meta_wayland_seat_has_keyboard (seat))
return;
if (keyboard->focus_surface == surface)
return;
if (keyboard->focus_surface != NULL)
{
struct wl_resource *resource;
struct wl_list *l;
l = &keyboard->focus_resource_list;
if (!wl_list_empty (l))
if (!wl_list_empty (&keyboard->focus_resource_list))
{
struct wl_client *client = wl_resource_get_client (keyboard->focus_surface->resource);
struct wl_display *display = wl_client_get_display (client);
uint32_t serial = wl_display_next_serial (display);
struct wl_resource *resource;
uint32_t serial;
wl_resource_for_each (resource, l)
serial = meta_wayland_input_device_next_serial (input_device);
wl_resource_for_each (resource, &keyboard->focus_resource_list)
{
wl_keyboard_send_leave (resource, serial, keyboard->focus_surface->resource);
wl_keyboard_send_leave (resource, serial,
keyboard->focus_surface->resource);
}
move_resources (&keyboard->resource_list, &keyboard->focus_resource_list);
move_resources (&keyboard->resource_list,
&keyboard->focus_resource_list);
}
wl_list_remove (&keyboard->focus_surface_listener.link);
@@ -860,24 +854,25 @@ meta_wayland_keyboard_set_focus (MetaWaylandKeyboard *keyboard,
if (surface != NULL)
{
struct wl_resource *resource;
struct wl_list *l;
struct wl_resource *focus_surface_resource;
keyboard->focus_surface = surface;
wl_resource_add_destroy_listener (keyboard->focus_surface->resource, &keyboard->focus_surface_listener);
focus_surface_resource = keyboard->focus_surface->resource;
wl_resource_add_destroy_listener (focus_surface_resource,
&keyboard->focus_surface_listener);
move_resources_for_client (&keyboard->focus_resource_list,
&keyboard->resource_list,
wl_resource_get_client (keyboard->focus_surface->resource));
wl_resource_get_client (focus_surface_resource));
l = &keyboard->focus_resource_list;
if (!wl_list_empty (l))
if (!wl_list_empty (&keyboard->focus_resource_list))
{
struct wl_client *client = wl_resource_get_client (keyboard->focus_surface->resource);
struct wl_display *display = wl_client_get_display (client);
keyboard->focus_serial = wl_display_next_serial (display);
struct wl_resource *resource;
wl_resource_for_each (resource, l)
keyboard->focus_serial =
meta_wayland_input_device_next_serial (input_device);
wl_resource_for_each (resource, &keyboard->focus_resource_list)
{
broadcast_focus (keyboard, resource);
}
@@ -911,26 +906,31 @@ meta_wayland_keyboard_create_new_resource (MetaWaylandKeyboard *keyboard,
struct wl_resource *seat_resource,
uint32_t id)
{
struct wl_resource *cr;
struct wl_resource *resource;
cr = wl_resource_create (client, &wl_keyboard_interface, wl_resource_get_version (seat_resource), id);
wl_resource_set_implementation (cr, &keyboard_interface, keyboard, unbind_resource);
resource = wl_resource_create (client, &wl_keyboard_interface,
wl_resource_get_version (seat_resource), id);
wl_resource_set_implementation (resource, &keyboard_interface,
keyboard, unbind_resource);
wl_keyboard_send_keymap (cr,
wl_keyboard_send_keymap (resource,
WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
keyboard->xkb_info.keymap_fd,
keyboard->xkb_info.keymap_size);
notify_key_repeat_for_resource (keyboard, cr);
notify_key_repeat_for_resource (keyboard, resource);
if (keyboard->focus_surface && wl_resource_get_client (keyboard->focus_surface->resource) == client)
if (keyboard->focus_surface &&
wl_resource_get_client (keyboard->focus_surface->resource) == client)
{
wl_list_insert (&keyboard->focus_resource_list, wl_resource_get_link (cr));
broadcast_focus (keyboard, cr);
wl_list_insert (&keyboard->focus_resource_list,
wl_resource_get_link (resource));
broadcast_focus (keyboard, resource);
}
else
{
wl_list_insert (&keyboard->resource_list, wl_resource_get_link (cr));
wl_list_insert (&keyboard->resource_list,
wl_resource_get_link (resource));
}
}
@@ -959,6 +959,17 @@ meta_wayland_keyboard_end_grab (MetaWaylandKeyboard *keyboard)
static void
meta_wayland_keyboard_init (MetaWaylandKeyboard *keyboard)
{
wl_list_init (&keyboard->resource_list);
wl_list_init (&keyboard->focus_resource_list);
meta_wayland_xkb_info_init (&keyboard->xkb_info);
keyboard->default_grab.interface = &default_keyboard_grab_interface;
keyboard->default_grab.keyboard = keyboard;
keyboard->grab = &keyboard->default_grab;
keyboard->focus_surface_listener.notify =
keyboard_handle_focus_surface_destroy;
}
static void

View File

@@ -41,6 +41,7 @@
#include "backends/meta-backend-private.h"
#include "backends/native/meta-backend-native.h"
#include "backends/meta-pointer-constraint.h"
#include "core/frame.h"
#include "pointer-constraints-unstable-v1-server-protocol.h"
@@ -447,17 +448,10 @@ is_within_constraint_region (MetaWaylandPointerConstraint *constraint,
return is_within;
}
static void
meta_wayland_pointer_constraint_maybe_enable (MetaWaylandPointerConstraint *constraint)
static gboolean
should_constraint_be_enabled (MetaWaylandPointerConstraint *constraint)
{
MetaWindow *window;
wl_fixed_t sx, sy;
if (constraint->is_enabled)
return;
if (constraint->seat->pointer->focus_surface != constraint->surface)
return;
window = constraint->surface->window;
if (!window)
@@ -467,11 +461,14 @@ meta_wayland_pointer_constraint_maybe_enable (MetaWaylandPointerConstraint *cons
* associate the X11 Window with the wl_surface.
*/
g_warn_if_fail (meta_xwayland_is_xwayland_surface (constraint->surface));
return;
return FALSE;
}
if (window->unmanaging)
return;
return FALSE;
if (constraint->seat->pointer->focus_surface != constraint->surface)
return FALSE;
if (meta_xwayland_is_xwayland_surface (constraint->surface))
{
@@ -493,14 +490,30 @@ meta_wayland_pointer_constraint_maybe_enable (MetaWaylandPointerConstraint *cons
if (display->focus_window &&
display->focus_window->client_type != META_WINDOW_CLIENT_TYPE_X11)
return;
return FALSE;
}
else
{
MetaWindow *window = constraint->surface->window;
if (!meta_window_appears_focused (window))
return;
return FALSE;
}
return TRUE;
}
static void
meta_wayland_pointer_constraint_maybe_enable (MetaWaylandPointerConstraint *constraint)
{
wl_fixed_t sx, sy;
if (constraint->is_enabled)
return;
if (!should_constraint_be_enabled (constraint))
return;
meta_wayland_pointer_get_relative_coordinates (constraint->seat->pointer,
constraint->surface,
&sx, &sy);
@@ -519,26 +532,9 @@ meta_wayland_pointer_constraint_remove (MetaWaylandPointerConstraint *constraint
meta_wayland_pointer_constraint_destroy (constraint);
}
void
meta_wayland_pointer_constraint_maybe_remove_for_seat (MetaWaylandSeat *seat,
MetaWindow *window)
static void
meta_wayland_pointer_constraint_deactivate (MetaWaylandPointerConstraint *constraint)
{
MetaWaylandPointer *pointer = seat->pointer;
MetaWaylandPointerConstraint *constraint;
if ((pointer->grab->interface != &confined_pointer_grab_interface &&
pointer->grab->interface != &locked_pointer_grab_interface))
return;
constraint = wl_container_of (pointer->grab, constraint, grab);
if (constraint->surface != window->surface)
return;
if (meta_window_appears_focused (window) &&
pointer->focus_surface == window->surface)
return;
switch (constraint->lifetime)
{
case ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ONESHOT:
@@ -554,6 +550,25 @@ meta_wayland_pointer_constraint_maybe_remove_for_seat (MetaWaylandSeat *seat,
}
}
void
meta_wayland_pointer_constraint_maybe_remove_for_seat (MetaWaylandSeat *seat,
MetaWindow *window)
{
MetaWaylandPointer *pointer = seat->pointer;
MetaWaylandPointerConstraint *constraint;
if ((pointer->grab->interface != &confined_pointer_grab_interface &&
pointer->grab->interface != &locked_pointer_grab_interface))
return;
constraint = wl_container_of (pointer->grab, constraint, grab);
if (should_constraint_be_enabled (constraint))
return;
meta_wayland_pointer_constraint_deactivate (constraint);
}
static void
meta_wayland_pointer_constraint_maybe_enable_for_window (MetaWindow *window)
{
@@ -589,11 +604,32 @@ cairo_region_t *
meta_wayland_pointer_constraint_calculate_effective_region (MetaWaylandPointerConstraint *constraint)
{
cairo_region_t *region;
MetaWindow *window;
region = meta_wayland_surface_calculate_input_region (constraint->surface);
if (constraint->region)
cairo_region_intersect (region, constraint->region);
window = constraint->surface->window;
if (window && window->frame)
{
MetaFrame *frame = window->frame;
int actual_width, actual_height;
g_assert (meta_xwayland_is_xwayland_surface (constraint->surface));
actual_width = window->buffer_rect.width - (frame->child_x +
frame->right_width);
actual_height = window->buffer_rect.height - (frame->child_y +
frame->bottom_height);
cairo_region_intersect_rectangle (region, &(cairo_rectangle_int_t) {
.x = frame->child_x,
.y = frame->child_y,
.width = actual_width,
.height = actual_height
});
}
return region;
}
@@ -938,10 +974,20 @@ locked_pointer_grab_pointer_button (MetaWaylandPointerGrab *grab,
meta_wayland_pointer_send_button (grab->pointer, event);
}
static void
locked_pointer_grab_pointer_cancel (MetaWaylandPointerGrab *grab)
{
MetaWaylandPointerConstraint *constraint =
wl_container_of (grab, constraint, grab);
meta_wayland_pointer_constraint_deactivate (constraint);
}
static const MetaWaylandPointerGrabInterface locked_pointer_grab_interface = {
locked_pointer_grab_pointer_focus,
locked_pointer_grab_pointer_motion,
locked_pointer_grab_pointer_button,
locked_pointer_grab_pointer_cancel,
};
static void
@@ -999,10 +1045,20 @@ confined_pointer_grab_pointer_button (MetaWaylandPointerGrab *grab,
meta_wayland_pointer_send_button (grab->pointer, event);
}
static void
confined_pointer_grab_pointer_cancel (MetaWaylandPointerGrab *grab)
{
MetaWaylandPointerConstraint *constraint =
wl_container_of (grab, constraint, grab);
meta_wayland_pointer_constraint_deactivate (constraint);
}
static const MetaWaylandPointerGrabInterface confined_pointer_grab_interface = {
confined_pointer_grab_pointer_focus,
confined_pointer_grab_pointer_motion,
confined_pointer_grab_pointer_button,
confined_pointer_grab_pointer_cancel,
};
static void

View File

@@ -86,6 +86,12 @@ static guint signals[LAST_SIGNAL];
G_DEFINE_TYPE (MetaWaylandPointer, meta_wayland_pointer,
META_TYPE_WAYLAND_INPUT_DEVICE)
static void
meta_wayland_pointer_reset_grab (MetaWaylandPointer *pointer);
static void
meta_wayland_pointer_cancel_grab (MetaWaylandPointer *pointer);
static MetaWaylandPointerClient *
meta_wayland_pointer_client_new (void)
{
@@ -358,8 +364,8 @@ meta_wayland_pointer_send_button (MetaWaylandPointer *pointer,
if (pointer->focus_client &&
!wl_list_empty (&pointer->focus_client->pointer_resources))
{
struct wl_client *client = wl_resource_get_client (pointer->focus_surface->resource);
struct wl_display *display = wl_client_get_display (client);
MetaWaylandInputDevice *input_device =
META_WAYLAND_INPUT_DEVICE (pointer);
uint32_t time;
uint32_t button;
uint32_t serial;
@@ -395,7 +401,7 @@ meta_wayland_pointer_send_button (MetaWaylandPointer *pointer,
}
time = clutter_event_get_time (event);
serial = wl_display_next_serial (display);
serial = meta_wayland_input_device_next_serial (input_device);
wl_resource_for_each (resource, &pointer->focus_client->pointer_resources)
{
@@ -416,11 +422,27 @@ default_grab_focus (MetaWaylandPointerGrab *grab,
MetaWaylandSurface *surface)
{
MetaWaylandPointer *pointer = grab->pointer;
MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (pointer);
MetaDisplay *display = meta_get_display ();
if (pointer->button_count > 0)
return;
meta_wayland_pointer_set_focus (pointer, surface);
switch (display->event_route)
{
case META_EVENT_ROUTE_WINDOW_OP:
case META_EVENT_ROUTE_COMPOSITOR_GRAB:
case META_EVENT_ROUTE_FRAME_BUTTON:
return;
break;
case META_EVENT_ROUTE_NORMAL:
case META_EVENT_ROUTE_WAYLAND_POPUP:
break;
}
if (meta_wayland_seat_has_pointer (seat))
meta_wayland_pointer_set_focus (pointer, surface);
}
static void
@@ -493,7 +515,9 @@ meta_wayland_pointer_disable (MetaWaylandPointer *pointer)
pointer->cursor_surface_destroy_id);
}
meta_wayland_pointer_end_grab (pointer);
meta_wayland_pointer_cancel_grab (pointer);
meta_wayland_pointer_reset_grab (pointer);
meta_wayland_pointer_set_focus (pointer, NULL);
g_clear_pointer (&pointer->pointer_clients, g_hash_table_unref);
pointer->cursor_surface = NULL;
@@ -533,7 +557,8 @@ repick_for_event (MetaWaylandPointer *pointer,
actor = clutter_input_device_get_pointer_actor (pointer->device);
if (META_IS_SURFACE_ACTOR_WAYLAND (actor))
pointer->current = meta_surface_actor_wayland_get_surface (META_SURFACE_ACTOR_WAYLAND (actor));
pointer->current =
meta_surface_actor_wayland_get_surface (META_SURFACE_ACTOR_WAYLAND (actor));
else
pointer->current = NULL;
@@ -792,22 +817,16 @@ void
meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer,
MetaWaylandSurface *surface)
{
MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (pointer);
if (!meta_wayland_seat_has_pointer (seat))
return;
MetaWaylandInputDevice *input_device = META_WAYLAND_INPUT_DEVICE (pointer);
if (pointer->focus_surface == surface)
return;
if (pointer->focus_surface != NULL)
{
struct wl_client *client =
wl_resource_get_client (pointer->focus_surface->resource);
struct wl_display *display = wl_client_get_display (client);
uint32_t serial;
serial = wl_display_next_serial (display);
serial = meta_wayland_input_device_next_serial (input_device);
if (pointer->focus_client)
{
@@ -824,11 +843,11 @@ meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer,
if (surface != NULL)
{
struct wl_client *client = wl_resource_get_client (surface->resource);
struct wl_display *display = wl_client_get_display (client);
ClutterPoint pos;
pointer->focus_surface = surface;
wl_resource_add_destroy_listener (pointer->focus_surface->resource, &pointer->focus_surface_listener);
wl_resource_add_destroy_listener (pointer->focus_surface->resource,
&pointer->focus_surface_listener);
clutter_input_device_get_coords (pointer->device, NULL, &pos);
@@ -842,7 +861,8 @@ meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer,
meta_wayland_pointer_get_pointer_client (pointer, client);
if (pointer->focus_client)
{
pointer->focus_serial = wl_display_next_serial (display);
pointer->focus_serial =
meta_wayland_input_device_next_serial (input_device);
meta_wayland_pointer_broadcast_enter (pointer,
pointer->focus_serial,
pointer->focus_surface);
@@ -860,6 +880,8 @@ meta_wayland_pointer_start_grab (MetaWaylandPointer *pointer,
{
const MetaWaylandPointerGrabInterface *interface;
meta_wayland_pointer_cancel_grab (pointer);
pointer->grab = grab;
interface = pointer->grab->interface;
grab->pointer = pointer;
@@ -867,6 +889,12 @@ meta_wayland_pointer_start_grab (MetaWaylandPointer *pointer,
interface->focus (pointer->grab, pointer->current);
}
static void
meta_wayland_pointer_reset_grab (MetaWaylandPointer *pointer)
{
pointer->grab = &pointer->default_grab;
}
void
meta_wayland_pointer_end_grab (MetaWaylandPointer *pointer)
{
@@ -879,6 +907,13 @@ meta_wayland_pointer_end_grab (MetaWaylandPointer *pointer)
meta_wayland_pointer_update_cursor_surface (pointer);
}
static void
meta_wayland_pointer_cancel_grab (MetaWaylandPointer *pointer)
{
if (pointer->grab->interface->cancel)
pointer->grab->interface->cancel (pointer->grab);
}
void
meta_wayland_pointer_end_popup_grab (MetaWaylandPointer *pointer)
{
@@ -1058,24 +1093,25 @@ meta_wayland_pointer_create_new_resource (MetaWaylandPointer *pointer,
struct wl_resource *seat_resource,
uint32_t id)
{
struct wl_resource *cr;
struct wl_resource *resource;
MetaWaylandPointerClient *pointer_client;
cr = wl_resource_create (client, &wl_pointer_interface, wl_resource_get_version (seat_resource), id);
wl_resource_set_implementation (cr, &pointer_interface, pointer,
resource = wl_resource_create (client, &wl_pointer_interface,
wl_resource_get_version (seat_resource), id);
wl_resource_set_implementation (resource, &pointer_interface, pointer,
meta_wayland_pointer_unbind_pointer_client_resource);
pointer_client = meta_wayland_pointer_ensure_pointer_client (pointer, client);
wl_list_insert (&pointer_client->pointer_resources,
wl_resource_get_link (cr));
wl_resource_get_link (resource));
if (pointer->focus_client == pointer_client)
{
meta_wayland_pointer_send_enter (pointer, cr,
meta_wayland_pointer_send_enter (pointer, resource,
pointer->focus_serial,
pointer->focus_surface);
meta_wayland_pointer_send_frame (pointer, cr);
meta_wayland_pointer_send_frame (pointer, resource);
}
}
@@ -1126,30 +1162,31 @@ relative_pointer_manager_destroy (struct wl_client *client,
static void
relative_pointer_manager_get_relative_pointer (struct wl_client *client,
struct wl_resource *resource,
struct wl_resource *manager_resource,
uint32_t id,
struct wl_resource *pointer_resource)
{
MetaWaylandPointer *pointer = wl_resource_get_user_data (pointer_resource);
struct wl_resource *cr;
struct wl_resource *resource;
MetaWaylandPointerClient *pointer_client;
cr = wl_resource_create (client, &zwp_relative_pointer_v1_interface,
wl_resource_get_version (resource), id);
if (cr == NULL)
resource = wl_resource_create (client, &zwp_relative_pointer_v1_interface,
wl_resource_get_version (manager_resource),
id);
if (!resource)
{
wl_client_post_no_memory (client);
return;
}
wl_resource_set_implementation (cr, &relative_pointer_interface,
wl_resource_set_implementation (resource, &relative_pointer_interface,
pointer,
meta_wayland_pointer_unbind_pointer_client_resource);
pointer_client = meta_wayland_pointer_ensure_pointer_client (pointer, client);
wl_list_insert (&pointer_client->relative_pointer_resources,
wl_resource_get_link (cr));
wl_resource_get_link (resource));
}
static const struct zwp_relative_pointer_manager_v1_interface relative_pointer_manager = {

View File

@@ -46,6 +46,7 @@ struct _MetaWaylandPointerGrabInterface
const ClutterEvent *event);
void (*button) (MetaWaylandPointerGrab *grab,
const ClutterEvent *event);
void (*cancel) (MetaWaylandPointerGrab *grab);
};
struct _MetaWaylandPointerGrab

View File

@@ -101,6 +101,16 @@ popup_grab_focus (MetaWaylandPointerGrab *grab,
MetaWaylandSurface *surface)
{
MetaWaylandPopupGrab *popup_grab = (MetaWaylandPopupGrab*)grab;
MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (grab->pointer);
/*
* We rely on having a pointer grab even when the seat doesn't have
* the pointer capability. In this case, we shouldn't update any pointer focus
* since there is no such thing when the seat doesn't have the pointer
* capability.
*/
if (!meta_wayland_seat_has_pointer (seat))
return;
/* Popup grabs are in owner-events mode (ie, events for the same client
are reported as normal) */
@@ -131,10 +141,17 @@ popup_grab_button (MetaWaylandPointerGrab *grab,
meta_wayland_pointer_end_popup_grab (grab->pointer);
}
static void
popup_grab_cancel (MetaWaylandPointerGrab *grab)
{
meta_wayland_pointer_end_popup_grab (grab->pointer);
}
static MetaWaylandPointerGrabInterface popup_grab_interface = {
popup_grab_focus,
popup_grab_motion,
popup_grab_button
popup_grab_button,
popup_grab_cancel
};
MetaWaylandPopupGrab *
@@ -249,12 +266,12 @@ meta_wayland_popup_dismiss (MetaWaylandPopup *popup)
{
MetaWaylandSurface *top_popup_surface;
MetaWaylandSeat *seat;
MetaWaylandKeyboard *keyboard;
top_popup_surface = meta_wayland_popup_grab_get_top_popup (popup_grab);
seat = meta_wayland_pointer_get_seat (popup_grab->generic.pointer);
keyboard = seat->keyboard;
meta_wayland_keyboard_set_focus (keyboard, top_popup_surface);
if (meta_wayland_seat_has_keyboard (seat))
meta_wayland_keyboard_set_focus (seat->keyboard, top_popup_surface);
}
}
@@ -272,7 +289,6 @@ meta_wayland_popup_create (MetaWaylandPopupSurface *popup_surface,
meta_wayland_popup_surface_get_surface (popup_surface);
MetaWaylandPopup *popup;
MetaWaylandSeat *seat;
MetaWaylandKeyboard *keyboard;
/* Don't allow creating popups if the grab has a different client. */
if (grab->grab_client != wl_resource_get_client (surface->resource))
@@ -285,8 +301,8 @@ meta_wayland_popup_create (MetaWaylandPopupSurface *popup_surface,
wl_list_insert (&grab->all_popups, &popup->link);
seat = meta_wayland_pointer_get_seat (grab->generic.pointer);
keyboard = seat->keyboard;
meta_wayland_keyboard_set_focus (keyboard, surface);
if (meta_wayland_seat_has_keyboard (seat))
meta_wayland_keyboard_set_focus (seat->keyboard, surface);
return popup;
}

View File

@@ -45,7 +45,7 @@ seat_get_pointer (struct wl_client *client,
MetaWaylandSeat *seat = wl_resource_get_user_data (resource);
MetaWaylandPointer *pointer = seat->pointer;
if ((seat->capabilities & WL_SEAT_CAPABILITY_POINTER) != 0)
if (meta_wayland_seat_has_pointer (seat))
meta_wayland_pointer_create_new_resource (pointer, client, resource, id);
}
@@ -57,7 +57,7 @@ seat_get_keyboard (struct wl_client *client,
MetaWaylandSeat *seat = wl_resource_get_user_data (resource);
MetaWaylandKeyboard *keyboard = seat->keyboard;
if ((seat->capabilities & WL_SEAT_CAPABILITY_KEYBOARD) != 0)
if (meta_wayland_seat_has_keyboard (seat))
meta_wayland_keyboard_create_new_resource (keyboard, client, resource, id);
}
@@ -69,7 +69,7 @@ seat_get_touch (struct wl_client *client,
MetaWaylandSeat *seat = wl_resource_get_user_data (resource);
MetaWaylandTouch *touch = seat->touch;
if ((seat->capabilities & WL_SEAT_CAPABILITY_TOUCH) != 0)
if (meta_wayland_seat_has_touch (seat))
meta_wayland_touch_create_new_resource (touch, client, resource, id);
}
@@ -319,20 +319,20 @@ meta_wayland_seat_update (MetaWaylandSeat *seat,
case CLUTTER_BUTTON_PRESS:
case CLUTTER_BUTTON_RELEASE:
case CLUTTER_SCROLL:
if (seat->capabilities & WL_SEAT_CAPABILITY_POINTER)
if (meta_wayland_seat_has_pointer (seat))
meta_wayland_pointer_update (seat->pointer, event);
break;
case CLUTTER_KEY_PRESS:
case CLUTTER_KEY_RELEASE:
if (seat->capabilities & WL_SEAT_CAPABILITY_KEYBOARD)
if (meta_wayland_seat_has_keyboard (seat))
meta_wayland_keyboard_update (seat->keyboard, (const ClutterKeyEvent *) event);
break;
case CLUTTER_TOUCH_BEGIN:
case CLUTTER_TOUCH_UPDATE:
case CLUTTER_TOUCH_END:
if (seat->capabilities & WL_SEAT_CAPABILITY_TOUCH)
if (meta_wayland_seat_has_touch (seat))
meta_wayland_touch_update (seat->touch, event);
break;
@@ -356,18 +356,18 @@ meta_wayland_seat_handle_event (MetaWaylandSeat *seat,
case CLUTTER_SCROLL:
case CLUTTER_TOUCHPAD_SWIPE:
case CLUTTER_TOUCHPAD_PINCH:
if (seat->capabilities & WL_SEAT_CAPABILITY_POINTER)
if (meta_wayland_seat_has_pointer (seat))
return meta_wayland_pointer_handle_event (seat->pointer, event);
case CLUTTER_KEY_PRESS:
case CLUTTER_KEY_RELEASE:
if (seat->capabilities & WL_SEAT_CAPABILITY_KEYBOARD)
if (meta_wayland_seat_has_keyboard (seat))
return meta_wayland_keyboard_handle_event (seat->keyboard,
(const ClutterKeyEvent *) event);
case CLUTTER_TOUCH_BEGIN:
case CLUTTER_TOUCH_UPDATE:
case CLUTTER_TOUCH_END:
if (seat->capabilities & WL_SEAT_CAPABILITY_TOUCH)
if (meta_wayland_seat_has_touch (seat))
return meta_wayland_touch_handle_event (seat->touch, event);
default:
@@ -380,7 +380,7 @@ meta_wayland_seat_handle_event (MetaWaylandSeat *seat,
void
meta_wayland_seat_repick (MetaWaylandSeat *seat)
{
if ((seat->capabilities & WL_SEAT_CAPABILITY_POINTER) == 0)
if (!meta_wayland_seat_has_pointer (seat))
return;
meta_wayland_pointer_repick (seat->pointer);
@@ -393,7 +393,7 @@ meta_wayland_seat_set_input_focus (MetaWaylandSeat *seat,
MetaWaylandTabletSeat *tablet_seat;
MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
if ((seat->capabilities & WL_SEAT_CAPABILITY_KEYBOARD) != 0)
if (meta_wayland_seat_has_keyboard (seat))
{
meta_wayland_keyboard_set_focus (seat->keyboard, surface);
meta_wayland_data_device_set_keyboard_focus (&seat->data_device);
@@ -414,7 +414,7 @@ meta_wayland_seat_get_grab_info (MetaWaylandSeat *seat,
ClutterEventSequence *sequence = NULL;
gboolean can_grab_surface = FALSE;
if ((seat->capabilities & WL_SEAT_CAPABILITY_TOUCH) != 0)
if (meta_wayland_seat_has_touch (seat))
sequence = meta_wayland_touch_find_grab_sequence (seat->touch,
surface,
serial);
@@ -425,7 +425,7 @@ meta_wayland_seat_get_grab_info (MetaWaylandSeat *seat,
}
else
{
if ((seat->capabilities & WL_SEAT_CAPABILITY_POINTER) != 0 &&
if (meta_wayland_seat_has_pointer (seat) &&
(!require_pressed || seat->pointer->button_count > 0))
can_grab_surface = meta_wayland_pointer_can_grab_surface (seat->pointer,
surface,

View File

@@ -202,18 +202,11 @@ touch_get_relative_coordinates (MetaWaylandTouch *touch,
clutter_event_get_coords (event, &event_x, &event_y);
if (surface->surface_actor)
{
clutter_actor_transform_stage_point (CLUTTER_ACTOR (surface->surface_actor),
event_x, event_y,
&event_x, &event_y);
}
*x = event_x / surface->scale;
*y = event_y / surface->scale;
return meta_wayland_surface_get_relative_coordinates (surface,
event_x, event_y,
x, y);
}
void
meta_wayland_touch_update (MetaWaylandTouch *touch,
const ClutterEvent *event)
@@ -249,11 +242,10 @@ meta_wayland_touch_update (MetaWaylandTouch *touch,
if (event->type == CLUTTER_TOUCH_BEGIN ||
event->type == CLUTTER_TOUCH_END)
{
MetaWaylandSurface *surface = touch_info->touch_surface->surface;
struct wl_client *client = wl_resource_get_client (surface->resource);
struct wl_display *display = wl_client_get_display (client);
MetaWaylandInputDevice *input_device = META_WAYLAND_INPUT_DEVICE (touch);
touch_info->slot_serial = wl_display_get_serial (display);
touch_info->slot_serial =
meta_wayland_input_device_next_serial (input_device);
}
touch_get_relative_coordinates (touch, touch_info->touch_surface->surface,

View File

@@ -109,6 +109,11 @@ struct _MetaWaylandXdgPopup
struct {
MetaWaylandSurface *parent_surface;
/*
* The coordinates/dimensions in the placement rule are in logical pixel
* coordinate space, i.e. not scaled given what monitor the popup is on.
*/
MetaPlacementRule placement_rule;
MetaWaylandSeat *grab_seat;
@@ -617,6 +622,12 @@ xdg_toplevel_role_commit (MetaWaylandSurfaceRole *surface_role,
return;
}
window_geometry = meta_wayland_xdg_surface_get_window_geometry (xdg_surface);
meta_window_wayland_move_resize (window,
&xdg_surface_priv->acked_configure_serial,
window_geometry,
pending->dx, pending->dy);
/* When we get to this point, we ought to have valid size hints */
if (pending->has_new_min_size || pending->has_new_max_size)
{
@@ -639,11 +650,6 @@ xdg_toplevel_role_commit (MetaWaylandSurfaceRole *surface_role,
}
}
window_geometry = meta_wayland_xdg_surface_get_window_geometry (xdg_surface);
meta_window_wayland_move_resize (window,
&xdg_surface_priv->acked_configure_serial,
window_geometry,
pending->dx, pending->dy);
xdg_surface_priv->acked_configure_serial.set = FALSE;
}
@@ -757,6 +763,22 @@ meta_wayland_xdg_toplevel_class_init (MetaWaylandXdgToplevelClass *klass)
xdg_toplevel_role_shell_client_destroyed;
}
static void
scale_placement_rule (MetaPlacementRule *placement_rule,
MetaWaylandSurface *surface)
{
int monitor_scale = surface->window->monitor->scale;
placement_rule->anchor_rect.x *= monitor_scale;
placement_rule->anchor_rect.y *= monitor_scale;
placement_rule->anchor_rect.width *= monitor_scale;
placement_rule->anchor_rect.height *= monitor_scale;
placement_rule->offset_x *= monitor_scale;
placement_rule->offset_y *= monitor_scale;
placement_rule->width *= monitor_scale;
placement_rule->height *= monitor_scale;
}
static void
finish_popup_setup (MetaWaylandXdgPopup *xdg_popup)
{
@@ -764,14 +786,13 @@ finish_popup_setup (MetaWaylandXdgPopup *xdg_popup)
MetaWaylandSurface *surface =
meta_wayland_surface_role_get_surface (surface_role);
MetaWaylandSurface *parent_surface;
MetaPlacementRule placement_rule;
MetaPlacementRule scaled_placement_rule;
MetaWaylandSeat *seat;
uint32_t serial;
MetaDisplay *display = meta_get_display ();
MetaWindow *window;
parent_surface = xdg_popup->setup.parent_surface;
placement_rule = xdg_popup->setup.placement_rule;
seat = xdg_popup->setup.grab_seat;
serial = xdg_popup->setup.grab_serial;
@@ -793,8 +814,12 @@ finish_popup_setup (MetaWaylandXdgPopup *xdg_popup)
&xdg_popup->parent_destroy_listener);
window = meta_window_wayland_new (display, surface);
meta_window_place_with_placement_rule (window, &placement_rule);
meta_wayland_surface_set_window (surface, window);
meta_window_update_monitor (window, FALSE);
scaled_placement_rule = xdg_popup->setup.placement_rule;
scale_placement_rule (&scaled_placement_rule, surface);
meta_window_place_with_placement_rule (window, &scaled_placement_rule);
if (seat)
{
@@ -873,6 +898,7 @@ xdg_popup_role_configure (MetaWaylandSurfaceRoleShellSurface *shell_surface_role
MetaWaylandXdgPopup *xdg_popup = META_WAYLAND_XDG_POPUP (shell_surface_role);
MetaWaylandXdgSurface *xdg_surface = META_WAYLAND_XDG_SURFACE (xdg_popup);
MetaWindow *parent_window = xdg_popup->parent_surface->window;
int monitor_scale;
int x, y;
/* If the parent surface was destroyed, its window will be destroyed
@@ -886,8 +912,9 @@ xdg_popup_role_configure (MetaWaylandSurfaceRoleShellSurface *shell_surface_role
if (!parent_window)
return;
x = new_x - parent_window->rect.x;
y = new_y - parent_window->rect.y;
monitor_scale = meta_window_wayland_get_main_monitor_scale (parent_window);
x = (new_x - parent_window->rect.x) / monitor_scale;
y = (new_y - parent_window->rect.y) / monitor_scale;
zxdg_popup_v6_send_configure (xdg_popup->resource,
x, y, new_width, new_height);
meta_wayland_xdg_surface_send_configure (xdg_surface);
@@ -1463,6 +1490,7 @@ xdg_surface_constructor_get_toplevel (struct wl_client *client,
window = meta_window_wayland_new (meta_get_display (), surface);
meta_wayland_surface_set_window (surface, window);
meta_window_update_monitor (window, FALSE);
}
static void

View File

@@ -106,24 +106,6 @@ meta_window_wayland_kill (MetaWindow *window)
{
MetaWaylandSurface *surface = window->surface;
struct wl_resource *resource = surface->resource;
pid_t pid;
uid_t uid;
gid_t gid;
wl_client_get_credentials (wl_resource_get_client (resource), &pid, &uid, &gid);
if (pid > 0)
{
meta_topic (META_DEBUG_WINDOW_OPS,
"Killing %s with kill()\n",
window->desc);
if (kill (pid, 9) == 0)
return;
meta_topic (META_DEBUG_WINDOW_OPS,
"Failed to signal %s: %s\n",
window->desc, strerror (errno));
}
/* Send the client an unrecoverable error to kill the client. */
wl_resource_post_error (resource,
@@ -135,6 +117,20 @@ static void
meta_window_wayland_focus (MetaWindow *window,
guint32 timestamp)
{
MetaWaylandSurface *surface = window->surface;
MetaWaylandSurfaceRoleShellSurface *shell_surface_role =
META_WAYLAND_SURFACE_ROLE_SHELL_SURFACE (surface->role);
/* The keyboard focus semantics for non-grabbing zxdg_shell_v6 popups
* is pretty undefined. Same applies for subsurfaces, but in practice,
* subsurfaces never receive keyboard focus, so it makes sense to
* do the same for non-grabbing popups.
*
* See https://bugzilla.gnome.org/show_bug.cgi?id=771694#c24
*/
if (META_IS_WAYLAND_XDG_POPUP (shell_surface_role))
return;
meta_display_set_input_focus_window (window->display,
window,
FALSE,
@@ -352,18 +348,29 @@ scale_rect_size (MetaRectangle *rect,
static void
meta_window_wayland_update_main_monitor (MetaWindow *window)
{
MetaWindow *toplevel_window;
const MetaMonitorInfo *from;
const MetaMonitorInfo *to;
const MetaMonitorInfo *scaled_new;
float scale;
MetaRectangle rect;
from = window->monitor;
/* If the window is not a toplevel window (i.e. it's a popup window) just use
* the monitor of the toplevel. */
toplevel_window = meta_wayland_surface_get_toplevel_window (window->surface);
if (toplevel_window != window)
{
window->monitor = toplevel_window->monitor;
return;
}
/* Require both the current and the new monitor would be the new main monitor,
* even given the resulting scale the window would end up having. This is
* needed to avoid jumping back and forth between the new and the old, since
* changing main monitor may cause the window to be resized so that it no
* longer have that same new main monitor. */
from = window->monitor;
to = meta_screen_calculate_monitor_for_window (window->screen, window);
if (from == to)
@@ -453,6 +460,17 @@ meta_window_wayland_main_monitor_changed (MetaWindow *window,
meta_window_emit_size_changed (window);
}
static uint32_t
meta_window_wayland_get_client_pid (MetaWindow *window)
{
MetaWaylandSurface *surface = window->surface;
struct wl_resource *resource = surface->resource;
pid_t pid;
wl_client_get_credentials (wl_resource_get_client (resource), &pid, NULL, NULL);
return (uint32_t)pid;
}
static void
appears_focused_changed (GObject *object,
GParamSpec *pspec,
@@ -487,6 +505,7 @@ meta_window_wayland_class_init (MetaWindowWaylandClass *klass)
window_class->move_resize_internal = meta_window_wayland_move_resize_internal;
window_class->update_main_monitor = meta_window_wayland_update_main_monitor;
window_class->main_monitor_changed = meta_window_wayland_main_monitor_changed;
window_class->get_client_pid = meta_window_wayland_get_client_pid;
}
MetaWindow *

View File

@@ -1129,6 +1129,9 @@ meta_xwayland_selection_handle_selection_notify (MetaWaylandCompositor *composit
if (!selection)
return FALSE;
if (selection->window != event->requestor)
return FALSE;
/* convert selection failed */
if (event->property == None)
{
@@ -1261,6 +1264,9 @@ meta_xwayland_selection_handle_selection_request (MetaWaylandCompositor *composi
if (!selection)
return FALSE;
if (selection->window != event->owner)
return FALSE;
/* We must fetch from the currently active source, not the Xwayland one */
data_source = data_device_get_active_source_for_atom (&compositor->seat->data_device,
selection->selection_atom);

View File

@@ -28,6 +28,9 @@
#include <string.h>
#include <X11/Xatom.h>
#include <X11/Xlibint.h> /* For display->resource_mask */
#include <X11/Xlib-xcb.h>
#include <xcb/res.h>
#include <X11/extensions/shape.h>
@@ -701,23 +704,6 @@ meta_window_x11_delete (MetaWindow *window,
static void
meta_window_x11_kill (MetaWindow *window)
{
meta_topic (META_DEBUG_WINDOW_OPS,
"Killing %s brutally\n",
window->desc);
if (!meta_window_is_remote (window) &&
window->net_wm_pid > 0)
{
meta_topic (META_DEBUG_WINDOW_OPS,
"Killing %s with kill()\n",
window->desc);
if (kill (window->net_wm_pid, 9) < 0)
meta_topic (META_DEBUG_WINDOW_OPS,
"Failed to signal %s: %s\n",
window->desc, strerror (errno));
}
meta_topic (META_DEBUG_WINDOW_OPS,
"Disconnecting %s with XKillClient()\n",
window->desc);
@@ -1481,6 +1467,42 @@ meta_window_x11_main_monitor_changed (MetaWindow *window,
{
}
static uint32_t
meta_window_x11_get_client_pid (MetaWindow *window)
{
xcb_connection_t *xcb = XGetXCBConnection (window->display->xdisplay);
xcb_res_client_id_spec_t spec = { 0 };
xcb_res_query_client_ids_cookie_t cookie;
xcb_res_query_client_ids_reply_t *reply = NULL;
spec.client = window->xwindow;
spec.mask = XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID;
cookie = xcb_res_query_client_ids (xcb, 1, &spec);
reply = xcb_res_query_client_ids_reply (xcb, cookie, NULL);
if (reply == NULL)
return 0;
uint32_t pid = 0, *value;
xcb_res_client_id_value_iterator_t it;
for (it = xcb_res_query_client_ids_ids_iterator (reply);
it.rem;
xcb_res_client_id_value_next (&it))
{
spec = it.data->spec;
if (spec.mask & XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID)
{
value = xcb_res_client_id_value_value (it.data);
pid = *value;
break;
}
}
free (reply);
return pid;
}
static void
meta_window_x11_class_init (MetaWindowX11Class *klass)
{
@@ -1501,6 +1523,7 @@ meta_window_x11_class_init (MetaWindowX11Class *klass)
window_class->update_icon = meta_window_x11_update_icon;
window_class->update_main_monitor = meta_window_x11_update_main_monitor;
window_class->main_monitor_changed = meta_window_x11_main_monitor_changed;
window_class->get_client_pid = meta_window_x11_get_client_pid;
}
void