Compare commits
194 Commits
wip/carlos
...
3.29.92
Author | SHA1 | Date | |
---|---|---|---|
444af437a0 | |||
eebcf98284 | |||
7d973ac538 | |||
0ada04089c | |||
85284acb00 | |||
388d065699 | |||
e191c21e04 | |||
5376c31a33 | |||
ca5b27baf5 | |||
64df627688 | |||
a740f50cd7 | |||
5fd0f62a62 | |||
80d420ff43 | |||
407d62943c | |||
0ace58d05f | |||
d791710197 | |||
b30c907ef9 | |||
784a774d9c | |||
8d3e053059 | |||
f4d07caa38 | |||
8a6d502e68 | |||
b6c2eec487 | |||
093aa086af | |||
ebafc256a0 | |||
aaed7c9a4f | |||
fa8930817e | |||
e741adb82e | |||
deb541ef5a | |||
29cc526e2e | |||
6a92c6f83f | |||
b8340f1355 | |||
c7db234c11 | |||
db22c13c4f | |||
ad864083f9 | |||
5f99eeb926 | |||
e1513b6b00 | |||
0cc3cd62ba | |||
0f40541bb2 | |||
db604dda89 | |||
21ce6f96f1 | |||
323a806d35 | |||
84ac28cbee | |||
2860adcf65 | |||
2dbacfa8d6 | |||
85e5b160ee | |||
9510fbcbac | |||
7c06e21e5a | |||
1bfa20929b | |||
bafc43ca26 | |||
d37528f693 | |||
37eeda0320 | |||
acf70a3561 | |||
24aef44baf | |||
f7af32a3ea | |||
252dd52439 | |||
c216397974 | |||
841dc09d21 | |||
192b7887c3 | |||
1fd8fe65c5 | |||
a87c447b72 | |||
c624fcbb8b | |||
b393f3d540 | |||
3e3bc3e67f | |||
11d5e00003 | |||
f0c9c25cf8 | |||
7fdaf7721c | |||
c403785d36 | |||
4fe594bf9c | |||
ec451b4674 | |||
43eb724b94 | |||
3d75b48d50 | |||
4d465eac08 | |||
db5abbb225 | |||
eb0865fe11 | |||
e283cd7b91 | |||
d99442d6e6 | |||
148da24f95 | |||
649c26e05a | |||
48eaa36d41 | |||
6e953e2725 | |||
3e357bd36f | |||
a3da4b8d5b | |||
0f43f86341 | |||
d30a78767d | |||
5f37369adb | |||
c6691afa38 | |||
ff5d561ca6 | |||
5ac7109aaa | |||
7749f4d983 | |||
22aea3dc67 | |||
3d5784342d | |||
fa9e330f2c | |||
951219650f | |||
49b23c7490 | |||
644a618fb1 | |||
1e3ac3cf2c | |||
658c373580 | |||
6d12d2eac2 | |||
356cad094b | |||
161d2540e6 | |||
94f4009882 | |||
ec8138773a | |||
041be7c565 | |||
0407a8b33d | |||
912a6f5e3f | |||
89162a90aa | |||
90a68f3118 | |||
951fb03a7c | |||
4837ea3434 | |||
3fbeeb9072 | |||
0ca3526627 | |||
5b8c8a4114 | |||
f635876eac | |||
1caaf0cd1e | |||
e2464660bc | |||
81c1c70c0a | |||
e05cd6009a | |||
390314adfb | |||
2ac7afe8a9 | |||
d5c5669f2a | |||
e8171ccdc1 | |||
43f9cd537e | |||
d4c4d6e64d | |||
89727aa747 | |||
de5e7a7175 | |||
e6b885210c | |||
9f1ab1c3af | |||
9333a6da75 | |||
8adab02757 | |||
14d8aec4b8 | |||
8e7e1eeef5 | |||
0a8ae8417c | |||
1d5e37050d | |||
b7c3dada81 | |||
d79ffd3976 | |||
6458139c04 | |||
82307dd694 | |||
e1c67a1824 | |||
68f261e8e2 | |||
1530f27513 | |||
05899596d1 | |||
98d912ba5f | |||
9e5ea8def4 | |||
722c975aca | |||
937a9853cd | |||
cd8f4259be | |||
c64d5ad8af | |||
dacc041d0c | |||
18779109de | |||
522f9b4c38 | |||
3d2b9a3a69 | |||
15fa7816bd | |||
6621a9b5a0 | |||
04e411c2c0 | |||
859bea629b | |||
cbc783108e | |||
2383801f7b | |||
8626c69c2f | |||
768ec15ea0 | |||
1200182d70 | |||
d9c18fd5bb | |||
54709c16b5 | |||
8da95b17f5 | |||
d535c1eb6d | |||
435b3c4bdb | |||
22723ca371 | |||
edd3634bb5 | |||
1bf2eb95b5 | |||
516fb524cb | |||
596b30096d | |||
7412794c66 | |||
ad22b3f098 | |||
206634e0ed | |||
ea05d2af49 | |||
6c7c566c6c | |||
b596cf97ee | |||
9dcf9782b6 | |||
0f519ffb05 | |||
42c78bd41f | |||
b702c0fa5c | |||
c80fd487f1 | |||
817c8e568c | |||
b7e9388906 | |||
b8336633a7 | |||
3c538d4a92 | |||
2fc978ca9d | |||
10dfc67dad | |||
9ebcb719a1 | |||
2a20df0c50 | |||
d3441f7577 | |||
65c02e26db | |||
50ff9d4c71 | |||
a3269dde95 | |||
f2dea5d139 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -94,12 +94,15 @@ src/xwayland-keyboard-grab-unstable-v1-protocol.c
|
||||
src/xwayland-keyboard-grab-unstable-v1-server-protocol.h
|
||||
src/tablet-unstable-v*-protocol.c
|
||||
src/tablet-unstable-v*-server-protocol.h
|
||||
src/text-input-unstable-v*-protocol.c
|
||||
src/text-input-unstable-v*-server-protocol.h
|
||||
src/keyboard-shortcuts-inhibit-unstable-v*-protocol.c
|
||||
src/keyboard-shortcuts-inhibit-unstable-v*-server-protocol.h
|
||||
src/linux-dmabuf-unstable-v*-protocol.c
|
||||
src/linux-dmabuf-unstable-v*-server-protocol.h
|
||||
src/xdg-shell-protocol.c
|
||||
src/xdg-shell-server-protocol.h
|
||||
src/wayland-eglstream-controller-server-protocol.h
|
||||
src/meta/meta-version.h
|
||||
src/libmutter-*.pc
|
||||
doc/reference/*.args
|
||||
|
78
NEWS
78
NEWS
@ -1,3 +1,81 @@
|
||||
3.29.92
|
||||
=======
|
||||
* Avoid crash when a cursor is not found [Sebastian; #254]
|
||||
* Fix screen rotation regression [Jonas; #216]
|
||||
* Handle requests to unmanaged windows gracefully [Jonas; #240]
|
||||
* Move popups together with their parent [Jonas; #274]
|
||||
* Fix non-lowercase letters on virtual key devices [Carlos; gnome-shell#135]
|
||||
* Misc. bug fixes [Iain, Jonas; #223, #192, #279]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Carlos Garnacho, Sebastian Keller, Iain Lane, Robert Mader,
|
||||
Daniel van Vugt
|
||||
|
||||
Translators:
|
||||
Gwan-gyeong Mun [ko], Kukuh Syafaat [id], Milo Casagrande [it],
|
||||
Anders Jonsson [sv], Rafael Fontenelle [pt_BR], Marek Cernocky [cs]
|
||||
|
||||
3.29.91
|
||||
=======
|
||||
* Various crash fixes [Olivier, Iain; #255, #223]
|
||||
* Fix lock up with some DRI drivers [Alex; #127]
|
||||
* Send correct button codes from virtual evdev devices [Jonas; !190]
|
||||
* Improve grab-device clock updates on X11 [Jeff; !174]
|
||||
* Fix popups closing immediately on key down [Jonas; !180]
|
||||
* Prevent clients from modifying the shared keymap [Jonas; #784206]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Andrea Azzarone, Piotr Drąg, Olivier Fourdan, Carlos Garnacho,
|
||||
Jan Grulich, Iain Lane, Alex Villacís Lasso, Jeff Smith, Daniel van Vugt
|
||||
|
||||
Translators:
|
||||
Matej Urbančič [sl], Mario Blättermann [de], Piotr Drąg [pl],
|
||||
Aurimas Černius [lt], Yi-Jyun Pan [zh_TW], Emin Tufan Çetin [tr],
|
||||
Fabio Tomat [fur], Bruce Cowan [en_GB]
|
||||
|
||||
3.29.90
|
||||
=======
|
||||
* Various crash fixes [Olivier, Jonas, Florian; #189, #70, #194, #15, #130]
|
||||
* Don't expose resolutions that are below the minimum [Andrea; #793223]
|
||||
* Remove support for preference overrides [Florian; #786496]
|
||||
* Misc. bug fixes and cleanups [Daniel, Jonas, Florian; #131, #245, !176]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Andrea Azzarone, Olivier Fourdan, Florian Müllner, Kevin Tamool,
|
||||
Daniel van Vugt
|
||||
|
||||
Translators:
|
||||
Daniel Mustieles [es], Claude Paroz [fr]
|
||||
|
||||
3.29.4
|
||||
======
|
||||
* Fix crash with parent-less modal dialogs [Olivier; #174]
|
||||
* Preserve paint volumes where possible to optimize CPU usage [Carlos; #782344]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Iain Lane, Bastien Nocera
|
||||
|
||||
Translators:
|
||||
Daniel Șerbănescu [ro]
|
||||
|
||||
3.29.3
|
||||
======
|
||||
* Fix Korean Hangul support on wayland [Changwoo; #152]
|
||||
* Improve support for proprietary Nvidia driver [Jonas; #790316]
|
||||
* Only upload HW cursor sprite to the GPU that will display them [Jonas; #77]
|
||||
* Improve EGLstream support [Miguel; #2, #782575]
|
||||
* Remove MetaScreen to prepare for non-mandatary X11 dependency
|
||||
[Armin, Jonas; #759538]
|
||||
* Misc. bug fixes [Olivier, Jonas, Sam; #160, !130, #786929, #788834]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Armin Krezović, Corentin Noël,
|
||||
Changwoo Ryu, Sam Spilsbury, Daniel Stone, Marco Trevisan (Treviño),
|
||||
Miguel A. Vico, Daniel van Vugt
|
||||
|
||||
Translators:
|
||||
Yi-Jyun Pan [zh_TW], Jordi Mas [ca], Daniel Șerbănescu [ro], Fabio Tomat [fur]
|
||||
|
||||
3.29.2
|
||||
======
|
||||
* Fix size change animations on wayland [Georges; #780292]
|
||||
|
30
README.md
Normal file
30
README.md
Normal file
@ -0,0 +1,30 @@
|
||||
# Mutter
|
||||
|
||||
Mutter is a Wayland display server and X11 window manager and compositor library.
|
||||
|
||||
When used as a Wayland display server, it runs on top of KMS and libinput. It
|
||||
implements the compositor side of the Wayland core protocol as well as various
|
||||
protocol extensions. It also has functionality related to running X11
|
||||
applications using Xwayland.
|
||||
|
||||
When used on top of Xorg it acts as a X11 window manager and compositing manager.
|
||||
|
||||
It contains functionality related to, among other things, window management,
|
||||
window compositing, focus tracking, workspace management, keybindings and
|
||||
monitor configuration.
|
||||
|
||||
Internally it uses a fork of Cogl, a hardware acceleration abstraction library
|
||||
used to simplify usage of OpenGL pipelines, as well as a fork af Clutter, a
|
||||
scene graph and user interface toolkit.
|
||||
|
||||
Mutter is used by GNOME Shell, the GNOME core user interface. It can also be run
|
||||
standalone, using the command "mutter", but just running plain mutter is only
|
||||
intended for debugging purposes.
|
||||
|
||||
## License
|
||||
|
||||
Mutter is distributed under the terms of the GNU General Public License,
|
||||
version 2 or later. See the [COPYING][license] file for detalis.
|
||||
|
||||
[bug-tracker]: https://gitlab.gnome.org/GNOME/mutter/issues
|
||||
[license]: COPYING
|
@ -840,6 +840,7 @@ struct _ClutterActorPrivate
|
||||
guint needs_compute_expand : 1;
|
||||
guint needs_x_expand : 1;
|
||||
guint needs_y_expand : 1;
|
||||
guint needs_paint_volume_update : 1;
|
||||
};
|
||||
|
||||
enum
|
||||
@ -1092,6 +1093,11 @@ static void clutter_actor_set_child_transform_internal (ClutterActor *sel
|
||||
static void clutter_actor_realize_internal (ClutterActor *self);
|
||||
static void clutter_actor_unrealize_internal (ClutterActor *self);
|
||||
|
||||
static void clutter_actor_push_in_cloned_branch (ClutterActor *self,
|
||||
gulong count);
|
||||
static void clutter_actor_pop_in_cloned_branch (ClutterActor *self,
|
||||
gulong count);
|
||||
|
||||
/* Helper macro which translates by the anchor coord, applies the
|
||||
given transformation and then translates back */
|
||||
#define TRANSFORM_ABOUT_ANCHOR_COORD(a,m,c,_transform) G_STMT_START { \
|
||||
@ -1504,6 +1510,8 @@ clutter_actor_real_map (ClutterActor *self)
|
||||
|
||||
CLUTTER_ACTOR_SET_FLAGS (self, CLUTTER_ACTOR_MAPPED);
|
||||
|
||||
self->priv->needs_paint_volume_update = TRUE;
|
||||
|
||||
stage = _clutter_actor_get_stage_internal (self);
|
||||
priv->pick_id = _clutter_stage_acquire_pick_id (CLUTTER_STAGE (stage), self);
|
||||
|
||||
@ -2737,6 +2745,7 @@ clutter_actor_real_queue_relayout (ClutterActor *self)
|
||||
priv->needs_width_request = TRUE;
|
||||
priv->needs_height_request = TRUE;
|
||||
priv->needs_allocation = TRUE;
|
||||
priv->needs_paint_volume_update = TRUE;
|
||||
|
||||
/* reset the cached size requests */
|
||||
memset (priv->width_requests, 0,
|
||||
@ -4285,6 +4294,9 @@ clutter_actor_remove_child_internal (ClutterActor *self,
|
||||
|
||||
self->priv->age += 1;
|
||||
|
||||
if (self->priv->in_cloned_branch)
|
||||
clutter_actor_pop_in_cloned_branch (child, self->priv->in_cloned_branch);
|
||||
|
||||
/* if the child that got removed was visible and set to
|
||||
* expand then we want to reset the parent's state in
|
||||
* case the child was the only thing that was making it
|
||||
@ -8518,6 +8530,7 @@ clutter_actor_init (ClutterActor *self)
|
||||
priv->needs_width_request = TRUE;
|
||||
priv->needs_height_request = TRUE;
|
||||
priv->needs_allocation = TRUE;
|
||||
priv->needs_paint_volume_update = TRUE;
|
||||
|
||||
priv->cached_width_age = 1;
|
||||
priv->cached_height_age = 1;
|
||||
@ -10084,6 +10097,9 @@ clutter_actor_allocate (ClutterActor *self,
|
||||
return;
|
||||
}
|
||||
|
||||
if (CLUTTER_ACTOR_IS_MAPPED (self))
|
||||
self->priv->needs_paint_volume_update = TRUE;
|
||||
|
||||
if (!stage_allocation_changed)
|
||||
{
|
||||
/* If the actor didn't move but needs_allocation is set, we just
|
||||
@ -12902,6 +12918,9 @@ clutter_actor_add_child_internal (ClutterActor *self,
|
||||
|
||||
self->priv->age += 1;
|
||||
|
||||
if (self->priv->in_cloned_branch)
|
||||
clutter_actor_push_in_cloned_branch (child, self->priv->in_cloned_branch);
|
||||
|
||||
/* if push_internal() has been called then we automatically set
|
||||
* the flag on the actor
|
||||
*/
|
||||
@ -12972,6 +12991,9 @@ clutter_actor_add_child_internal (ClutterActor *self,
|
||||
child->priv->needs_height_request = TRUE;
|
||||
child->priv->needs_allocation = TRUE;
|
||||
|
||||
if (CLUTTER_ACTOR_IS_MAPPED (child))
|
||||
child->priv->needs_paint_volume_update = TRUE;
|
||||
|
||||
/* we only queue a relayout here, because any possible
|
||||
* redraw has already been queued either by show() or
|
||||
* by our call to queue_redraw() above
|
||||
@ -17514,11 +17536,16 @@ _clutter_actor_get_paint_volume_mutable (ClutterActor *self)
|
||||
priv = self->priv;
|
||||
|
||||
if (priv->paint_volume_valid)
|
||||
clutter_paint_volume_free (&priv->paint_volume);
|
||||
{
|
||||
if (!priv->needs_paint_volume_update)
|
||||
return &priv->paint_volume;
|
||||
clutter_paint_volume_free (&priv->paint_volume);
|
||||
}
|
||||
|
||||
if (_clutter_actor_get_paint_volume_real (self, &priv->paint_volume))
|
||||
{
|
||||
priv->paint_volume_valid = TRUE;
|
||||
priv->needs_paint_volume_update = FALSE;
|
||||
return &priv->paint_volume;
|
||||
}
|
||||
else
|
||||
@ -20688,29 +20715,31 @@ clutter_actor_get_child_transform (ClutterActor *self,
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_actor_push_in_cloned_branch (ClutterActor *self)
|
||||
clutter_actor_push_in_cloned_branch (ClutterActor *self,
|
||||
gulong count)
|
||||
{
|
||||
ClutterActor *iter;
|
||||
|
||||
for (iter = self->priv->first_child;
|
||||
iter != NULL;
|
||||
iter = iter->priv->next_sibling)
|
||||
clutter_actor_push_in_cloned_branch (iter);
|
||||
clutter_actor_push_in_cloned_branch (iter, count);
|
||||
|
||||
self->priv->in_cloned_branch += 1;
|
||||
self->priv->in_cloned_branch += count;
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_actor_pop_in_cloned_branch (ClutterActor *self)
|
||||
clutter_actor_pop_in_cloned_branch (ClutterActor *self,
|
||||
gulong count)
|
||||
{
|
||||
ClutterActor *iter;
|
||||
|
||||
self->priv->in_cloned_branch -= 1;
|
||||
self->priv->in_cloned_branch -= count;
|
||||
|
||||
for (iter = self->priv->first_child;
|
||||
iter != NULL;
|
||||
iter = iter->priv->next_sibling)
|
||||
clutter_actor_pop_in_cloned_branch (iter);
|
||||
clutter_actor_pop_in_cloned_branch (iter, count);
|
||||
}
|
||||
|
||||
void
|
||||
@ -20726,7 +20755,7 @@ _clutter_actor_attach_clone (ClutterActor *actor,
|
||||
|
||||
g_hash_table_add (priv->clones, clone);
|
||||
|
||||
clutter_actor_push_in_cloned_branch (actor);
|
||||
clutter_actor_push_in_cloned_branch (actor, 1);
|
||||
}
|
||||
|
||||
void
|
||||
@ -20741,7 +20770,7 @@ _clutter_actor_detach_clone (ClutterActor *actor,
|
||||
g_hash_table_lookup (priv->clones, clone) == NULL)
|
||||
return;
|
||||
|
||||
clutter_actor_pop_in_cloned_branch (actor);
|
||||
clutter_actor_pop_in_cloned_branch (actor, 1);
|
||||
|
||||
g_hash_table_remove (priv->clones, clone);
|
||||
|
||||
|
@ -761,6 +761,7 @@ typedef enum { /*< prefix=CLUTTER_DRAG >*/
|
||||
* ClutterEventFlags:
|
||||
* @CLUTTER_EVENT_NONE: No flag set
|
||||
* @CLUTTER_EVENT_FLAG_SYNTHETIC: Synthetic event
|
||||
* @CLUTTER_EVENT_FLAG_REPEATED: Auto-repeated event
|
||||
*
|
||||
* Flags for the #ClutterEvent
|
||||
*
|
||||
@ -769,7 +770,8 @@ typedef enum { /*< prefix=CLUTTER_DRAG >*/
|
||||
typedef enum { /*< flags prefix=CLUTTER_EVENT >*/
|
||||
CLUTTER_EVENT_NONE = 0,
|
||||
CLUTTER_EVENT_FLAG_SYNTHETIC = 1 << 0,
|
||||
CLUTTER_EVENT_FLAG_INPUT_METHOD = 1 << 1
|
||||
CLUTTER_EVENT_FLAG_INPUT_METHOD = 1 << 1,
|
||||
CLUTTER_EVENT_FLAG_REPEATED = 1 << 2
|
||||
} ClutterEventFlags;
|
||||
|
||||
/**
|
||||
|
@ -1782,7 +1782,7 @@ selection_paint (ClutterText *self)
|
||||
CoglColor cogl_color = { 0, };
|
||||
CoglFramebuffer *fb;
|
||||
|
||||
fb = _clutter_actor_get_active_framebuffer (actor);
|
||||
fb = cogl_get_draw_framebuffer ();
|
||||
if (G_UNLIKELY (fb == NULL))
|
||||
return;
|
||||
|
||||
@ -2391,13 +2391,7 @@ clutter_text_paint (ClutterActor *self)
|
||||
float alloc_width;
|
||||
float alloc_height;
|
||||
|
||||
/* FIXME: this should not be needed, but apparently the text-cache
|
||||
* test unit manages to get in a situation where the active frame
|
||||
* buffer is NULL
|
||||
*/
|
||||
fb = _clutter_actor_get_active_framebuffer (self);
|
||||
if (fb == NULL)
|
||||
fb = cogl_get_draw_framebuffer ();
|
||||
fb = cogl_get_draw_framebuffer ();
|
||||
|
||||
/* Note that if anything in this paint method changes it needs to be
|
||||
reflected in the get_paint_volume implementation which is tightly
|
||||
@ -2821,21 +2815,31 @@ clutter_text_has_overlaps (ClutterActor *self)
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_text_key_focus_in (ClutterActor *actor)
|
||||
clutter_text_im_focus (ClutterText *text)
|
||||
{
|
||||
ClutterTextPrivate *priv = CLUTTER_TEXT (actor)->priv;
|
||||
ClutterTextPrivate *priv = text->priv;
|
||||
ClutterBackend *backend = clutter_get_default_backend ();
|
||||
ClutterInputMethod *method = clutter_backend_get_input_method (backend);
|
||||
|
||||
if (method && priv->editable)
|
||||
{
|
||||
clutter_input_method_focus_in (method, priv->input_focus);
|
||||
clutter_input_focus_set_content_purpose (priv->input_focus,
|
||||
priv->input_purpose);
|
||||
clutter_input_focus_set_content_hints (priv->input_focus,
|
||||
priv->input_hints);
|
||||
update_cursor_location (CLUTTER_TEXT (actor));
|
||||
}
|
||||
if (!method)
|
||||
return;
|
||||
|
||||
clutter_input_method_focus_in (method, priv->input_focus);
|
||||
clutter_input_focus_set_content_purpose (priv->input_focus,
|
||||
priv->input_purpose);
|
||||
clutter_input_focus_set_content_hints (priv->input_focus,
|
||||
priv->input_hints);
|
||||
clutter_input_focus_set_can_show_preedit (priv->input_focus, TRUE);
|
||||
update_cursor_location (text);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_text_key_focus_in (ClutterActor *actor)
|
||||
{
|
||||
ClutterTextPrivate *priv = CLUTTER_TEXT (actor)->priv;
|
||||
|
||||
if (priv->editable)
|
||||
clutter_text_im_focus (CLUTTER_TEXT (actor));
|
||||
|
||||
priv->has_focus = TRUE;
|
||||
|
||||
@ -4695,7 +4699,7 @@ clutter_text_set_editable (ClutterText *self,
|
||||
if (!priv->editable && clutter_input_focus_is_focused (priv->input_focus))
|
||||
clutter_input_method_focus_out (method);
|
||||
else if (priv->has_focus)
|
||||
clutter_input_method_focus_in (method, priv->input_focus);
|
||||
clutter_text_im_focus (self);
|
||||
}
|
||||
|
||||
clutter_text_queue_redraw (CLUTTER_ACTOR (self));
|
||||
|
@ -313,8 +313,7 @@ start_slow_keys (ClutterEvent *event,
|
||||
SlowKeysEventPending *slow_keys_event;
|
||||
ClutterKeyEvent *key_event = (ClutterKeyEvent *) event;
|
||||
|
||||
/* Synthetic key events are for autorepeat, ignore those... */
|
||||
if (key_event->flags & CLUTTER_EVENT_FLAG_SYNTHETIC)
|
||||
if (key_event->flags & CLUTTER_EVENT_FLAG_REPEATED)
|
||||
return;
|
||||
|
||||
slow_keys_event = g_new0 (SlowKeysEventPending, 1);
|
||||
|
@ -142,7 +142,7 @@ clutter_seat_evdev_release_touch_state (ClutterSeatEvdev *seat,
|
||||
ClutterTouchState *touch_state)
|
||||
{
|
||||
g_clear_pointer (&seat->touch_states[touch_state->seat_slot],
|
||||
(GDestroyNotify) clutter_touch_state_free);
|
||||
clutter_touch_state_free);
|
||||
}
|
||||
|
||||
ClutterSeatEvdev *
|
||||
@ -310,7 +310,7 @@ clutter_seat_evdev_notify_key (ClutterSeatEvdev *seat,
|
||||
else
|
||||
{
|
||||
changed_state = 0;
|
||||
clutter_event_set_flags (event, CLUTTER_EVENT_FLAG_SYNTHETIC);
|
||||
clutter_event_set_flags (event, CLUTTER_EVENT_FLAG_REPEATED);
|
||||
}
|
||||
|
||||
queue_event (event);
|
||||
|
@ -185,6 +185,26 @@ clutter_virtual_input_device_evdev_notify_absolute_motion (ClutterVirtualInputDe
|
||||
NULL);
|
||||
}
|
||||
|
||||
static int
|
||||
translate_to_evdev_button (int clutter_button)
|
||||
{
|
||||
switch (clutter_button)
|
||||
{
|
||||
case CLUTTER_BUTTON_PRIMARY:
|
||||
return BTN_LEFT;
|
||||
case CLUTTER_BUTTON_SECONDARY:
|
||||
return BTN_RIGHT;
|
||||
case CLUTTER_BUTTON_MIDDLE:
|
||||
return BTN_MIDDLE;
|
||||
default:
|
||||
/*
|
||||
* For compatibility reasons, all additional buttons go after the old
|
||||
* 4-7 scroll ones.
|
||||
*/
|
||||
return clutter_button + (BTN_LEFT - 1) - 4;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_virtual_input_device_evdev_notify_button (ClutterVirtualInputDevice *virtual_device,
|
||||
uint64_t time_us,
|
||||
@ -194,30 +214,33 @@ clutter_virtual_input_device_evdev_notify_button (ClutterVirtualInputDevice *vir
|
||||
ClutterVirtualInputDeviceEvdev *virtual_evdev =
|
||||
CLUTTER_VIRTUAL_INPUT_DEVICE_EVDEV (virtual_device);
|
||||
int button_count;
|
||||
int evdev_button;
|
||||
|
||||
if (time_us == CLUTTER_CURRENT_TIME)
|
||||
time_us = g_get_monotonic_time ();
|
||||
|
||||
if (get_button_type (button) != EVDEV_BUTTON_TYPE_BUTTON)
|
||||
evdev_button = translate_to_evdev_button (button);
|
||||
|
||||
if (get_button_type (evdev_button) != EVDEV_BUTTON_TYPE_BUTTON)
|
||||
{
|
||||
g_warning ("Unknown/invalid virtual device button 0x%x pressed",
|
||||
button);
|
||||
evdev_button);
|
||||
return;
|
||||
}
|
||||
|
||||
button_count = update_button_count (virtual_evdev, button, button_state);
|
||||
button_count = update_button_count (virtual_evdev, evdev_button, button_state);
|
||||
if (button_count < 0 || button_count > 1)
|
||||
{
|
||||
g_warning ("Received multiple virtual 0x%x button %s (ignoring)", button,
|
||||
g_warning ("Received multiple virtual 0x%x button %s (ignoring)", evdev_button,
|
||||
button_state == CLUTTER_BUTTON_STATE_PRESSED ? "presses" : "releases");
|
||||
update_button_count (virtual_evdev, button, 1 - button_state);
|
||||
update_button_count (virtual_evdev, evdev_button, 1 - button_state);
|
||||
return;
|
||||
}
|
||||
|
||||
clutter_seat_evdev_notify_button (virtual_evdev->seat,
|
||||
virtual_evdev->device,
|
||||
time_us,
|
||||
button,
|
||||
evdev_button,
|
||||
button_state);
|
||||
}
|
||||
|
||||
|
@ -1271,6 +1271,9 @@ clutter_device_manager_xi2_translate_event (ClutterEventTranslator *translator,
|
||||
? CLUTTER_KEY_PRESS
|
||||
: CLUTTER_KEY_RELEASE;
|
||||
|
||||
if (xev->evtype == XI_KeyPress && xev->flags & XIKeyRepeat)
|
||||
clutter_event_set_flags (event, CLUTTER_EVENT_FLAG_REPEATED);
|
||||
|
||||
event->key.time = xev->time;
|
||||
event->key.stage = stage;
|
||||
_clutter_input_device_xi2_translate_state (event, &xev->mods, &xev->buttons, &xev->group);
|
||||
|
@ -38,6 +38,14 @@
|
||||
|
||||
typedef struct _ClutterKeymapX11Class ClutterKeymapX11Class;
|
||||
typedef struct _DirectionCacheEntry DirectionCacheEntry;
|
||||
typedef struct _ClutterKeymapKey ClutterKeymapKey;
|
||||
|
||||
struct _ClutterKeymapKey
|
||||
{
|
||||
guint keycode;
|
||||
guint group;
|
||||
guint level;
|
||||
};
|
||||
|
||||
struct _DirectionCacheEntry
|
||||
{
|
||||
@ -59,6 +67,7 @@ struct _ClutterKeymapX11
|
||||
|
||||
ClutterModifierType num_lock_mask;
|
||||
ClutterModifierType scroll_lock_mask;
|
||||
ClutterModifierType level3_shift_mask;
|
||||
|
||||
PangoDirection current_direction;
|
||||
|
||||
@ -69,6 +78,7 @@ struct _ClutterKeymapX11
|
||||
Atom current_group_atom;
|
||||
guint current_cache_serial;
|
||||
DirectionCacheEntry group_direction_cache[4];
|
||||
int current_group;
|
||||
#endif
|
||||
|
||||
guint caps_lock_state : 1;
|
||||
@ -198,6 +208,9 @@ get_xkb (ClutterKeymapX11 *keymap_x11)
|
||||
if (keymap_x11->scroll_lock_mask == 0)
|
||||
keymap_x11->scroll_lock_mask = XkbKeysymToModifiers (backend_x11->xdpy,
|
||||
XK_Scroll_Lock);
|
||||
if (keymap_x11->level3_shift_mask == 0)
|
||||
keymap_x11->level3_shift_mask = XkbKeysymToModifiers (backend_x11->xdpy,
|
||||
XK_ISO_Level3_Shift);
|
||||
|
||||
return keymap_x11->xkb_desc;
|
||||
}
|
||||
@ -469,6 +482,7 @@ static void
|
||||
clutter_keymap_x11_init (ClutterKeymapX11 *keymap)
|
||||
{
|
||||
keymap->current_direction = PANGO_DIRECTION_NEUTRAL;
|
||||
keymap->current_group = -1;
|
||||
}
|
||||
|
||||
static ClutterTranslateReturn
|
||||
@ -498,7 +512,8 @@ clutter_keymap_x11_translate_event (ClutterEventTranslator *translator,
|
||||
{
|
||||
case XkbStateNotify:
|
||||
CLUTTER_NOTE (EVENT, "Updating keyboard state");
|
||||
update_direction (keymap_x11, XkbStateGroup (&xkb_event->state));
|
||||
keymap_x11->current_group = XkbStateGroup (&xkb_event->state);
|
||||
update_direction (keymap_x11, keymap_x11->current_group);
|
||||
update_locked_mods (keymap_x11, xkb_event->state.locked_mods);
|
||||
retval = CLUTTER_TRANSLATE_REMOVE;
|
||||
break;
|
||||
@ -665,3 +680,164 @@ _clutter_keymap_x11_get_direction (ClutterKeymapX11 *keymap)
|
||||
#endif
|
||||
return PANGO_DIRECTION_NEUTRAL;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
clutter_keymap_x11_get_entries_for_keyval (ClutterKeymapX11 *keymap_x11,
|
||||
guint keyval,
|
||||
ClutterKeymapKey **keys,
|
||||
gint *n_keys)
|
||||
{
|
||||
#ifdef HAVE_XKB
|
||||
if (CLUTTER_BACKEND_X11 (keymap_x11->backend)->use_xkb)
|
||||
{
|
||||
XkbDescRec *xkb = get_xkb (keymap_x11);
|
||||
GArray *retval;
|
||||
gint keycode;
|
||||
|
||||
keycode = keymap_x11->min_keycode;
|
||||
retval = g_array_new (FALSE, FALSE, sizeof (ClutterKeymapKey));
|
||||
|
||||
while (keycode <= keymap_x11->max_keycode)
|
||||
{
|
||||
gint max_shift_levels = XkbKeyGroupsWidth (xkb, keycode);
|
||||
gint group = 0;
|
||||
gint level = 0;
|
||||
gint total_syms = XkbKeyNumSyms (xkb, keycode);
|
||||
gint i = 0;
|
||||
KeySym *entry;
|
||||
|
||||
/* entry is an array with all syms for group 0, all
|
||||
* syms for group 1, etc. and for each group the
|
||||
* shift level syms are in order
|
||||
*/
|
||||
entry = XkbKeySymsPtr (xkb, keycode);
|
||||
|
||||
while (i < total_syms)
|
||||
{
|
||||
g_assert (i == (group * max_shift_levels + level));
|
||||
|
||||
if (entry[i] == keyval)
|
||||
{
|
||||
ClutterKeymapKey key;
|
||||
|
||||
key.keycode = keycode;
|
||||
key.group = group;
|
||||
key.level = level;
|
||||
|
||||
g_array_append_val (retval, key);
|
||||
|
||||
g_assert (XkbKeySymEntry (xkb, keycode, level, group) ==
|
||||
keyval);
|
||||
}
|
||||
|
||||
++level;
|
||||
|
||||
if (level == max_shift_levels)
|
||||
{
|
||||
level = 0;
|
||||
++group;
|
||||
}
|
||||
|
||||
++i;
|
||||
}
|
||||
|
||||
++keycode;
|
||||
}
|
||||
|
||||
if (retval->len > 0)
|
||||
{
|
||||
*keys = (ClutterKeymapKey*) retval->data;
|
||||
*n_keys = retval->len;
|
||||
}
|
||||
else
|
||||
{
|
||||
*keys = NULL;
|
||||
*n_keys = 0;
|
||||
}
|
||||
|
||||
g_array_free (retval, retval->len > 0 ? FALSE : TRUE);
|
||||
|
||||
return *n_keys > 0;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
clutter_keymap_x11_latch_modifiers (ClutterKeymapX11 *keymap_x11,
|
||||
uint32_t level,
|
||||
gboolean enable)
|
||||
{
|
||||
#ifdef HAVE_XKB
|
||||
ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (keymap_x11->backend);
|
||||
uint32_t modifiers[] = {
|
||||
0,
|
||||
ShiftMask,
|
||||
keymap_x11->level3_shift_mask,
|
||||
keymap_x11->level3_shift_mask | ShiftMask,
|
||||
};
|
||||
uint32_t value = 0;
|
||||
|
||||
if (!backend_x11->use_xkb)
|
||||
return;
|
||||
|
||||
level = CLAMP (level, 0, G_N_ELEMENTS (modifiers) - 1);
|
||||
|
||||
if (enable)
|
||||
value = modifiers[level];
|
||||
else
|
||||
value = 0;
|
||||
|
||||
XkbLatchModifiers (clutter_x11_get_default_display (),
|
||||
XkbUseCoreKbd, modifiers[level],
|
||||
value);
|
||||
#endif
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
clutter_keymap_x11_get_current_group (ClutterKeymapX11 *keymap_x11)
|
||||
{
|
||||
ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (keymap_x11->backend);
|
||||
XkbStateRec state_rec;
|
||||
|
||||
if (keymap_x11->current_group >= 0)
|
||||
return keymap_x11->current_group;
|
||||
|
||||
XkbGetState (backend_x11->xdpy, XkbUseCoreKbd, &state_rec);
|
||||
return XkbStateGroup (&state_rec);
|
||||
}
|
||||
|
||||
gboolean
|
||||
clutter_keymap_x11_keycode_for_keyval (ClutterKeymapX11 *keymap_x11,
|
||||
guint keyval,
|
||||
guint *keycode_out,
|
||||
guint *level_out)
|
||||
{
|
||||
ClutterKeymapKey *keys;
|
||||
gint i, n_keys, group;
|
||||
gboolean found = FALSE;
|
||||
|
||||
g_return_val_if_fail (keycode_out != NULL, FALSE);
|
||||
g_return_val_if_fail (level_out != NULL, FALSE);
|
||||
|
||||
group = clutter_keymap_x11_get_current_group (keymap_x11);
|
||||
|
||||
if (!clutter_keymap_x11_get_entries_for_keyval (keymap_x11, keyval, &keys, &n_keys))
|
||||
return FALSE;
|
||||
|
||||
for (i = 0; i < n_keys && !found; i++)
|
||||
{
|
||||
if (keys[i].group == group)
|
||||
{
|
||||
*keycode_out = keys[i].keycode;
|
||||
*level_out = keys[i].level;
|
||||
found = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
g_free (keys);
|
||||
return found;
|
||||
}
|
||||
|
@ -51,6 +51,14 @@ gboolean _clutter_keymap_x11_get_is_modifier (ClutterKeymapX11 *keymap,
|
||||
|
||||
PangoDirection _clutter_keymap_x11_get_direction (ClutterKeymapX11 *keymap);
|
||||
|
||||
gboolean clutter_keymap_x11_keycode_for_keyval (ClutterKeymapX11 *keymap_x11,
|
||||
guint keyval,
|
||||
guint *keycode_out,
|
||||
guint *level_out);
|
||||
void clutter_keymap_x11_latch_modifiers (ClutterKeymapX11 *keymap_x11,
|
||||
uint32_t level,
|
||||
gboolean enable);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __CLUTTER_KEYMAP_X11_H__ */
|
||||
|
@ -32,6 +32,8 @@
|
||||
|
||||
#include "clutter-virtual-input-device.h"
|
||||
#include "x11/clutter-virtual-input-device-x11.h"
|
||||
#include "x11/clutter-backend-x11.h"
|
||||
#include "x11/clutter-keymap-x11.h"
|
||||
|
||||
struct _ClutterVirtualInputDeviceX11
|
||||
{
|
||||
@ -135,11 +137,25 @@ clutter_virtual_input_device_x11_notify_keyval (ClutterVirtualInputDevice *virtu
|
||||
uint32_t keyval,
|
||||
ClutterKeyState key_state)
|
||||
{
|
||||
KeyCode keycode;
|
||||
ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (clutter_get_default_backend ());
|
||||
ClutterKeymapX11 *keymap = backend_x11->keymap;
|
||||
uint32_t keycode, level;
|
||||
|
||||
if (!clutter_keymap_x11_keycode_for_keyval (keymap, keyval, &keycode, &level))
|
||||
{
|
||||
g_warning ("No keycode found for keyval %x in current group", keyval);
|
||||
return;
|
||||
}
|
||||
|
||||
if (key_state == CLUTTER_KEY_STATE_PRESSED)
|
||||
clutter_keymap_x11_latch_modifiers (keymap, level, TRUE);
|
||||
|
||||
keycode = XKeysymToKeycode (clutter_x11_get_default_display (), keyval);
|
||||
XTestFakeKeyEvent (clutter_x11_get_default_display (),
|
||||
keycode, key_state == CLUTTER_KEY_STATE_PRESSED, 0);
|
||||
(KeyCode) keycode,
|
||||
key_state == CLUTTER_KEY_STATE_PRESSED, 0);
|
||||
|
||||
if (key_state == CLUTTER_KEY_STATE_RELEASED)
|
||||
clutter_keymap_x11_latch_modifiers (keymap, level, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -61,11 +61,6 @@ G_END_DECLS
|
||||
/* Coglbox private declaration
|
||||
*--------------------------------------------------*/
|
||||
|
||||
G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
#define TEST_COGLBOX_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
|
||||
|
||||
struct _TestCoglboxPrivate
|
||||
{
|
||||
CoglHandle texhand_id;
|
||||
@ -73,6 +68,11 @@ struct _TestCoglboxPrivate
|
||||
CoglHandle offscreen_id;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
#define TEST_COGLBOX_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
|
||||
|
||||
/* Coglbox implementation
|
||||
*--------------------------------------------------*/
|
||||
|
||||
@ -290,8 +290,6 @@ test_coglbox_class_init (TestCoglboxClass *klass)
|
||||
|
||||
actor_class->map = test_coglbox_map;
|
||||
actor_class->paint = test_coglbox_paint;
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (TestCoglboxPrivate));
|
||||
}
|
||||
|
||||
static ClutterActor*
|
||||
|
@ -61,17 +61,17 @@ G_END_DECLS
|
||||
/* Coglbox private declaration
|
||||
*--------------------------------------------------*/
|
||||
|
||||
G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
#define TEST_COGLBOX_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
|
||||
|
||||
struct _TestCoglboxPrivate
|
||||
{
|
||||
CoglHandle cogl_tex_id[4];
|
||||
gint frame;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
#define TEST_COGLBOX_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
|
||||
|
||||
/* Coglbox implementation
|
||||
*--------------------------------------------------*/
|
||||
|
||||
@ -182,8 +182,6 @@ test_coglbox_class_init (TestCoglboxClass *klass)
|
||||
gobject_class->finalize = test_coglbox_finalize;
|
||||
gobject_class->dispose = test_coglbox_dispose;
|
||||
actor_class->paint = test_coglbox_paint;
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (TestCoglboxPrivate));
|
||||
}
|
||||
|
||||
static ClutterActor*
|
||||
|
@ -86,11 +86,6 @@ G_END_DECLS
|
||||
/* Coglbox private declaration
|
||||
*--------------------------------------------------*/
|
||||
|
||||
G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
#define TEST_COGLBOX_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
|
||||
|
||||
struct _TestCoglboxPrivate
|
||||
{
|
||||
guint gl_handle;
|
||||
@ -116,6 +111,11 @@ struct _TestCoglboxPrivate
|
||||
(* glBindTexture) (guint target, guint texture);
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
#define TEST_COGLBOX_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
|
||||
|
||||
/* Coglbox implementation
|
||||
*--------------------------------------------------*/
|
||||
|
||||
@ -229,8 +229,6 @@ test_coglbox_class_init (TestCoglboxClass *klass)
|
||||
gobject_class->finalize = test_coglbox_finalize;
|
||||
gobject_class->dispose = test_coglbox_dispose;
|
||||
actor_class->paint = test_coglbox_paint;
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (TestCoglboxPrivate));
|
||||
}
|
||||
|
||||
static ClutterActor*
|
||||
|
@ -61,11 +61,6 @@ G_END_DECLS
|
||||
/* Coglbox private declaration
|
||||
*--------------------------------------------------*/
|
||||
|
||||
G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
#define TEST_COGLBOX_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
|
||||
|
||||
struct _TestCoglboxPrivate
|
||||
{
|
||||
CoglHandle sliced_tex, not_sliced_tex;
|
||||
@ -74,6 +69,11 @@ struct _TestCoglboxPrivate
|
||||
gboolean use_linear_filtering;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
#define TEST_COGLBOX_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
|
||||
|
||||
/* Coglbox implementation
|
||||
*--------------------------------------------------*/
|
||||
|
||||
@ -293,8 +293,6 @@ test_coglbox_class_init (TestCoglboxClass *klass)
|
||||
gobject_class->finalize = test_coglbox_finalize;
|
||||
gobject_class->dispose = test_coglbox_dispose;
|
||||
actor_class->paint = test_coglbox_paint;
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (TestCoglboxPrivate));
|
||||
}
|
||||
|
||||
static ClutterActor*
|
||||
|
@ -62,17 +62,17 @@ G_END_DECLS
|
||||
/* Coglbox private declaration
|
||||
*--------------------------------------------------*/
|
||||
|
||||
G_DEFINE_TYPE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
#define TEST_COGLBOX_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
|
||||
|
||||
struct _TestCoglboxPrivate
|
||||
{
|
||||
CoglHandle cogl_tex_id;
|
||||
gdouble animation_progress;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (TestCoglbox, test_coglbox, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
#define TEST_COGLBOX_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), TEST_TYPE_COGLBOX, TestCoglboxPrivate))
|
||||
|
||||
/* Coglbox implementation
|
||||
*--------------------------------------------------*/
|
||||
|
||||
@ -158,8 +158,6 @@ test_coglbox_class_init (TestCoglboxClass *klass)
|
||||
gobject_class->finalize = test_coglbox_finalize;
|
||||
gobject_class->dispose = test_coglbox_dispose;
|
||||
actor_class->paint = test_coglbox_paint;
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (TestCoglboxPrivate));
|
||||
}
|
||||
|
||||
static ClutterActor*
|
||||
|
@ -40,11 +40,6 @@ enum
|
||||
PROP_USE_TRANSFORMED_BOX
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MyThing, my_thing, CLUTTER_TYPE_ACTOR)
|
||||
|
||||
#define MY_THING_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), MY_TYPE_THING, MyThingPrivate))
|
||||
|
||||
struct _MyThingPrivate
|
||||
{
|
||||
gfloat spacing;
|
||||
@ -53,6 +48,11 @@ struct _MyThingPrivate
|
||||
guint use_transformed_box : 1;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (MyThing, my_thing, CLUTTER_TYPE_ACTOR)
|
||||
|
||||
#define MY_THING_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), MY_TYPE_THING, MyThingPrivate))
|
||||
|
||||
static void
|
||||
my_thing_set_property (GObject *gobject,
|
||||
guint prop_id,
|
||||
@ -409,8 +409,6 @@ my_thing_class_init (MyThingClass *klass)
|
||||
"Use transformed box when allocating",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MyThingPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -89,11 +89,8 @@ int64_t cogl_frame_info_get_frame_counter (CoglFrameInfo *info);
|
||||
* Gets the presentation time for the frame. This is the time at which
|
||||
* the frame became visible to the user.
|
||||
*
|
||||
* The presentation time measured in nanoseconds is based on a
|
||||
* monotonic time source. The time source is not necessarily
|
||||
* correlated with system/wall clock time and may represent the time
|
||||
* elapsed since some undefined system event such as when the system
|
||||
* last booted.
|
||||
* The presentation time measured in nanoseconds, is based on
|
||||
* cogl_get_clock_time().
|
||||
*
|
||||
* <note>Linux kernel version less that 3.8 can result in
|
||||
* non-monotonic timestamps being reported when using a drm based
|
||||
|
21
configure.ac
21
configure.ac
@ -2,14 +2,14 @@ AC_PREREQ(2.62)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [29])
|
||||
m4_define([mutter_micro_version], [2])
|
||||
m4_define([mutter_micro_version], [92])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
|
||||
m4_define([mutter_plugin_api_version], [3])
|
||||
|
||||
m4_define([libmutter_api_version], [2])
|
||||
m4_define([libmutter_api_version], [3])
|
||||
|
||||
AC_INIT([mutter], [mutter_version],
|
||||
[http://bugzilla.gnome.org/enter_bug.cgi?product=mutter])
|
||||
@ -88,7 +88,6 @@ MUTTER_PC_MODULES="
|
||||
cairo >= 1.10.0
|
||||
gsettings-desktop-schemas >= 3.21.4
|
||||
json-glib-1.0
|
||||
upower-glib >= 0.99.0
|
||||
gnome-desktop-3.0
|
||||
xcomposite >= 0.2
|
||||
xcursor
|
||||
@ -245,7 +244,7 @@ AC_ARG_ENABLE(remote-desktop,
|
||||
enable_remote_desktop=no
|
||||
)
|
||||
AS_IF([test "$enable_remote_desktop" = "yes"], [
|
||||
MUTTER_PC_MODULES="$MUTTER_PC_MODULES libpipewire-0.1 >= 0.1.8"
|
||||
MUTTER_PC_MODULES="$MUTTER_PC_MODULES libpipewire-0.2 >= 0.2.2"
|
||||
AC_DEFINE([HAVE_REMOTE_DESKTOP],[1], [Defined if screen cast and remote desktop support is enabled])
|
||||
])
|
||||
AM_CONDITIONAL([HAVE_REMOTE_DESKTOP],[test "$enable_remote_desktop" = "yes"])
|
||||
@ -290,13 +289,24 @@ AS_IF([test "$have_native_backend" = "yes"], [
|
||||
])
|
||||
AM_CONDITIONAL([HAVE_NATIVE_BACKEND],[test "$have_native_backend" = "yes"])
|
||||
|
||||
MUTTER_WAYLAND_EGLSTREAM_MODULES="wayland-eglstream-protocols"
|
||||
|
||||
AC_ARG_ENABLE(egl-device,
|
||||
AS_HELP_STRING([--enable-egl-device], [enable support for EGLDevice on top of KMS]),,
|
||||
enable_egl_device=no
|
||||
have_wayland_eglstream=no
|
||||
)
|
||||
AS_IF([test "$enable_egl_device" = "yes"], [
|
||||
AC_DEFINE([HAVE_EGL_DEVICE],[1], [Defined if EGLDevice support is enabled])
|
||||
PKG_CHECK_EXISTS([$MUTTER_WAYLAND_EGLSTREAM_MODULES], [have_wayland_eglstream=yes], [have_wayland_eglstream=no])
|
||||
])
|
||||
AS_IF([test "$have_wayland_eglstream" = "yes"], [
|
||||
AC_DEFINE([HAVE_WAYLAND_EGLSTREAM],[1],[Defined if Wayland EGLStream protocols are available])
|
||||
PKG_CHECK_MODULES(WAYLAND_EGLSTREAM, [$MUTTER_WAYLAND_EGLSTREAM_MODULES],
|
||||
[ac_wayland_eglstream_pkgdatadir=`$PKG_CONFIG --variable=pkgdatadir $MUTTER_WAYLAND_EGLSTREAM_MODULES`])
|
||||
AC_SUBST(WAYLAND_EGLSTREAM_DATADIR, $ac_wayland_eglstream_pkgdatadir)
|
||||
])
|
||||
AM_CONDITIONAL([HAVE_WAYLAND_EGLSTREAM],[test "$have_wayland_eglstream" = "yes"])
|
||||
|
||||
MUTTER_WAYLAND_MODULES="wayland-server >= 1.13.0"
|
||||
|
||||
@ -315,7 +325,7 @@ AS_IF([test "$have_wayland" = "yes"], [
|
||||
AC_SUBST([WAYLAND_SCANNER])
|
||||
AC_DEFINE([HAVE_WAYLAND],[1],[Define if you want to enable Wayland support])
|
||||
|
||||
PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.12],
|
||||
PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.16],
|
||||
[ac_wayland_protocols_pkgdatadir=`$PKG_CONFIG --variable=pkgdatadir wayland-protocols`])
|
||||
AC_SUBST(WAYLAND_PROTOCOLS_DATADIR, $ac_wayland_protocols_pkgdatadir)
|
||||
])
|
||||
@ -549,6 +559,7 @@ mutter-$VERSION
|
||||
Introspection: ${found_introspection}
|
||||
Session management: ${found_sm}
|
||||
Wayland: ${have_wayland}
|
||||
Wayland EGLStream: ${have_wayland_eglstream}
|
||||
Native (KMS) backend: ${have_native_backend}
|
||||
EGLDevice: ${enable_egl_device}
|
||||
Remote desktop: ${enable_remote_desktop}
|
||||
|
@ -26,7 +26,6 @@ XGETTEXT_OPTIONS = --from-code=UTF-8 --keyword=_ --keyword=N_ \
|
||||
--flag=g_sprintf:2:c-format \
|
||||
--flag=g_snprintf:3:c-format
|
||||
|
||||
|
||||
# This is the copyright holder that gets inserted into the header of the
|
||||
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
|
||||
# package. (Note that the msgstr strings, extracted from the package's
|
||||
@ -36,6 +35,7 @@ XGETTEXT_OPTIONS = --from-code=UTF-8 --keyword=_ --keyword=N_ \
|
||||
# the public domain; in this case the translators are expected to disclaim
|
||||
# their copyright.
|
||||
COPYRIGHT_HOLDER = Translation copyright holder
|
||||
|
||||
# This is the email address or URL to which the translators shall report
|
||||
# bugs in the untranslated strings:
|
||||
# - Strings which are not entire sentences, see the maintainer guidelines
|
||||
@ -50,7 +50,7 @@ COPYRIGHT_HOLDER = Translation copyright holder
|
||||
# It can be your email address, or a mailing list address where translators
|
||||
# can write to without being subscribed, or the URL of a web page through
|
||||
# which the translators can contact you.
|
||||
MSGID_BUGS_ADDRESS = http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general
|
||||
MSGID_BUGS_ADDRESS = https://gitlab.gnome.org/GNOME/mutter/issues
|
||||
|
||||
# This is the list of locale categories, beyond LC_MESSAGES, for which the
|
||||
# message catalogs shall be used. It is usually empty.
|
||||
|
@ -14,18 +14,18 @@ src/compositor/meta-background.c
|
||||
src/core/bell.c
|
||||
src/core/core.c
|
||||
src/core/display.c
|
||||
src/core/errors.c
|
||||
src/core/keybindings.c
|
||||
src/core/main.c
|
||||
src/core/meta-close-dialog-default.c
|
||||
src/core/mutter.c
|
||||
src/core/prefs.c
|
||||
src/core/screen.c
|
||||
src/core/util.c
|
||||
src/core/window.c
|
||||
src/ui/frames.c
|
||||
src/ui/theme.c
|
||||
src/wayland/meta-wayland-tablet-pad.c
|
||||
src/x11/meta-x11-display.c
|
||||
src/x11/meta-x11-errors.c
|
||||
src/x11/session.c
|
||||
src/x11/window-props.c
|
||||
src/x11/xprops.c
|
||||
|
208
po/ca.po
208
po/ca.po
@ -11,10 +11,9 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity 2.24\n"
|
||||
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2017-08-29 16:09+0000\n"
|
||||
"PO-Revision-Date: 2017-08-25 13:23+0200\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-06-07 13:00+0000\n"
|
||||
"PO-Revision-Date: 2018-06-17 10:25+0200\n"
|
||||
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
|
||||
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
|
||||
"Language: ca\n"
|
||||
@ -22,7 +21,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Poedit 2.0.1\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -49,134 +48,118 @@ msgid "Move window to last workspace"
|
||||
msgstr "Mou la finestra a l'últim espai de treball"
|
||||
|
||||
#: data/50-mutter-navigation.xml:24
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Mou la finestra un espai de treball a l'esquerra"
|
||||
|
||||
#: data/50-mutter-navigation.xml:27
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Mou la finestra un espai de treball a la dreta"
|
||||
|
||||
#: data/50-mutter-navigation.xml:30
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Mou la finestra un espai de treball amunt"
|
||||
|
||||
#: data/50-mutter-navigation.xml:33
|
||||
#: data/50-mutter-navigation.xml:27
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Mou la finestra un espai de treball avall"
|
||||
|
||||
#: data/50-mutter-navigation.xml:36
|
||||
#: data/50-mutter-navigation.xml:30
|
||||
msgid "Move window one monitor to the left"
|
||||
msgstr "Mou la finestra un monitor a l'esquerra"
|
||||
|
||||
#: data/50-mutter-navigation.xml:39
|
||||
#: data/50-mutter-navigation.xml:33
|
||||
msgid "Move window one monitor to the right"
|
||||
msgstr "Mou la finestra un monitor a la dreta"
|
||||
|
||||
#: data/50-mutter-navigation.xml:42
|
||||
#: data/50-mutter-navigation.xml:36
|
||||
msgid "Move window one monitor up"
|
||||
msgstr "Mou la finestra un monitor amunt"
|
||||
|
||||
#: data/50-mutter-navigation.xml:45
|
||||
#: data/50-mutter-navigation.xml:39
|
||||
msgid "Move window one monitor down"
|
||||
msgstr "Mou la finestra un monitor avall"
|
||||
|
||||
#: data/50-mutter-navigation.xml:49
|
||||
#: data/50-mutter-navigation.xml:43
|
||||
msgid "Switch applications"
|
||||
msgstr "Canvia d'aplicacions"
|
||||
|
||||
#: data/50-mutter-navigation.xml:54
|
||||
#: data/50-mutter-navigation.xml:48
|
||||
msgid "Switch to previous application"
|
||||
msgstr "Canvia a l'aplicació anterior"
|
||||
|
||||
#: data/50-mutter-navigation.xml:58
|
||||
#: data/50-mutter-navigation.xml:52
|
||||
msgid "Switch windows"
|
||||
msgstr "Canvia de finestres"
|
||||
|
||||
#: data/50-mutter-navigation.xml:63
|
||||
#: data/50-mutter-navigation.xml:57
|
||||
msgid "Switch to previous window"
|
||||
msgstr "Canvia a la finestra anterior"
|
||||
|
||||
#: data/50-mutter-navigation.xml:67
|
||||
#: data/50-mutter-navigation.xml:61
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Canvia entre les finestres d'una aplicació"
|
||||
|
||||
#: data/50-mutter-navigation.xml:72
|
||||
#: data/50-mutter-navigation.xml:66
|
||||
msgid "Switch to previous window of an application"
|
||||
msgstr "Canvia a la finestra anterior d'una aplicació"
|
||||
|
||||
#: data/50-mutter-navigation.xml:76
|
||||
#: data/50-mutter-navigation.xml:70
|
||||
msgid "Switch system controls"
|
||||
msgstr "Canvia els controls del sistema"
|
||||
|
||||
#: data/50-mutter-navigation.xml:81
|
||||
#: data/50-mutter-navigation.xml:75
|
||||
msgid "Switch to previous system control"
|
||||
msgstr "Canvia al control del sistema anterior"
|
||||
|
||||
#: data/50-mutter-navigation.xml:85
|
||||
#: data/50-mutter-navigation.xml:79
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Canvia immediatament entre finestres"
|
||||
|
||||
#: data/50-mutter-navigation.xml:90
|
||||
#: data/50-mutter-navigation.xml:84
|
||||
msgid "Switch directly to previous window"
|
||||
msgstr "Canvia immediatament a la finestra anterior"
|
||||
|
||||
#: data/50-mutter-navigation.xml:94
|
||||
#: data/50-mutter-navigation.xml:88
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Canvia immediatament entre les finestres d'una aplicació"
|
||||
|
||||
#: data/50-mutter-navigation.xml:99
|
||||
#: data/50-mutter-navigation.xml:93
|
||||
msgid "Switch directly to previous window of an app"
|
||||
msgstr "Canvia immediatament a la finestra anterior d'una aplicació"
|
||||
|
||||
#: data/50-mutter-navigation.xml:103
|
||||
#: data/50-mutter-navigation.xml:97
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Canvia immediatament entre els controls del sistema"
|
||||
|
||||
#: data/50-mutter-navigation.xml:108
|
||||
#: data/50-mutter-navigation.xml:102
|
||||
msgid "Switch directly to previous system control"
|
||||
msgstr "Canvia immediatament al control del sistema anterior"
|
||||
|
||||
#: data/50-mutter-navigation.xml:111
|
||||
#: data/50-mutter-navigation.xml:105
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Oculta totes les finestres normals"
|
||||
|
||||
#: data/50-mutter-navigation.xml:114
|
||||
#: data/50-mutter-navigation.xml:108
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Canvia a l'espai de treball 1"
|
||||
|
||||
#: data/50-mutter-navigation.xml:117
|
||||
#: data/50-mutter-navigation.xml:111
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Canvia a l'espai de treball 2"
|
||||
|
||||
#: data/50-mutter-navigation.xml:120
|
||||
#: data/50-mutter-navigation.xml:114
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Canvia a l'espai de treball 3"
|
||||
|
||||
#: data/50-mutter-navigation.xml:123
|
||||
#: data/50-mutter-navigation.xml:117
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Canvia a l'espai de treball 4"
|
||||
|
||||
#: data/50-mutter-navigation.xml:126
|
||||
#: data/50-mutter-navigation.xml:120
|
||||
msgid "Switch to last workspace"
|
||||
msgstr "Canvia a l'últim espai de treball"
|
||||
|
||||
#: data/50-mutter-navigation.xml:129
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Mou a l'espai de treball de l'esquerra"
|
||||
|
||||
#: data/50-mutter-navigation.xml:132
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Mou a l'espai de treball de la dreta"
|
||||
|
||||
#: data/50-mutter-navigation.xml:135
|
||||
#: data/50-mutter-navigation.xml:123
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Mou a l'espai de treball de sobre"
|
||||
|
||||
#: data/50-mutter-navigation.xml:138
|
||||
#: data/50-mutter-navigation.xml:126
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Mou a l'espai de treball de sota"
|
||||
|
||||
#: data/50-mutter-system.xml:6
|
||||
#: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
@ -188,6 +171,10 @@ msgstr "Mostra l'indicador d'execució d'aplicacions"
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Mostra la vista general d'activitats"
|
||||
|
||||
#: data/50-mutter-wayland.xml:8
|
||||
msgid "Restore the keyboard shortcuts"
|
||||
msgstr "Restaura les dreceres de teclat"
|
||||
|
||||
#: data/50-mutter-windows.xml:6
|
||||
msgid "Windows"
|
||||
msgstr "Finestres"
|
||||
@ -213,56 +200,52 @@ msgid "Restore window"
|
||||
msgstr "Restaura la finestra"
|
||||
|
||||
#: data/50-mutter-windows.xml:18
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Canvia l'estat d'ombrejat"
|
||||
|
||||
#: data/50-mutter-windows.xml:20
|
||||
msgid "Close window"
|
||||
msgstr "Tanca la finestra"
|
||||
|
||||
#: data/50-mutter-windows.xml:22
|
||||
#: data/50-mutter-windows.xml:20
|
||||
msgid "Hide window"
|
||||
msgstr "Oculta la finestra"
|
||||
|
||||
#: data/50-mutter-windows.xml:24
|
||||
#: data/50-mutter-windows.xml:22
|
||||
msgid "Move window"
|
||||
msgstr "Mou la finestra"
|
||||
|
||||
#: data/50-mutter-windows.xml:26
|
||||
#: data/50-mutter-windows.xml:24
|
||||
msgid "Resize window"
|
||||
msgstr "Redimensiona la finestra"
|
||||
|
||||
#: data/50-mutter-windows.xml:29
|
||||
#: data/50-mutter-windows.xml:27
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr ""
|
||||
"Canvia la funció que fa que la finestra estigui en tots els espais de "
|
||||
"treball o només en un"
|
||||
|
||||
#: data/50-mutter-windows.xml:31
|
||||
#: data/50-mutter-windows.xml:29
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Alça la finestra si està coberta per una altra; altrament, baixa-la"
|
||||
|
||||
#: data/50-mutter-windows.xml:33
|
||||
#: data/50-mutter-windows.xml:31
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Alça la finestra per damunt de les altres"
|
||||
|
||||
#: data/50-mutter-windows.xml:35
|
||||
#: data/50-mutter-windows.xml:33
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Baixa la finestra sota les altres"
|
||||
|
||||
#: data/50-mutter-windows.xml:37
|
||||
#: data/50-mutter-windows.xml:35
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Maximitza la finestra verticalment"
|
||||
|
||||
#: data/50-mutter-windows.xml:39
|
||||
#: data/50-mutter-windows.xml:37
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Maximitza la finestra horitzontalment"
|
||||
|
||||
#: data/50-mutter-windows.xml:43
|
||||
#: data/50-mutter-windows.xml:41
|
||||
msgid "View split on left"
|
||||
msgstr "Mostra la partició a l'esquerra"
|
||||
|
||||
#: data/50-mutter-windows.xml:47
|
||||
#: data/50-mutter-windows.xml:45
|
||||
msgid "View split on right"
|
||||
msgstr "Mostra la partició a la dreta"
|
||||
|
||||
@ -424,25 +407,22 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Selecció de finestra entre les emergents d'una pestanya"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Cancel·lació de les finestres emergents a les pestanyes"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Canvia configuracions de monitor"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Gira la configuració del monitor integrada"
|
||||
|
||||
@ -498,10 +478,41 @@ msgstr "Canvia al terminal virtual 12"
|
||||
msgid "Re-enable shortcuts"
|
||||
msgstr "Torna a habilitar les dreceres"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "Permetre la captura amb Xwayland"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:65
|
||||
msgid ""
|
||||
"Allow keyboard grabs issued by X11 applications running in Xwayland to be "
|
||||
"taken into account. For a X11 grab to be taken into account under Wayland, "
|
||||
"the client must also either send a specific X11 ClientMessage to the root "
|
||||
"window or be among the applications white-listed in key “xwayland-grab-"
|
||||
"access-rules”."
|
||||
msgstr ""
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr "Les aplicacions Xwayland poden capturar el teclat"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
msgid ""
|
||||
"List the resource names or resource class of X11 windows either allowed or "
|
||||
"not allowed to issue X11 keyboard grabs under Xwayland. The resource name or "
|
||||
"resource class of a given X11 window can be obtained using the command "
|
||||
"“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. "
|
||||
"Values starting with “!” are blacklisted, which has precedence over the "
|
||||
"whitelist, to revoke applications from the default system list. The default "
|
||||
"system list includes the following applications: "
|
||||
"“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by "
|
||||
"using the specific keyboard shortcut defined by the keybinding key “restore-"
|
||||
"shortcuts”."
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2151
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Mode de commutació (grup %d)"
|
||||
@ -509,11 +520,11 @@ msgstr "Mode de commutació (grup %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2174
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "Commuta el monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2176
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Mostra l'ajuda en pantalla"
|
||||
|
||||
@ -539,7 +550,7 @@ 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:476
|
||||
#: src/compositor/compositor.c:481
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
@ -557,31 +568,31 @@ msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr ""
|
||||
"S'ha produït un error en obrir la pantalla del sistema de finestres X «%s»\n"
|
||||
|
||||
#: src/core/main.c:189
|
||||
#: src/core/main.c:190
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Inhabilita la connexió al gestor de sessions"
|
||||
|
||||
#: src/core/main.c:195
|
||||
#: src/core/main.c:196
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Reemplaça el gestor de finestres en execució"
|
||||
|
||||
#: src/core/main.c:201
|
||||
#: src/core/main.c:202
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Especifica l'ID de gestió de sessió"
|
||||
|
||||
#: src/core/main.c:206
|
||||
#: src/core/main.c:207
|
||||
msgid "X Display to use"
|
||||
msgstr "Visualització X per usar"
|
||||
|
||||
#: src/core/main.c:212
|
||||
#: src/core/main.c:213
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inicialitza la sessió des del fitxer desat"
|
||||
|
||||
#: src/core/main.c:218
|
||||
#: src/core/main.c:219
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Fes que les crides a l'X siguin síncrones"
|
||||
|
||||
#: src/core/main.c:225
|
||||
#: src/core/main.c:226
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Funciona com a compositor de Wayland"
|
||||
|
||||
@ -590,14 +601,18 @@ msgstr "Funciona com a compositor de Wayland"
|
||||
#
|
||||
# Camins:
|
||||
# ../src/core/main.c:223
|
||||
#: src/core/main.c:231
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Funciona com a compositor imbricat"
|
||||
|
||||
#: src/core/main.c:239
|
||||
#: src/core/main.c:240
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Funciona com a servidor de pantalla completa, en comptes d'imbricat"
|
||||
|
||||
#: src/core/main.c:246
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Executa amb un rerefons X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#, c-format
|
||||
@ -653,7 +668,7 @@ msgstr "Connector del Mutter a utilitzar"
|
||||
msgid "Workspace %d"
|
||||
msgstr "Espai de treball %d"
|
||||
|
||||
#: src/core/screen.c:580
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -662,7 +677,7 @@ msgstr ""
|
||||
"La pantalla «%s» ja té un gestor de finestres; proveu l'opció --replace per "
|
||||
"reemplaçar el gestor de finestres actual."
|
||||
|
||||
#: src/core/screen.c:665
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "El monitor %d en la pantalla '%s' no és vàlida\n"
|
||||
@ -671,12 +686,12 @@ msgstr "El monitor %d en la pantalla '%s' no és vàlida\n"
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter es va compilar sense compatibilitat per al mode detallat\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:563
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Mode de commutació: mode %d"
|
||||
|
||||
#: src/x11/session.c:1815
|
||||
#: src/x11/session.c:1818
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -689,6 +704,21 @@ msgstr ""
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (a %s)"
|
||||
|
||||
#~ msgid "Move window one workspace to the left"
|
||||
#~ msgstr "Mou la finestra un espai de treball a l'esquerra"
|
||||
|
||||
#~ msgid "Move window one workspace to the right"
|
||||
#~ msgstr "Mou la finestra un espai de treball a la dreta"
|
||||
|
||||
#~ msgid "Move to workspace left"
|
||||
#~ msgstr "Mou a l'espai de treball de l'esquerra"
|
||||
|
||||
#~ msgid "Move to workspace right"
|
||||
#~ msgstr "Mou a l'espai de treball de la dreta"
|
||||
|
||||
#~ msgid "Toggle shaded state"
|
||||
#~ msgstr "Canvia l'estat d'ombrejat"
|
||||
|
||||
#~ msgid "Failed to scan themes directory: %s\n"
|
||||
#~ msgstr "No s'ha pogut analitzar el directori de temes: %s\n"
|
||||
|
||||
|
138
po/cs.po
138
po/cs.po
@ -12,8 +12,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-03-01 10:47+0000\n"
|
||||
"PO-Revision-Date: 2018-03-07 19:28+0100\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-08-29 07:28+0200\n"
|
||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||
"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
|
||||
"Language: cs\n"
|
||||
@ -396,10 +396,7 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Chcete-li povolit experimentální funkce, přidejte klíčové slovo funkce do "
|
||||
"seznamu. Zda funkce vyžaduje restartování kompozitoru, závisí na dané "
|
||||
@ -410,23 +407,21 @@ msgstr ""
|
||||
"mutter výchozí pro logické uspořádání monitorů v logickém souřadnicovém "
|
||||
"prostoru pixelů, zatímco škáluje přímo v grafické vyrovnávací paměti, "
|
||||
"namísto v obsahu oken, aby se postaral o správu montorů s HiDPI. Nevyžaduje "
|
||||
"restart. • „remote-desktop“ – zapne podporu pro vzdálenou pracovní plochu. "
|
||||
"Pro podporu vzdálené plochy se sdílením obrazovky musít být zapnuto také "
|
||||
"„screen-cast“. • „screen-cast“ – zapne podporu pro vysílání obsahu obrazovky."
|
||||
"restart."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Vybrat okno z překryvné nabídky tabulátoru"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Zrušit překryvné okno tabulátoru"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Přepnout nastavení monitoru"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Postupně mění vestavěná nastavení monitoru"
|
||||
|
||||
@ -548,22 +543,22 @@ msgstr "Přepnout monitor"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Zobrazit nápovědu na obrazovce"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Vestavěný displej"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Neznámý"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Neznámý displej"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -576,66 +571,65 @@ msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr "Jiný kompozitní správce již běží na obrazovce %i displeje „%s“."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Událost zvonku"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Nelze otevřít displej X Window System „%s“\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Zakáže připojení ke správci sezení"
|
||||
msgstr "Zakázat připojení ke správci sezení"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Nahradí běžícího správce oken"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Určení ID správy sezení"
|
||||
msgstr "Určit ID správy sezení"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Displej X, který použije"
|
||||
msgstr "Displej X, který se má použít"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Spustí sezení z uloženého souboru"
|
||||
msgstr "Spustit sezení z uloženého souboru"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Provede volání X synchronně"
|
||||
msgstr "Provádět volání X synchronně"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Spustit jako kompozitor protokolu Wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Spustit jako podkladový kompozitor"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Spustit kompozitor wayland bez spuštění Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Spustit jako plnohodnotný server displeje, nikoliv vnořeně"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Spustit se serverem X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "„%s“ nereaguje."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Aplikace nereaguje."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -643,11 +637,11 @@ msgstr ""
|
||||
"Je možné chvíli počkat, aby aplikace mohla pokračovat, nebo si vynutit úplné "
|
||||
"ukončení aplikace."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Vynutit ukončení"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Počkat"
|
||||
|
||||
@ -675,25 +669,11 @@ msgstr "Vypsat verzi"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Zásuvný modul Mutter, který se má použít"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Plocha %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Displej „%s“ již správce oken má; zkuste prosím nahradit aktuálního správce "
|
||||
"oken pomocí přepínače --replace."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Obrazovka %d na displeji „%s“ je neplatná\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter bylo přeloženo bez podpory podrobného režimu\n"
|
||||
@ -703,7 +683,30 @@ msgstr "Mutter bylo přeloženo bez podpory podrobného režimu\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Přepínač režimu: režim %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Displej „%s“ již správce oken má; zkuste prosím nahradit aktuálního správce "
|
||||
"oken pomocí přepínače --replace."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Selhala inicializace GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Nelze otevřít displej X Window System „%s“\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Obrazovka %d na displeji „%s“ je neplatná\n"
|
||||
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -711,22 +714,7 @@ msgstr ""
|
||||
"Tato okna nepodporují „uložení aktuálního nastavení“ a po svém příštím "
|
||||
"přihlášení je budete muset spustit ručně."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (na %s)"
|
||||
|
||||
#~ msgid "Move window one workspace to the left"
|
||||
#~ msgstr "Přesunout okno o jednu pracovní plochu doleva"
|
||||
|
||||
#~ msgid "Move window one workspace to the right"
|
||||
#~ msgstr "Přesunout okno o jednu pracovní plochu doprava"
|
||||
|
||||
#~ msgid "Move to workspace left"
|
||||
#~ msgstr "Přesunout na plochu vlevo"
|
||||
|
||||
#~ msgid "Move to workspace right"
|
||||
#~ msgstr "Přesunout na plochu vpravo"
|
||||
|
||||
#~ msgid "Toggle shaded state"
|
||||
#~ msgstr "Přepnout stav svinutí"
|
||||
|
123
po/de.po
123
po/de.po
@ -2,9 +2,9 @@
|
||||
# Copyright (C) 2002-2004 Free Software Foundation, Inc.
|
||||
# Matthias Warkus <mawarkus@gnome.org>, 2002.
|
||||
# Christian Neumair <chris@gnome-de.org>, 2002-2004.
|
||||
# Hendrik Richter <hendrikr@gnome.org>, 2005, 2006, 2007, 2008.
|
||||
# Hendrik Richter <hendrikr@gnome.org>, 2005-2008.
|
||||
# Mario Blättermann <mario.blaettermann@gmail.com>, 2010-2013, 2016-2018.
|
||||
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009, 2011, 2012.
|
||||
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009, 2011-2012.
|
||||
# Wolfgang Stöggl <c72578@yahoo.de> 2011, 2017.
|
||||
# Tobias Endrigkeit <tobiasendrigkeit@googlemail.com>, 2012.
|
||||
# Tim Sabsch <timæsabsch.com>, 2018.
|
||||
@ -13,16 +13,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-26 07:59+0000\n"
|
||||
"PO-Revision-Date: 2018-02-26 21:26+0100\n"
|
||||
"Last-Translator: Tim Sabsch <tim@sabsch.com>\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-08-04 19:59+0200\n"
|
||||
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
|
||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"X-Generator: Poedit 2.0.9\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -404,10 +404,7 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Um experimentelle Funktionsmerkmale zu aktivieren, fügen Sie das "
|
||||
"entsprechende Schlüsselwort zur Liste hinzu. Möglicherweise muss der "
|
||||
@ -418,26 +415,22 @@ msgstr ""
|
||||
"framebuffer« – weist Mutter an, in der Voreinstellung logische Bildschirme "
|
||||
"in einem logischen Pixel-Koordinatensystem anzuordnen, wobei die Bildschirm-"
|
||||
"Framebuffer anstelle der Fensterinhalte skaliert werden, um HiDPI-"
|
||||
"Bildschirme besser versorgen zu können. Dafür ist kein Neustart "
|
||||
"erforderlich. • »remote-desktop« – aktiviert Remotedesktop-Unterstützung. Um "
|
||||
"das Teilen von Bildschirmen mittels Remotedesktop zu unterstützen, muss "
|
||||
"»screen-cast« ebenfalls aktiviert sein. • »screen-cast« – aktiviert »screen "
|
||||
"cast«-Unterstützung."
|
||||
"Bildschirme besser versorgen zu können. Dafür ist kein Neustart erforderlich."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Fenster aus Tab-Anzeige auswählen"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Tab-Anzeige abbrechen"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Bildschirmkonfigurationen wechseln"
|
||||
|
||||
# Ich denke nicht, dass »rotate« hier die Bildschirmdrehung meint, sondern eher eine Liste aus Konfigurationen rotiert (d.h. umgewälzt) wird.
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Wechselt die Konfiguration des eingebauten Bildschirms"
|
||||
|
||||
@ -561,22 +554,22 @@ msgstr "Bildschirm wechseln"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Bildschirmhilfe anzeigen"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Eingebaute Anzeige"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Unbekannt"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Unbekannte Anzeige"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -591,66 +584,65 @@ msgstr ""
|
||||
"Ein weiterer Compositing-Verwalter läuft bereits auf Bildschirm %i der "
|
||||
"Anzeige »%s«."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Klangereignis"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "X-Window-Systemanzeige »%s« konnte nicht geöffnet werden\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Verbindung zur Sitzungsverwaltung deaktivieren"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Den aktuellen Fensterverwalter ersetzen"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Kennung der Sitzungsverwaltung angeben"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Zu verwendende X-Anzeige"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Sitzung anhand gespeicherter Datei starten"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "X-Aufrufe abgleichen"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Als Wayland-Compositor ausführen"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Als eingebetteten Compositor ausführen"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Wayland-Compositor ausführen, ohne Xwayland zu starten"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Als vollwertigen Display-Server verwenden (nicht eingebettet)"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Mit X11-Backend ausführen"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "»%s« antwortet nicht."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Die Anwendung antwortet nicht."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -658,11 +650,11 @@ msgstr ""
|
||||
"Sie können der Anwendung noch etwas Zeit geben oder ein sofortiges Beenden "
|
||||
"erzwingen."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Beenden erzwingen"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Warten"
|
||||
|
||||
@ -692,25 +684,11 @@ msgstr "Version ausgeben"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Zu benutzendes Mutter-Plugin"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Arbeitsfläche %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Bildschirm »%s« hat bereits einen Fensterverwalter. Versuchen Sie die Option "
|
||||
"»--replace«, um den aktuellen Fensterverwalter zu ersetzen."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Bildschirm %d auf Anzeige »%s« ist ungültig\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter wurde ohne Unterstützung für den redseligen Modus kompiliert\n"
|
||||
@ -720,7 +698,30 @@ msgstr "Mutter wurde ohne Unterstützung für den redseligen Modus kompiliert\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Moduswechsel: Modus %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Bildschirm »%s« hat bereits einen Fensterverwalter. Versuchen Sie die Option "
|
||||
"»--replace«, um den aktuellen Fensterverwalter zu ersetzen."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "GDK konnte nicht initialisiert werden\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "X-Window-Systemanzeige »%s« konnte nicht geöffnet werden\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Bildschirm %d auf Anzeige »%s« ist ungültig\n"
|
||||
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -728,7 +729,7 @@ msgstr ""
|
||||
"Diese Fenster unterstützen das Speichern der aktuellen Einstellungen nicht "
|
||||
"und müssen bei der nächsten Anmeldung manuell neu gestartet werden."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (auf %s)"
|
||||
|
477
po/en_GB.po
477
po/en_GB.po
@ -5,23 +5,22 @@
|
||||
# Gareth Owen <gowen72@yahoo.com>, 2004.
|
||||
# Philip Withnall <philip@tecnocode.co.uk>, 2010.
|
||||
# Chris Leonard <cjlhomeaddress@gmail.com>, 2012.
|
||||
# Bruce Cowan <bruce@bcowan.me.uk>, 2011, 2012, 2013.
|
||||
# Bruce Cowan <bruce@bcowan.me.uk>, 2011, 2012, 2013, 2018.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2016-09-07 09:27+0000\n"
|
||||
"PO-Revision-Date: 2016-09-19 12:10+0200\n"
|
||||
"Last-Translator: David King <amigadave@amigadave.com>\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-08-19 17:43+0100\n"
|
||||
"Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n"
|
||||
"Language-Team: British English <en@li.org>\n"
|
||||
"Language: en_GB\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Gtranslator 2.91.6\n"
|
||||
"X-Generator: Poedit 2.0.7\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
@ -49,134 +48,118 @@ msgid "Move window to last workspace"
|
||||
msgstr "Move window to last workspace"
|
||||
|
||||
#: data/50-mutter-navigation.xml:24
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Move window one workspace to the left"
|
||||
|
||||
#: data/50-mutter-navigation.xml:27
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Move window one workspace to the right"
|
||||
|
||||
#: data/50-mutter-navigation.xml:30
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Move window one workspace up"
|
||||
|
||||
#: data/50-mutter-navigation.xml:33
|
||||
#: data/50-mutter-navigation.xml:27
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Move window one workspace down"
|
||||
|
||||
#: data/50-mutter-navigation.xml:36
|
||||
#: data/50-mutter-navigation.xml:30
|
||||
msgid "Move window one monitor to the left"
|
||||
msgstr "Move window one monitor to the left"
|
||||
|
||||
#: data/50-mutter-navigation.xml:39
|
||||
#: data/50-mutter-navigation.xml:33
|
||||
msgid "Move window one monitor to the right"
|
||||
msgstr "Move window one monitor to the right"
|
||||
|
||||
#: data/50-mutter-navigation.xml:42
|
||||
#: data/50-mutter-navigation.xml:36
|
||||
msgid "Move window one monitor up"
|
||||
msgstr "Move window one monitor up"
|
||||
|
||||
#: data/50-mutter-navigation.xml:45
|
||||
#: data/50-mutter-navigation.xml:39
|
||||
msgid "Move window one monitor down"
|
||||
msgstr "Move window one monitor down"
|
||||
|
||||
#: data/50-mutter-navigation.xml:49
|
||||
#: data/50-mutter-navigation.xml:43
|
||||
msgid "Switch applications"
|
||||
msgstr "Switch applications"
|
||||
|
||||
#: data/50-mutter-navigation.xml:54
|
||||
#: data/50-mutter-navigation.xml:48
|
||||
msgid "Switch to previous application"
|
||||
msgstr "Switch to previous application"
|
||||
|
||||
#: data/50-mutter-navigation.xml:58
|
||||
#: data/50-mutter-navigation.xml:52
|
||||
msgid "Switch windows"
|
||||
msgstr "Switch windows"
|
||||
|
||||
#: data/50-mutter-navigation.xml:63
|
||||
#: data/50-mutter-navigation.xml:57
|
||||
msgid "Switch to previous window"
|
||||
msgstr "Switch to previous window"
|
||||
|
||||
#: data/50-mutter-navigation.xml:67
|
||||
#: data/50-mutter-navigation.xml:61
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Switch windows of an application"
|
||||
|
||||
#: data/50-mutter-navigation.xml:72
|
||||
#: data/50-mutter-navigation.xml:66
|
||||
msgid "Switch to previous window of an application"
|
||||
msgstr "Switch to previous window of an application"
|
||||
|
||||
#: data/50-mutter-navigation.xml:76
|
||||
#: data/50-mutter-navigation.xml:70
|
||||
msgid "Switch system controls"
|
||||
msgstr "Switch system controls"
|
||||
|
||||
#: data/50-mutter-navigation.xml:81
|
||||
#: data/50-mutter-navigation.xml:75
|
||||
msgid "Switch to previous system control"
|
||||
msgstr "Switch to previous system control"
|
||||
|
||||
#: data/50-mutter-navigation.xml:85
|
||||
#: data/50-mutter-navigation.xml:79
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Switch windows directly"
|
||||
|
||||
#: data/50-mutter-navigation.xml:90
|
||||
#: data/50-mutter-navigation.xml:84
|
||||
msgid "Switch directly to previous window"
|
||||
msgstr "Switch directly to previous window"
|
||||
|
||||
#: data/50-mutter-navigation.xml:94
|
||||
#: data/50-mutter-navigation.xml:88
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Switch windows of an app directly"
|
||||
|
||||
#: data/50-mutter-navigation.xml:99
|
||||
#: data/50-mutter-navigation.xml:93
|
||||
msgid "Switch directly to previous window of an app"
|
||||
msgstr "Switch directly to previous window of an app"
|
||||
|
||||
#: data/50-mutter-navigation.xml:103
|
||||
#: data/50-mutter-navigation.xml:97
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Switch system controls directly"
|
||||
|
||||
#: data/50-mutter-navigation.xml:108
|
||||
#: data/50-mutter-navigation.xml:102
|
||||
msgid "Switch directly to previous system control"
|
||||
msgstr "Switch directly to previous system control"
|
||||
|
||||
#: data/50-mutter-navigation.xml:111
|
||||
#: data/50-mutter-navigation.xml:105
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Hide all normal windows"
|
||||
|
||||
#: data/50-mutter-navigation.xml:114
|
||||
#: data/50-mutter-navigation.xml:108
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Switch to workspace 1"
|
||||
|
||||
#: data/50-mutter-navigation.xml:117
|
||||
#: data/50-mutter-navigation.xml:111
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Switch to workspace 2"
|
||||
|
||||
#: data/50-mutter-navigation.xml:120
|
||||
#: data/50-mutter-navigation.xml:114
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Switch to workspace 3"
|
||||
|
||||
#: data/50-mutter-navigation.xml:123
|
||||
#: data/50-mutter-navigation.xml:117
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Switch to workspace 4"
|
||||
|
||||
#: data/50-mutter-navigation.xml:126
|
||||
#: data/50-mutter-navigation.xml:120
|
||||
msgid "Switch to last workspace"
|
||||
msgstr "Switch to last workspace"
|
||||
|
||||
#: data/50-mutter-navigation.xml:129
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Move to workspace left"
|
||||
|
||||
#: data/50-mutter-navigation.xml:132
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Move to workspace right"
|
||||
|
||||
#: data/50-mutter-navigation.xml:135
|
||||
#: data/50-mutter-navigation.xml:123
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Move to workspace above"
|
||||
|
||||
#: data/50-mutter-navigation.xml:138
|
||||
#: data/50-mutter-navigation.xml:126
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Move to workspace below"
|
||||
|
||||
#: data/50-mutter-system.xml:6
|
||||
#: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
@ -188,6 +171,10 @@ msgstr "Show the run command prompt"
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Show the activities overview"
|
||||
|
||||
#: data/50-mutter-wayland.xml:8
|
||||
msgid "Restore the keyboard shortcuts"
|
||||
msgstr "Restore the keyboard shortcuts"
|
||||
|
||||
#: data/50-mutter-windows.xml:6
|
||||
msgid "Windows"
|
||||
msgstr "Windows"
|
||||
@ -213,54 +200,50 @@ msgid "Restore window"
|
||||
msgstr "Restore window"
|
||||
|
||||
#: data/50-mutter-windows.xml:18
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Toggle shaded state"
|
||||
|
||||
#: data/50-mutter-windows.xml:20
|
||||
msgid "Close window"
|
||||
msgstr "Close window"
|
||||
|
||||
#: data/50-mutter-windows.xml:22
|
||||
#: data/50-mutter-windows.xml:20
|
||||
msgid "Hide window"
|
||||
msgstr "Hide window"
|
||||
|
||||
#: data/50-mutter-windows.xml:24
|
||||
#: data/50-mutter-windows.xml:22
|
||||
msgid "Move window"
|
||||
msgstr "Move window"
|
||||
|
||||
#: data/50-mutter-windows.xml:26
|
||||
#: data/50-mutter-windows.xml:24
|
||||
msgid "Resize window"
|
||||
msgstr "Resize window"
|
||||
|
||||
#: data/50-mutter-windows.xml:29
|
||||
#: data/50-mutter-windows.xml:27
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "Toggle window on all workspaces or one"
|
||||
|
||||
#: data/50-mutter-windows.xml:31
|
||||
#: data/50-mutter-windows.xml:29
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Raise window if covered, otherwise lower it"
|
||||
|
||||
#: data/50-mutter-windows.xml:33
|
||||
#: data/50-mutter-windows.xml:31
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Raise window above other windows"
|
||||
|
||||
#: data/50-mutter-windows.xml:35
|
||||
#: data/50-mutter-windows.xml:33
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Lower window below other windows"
|
||||
|
||||
#: data/50-mutter-windows.xml:37
|
||||
#: data/50-mutter-windows.xml:35
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Maximise window vertically"
|
||||
|
||||
#: data/50-mutter-windows.xml:39
|
||||
#: data/50-mutter-windows.xml:37
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Maximise window horizontally"
|
||||
|
||||
#: data/50-mutter-windows.xml:43
|
||||
#: data/50-mutter-windows.xml:41
|
||||
msgid "View split on left"
|
||||
msgstr "View split on left"
|
||||
|
||||
#: data/50-mutter-windows.xml:47
|
||||
#: data/50-mutter-windows.xml:45
|
||||
msgid "View split on right"
|
||||
msgstr "View split on right"
|
||||
|
||||
@ -273,16 +256,21 @@ msgid "Modifier to use for extended window management operations"
|
||||
msgstr "Modifier to use for extended window management operations"
|
||||
|
||||
#: 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 \"Windows key\" on PC hardware. It's expected that this binding "
|
||||
#| "either the default or set to the empty string."
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
|
||||
"default or set to the empty string."
|
||||
"This key will initiate the “overlay”, which is a combination window overview "
|
||||
"and application launching system. The default is intended to be the “Windows "
|
||||
"key” on PC hardware. It’s expected that this binding either the default or "
|
||||
"set to the empty string."
|
||||
msgstr ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
|
||||
"default or set to the empty string."
|
||||
"This key will initiate the “overlay”, which is a combination window overview "
|
||||
"and application launching system. The default is intended to be the “Windows "
|
||||
"key” on PC hardware. It’s expected that this binding either the default or "
|
||||
"set to the empty string."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:20
|
||||
msgid "Attach modal dialogs"
|
||||
@ -317,12 +305,16 @@ msgid "Workspaces are managed dynamically"
|
||||
msgstr "Workspaces are managed dynamically"
|
||||
|
||||
#: 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.gnome.desktop.wm.preferences)."
|
||||
msgid ""
|
||||
"Determines whether workspaces are managed dynamically or whether there's a "
|
||||
"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 ""
|
||||
"Determines whether workspaces are managed dynamically or whether there's a "
|
||||
"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)."
|
||||
|
||||
@ -355,25 +347,32 @@ msgid "Delay focus changes until the pointer stops moving"
|
||||
msgstr "Delay focus changes until the pointer stops moving"
|
||||
|
||||
#: 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 after the pointer stops moving."
|
||||
msgid ""
|
||||
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
|
||||
"the focus will not be changed immediately when entering a window, but only "
|
||||
"after the pointer stops moving."
|
||||
"If set to true, and the focus mode is either “sloppy” or “mouse” then the "
|
||||
"focus will not be changed immediately when entering a window, but only after "
|
||||
"the pointer stops moving."
|
||||
msgstr ""
|
||||
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
|
||||
"the focus will not be changed immediately when entering a window, but only "
|
||||
"after the pointer stops moving."
|
||||
"If set to true, and the focus mode is either “sloppy” or “mouse” then the "
|
||||
"focus will not be changed immediately when entering a window, but only after "
|
||||
"the pointer stops moving."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:79
|
||||
msgid "Draggable border width"
|
||||
msgstr "Draggable border width"
|
||||
|
||||
#: 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."
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"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 ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"The amount of total draggable borders. If the theme’s visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:89
|
||||
@ -400,14 +399,47 @@ msgstr ""
|
||||
"When true, the new windows will always be put in the centre of the active "
|
||||
"screen of the monitor."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:120
|
||||
#: data/org.gnome.mutter.gschema.xml.in:107
|
||||
msgid "Enable experimental features"
|
||||
msgstr "Enable experimental features"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:108
|
||||
msgid ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
"Whether the feature requires restarting the compositor depends on the given "
|
||||
"feature. Any experimental feature is not required to still be available, or "
|
||||
"configurable. Don’t expect adding anything in this setting to be future "
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
"Whether the feature requires restarting the compositor depends on the given "
|
||||
"feature. Any experimental feature is not required to still be available, or "
|
||||
"configurable. Don’t expect adding anything in this setting to be future "
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Select window from tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:125
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Cancel tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
#| msgid "Switch monitor"
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Switch monitor configurations"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Rotates the built-in monitor configuration"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
|
||||
msgid "Switch to VT 1"
|
||||
msgstr "Switch to VT 1"
|
||||
@ -456,59 +488,167 @@ msgstr "Switch to VT 11"
|
||||
msgid "Switch to VT 12"
|
||||
msgstr "Switch to VT 12"
|
||||
|
||||
#: src/backends/meta-input-settings.c:1707
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
|
||||
msgid "Re-enable shortcuts"
|
||||
msgstr "Re-enable shortcuts"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "Allow grabs with Xwayland"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:65
|
||||
msgid ""
|
||||
"Allow keyboard grabs issued by X11 applications running in Xwayland to be "
|
||||
"taken into account. For a X11 grab to be taken into account under Wayland, "
|
||||
"the client must also either send a specific X11 ClientMessage to the root "
|
||||
"window or be among the applications white-listed in key “xwayland-grab-"
|
||||
"access-rules”."
|
||||
msgstr ""
|
||||
"Allow keyboard grabs issued by X11 applications running in Xwayland to be "
|
||||
"taken into account. For a X11 grab to be taken into account under Wayland, "
|
||||
"the client must also either send a specific X11 ClientMessage to the root "
|
||||
"window or be among the applications white-listed in key “xwayland-grab-"
|
||||
"access-rules”."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr "Xwayland applications allowed to issue keyboard grabs"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
msgid ""
|
||||
"List the resource names or resource class of X11 windows either allowed or "
|
||||
"not allowed to issue X11 keyboard grabs under Xwayland. The resource name or "
|
||||
"resource class of a given X11 window can be obtained using the command "
|
||||
"“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. "
|
||||
"Values starting with “!” are blacklisted, which has precedence over the "
|
||||
"whitelist, to revoke applications from the default system list. The default "
|
||||
"system list includes the following applications: "
|
||||
"“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by "
|
||||
"using the specific keyboard shortcut defined by the keybinding key “restore-"
|
||||
"shortcuts”."
|
||||
msgstr ""
|
||||
"List the resource names or resource class of X11 windows either allowed or "
|
||||
"not allowed to issue X11 keyboard grabs under Xwayland. The resource name or "
|
||||
"resource class of a given X11 window can be obtained using the command "
|
||||
"“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. "
|
||||
"Values starting with “!” are blacklisted, which has precedence over the "
|
||||
"whitelist, to revoke applications from the default system list. The default "
|
||||
"system list includes the following applications: "
|
||||
"“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by "
|
||||
"using the specific keyboard shortcut defined by the keybinding key “restore-"
|
||||
"shortcuts”."
|
||||
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
#| msgid "Mode Switch: Mode %d"
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Mode Switch (Group %d)"
|
||||
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "Switch monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:1709
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Show on-screen help"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:514
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Built-in display"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:537
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Unknown"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:539
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Unknown Display"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:547
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, 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:463
|
||||
#: src/compositor/compositor.c:481
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "Another compositing manager is already running on screen %i on display "
|
||||
#| "\"%s\"."
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Bell event"
|
||||
|
||||
#: src/core/delete.c:127
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Disable connection to session manager"
|
||||
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Replace the running window manager"
|
||||
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specify session management ID"
|
||||
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "X Display to use"
|
||||
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Initialise session from savefile"
|
||||
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Make X calls synchronous"
|
||||
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Run as a wayland compositor"
|
||||
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Run as a nested compositor"
|
||||
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Run wayland compositor without starting Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Run as a full display server, rather than nested"
|
||||
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Run with X11 backend"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” is not responding."
|
||||
|
||||
#: src/core/delete.c:129
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Application is not responding."
|
||||
|
||||
#: src/core/delete.c:134
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -516,66 +656,31 @@ msgstr ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
|
||||
#: src/core/delete.c:141
|
||||
msgid "_Wait"
|
||||
msgstr "_Wait"
|
||||
|
||||
#: src/core/delete.c:141
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Force Quit"
|
||||
|
||||
#: src/core/display.c:590
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Failed to open X Window System display '%s'\n"
|
||||
|
||||
#: src/core/main.c:182
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Disable connection to session manager"
|
||||
|
||||
#: src/core/main.c:188
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Replace the running window manager"
|
||||
|
||||
#: src/core/main.c:194
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specify session management ID"
|
||||
|
||||
#: src/core/main.c:199
|
||||
msgid "X Display to use"
|
||||
msgstr "X Display to use"
|
||||
|
||||
#: src/core/main.c:205
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Initialise session from savefile"
|
||||
|
||||
#: src/core/main.c:211
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Make X calls synchronous"
|
||||
|
||||
#: src/core/main.c:218
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Run as a wayland compositor"
|
||||
|
||||
#: src/core/main.c:224
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Run as a nested compositor"
|
||||
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Run as a full display server, rather than nested"
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Wait"
|
||||
|
||||
#: src/core/mutter.c:39
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "mutter %s\n"
|
||||
#| "Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
#| "This is free software; see the source for copying conditions.\n"
|
||||
#| "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
|
||||
#| "PARTICULAR PURPOSE.\n"
|
||||
msgid ""
|
||||
"mutter %s\n"
|
||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"This is free software; see the source for copying conditions.\n"
|
||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
|
||||
"PARTICULAR PURPOSE.\n"
|
||||
msgstr ""
|
||||
"mutter %s\n"
|
||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"This is free software; see the source for copying conditions.\n"
|
||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
|
||||
"PARTICULAR PURPOSE.\n"
|
||||
@ -588,47 +693,79 @@ msgstr "Print version"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Mutter plugin to use"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Workspace %d"
|
||||
|
||||
#: 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 ""
|
||||
"Display \"%s\" already has a window manager; try using the --replace option "
|
||||
"to replace the current window manager."
|
||||
|
||||
#: src/core/screen.c:606
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Screen %d on display '%s' is invalid\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter was compiled without support for verbose mode\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:595
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Mode Switch: Mode %d"
|
||||
|
||||
#: src/x11/session.c:1815
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "Display \"%s\" already has a window manager; try using the --replace "
|
||||
#| "option to replace the current window manager."
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
|
||||
#: src/x11/window-props.c:548
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Failed to initialise GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
#| msgid "Failed to open X Window System display '%s'\n"
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Failed to open X Window System display “%s”\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
#| msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Screen %d on display “%s” is invalid\n"
|
||||
|
||||
#: src/x11/session.c:1819
|
||||
#| msgid ""
|
||||
#| "These windows do not support "save current setup" and will have "
|
||||
#| "to be restarted manually next time you log in."
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
msgstr ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (on %s)"
|
||||
|
||||
#~ msgid "Move window one workspace to the left"
|
||||
#~ msgstr "Move window one workspace to the left"
|
||||
|
||||
#~ msgid "Move window one workspace to the right"
|
||||
#~ msgstr "Move window one workspace to the right"
|
||||
|
||||
#~ msgid "Move to workspace left"
|
||||
#~ msgstr "Move to workspace left"
|
||||
|
||||
#~ msgid "Move to workspace right"
|
||||
#~ msgstr "Move to workspace right"
|
||||
|
||||
#~ msgid "Toggle shaded state"
|
||||
#~ msgstr "Toggle shaded state"
|
||||
|
||||
#~ msgid "background texture could not be created from file"
|
||||
#~ msgstr "background texture could not be created from file"
|
||||
|
||||
|
122
po/es.po
122
po/es.po
@ -13,8 +13,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter.master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-07 18:39+0000\n"
|
||||
"PO-Revision-Date: 2018-02-22 12:34+0100\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-07-23 12:31+0200\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: es <gnome-es-list@gnome.org>\n"
|
||||
"Language: es\n"
|
||||
@ -397,6 +397,19 @@ msgid "Enable experimental features"
|
||||
msgstr "Activar las características experimentales"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:108
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "To enable experimental features, add the feature keyword to the list. "
|
||||
#| "Whether the feature requires restarting the compositor depends on the "
|
||||
#| "given feature. Any experimental feature is not required to still be "
|
||||
#| "available, or configurable. Don’t expect adding anything in this setting "
|
||||
#| "to be future proof. Currently possible keywords: • “scale-monitor-"
|
||||
#| "framebuffer” — makes mutter default to layout logical monitors in a "
|
||||
#| "logical pixel coordinate space, while scaling monitor framebuffers "
|
||||
#| "instead of window content, to manage HiDPI monitors. Does not require a "
|
||||
#| "restart. • “remote-desktop” — enables remote desktop support. To support "
|
||||
#| "remote desktop with screen sharing, “screen-cast” must also be enabled. • "
|
||||
#| "“screen-cast” — enables screen cast support."
|
||||
msgid ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
"Whether the feature requires restarting the compositor depends on the given "
|
||||
@ -405,10 +418,7 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Para activar las características experimentales, añada la palabra clave de "
|
||||
"la característica a la lista. Depende de la característica que se deba "
|
||||
@ -423,19 +433,19 @@ msgstr ""
|
||||
"Para soportarlo con compartición de pantalla es necesario activar \"screen-"
|
||||
"cast\" • \"screen-cast\" — activa el soporte de compartición de pantalla."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Seleccionar ventana de la pestaña emergente"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Cancelar pestaña emergente"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Cambiar la configuración del monitor"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Rota la configuración del monitor empotrado"
|
||||
|
||||
@ -525,7 +535,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2260
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Cambiar modo (grupo %d)"
|
||||
@ -533,30 +543,30 @@ msgstr "Cambiar modo (grupo %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2283
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "Cambiar monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2285
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Mostrar la ayuda en pantalla"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Pantalla integrada"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Desconocida"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Pantalla desconocida"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -571,66 +581,65 @@ msgstr ""
|
||||
"Ya existe un gestor de composición ejecutándose en la monitor %i, pantalla "
|
||||
"«%s»."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Evento de campana"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Desactivar conexión al gestor de sesión"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Reemplazar el gestor de ventanas en ejecución"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Especificar el ID se gestión de sesión"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Pantalla X que usar"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inicializar sesión desde el archivo de salvaguarda"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Hacer que las llamadas a las X sean síncronas"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Ejecutar como compositor Wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Ejecutar como compositor anidado"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Ejecutar el compositor wayland sin iniciar Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Ejecutar como servidor completo, en lugar de anidado"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Ejecutar con «backend» de X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "«%s» no está respondiendo."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "La aplicación no está respondiendo."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -638,11 +647,11 @@ msgstr ""
|
||||
"Puede elegir esperar un rato para ver si continua o forzar la aplicación "
|
||||
"para cerrarla completamente."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forzar la salida"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Esperar"
|
||||
|
||||
@ -670,12 +679,21 @@ msgstr "Imprimir versión"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Complemento de mutter que usar"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Área de trabajo %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter fue compilado sin soporte para modo prolijo\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Cambiar modo: modo %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -684,21 +702,21 @@ msgstr ""
|
||||
"La pantalla «%s» ya tiene un gestor de ventanas; pruebe a usar la opción «--"
|
||||
"replace» para reemplazar el gestor de ventanas activo."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Falló al inicializar GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "La ventana %d en la pantalla «%s» no es válida\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter fue compilado sin soporte para modo prolijo\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:563
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Cambiar modo: modo %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -706,7 +724,7 @@ msgstr ""
|
||||
"Estas ventanas no soportan «guardar la configuración actual» y tendrán que "
|
||||
"reiniciarse manualmente la próxima vez que inicie una sesión."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (on %s)"
|
||||
|
134
po/fr.po
134
po/fr.po
@ -20,8 +20,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-06 04:14+0000\n"
|
||||
"PO-Revision-Date: 2018-03-03 11:18+0100\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-07-24 10:22+0200\n"
|
||||
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
|
||||
"Language-Team: français <gnomefr@traduc.org>\n"
|
||||
"Language: fr\n"
|
||||
@ -409,10 +409,7 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Pour activer les fonctionnalités expérimentales, ajoutez le mot-clé de la "
|
||||
"fonctionnalité dans la liste. Selon la fonctionnalité, il peut être "
|
||||
@ -423,26 +420,23 @@ msgstr ""
|
||||
"mutter d’utiliser par défaut une disposition par moniteur logique dans un "
|
||||
"espace de coordonnées de pixels logique, tout en mettant à l’échelle les "
|
||||
"« framebuffers » de moniteur au lieu des contenus de fenêtre pour pouvoir "
|
||||
"gérer les moniteurs à haute densité. Cela ne nécessite pas de redémarrage. • "
|
||||
"« remote-desktop » — active la prise en charge du bureau à distance. Pour la "
|
||||
"prise en charge du bureau distant avec partage de l’écran, « screen-cast » "
|
||||
"doit aussi être activé. • « screen-cast » — active la diffusion de l’écran. "
|
||||
"gérer les moniteurs à haute densité. Cela ne nécessite pas de redémarrage."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr ""
|
||||
"Sélectionner la fenêtre dans la vue qui apparaît suite à un appui sur la "
|
||||
"touche tab"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Fermer la vue qui apparaît suite à un appui sur la touche tab"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Changer de configuration de moniteur"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Passe à la prochaine configuration intégrée de moniteur"
|
||||
|
||||
@ -512,9 +506,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Permettre aux captures de clavier émises par les applications X11 tournant "
|
||||
"dans Xwayland d’être prises en compte. Pour que ceci puisse arriver, le "
|
||||
"client doit aussi soit envoyer un ClientMessage X11 spécifique à la "
|
||||
"fenêtre racine, soit figurer dans les applications autorisées dans la clé "
|
||||
"« xwayland-access-rules »."
|
||||
"client doit aussi soit envoyer un ClientMessage X11 spécifique à la fenêtre "
|
||||
"racine, soit figurer dans les applications autorisées dans la clé « xwayland-"
|
||||
"access-rules »."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
@ -534,20 +528,20 @@ msgid ""
|
||||
"shortcuts”."
|
||||
msgstr ""
|
||||
"Liste de noms de ressources ou de classes de ressources de fenêtres X11 "
|
||||
"autorisées ou non à émettre des captures clavier sous Xwayland. Le nom ou "
|
||||
"la classe de ressource d’une fenêtre X11 donnée peut être obtenue à l’aide "
|
||||
"de la commande « xprop WM_CLASS ». Les caractères joker « * » et « ? » sont "
|
||||
"autorisées ou non à émettre des captures clavier sous Xwayland. Le nom ou la "
|
||||
"classe de ressource d’une fenêtre X11 donnée peut être obtenue à l’aide de "
|
||||
"la commande « xprop WM_CLASS ». Les caractères joker « * » et « ? » sont "
|
||||
"acceptées dans les valeurs. Les valeurs commençant pas « ! » sont en liste "
|
||||
"noire, qui a priorité sur la liste blanche, pour révoquer les applications "
|
||||
"de la liste système par défaut. Celle-ci contient les applications suivantes : "
|
||||
"« @XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@ ». Les utilisateurs peuvent casser une "
|
||||
"capture existante en utilisant le raccourci clavier spécifique défini par "
|
||||
"la combinaison de touches « restore-shortcuts »."
|
||||
"de la liste système par défaut. Celle-ci contient les applications "
|
||||
"suivantes : « @XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@ ». Les utilisateurs "
|
||||
"peuvent casser une capture existante en utilisant le raccourci clavier "
|
||||
"spécifique défini par la combinaison de touches « restore-shortcuts »."
|
||||
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2260
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Changement de mode (groupe %d)"
|
||||
@ -555,30 +549,30 @@ msgstr "Changement de mode (groupe %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2283
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "Changer de moniteur"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2285
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Afficher l’aide à l’écran"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Affichage intégré"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Inconnu"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Affichage inconnu"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -593,66 +587,65 @@ msgstr ""
|
||||
"Un autre gestionnaire de composition est déjà lancé sur l’écran %i de "
|
||||
"l’affichage « %s »."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Évènement sonore"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Impossible d’ouvrir l’affichage « %s » du système X Window\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Désactiver la connexion au gestionnaire de sessions"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Remplacer le gestionnaire de fenêtres en cours de fonctionnement"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Indiquer l’ID de gestion de sessions"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Affichage X à utiliser"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Initialiser la session depuis le fichier de sauvegarde"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Rendre synchrones les appels à X"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Lancer comme un compositeur wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Lancer comme un compositeur imbriqué"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Lancer le compositeur wayland sans démarrer Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Lancer comme un serveur d’affichage complet, plutôt qu’imbriqué"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Lancer avec le moteur X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "« %s » ne répond pas."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "L’application ne répond pas."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -660,11 +653,11 @@ msgstr ""
|
||||
"Vous pouvez patienter un instant pour continuer ou forcer l’application à "
|
||||
"quitter définitivement."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forcer à quitter"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Attendre"
|
||||
|
||||
@ -692,12 +685,21 @@ msgstr "Afficher la version"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Greffon de Mutter à utiliser"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Espace de travail %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter a été compilé sans la prise en charge du mode bavard\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Changement de mode : mode %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -706,21 +708,21 @@ msgstr ""
|
||||
"L’affichage « %s » a déjà un gestionnaire de fenêtres ; essayez d’utiliser "
|
||||
"l’option --replace pour remplacer le gestionnaire de fenêtres actuel."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "L’initialisation de GDK a échoué\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Impossible d’ouvrir l’affichage « %s » du système X Window\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "L’écran %d sur l’affichage « %s » n’est pas valide\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter a été compilé sans la prise en charge du mode bavard\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:563
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Changement de mode : mode %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -729,7 +731,7 @@ msgstr ""
|
||||
"configuration actuelle » et devront être redémarrées manuellement à la "
|
||||
"prochaine connexion."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (sur %s)"
|
||||
|
117
po/fur.po
117
po/fur.po
@ -7,15 +7,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-06 04:14+0000\n"
|
||||
"PO-Revision-Date: 2018-02-06 22:43+0100\n"
|
||||
"POT-Creation-Date: 2018-08-15 08:53+0000\n"
|
||||
"PO-Revision-Date: 2018-08-17 05:49+0200\n"
|
||||
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
|
||||
"Language-Team: Friulian <fur@li.org>\n"
|
||||
"Language: fur\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.3\n"
|
||||
"X-Generator: Poedit 2.0.7\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -391,10 +391,7 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Par abilitâ lis funzionalitâts sperimentâls, zonte la peraule clâf de "
|
||||
"funzionalitât ae liste. Il fat che la funzionalitât e vedi bisugne di tornâ "
|
||||
@ -405,25 +402,21 @@ msgstr ""
|
||||
"“scale-monitor-framebuffer” — al rint come predefinît par mutter, la "
|
||||
"disposizion logjiche dai visôrs intun spazi logjic di coordenadis di pixel, "
|
||||
"in plui si fâs il scjalâ dai framebuffer dai visôrs invezit che il contignût "
|
||||
"dal barcon; dut chest par gjestî i visôrs HiDPI. Nol covente tornâ a inviâ. "
|
||||
"• “remote-desktop” — al abilite il supuart pal scritori rimot. Par podê "
|
||||
"supuartâ il scritori rimot cun la condivision dal schermi si scugne abilitâ "
|
||||
"ancje “screen-cast”. • “screen-cast” — al abilite il supuart pe trasmission "
|
||||
"dal schermi."
|
||||
"dal barcon; dut chest par gjestî i visôrs HiDPI. Nol covente tornâ a inviâ."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Selezione barcon dal tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Anule tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Cambie configurazions visôr"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Al volte la configurazion dal visôr integrât"
|
||||
|
||||
@ -529,7 +522,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2260
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Cambie mût (Grup %d)"
|
||||
@ -537,30 +530,30 @@ msgstr "Cambie mût (Grup %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2283
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "Cambie visôr"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2285
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Mostre jutori a schermi"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:886
|
||||
msgid "Built-in display"
|
||||
msgstr "Display integrât"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:909
|
||||
msgid "Unknown"
|
||||
msgstr "No cognossût"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:911
|
||||
msgid "Unknown Display"
|
||||
msgstr "Display no cognossût"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:919
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -575,66 +568,65 @@ msgstr ""
|
||||
"Un altri compositing manager al è za in esecuzion sul schermi %i sul display "
|
||||
"“%s”."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Event cjampane"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Impussibil vierzi il display “%s” di X Window System\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Disabilite la conession al gjestôr de session"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Rimplace il window manager in vore"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specifiche il ID di gjestion session"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Display X di doprâ"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inizialize session da file salvât"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Fâs lis clamadis X sincronis"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Eseguìs come compositor wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Eseguìs come compositor nidiât"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Eseguìs il compositôr di wayland cence inviâ Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Eseguìs come servidôr display complet, invezit che nidiât"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Eseguìs cul backend X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” nol rispuint."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "La aplicazion no rispuint."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -642,11 +634,11 @@ msgstr ""
|
||||
"Al è pussibil sielzi di spietâ un pôc lassant che la aplicazion e continui o "
|
||||
"sfuarçâ la aplicazion par sierâle dal dut."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "Sfuarce _Jessude"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Spiete"
|
||||
|
||||
@ -673,12 +665,21 @@ msgstr "Stampe version"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Plugin Mutter di doprâ"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1787
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Spazi di lavôr %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter al è stât compilât cence supuart pe modalitât fetose\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Cambie mût: mût %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -687,21 +688,21 @@ msgstr ""
|
||||
"Il display “%s” al à za un window manager; prove dopre la opzion --replace "
|
||||
"par rimplaçâ chel atuâl."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "No si è rivâts a inizializâ GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Impussibil vierzi il display “%s” di X Window System\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Schermi %d su display “%s” no valit\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter al è stât compilât cence supuart pe modalitât fetose\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:563
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Cambie mût: mût %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -709,7 +710,7 @@ msgstr ""
|
||||
"Chescj barcons no supuartin la funzion “salve impostazions atuâls” e si "
|
||||
"scugnarà tornâ a inviâlis a man tal prossim acès."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (su %s)"
|
||||
|
116
po/id.po
116
po/id.po
@ -10,9 +10,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-07 18:39+0000\n"
|
||||
"PO-Revision-Date: 2018-02-09 17:00+0700\n"
|
||||
"Last-Translator: Kukuh Syafaat <syafaatkukuh@gmail.com>\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-07-16 12:04+0700\n"
|
||||
"Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n"
|
||||
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
|
||||
"Language: id\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -394,10 +394,7 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Untuk mengaktifkan fitur eksperimental, tambahkan kata kunci fitur ke dalam "
|
||||
"daftar. Apakah fitur memerlukan nyala ulang kompositor tergantung pada fitur "
|
||||
@ -407,24 +404,21 @@ msgstr ""
|
||||
"mungkin: • “scale-monitor-framebuffer” — membuat bawaan mutter untuk tata "
|
||||
"letak monitor logikal dalam ruang koordinat pixel logikal, sambil "
|
||||
"menskalakan framebuffer monitor alih-alih konten jendela, untuk mengelola "
|
||||
"monitor HiDPI. Tidak perlu mulai ulang. • “remote-desktop” — aktifkan "
|
||||
"dukungan destop jauh. Untuk mendukung destop jauh dengan berbagi layar, "
|
||||
"“screen-cast” juga harus diaktifkan. • “screen-cast” — aktifkan dukungan "
|
||||
"screen cast."
|
||||
"monitor HiDPI. Tidak perlu mulai ulang."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Pilih jendela dari popup tab"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Batalkan popup tab"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Tukar konfigurasi monitor bawaan"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Memutar konfigurasi monitor bawaan"
|
||||
|
||||
@ -532,7 +526,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2260
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Tukar Mode: (Grup %d)"
|
||||
@ -540,30 +534,30 @@ msgstr "Tukar Mode: (Grup %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2283
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "Berpindah monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2285
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Tampilkan bantuan pada layar"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Tampilan bawaan"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Tak Dikenal"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Tampilan Tak Dikenal"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -577,77 +571,76 @@ msgid ""
|
||||
msgstr ""
|
||||
"Manajer komposit lain telah berjalan pada layar %i pada tampilan \"%s\"."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Bel peristiwa"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Gagal membuka tampilan X Window System \"%s\"\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Menonaktifkan koneksi ke manajer sesi"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Mengganti manajer jendela yang tengah berjalan"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Tentukan kode pengaturan sesi"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Tampilan X yang digunakna"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Aktifkan sesi dari berkas simpanan"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Buat panggilan X selaras"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Jalankan sebagai kompositor wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Jalankan sebagai kompositor bersarang"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Jalankan kompositor wayland tanpa memmulai Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Jalankan sebagai server tampilan penuh, ketimbang tampilan bersarang"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Jalankan dengan backend X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "\"%s\" tak merespon."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Aplikasi tak merespon."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
msgstr ""
|
||||
"Anda bisa memilih untuk menunggu sebentar atau memaksa aplikasi keluar."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Matikan Paksa"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Tunggu"
|
||||
|
||||
@ -675,12 +668,21 @@ msgstr "Cetak versi"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Pengaya Mutter yang dipakai"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Area kerja %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Muter dikompilasi tanpa dukungan mode riuh\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Tukar Mode: Mode %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -689,21 +691,21 @@ msgstr ""
|
||||
"Tampilan \"%s\" sudah memiliki manajer jendela; cobalah gunakan pilihan --"
|
||||
"replace untuk mengganti manajer jendela saat ini."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Gagal menginisialisasi GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Gagal membuka tampilan X Window System \"%s\"\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Layar %d pada tampilan \"%s\" tidak valid\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Muter dikompilasi tanpa dukungan mode riuh\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:563
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Tukar Mode: Mode %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -711,7 +713,7 @@ msgstr ""
|
||||
"Jendela ini tidak mendukung \"menyimpan setelan aktif saat ini\" dan mesti "
|
||||
"dijalankan ulang secara manual kala berikut Anda log masuk."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (pada %s)"
|
||||
|
118
po/it.po
118
po/it.po
@ -12,8 +12,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-06 04:14+0000\n"
|
||||
"PO-Revision-Date: 2018-02-09 16:49+0100\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-08-07 10:11+0200\n"
|
||||
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
|
||||
"Language-Team: Italian <tp@lists.linux.it>\n"
|
||||
"Language: it\n"
|
||||
@ -21,7 +21,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||
"X-Generator: Poedit 2.0.4\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -407,10 +407,7 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Per abilitare le funzionalità sperimentali, aggiungere la parola chiave di "
|
||||
"tale funzionalità nella lista. Se la funzionalità desiderata richiede il "
|
||||
@ -421,24 +418,21 @@ msgstr ""
|
||||
"modo che mutter disponga gli schermi logici secondo uno spazio logico di "
|
||||
"coordinate pixel, applicando il ridimensionamento ai framebuffer invece che "
|
||||
"al contenuto della finestra, per gestire schermi HiDPI (non richiede il "
|
||||
"riavvio). • \"remote-desktop\" — Abilita il supporto al desktop remoto. Per "
|
||||
"supportare il desktop remoto con la condivisione dello schermo, è necessario "
|
||||
"abilitare anche \"screen-cast\". • “screen-cast” — Abilita il supporto alla "
|
||||
"registrazione dello schermo."
|
||||
"riavvio)."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Seleziona finestra dal tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Annulla tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Cambia le configurazioni del monitor"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Passa da una configurazione integrata all'altra del monitor"
|
||||
|
||||
@ -544,7 +538,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2260
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Cambio modalità (gruppo %d)"
|
||||
@ -552,30 +546,30 @@ msgstr "Cambio modalità (gruppo %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2283
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "Cambia monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2285
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Mostra aiuto sullo schermo"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Display integrato"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Sconosciuto"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
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:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -590,66 +584,65 @@ msgstr ""
|
||||
"Un altro compositing manager è già in esecuzione sullo schermo %i sul "
|
||||
"display «%s»."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Evento campanella"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, 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:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Disabilita la connessione al gestore di sessione"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Sostituisce il window manager in esecuzione"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specifica l'ID di gestione sessione"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Display X da usare"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inizializza la sessione da file salvato"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Rende le chiamate X sincrone"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Esegui come compositor Wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Esegui come compositor annidato"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Esegui il compositor Wayland senza avviare Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Esegui come display server invece che annidato"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Esegui con sistema X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "Nessuna risposta da %s."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "L'applicazione non risponde."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -657,11 +650,11 @@ msgstr ""
|
||||
"È possibile scegliere di attendere un po' lasciando che l'applicazione "
|
||||
"continui, oppure forzare la terminazione dell'applicazione."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forza uscita"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Attendi"
|
||||
|
||||
@ -688,12 +681,22 @@ msgstr "Stampa la versione"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Plugin Mutter da usare"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Spazio di lavoro %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#: 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/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Cambio modalità: modalità %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -702,22 +705,21 @@ msgstr ""
|
||||
"Il display «%s» ha già un window manager; provare a utilizzare l'opzione --"
|
||||
"replace per sostituirlo."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Inizializzazione GDK non riuscita\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, 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/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Lo schermo %d sul display «%s» non è valido\n"
|
||||
|
||||
#: 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/wayland/meta-wayland-tablet-pad.c:563
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Cambio modalità: modalità %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -725,7 +727,7 @@ msgstr ""
|
||||
"Queste finestre non supportano la funzione «salva impostazioni attuali» e "
|
||||
"dovranno essere riavviate manualmente al prossimo accesso."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (su %s)"
|
||||
|
117
po/ko.po
117
po/ko.po
@ -18,8 +18,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-06 04:14+0000\n"
|
||||
"PO-Revision-Date: 2018-02-24 16:14+0900\n"
|
||||
"POT-Creation-Date: 2018-08-24 11:54+0000\n"
|
||||
"PO-Revision-Date: 2018-08-25 12:08+0300\n"
|
||||
"Last-Translator: Gwan-gyeong Mun <elongbug@gmail.com>\n"
|
||||
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
|
||||
"Language: ko\n"
|
||||
@ -394,34 +394,29 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"실험적인 기능을 사용하려면, 해당 기능 키워드를 목록에 추가하십시오. 기능에 따"
|
||||
"라 컴포지터를 다시 시작해야 할 수도 있습니다. 실험적인 기능은 사용할 수 없을 "
|
||||
"수도 있고, 설정할 수 없을 수도 있습니다. 이 설정에 추가한 사항이 앞으로 버전"
|
||||
"에서도 동작할 거라고 기대하지 마십시오. 현재 가능한 값은: • “scale-monitor-"
|
||||
"framebuffer” — 머터에서 논리적인 모니터를 논리적인 픽셀 좌표계로 배치합니다. "
|
||||
"창의 내용의 크기를 조정하지 않고 모니터 프레임버퍼 크기를 조정합니다. 재시작"
|
||||
"은 필요하지 않습니다. • “remote-desktop” — 원격 데스크톱 기능을 사용합니다. "
|
||||
"원격 데스크톱을 화면 공유와 같이 사용하려면, “screen-cast” 설정도 켜져 있어"
|
||||
"야 합니다. • “screen-cast” — 화면 전송 기능을 사용합니다."
|
||||
"framebuffer” — 머터는 기본적으로 논리 픽셀 좌표 공간에서 논리 모니터를 배치하"
|
||||
"고, HiDPI 모니터를 관리하기 위해 윈도우 내용 대신 모니터 프레임버퍼를 스케일"
|
||||
"링합니다. 재시작은 필요하지 않습니다."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "탭 팝업에서 창 선택"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "탭 팝업 취소"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "모니터 설정 전환"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "내장된 모니터 설정을 돌아가면서 전환합니다"
|
||||
|
||||
@ -523,7 +518,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2260
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "모드 전환 (그룹 %d)"
|
||||
@ -531,30 +526,30 @@ msgstr "모드 전환 (그룹 %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2283
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "모니터 전환"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2285
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "화면 도움말 표시"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:886
|
||||
msgid "Built-in display"
|
||||
msgstr "내장 디스플레이"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:909
|
||||
msgid "Unknown"
|
||||
msgstr "알 수 없음"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:911
|
||||
msgid "Unknown Display"
|
||||
msgstr "알 수 없는 디스플레이"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:919
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -569,76 +564,75 @@ msgstr ""
|
||||
"다른 창 구성 관리 프로그램이 이미 디스플레이 “%2$s” 화면 %1$i번에서 실행 중입"
|
||||
"니다."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "삑소리 이벤트"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "X 윈도 시스템 디스플레이 “%s”을(를) 여는데 실패하였습니다\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "세션 관리자와 연결 하지 않습니다"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "실행 중인 창 관리자를 바꿉니다"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "세션 관리 ID를 지정합니다"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "사용할 X 디스플레이"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "저장 파일에서 세션을 초기화 합니다"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "동기 X 호출을 합니다"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "웨일랜드 컴포지터로 실행합니다"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "중첩 컴포지터로 실행합니다"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "웨일랜드 컴포지터를 X웨일랜드 시작없이 실행합니다"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "전체 디스플레이 서버로 실행, 중첩 컴포지터가 아님"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "X11 백 엔드로 실행 합니다"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” 창이 반응하지 않습니다."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "프로그램이 반응하지 않습니다."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
msgstr "좀 더 기다리거나 해당 프로그램을 강제로 끝낼 수 있습니다."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "강제로 끝내기(_F)"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "기다리기(_W)"
|
||||
|
||||
@ -665,12 +659,21 @@ msgstr "버전을 출력합니다"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "사용할 머터 플러그인"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1787
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "작업 공간 %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "머터가 자세한 모드 지원 없이 컴파일 되었습니다\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "모드 전환: 모드 %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -679,21 +682,21 @@ msgstr ""
|
||||
"디스플레이 “%s”에 이미 창 관리자가 있습니다. 현재 창 관리자를 바꾸려면 --"
|
||||
"replace 옵션을 써보십시오."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "GDK 초기화에 실패했습니다\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "X 윈도 시스템 디스플레이 “%s”을(를) 여는데 실패하였습니다\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "디스플레이 “%2$s”의 화면 %1$d은(는) 잘못되었습니다\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "머터가 자세한 모드 지원 없이 컴파일 되었습니다\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:563
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "모드 전환: 모드 %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -702,7 +705,7 @@ msgstr ""
|
||||
"로 다시 시작해야 합니다."
|
||||
|
||||
# <창제목> (on <기계>)
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (%s에서)"
|
||||
|
128
po/lt.po
128
po/lt.po
@ -12,8 +12,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: lt\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-03-01 18:57+0000\n"
|
||||
"PO-Revision-Date: 2018-03-03 13:37+0200\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-08-05 23:42+0300\n"
|
||||
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
|
||||
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
|
||||
"Language: lt\n"
|
||||
@ -389,6 +389,18 @@ msgid "Enable experimental features"
|
||||
msgstr "Įjungti eksperimentines savybes"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:108
|
||||
#| msgid ""
|
||||
#| "To enable experimental features, add the feature keyword to the list. "
|
||||
#| "Whether the feature requires restarting the compositor depends on the "
|
||||
#| "given feature. Any experimental feature is not required to still be "
|
||||
#| "available, or configurable. Don’t expect adding anything in this setting "
|
||||
#| "to be future proof. Currently possible keywords: • “scale-monitor-"
|
||||
#| "framebuffer” — makes mutter default to layout logical monitors in a "
|
||||
#| "logical pixel coordinate space, while scaling monitor framebuffers "
|
||||
#| "instead of window content, to manage HiDPI monitors. Does not require a "
|
||||
#| "restart. • “remote-desktop” — enables remote desktop support. To support "
|
||||
#| "remote desktop with screen sharing, “screen-cast” must also be enabled. • "
|
||||
#| "“screen-cast” — enables screen cast support."
|
||||
msgid ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
"Whether the feature requires restarting the compositor depends on the given "
|
||||
@ -397,37 +409,31 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Norėdami įjungti eksperimentines savybes, pridėkite į sąrašą raktinį žodį. "
|
||||
"Ar savybė reikalauja kompozitoriaus paleidimo iš naujo priklauso nuo "
|
||||
"konkrečios savybės. Nei viena eksperimentinė savybė privalo būti prieinama "
|
||||
"konkrečios savybės. Nei viena eksperimentinė savybė neprivalo būti prieinama "
|
||||
"ar konfigūruojama. Nesitikėkite, kad ką nors pridėjus į šį sąrašą, tai "
|
||||
"išliks ir ateityje. Šiuo metu galimi raktažodžiai: • „scale-monitor-"
|
||||
"framebuffer“ — mutter numatytai išdėsto loginius monitorius loginėje "
|
||||
"pikselių koordinačių erdvėje, tuo pat ištempiant monitorių kadrų buferius "
|
||||
"vietoje langų turinio, tokiu būdu valdant didelio tankio monitorius. "
|
||||
"Nereikalauja paleisti iš naujo. • „remote-desktop“ – įjungia nutolusio "
|
||||
"darbalaukio palaikymą. Norint nutolusio darbalaukio su dalinimusi ekranu, "
|
||||
"taip pat reikia įjungti „screen-cast“. • „screen-cast“ – įjungia ekrano "
|
||||
"transliacijos palaikymą."
|
||||
"Nereikalauja paleisti iš naujo."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Pasirinkti langą iš tab iššokimo"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Atšaukti tab iššokimą"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Perjungti monitorių konfigūracijas"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Suka integruotas monitorių konfigūracijas"
|
||||
|
||||
@ -548,22 +554,22 @@ msgstr "Perjungti monitorių"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Rodyti pagalbą ekrane"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Integruotas vaizduoklis"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Nežinomas"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Nežinomas vaizduoklis"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -576,76 +582,75 @@ msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr "Kita kompozicijos tvarkytuvė jau veikia ekrane %i vaizduoklyje „%s“."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Skambučio įvykis"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Nepavyko atverti X Window sistemos vaizduoklio „%s“\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Išjungti susijungimą su sesijos tvarkytuve"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Pakeisti veikiančią langų tvarkytuvę"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Nurodyti sesijos tvarkymo ID"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Naudotinas X ekranas"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inicializuoti sesiją iš išsaugojimo failo"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Sinchronizuoti X iškvietimus"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Vykdyti kaip wayland kompozitorių"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Vykdyti kaip įdėtinį kompozitorių"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Paleisti wayland kompozitorių nepaleidžiant Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Vykdyti kaip visą vaizduoklio serverį, o ne įdėtinį"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Paleisti su X11 realizacija"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "%s neatsiliepia į komandas."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Programa neatsiliepia į komandas."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
msgstr "Galite šiek tiek palaukti arba priverstinai uždaryti programą."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Priverstinai išeiti"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Laukti"
|
||||
|
||||
@ -673,25 +678,11 @@ msgstr "Parodyti versiją"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Naudojamas Mutter įskiepis"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Darbo sritis %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Vaizduoklis „%s“ jau turi langų tvarkytuvę; pabandykite pakeisti esamą langų "
|
||||
"tvarkytuvę, naudodami parametrą --replace."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Ekranas %d vaizduoklyje „%s“ yra netinkamas\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter buvo sukompiliuota be išsamaus veikimo veiksenos\n"
|
||||
@ -701,7 +692,30 @@ msgstr "Mutter buvo sukompiliuota be išsamaus veikimo veiksenos\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Veiksenos perjungimas: veiksena %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Vaizduoklis „%s“ jau turi langų tvarkytuvę; pabandykite pakeisti esamą langų "
|
||||
"tvarkytuvę, naudodami parametrą --replace."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Nepavyko inicializuoti GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Nepavyko atverti X Window sistemos vaizduoklio „%s“\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Ekranas %d vaizduoklyje „%s“ yra netinkamas\n"
|
||||
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -709,7 +723,7 @@ msgstr ""
|
||||
"Šie langai nepalaiko „išsaugoti esamus nustatymus“ komandos ir, kai kitą "
|
||||
"kartą prisijungsite, turės būti paleisti rankiniu būdu."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (kompiuteryje %s)"
|
||||
|
116
po/pl.po
116
po/pl.po
@ -13,8 +13,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-06 04:14+0000\n"
|
||||
"PO-Revision-Date: 2018-02-08 02:05+0100\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-08-04 20:08+0200\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish <community-poland@mozilla.org>\n"
|
||||
"Language: pl\n"
|
||||
@ -405,10 +405,7 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Aby włączyć eksperymentalne funkcje, należy dodać słowo kluczowe funkcji do "
|
||||
"tej listy. Niektóre funkcje wymagają ponownego uruchomienia menedżera okien. "
|
||||
@ -417,24 +414,21 @@ msgstr ""
|
||||
"„scale-monitor-framebuffer” — sprawia, że menedżer okien do zarządzania "
|
||||
"monitorami o wysokiej rozdzielczości domyślnie układa logiczne monitory "
|
||||
"w przestrzeni współrzędnych logicznych pikseli, jednocześnie skalując bufory "
|
||||
"ramki monitorów zamiast zawartości okien. Nie wymaga ponownego uruchomienia. "
|
||||
"• „remote-desktop” — włącza obsługę zdalnego pulpitu. Aby dodać "
|
||||
"udostępnianie ekranu, należy włączyć także opcję „screen-cast”. • „screen-"
|
||||
"cast” — włącza obsługę nagrywania ekranu."
|
||||
"ramki monitorów zamiast zawartości okien. Nie wymaga ponownego uruchomienia."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Wybór okna z wyskakującego okna dla tabulacji"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Anulowanie wyskakującego okna dla tabulacji"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Przełączenie konfiguracji monitorów"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Obrócenie wbudowanego monitora"
|
||||
|
||||
@ -538,7 +532,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2260
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Przełącznik trybu (%d. grupa)"
|
||||
@ -546,30 +540,30 @@ msgstr "Przełącznik trybu (%d. grupa)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2283
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "Przełączenie monitora"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2285
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Ekran pomocy"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Wbudowany ekran"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Nieznany"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Nieznany ekran"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -583,76 +577,75 @@ msgid ""
|
||||
msgstr ""
|
||||
"Inny menedżer składania jest już uruchomiony na podekranie %i ekranu „%s”."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Zdarzenie sygnału dźwiękowego"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Otwarcie połączenia z ekranem „%s” systemu X Window się nie powiodło\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Rozłącza połączenie z menedżerem sesji"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Zastępuje uruchomionego menedżera okien"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Podaje identyfikator zarządzania sesją"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Używany ekran X"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inicjuje sesję z zapisanego pliku"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Synchroniczne wywołania X"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Uruchamia jako menedżer składania Wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Uruchamia jako osadzony menedżer składania"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Uruchamia menedżer składania Wayland bez uruchamiania Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Uruchamia jako pełny serwer wyświetlania zamiast osadzonego"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Uruchamia za pomocą mechanizmu X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "Okno „%s” nie odpowiada."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Program nie odpowiada."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
msgstr "Można poczekać chwilę dłużej lub wymusić zakończenie programu."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Zakończ"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Czekaj"
|
||||
|
||||
@ -680,12 +673,22 @@ msgstr "Wyświetla wersję"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Używana wtyczka menedżera Mutter"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "%d. obszar roboczy"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr ""
|
||||
"Menedżer Mutter został skompilowany bez obsługi trybu z obszerną informacją\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Przełącznik trybu: %d. tryb"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -694,22 +697,21 @@ msgstr ""
|
||||
"Na ekranie „%s” działa już menedżer okien. Aby zastąpić działającego "
|
||||
"menedżera okien, należy użyć opcji „--replace”."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Zainicjowanie biblioteki GDK się nie powiodło\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Otwarcie połączenia z ekranem „%s” systemu X Window się nie powiodło\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Podekran %d ekranu „%s” jest nieprawidłowy\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr ""
|
||||
"Menedżer Mutter został skompilowany bez obsługi trybu z obszerną informacją\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:563
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Przełącznik trybu: %d. tryb"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -717,7 +719,7 @@ msgstr ""
|
||||
"Te okna nie obsługują opcji zapisu obecnego stanu („save current setup”), "
|
||||
"więc przy następnym zalogowaniu będą musiały zostać uruchomione ręcznie."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (na %s)"
|
||||
|
154
po/pt_BR.po
154
po/pt_BR.po
@ -20,8 +20,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-06 04:14+0000\n"
|
||||
"PO-Revision-Date: 2018-02-16 15:02-0200\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-08-28 19:59-0200\n"
|
||||
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
|
||||
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
@ -405,6 +405,18 @@ msgid "Enable experimental features"
|
||||
msgstr "Habilitar recursos experimentais"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:108
|
||||
#| msgid ""
|
||||
#| "To enable experimental features, add the feature keyword to the list. "
|
||||
#| "Whether the feature requires restarting the compositor depends on the "
|
||||
#| "given feature. Any experimental feature is not required to still be "
|
||||
#| "available, or configurable. Don’t expect adding anything in this setting "
|
||||
#| "to be future proof. Currently possible keywords: • “scale-monitor-"
|
||||
#| "framebuffer” — makes mutter default to layout logical monitors in a "
|
||||
#| "logical pixel coordinate space, while scaling monitor framebuffers "
|
||||
#| "instead of window content, to manage HiDPI monitors. Does not require a "
|
||||
#| "restart. • “remote-desktop” — enables remote desktop support. To support "
|
||||
#| "remote desktop with screen sharing, “screen-cast” must also be enabled. • "
|
||||
#| "“screen-cast” — enables screen cast support."
|
||||
msgid ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
"Whether the feature requires restarting the compositor depends on the given "
|
||||
@ -413,10 +425,7 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Para habilitar recursos experimentais, adicione a palavra-chave do recurso à "
|
||||
"lista. Se o recurso exige ou não reiniciar o compositor, depende do recurso "
|
||||
@ -426,24 +435,21 @@ msgstr ""
|
||||
"framebuffer” — torna o mutter padrão para a disposição de monitores lógicos "
|
||||
"em um espaço lógico coordenado por pixels, ao dimensionar buffers de quadros "
|
||||
"de monitor em vez de conteúdo de janela, para gerenciar monitores HiDPI. Não "
|
||||
"exige uma reinicialização. • “remote-desktop” — habilita suporte remoto. "
|
||||
"Para oferecer suporte a desktop remoto com compartilhamento de tela, “screen-"
|
||||
"cast” também deve estar habilitado. • “screen-cast” — habilita suporte a "
|
||||
"gravação de tela."
|
||||
"exige uma reinicialização."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Selecione a janela a partir da aba instantânea"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Cancelar aba instantânea"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Trocar configurações de monitor"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Gira a configuração de monitor embutido"
|
||||
|
||||
@ -540,15 +546,15 @@ msgstr ""
|
||||
"usando o comando “xprop WM_CLASS”. Há suporte a curingas “*” e “?” nos "
|
||||
"valores. Os valores que começam com “!” são colocados em uma lista negra, "
|
||||
"que tem precedência sobre a lista branca, para revogar aplicativos da lista "
|
||||
"padrão do sistema. A lista de sistema padrão inclui os seguintes "
|
||||
"aplicativos: “@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@”. Os usuários podem "
|
||||
"quebrar uma captura existente usando o atalho de teclado específico definido "
|
||||
"pela chave de associação de tecla “restore-shortcuts”."
|
||||
"padrão do sistema. A lista de sistema padrão inclui os seguintes aplicativos:"
|
||||
" “@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@”. Os usuários podem quebrar uma "
|
||||
"captura existente usando o atalho de teclado específico definido pela chave "
|
||||
"de associação de tecla “restore-shortcuts”."
|
||||
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2260
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Alternador de modo (Grupo %d)"
|
||||
@ -556,30 +562,30 @@ msgstr "Alternador de modo (Grupo %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2283
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "Trocar monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2285
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Mostrar ajuda na tela"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Tela embutida"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Desconhecido"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Monitor desconhecido"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s de %s"
|
||||
@ -592,66 +598,65 @@ msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr "Outro compositor de janelas está em execução na tela %i na área “%s”."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Evento de som"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Falha ao abrir a exibição “%s” do sistema de janelas X\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Desabilitar a conexão com o gerenciador de sessões"
|
||||
msgstr "Desabilita a conexão com o gerenciador de sessões"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Substituir o gerenciador de janelas em execução"
|
||||
msgstr "Substitui o gerenciador de janelas em execução"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Especificar o ID do gerenciador de sessões"
|
||||
msgstr "Especifica o ID do gerenciador de sessões"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Exibição do X a ser utilizada"
|
||||
msgstr "Display X a ser usado"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inicializar a sessão a partir do arquivo salvo"
|
||||
msgstr "Inicializa a sessão a partir do arquivo salvo"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Fazer X chamadas síncronas"
|
||||
msgstr "Faz X chamadas síncronas"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Executar como um compositor wayland"
|
||||
msgstr "Executa como um compositor wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Executar como um compositor aninhado"
|
||||
msgstr "Executa como um compositor aninhado"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Executa o compositor wayland sem iniciar o Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Executar como um servidor de tela cheia, ao invés de aninhado"
|
||||
msgstr "Executa como um servidor de tela cheia, ao invés de aninhado"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Executar com backend X11"
|
||||
msgstr "Executa com backend X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” não está respondendo."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "O aplicativo não está respondendo."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -659,11 +664,11 @@ msgstr ""
|
||||
"Você pode escolher aguardar um pouco e continuar ou forçar o aplicativo a "
|
||||
"sair completamente."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forçar sair"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Esperar"
|
||||
|
||||
@ -691,12 +696,21 @@ msgstr "Versão impressa"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Plug-in do Mutter para usar"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Espaço de trabalho %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "O Mutter foi compilado sem suporte para modo detalhado\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Alternador de modo: Modo %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -705,21 +719,21 @@ msgstr ""
|
||||
"A exibição “%s” já possui um gerenciador de janelas; tente usar a opção --"
|
||||
"replace para substituir o gerenciador de janelas atual."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Falha ao inicializar GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Falha ao abrir a exibição “%s” do sistema de janelas X\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "A tela %d na exibição “%s” é inválida\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "O Mutter foi compilado sem suporte para modo detalhado\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:563
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Alternador de modo: Modo %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -727,7 +741,7 @@ msgstr ""
|
||||
"Estas janelas não oferecem suporte para a opção “salvar configuração atual” "
|
||||
"e precisarão ser reiniciadas manualmente quando você reiniciar a sessão."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (em %s)"
|
||||
|
123
po/ro.po
123
po/ro.po
@ -9,9 +9,10 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.HEAD.ro\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-04-26 07:32+0000\n"
|
||||
"PO-Revision-Date: 2018-04-30 07:54+0200\n"
|
||||
"Last-Translator: Daniel Șerbănescu <daniel [at] serbanescu [dot] dk>\n"
|
||||
"POT-Creation-Date: 2018-07-13 13:37+0000\n"
|
||||
"PO-Revision-Date: 2018-07-17 18:56+0300\n"
|
||||
"Last-Translator: Florentina Mușat <florentina.musat.28 [at] gmail [dot] "
|
||||
"com>\n"
|
||||
"Language-Team: Gnome Romanian Translation Team\n"
|
||||
"Language: ro\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -19,7 +20,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
|
||||
"20)) ? 1 : 2);;\n"
|
||||
"X-Generator: Virtaal 0.7.1\n"
|
||||
"X-Generator: Poedit 2.0.9\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
@ -402,38 +403,32 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Pentru a activa funcționalitățile experimentale, adăugați cuvântul cheie al "
|
||||
"funcționalității la listă. Dacă funcționalitatea necesită sau nu repornirea "
|
||||
"compunătorului depinde de funcționalitatea dată. Nu este necesar ca "
|
||||
"funcționalitatea experimentală să fie încă disponibilă, sau configurabilă. "
|
||||
"Nu vă așteptați să adăugați ceva la această configurare care va rezista "
|
||||
"timpului. Cuvintele cheie posibile în mod curent: • “scale-monitor-"
|
||||
"timpului. Cuvintele cheie posibile în mod curent: • „scale-monitor-"
|
||||
"framebuffer” — face ca mutter să treacă implicit la aranjarea monitoarelor "
|
||||
"logice într-un spațiu logic de coordonate pixel, în timpul scalării de "
|
||||
"framebuffer-uri de monitor în locul conținutului ferestrei, pentru a "
|
||||
"gestiona monitoare HiDPI. Nu necesită o repornire. • “remote-desktop” — "
|
||||
"activează suportul pentru desktop la distanță. Pentru a suporta desktop la "
|
||||
"distanță cu partajarea ecranului, trebuie să fie activat și „screen-cast”. • "
|
||||
"“screen-cast” — activează suportul pentru înregistrarea ecranului."
|
||||
"gestiona monitoare HiDPI. Nu necesită o repornire."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Selectează fereastra din popup-ul tabului"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Elimină popup-ul pentru tab"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Comută configurațiile de monitor"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Rotește configurarea de monitor integrat"
|
||||
|
||||
@ -555,22 +550,22 @@ msgstr "Comută monitorul"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Arată ajutorul virtual"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:903
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Afișaj integrat"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:926
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Necunoscut"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:928
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Afișaj necunoscut"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:936
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -585,66 +580,65 @@ msgstr ""
|
||||
"Un alt administrator de ferestre de compunere rulează deja pe ecranul %i pe "
|
||||
"afișajul „%s”."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Eveniment sonor"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Nu s-a putut deschide afișajul sistemului de ferestre X „%s”\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Dezactivează conexiunea la administratorul de sesiune"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Înlocuiește administratorul de ferestre curent"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specifică ID-ul administrării de sesiune"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Ecranul X ce va fi folosit"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inițializează sesiunea din fișierul salvat"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Realizează apelurile X sincron"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Rulează ca un compunător wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Rulează ca un compunător imbricat"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Rulează compunătorul wayland fără a porni Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Rulează ca server de afișare și nu ca server imbricat"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Rulează cu backend X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "„%s” nu răspunde."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Aplicația nu răspunde."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -652,11 +646,11 @@ msgstr ""
|
||||
"Puteți alege între a aștepta pentru câteva secunde ca aplicația să continue "
|
||||
"sau a forța terminarea aplicației."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forțează închiderea"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Așteaptă"
|
||||
|
||||
@ -684,26 +678,11 @@ msgstr "Afișează versiunea"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Modul Mutter de utilizat"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Spațiu de lucru %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Afișajul „%s” are deja un administrator de ferestre; încercați să utilizați "
|
||||
"opțiunea --replace (înlocuiește) pentru a înlocui administratorul de "
|
||||
"ferestre curent."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Ecranul %d de pe afișajul „%s” nu este valid\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter a fost compilat fără suport pentru modul detaliat\n"
|
||||
@ -713,7 +692,31 @@ msgstr "Mutter a fost compilat fără suport pentru modul detaliat\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Comutator de mod: modul %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Afișajul „%s” are deja un administrator de ferestre; încercați să utilizați "
|
||||
"opțiunea --replace (înlocuiește) pentru a înlocui administratorul de "
|
||||
"ferestre curent."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Nu s-a putut inițializa GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Nu s-a putut deschide afișajul sistemului de ferestre X „%s”\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Ecranul %d de pe afișajul „%s” nu este valid\n"
|
||||
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -721,7 +724,7 @@ msgstr ""
|
||||
"Aceste ferestre nu suportă „salvează configurarea curentă” și vor trebui "
|
||||
"repornite manual următoarea dată când vă veți autentifica."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (pe %s)"
|
||||
|
118
po/sl.po
118
po/sl.po
@ -10,8 +10,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-04-03 20:43+0000\n"
|
||||
"PO-Revision-Date: 2018-04-09 20:28+0200\n"
|
||||
"POT-Creation-Date: 2018-08-03 10:14+0000\n"
|
||||
"PO-Revision-Date: 2018-08-03 17:00+0200\n"
|
||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
|
||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
|
||||
"Language: sl_SI\n"
|
||||
@ -395,35 +395,29 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Za omogočanje preizkusnih možnosti, dodajte na seznam ključne besedo "
|
||||
"možnosti. Ali vpisana možnost zahteva ponovni zagon sestavljalnika, je "
|
||||
"Za omogočanje preizkusnih možnosti je treba dodati ključne besede na seznam "
|
||||
"ključev. Ali vpisana možnost zahteva ponovni zagon sestavljalnika, je "
|
||||
"odvisno od posamezne možnosti. Te možnosti niso zahtevane niti nastavljive. "
|
||||
"Trenutno so na voljo ključne besede: • »scale-monitor-framebuffer« – določi "
|
||||
"privzeto rabo sistema mutter za logične zaslone v logičnem točkovnem "
|
||||
"koordinatnem prostoru, pri čemer prilagaja predpomnilnik in ne vsebine za "
|
||||
"upravljanje z zasloni HiDPI. Možnost ne zahteva ponovnega zagona. • »remote-"
|
||||
"desktop« – omogoči podporo oddaljenim namizjem. Za souporabo zaslona mora "
|
||||
"biti omogočena tudi možnost »screen-cast«. • »screen-cast« – omogoči podporo "
|
||||
"objavljanja na zaslon."
|
||||
"upravljanje z zasloni HiDPI. Možnost ne zahteva ponovnega zagona."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Izbor okna iz pojavnega zavihka"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Prekliči pojavni zavihek"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Nastavitve nadzornika preklopa"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Zavrti vgrajene nastavitve zaslona"
|
||||
|
||||
@ -542,22 +536,22 @@ msgstr "Nadzornik preklopa"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Pokaži zaslonsko pomoč"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:886
|
||||
msgid "Built-in display"
|
||||
msgstr "Vgrajen zaslon"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:909
|
||||
msgid "Unknown"
|
||||
msgstr "Neznano"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:911
|
||||
msgid "Unknown Display"
|
||||
msgstr "Neznan zaslon"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:919
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -571,66 +565,65 @@ msgid ""
|
||||
msgstr ""
|
||||
"Drug upravljalnik sestavljanja je že zagnan na zaslonu %i prikaza »%s«."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Dogodek zvonjenja"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Odpiranje zaslona »%s« okenskega sistema X je spodletelo\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Onemogoči povezavo z upravljalnikom sej"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Zamenjaj trenutni upravljalnik oken"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Navedite ID upravljanja seje"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Zaslon X za uporabo"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Začni sejo iz shranjene datoteke"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Uskladi klice X"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Zaženi izbirnik wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Zaženi kot gnezden vpisovalnik"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Zaženi sestavljalnik wayland brez zagona okolja Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Zaženi kot polni strežnik zaslona in ne vstavljeno"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Zaženi z zaledjem X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "Okno »%s« se ne odziva."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Program se ne odziva."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -638,11 +631,11 @@ msgstr ""
|
||||
"Lahko še malo počakate, če program morda spet začne delovati, ali pa vsilite "
|
||||
"končanje delovanja."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Vsili konec"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Počakaj"
|
||||
|
||||
@ -669,25 +662,11 @@ msgid "Mutter plugin to use"
|
||||
msgstr "Vstavek Mutter za uporabo"
|
||||
|
||||
# G:1 K:0 O:0
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1787
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Delovna površina %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Zaslon »%s« že ima določen upravljalnik oken; poskušajte uporabiti možnost --"
|
||||
"replace za zamenjavo trenutnega upravljalnika zaslona."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Zaslon %d na prikazu »%s« ni veljaven\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr ""
|
||||
@ -698,8 +677,31 @@ msgstr ""
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Način preklopa: način %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Zaslon »%s« že ima določen upravljalnik oken; poskušajte uporabiti možnost --"
|
||||
"replace za zamenjavo trenutnega upravljalnika zaslona."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Začenjanje okolja GDK je spodletelo\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Odpiranje zaslona »%s« okenskega sistema X je spodletelo\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Zaslon %d na prikazu »%s« ni veljaven\n"
|
||||
|
||||
# G:2 K:6 O:0
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -707,7 +709,7 @@ msgstr ""
|
||||
"Ta okna ne podpirajo možnosti »shranjevanja trenutnih nastavitev«, zato jih "
|
||||
"bo treba ob naslednji prijavi zagnati ročno."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (na %s)"
|
||||
|
116
po/sv.po
116
po/sv.po
@ -10,15 +10,15 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-20 20:33+0000\n"
|
||||
"PO-Revision-Date: 2018-02-22 15:54+0100\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-08-28 00:39+0200\n"
|
||||
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
|
||||
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
|
||||
"Language: sv\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"X-Generator: Poedit 2.1.1\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -393,10 +393,7 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"För att aktivera experimentella funktioner, lägg till funktionens nyckelord "
|
||||
"till listan. Huruvida funktionen kräver att kompositionshanteraren startas "
|
||||
@ -407,24 +404,21 @@ msgstr ""
|
||||
"framebuffer” — gör så att mutter som standard använder en layout med logiska "
|
||||
"skärmar i en rymd av logiska bildpunktskoordinater, medan skärmars "
|
||||
"rambuffert skalas i stället för fönsterinnehållet, för att hantera HiDPI-"
|
||||
"skärmar. Kräver inte en omstart. • ”remote-desktop” — aktiverar stöd för "
|
||||
"fjärrskrivbord. För stöd för fjärrskrivbord med skärmdelning måste “screen-"
|
||||
"cast” också vara aktiverat. • “screen-cast” — aktiverar stöd för "
|
||||
"skärminspelning."
|
||||
"skärmar. Kräver inte en omstart."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Välj fönster från flik-popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Avbryt flik-popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Växla skärmkonfiguration"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Roterar den inbyggda skärmkonfigurationen"
|
||||
|
||||
@ -545,22 +539,22 @@ msgstr "Växla skärm"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Visa hjälp på skärmen"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Inbyggd display"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Okänd"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Okänd display"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -573,66 +567,65 @@ msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr "En annan kompositionshanterare körs redan på skärm %i på display ”%s”."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Ljudsignalhändelse"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Misslyckades med att öppna X Window System-displayen ”%s”\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Inaktivera anslutning till sessionshanteraren"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Ersätt körande fönsterhanteraren"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Ange sessionshanteringsid"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "X-display att använda"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Initiera session från sparandefil"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Gör X-anrop synkrona"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Kör som en wayland-kompositionshanterare"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Kör som en nästlad kompositionshanterare"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Kör wayland-kompositionshanteraren utan att starta Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Kör som en full display-tjänst, i stället för nästlad"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Kör med X11-gränssnitt"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "”%s” svarar inte."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Programmet svarar inte."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -640,11 +633,11 @@ msgstr ""
|
||||
"Du kan välja att vänta en kort stund på det för att fortsätta eller tvinga "
|
||||
"programmet att helt avslutas."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Tvinga avslut"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Vänta"
|
||||
|
||||
@ -671,25 +664,11 @@ msgstr "Skriv ut version"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Mutter-insticksmodul att använda"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Arbetsyta %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Display ”%s” har redan en fönsterhanterare; försök med flaggan --replace för "
|
||||
"att ersätta den aktuella fönsterhanteraren."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Skärm %d på display ”%s” är ogiltig\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter kompilerades utan stöd för utförligt läge\n"
|
||||
@ -699,7 +678,30 @@ msgstr "Mutter kompilerades utan stöd för utförligt läge\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Lägesväxel: Läge %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Display ”%s” har redan en fönsterhanterare; försök med flaggan --replace för "
|
||||
"att ersätta den aktuella fönsterhanteraren."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Misslyckades med att initiera GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Misslyckades med att öppna X Window System-displayen ”%s”\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Skärm %d på display ”%s” är ogiltig\n"
|
||||
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -707,7 +709,7 @@ msgstr ""
|
||||
"Dessa fönster saknar stöd för ”spara nuvarande inställningar” och kommer att "
|
||||
"behöva startas om manuellt nästa gång du loggar in."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (på %s)"
|
||||
|
148
po/tr.po
148
po/tr.po
@ -14,8 +14,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-06 04:14+0000\n"
|
||||
"PO-Revision-Date: 2018-03-13 10:53+0300\n"
|
||||
"POT-Creation-Date: 2018-07-07 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-08-08 10:19+0300\n"
|
||||
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
|
||||
"Language-Team: Türkçe <gnome-turk@gnome.org>\n"
|
||||
"Language: tr\n"
|
||||
@ -289,7 +289,7 @@ msgstr ""
|
||||
#: data/org.gnome.mutter.gschema.xml.in:30
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr ""
|
||||
"Pencereler ekran kenarlarında bırakıldığında kenar döşemeyi etkinleştir."
|
||||
"Pencereler ekran kenarlarında bırakıldığında kenar döşemeyi etkinleştir"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:31
|
||||
msgid ""
|
||||
@ -396,6 +396,18 @@ msgid "Enable experimental features"
|
||||
msgstr "Deneysel özellikleri etkinleştir"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:108
|
||||
#| msgid ""
|
||||
#| "To enable experimental features, add the feature keyword to the list. "
|
||||
#| "Whether the feature requires restarting the compositor depends on the "
|
||||
#| "given feature. Any experimental feature is not required to still be "
|
||||
#| "available, or configurable. Don’t expect adding anything in this setting "
|
||||
#| "to be future proof. Currently possible keywords: • “scale-monitor-"
|
||||
#| "framebuffer” — makes mutter default to layout logical monitors in a "
|
||||
#| "logical pixel coordinate space, while scaling monitor framebuffers "
|
||||
#| "instead of window content, to manage HiDPI monitors. Does not require a "
|
||||
#| "restart. • “remote-desktop” — enables remote desktop support. To support "
|
||||
#| "remote desktop with screen sharing, “screen-cast” must also be enabled. • "
|
||||
#| "“screen-cast” — enables screen cast support."
|
||||
msgid ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
"Whether the feature requires restarting the compositor depends on the given "
|
||||
@ -404,42 +416,32 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"Deneysel özellikleri etkinleştirmek için özelliğin anahtar sözcüğünü listeye "
|
||||
"ekleyin. Özelliğin yeniden başlatmayı gerektirip gerektirmeyeceği verilen "
|
||||
"özelliğe bağlıdır. Hiçbir deneysel özellik hala kullanılabilir veya "
|
||||
"yapılandırılabilir olmak zorunda değildir. Bu ayara eklenecek herhangi bir "
|
||||
"şeyin gelecekte olabilecek değişikliklerden etkilenmeyeceğini düşünmeyin. Şu "
|
||||
"anda kullanılabilir anahtar sözcükler: • “monitor-config-manager” — "
|
||||
"eskisinin yerini alması amaçlanan yeni monitör yapılandırma sistemini "
|
||||
"kullan. Bu, yapılandırma uygulamaları tarafından kullanılmak üzere daha "
|
||||
"yüksek düzeyde bir yapılandırma API’sini etkinleştirir ve ayrıca mantıksal "
|
||||
"monitör ölçeğinde yapılandırma yapmaya olanak tanır.• “scale-monitor-"
|
||||
"framebuffer” — mutter’in HiDPI monitörleri yönetmesi için pencere içeriği "
|
||||
"yerine monitör çerçeve arabelleğini ölçeklendirirken, mantıksal monitörleri "
|
||||
"mantıksal piksel koordinat aralığına yerleştirmesini öntanımlı yapar. "
|
||||
"Yeniden başlatma gerektirmez. • “remote-desktop” — uzak masaüstü desteğini "
|
||||
"etkinleştirir. Uzak masaüstünü ekran paylaşmayla desteklemek için “screen-"
|
||||
"cast” mutlaka etkinleştirilmelidir. • “screen-cast” — ekran kaydı desteğini "
|
||||
"etkinleştirir."
|
||||
"anda kullanılabilir anahtar sözcükler: • “scale-monitor-framebuffer” — "
|
||||
"mutter’in HiDPI monitörleri yönetmesi için pencere içeriği yerine monitör "
|
||||
"çerçeve arabelleğini ölçeklendirirken, mantıksal monitörleri mantıksal "
|
||||
"piksel koordinat aralığına yerleştirmesini öntanımlı yapar. Yeniden başlatma "
|
||||
"gerektirmez."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Pencereyi, sekme açılır penceresinden seç"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Sekmeyi yeni pencerede açmayı iptal et"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Monitör yapılandırmaları arasında geçiş yap"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Yerleşik monitör yapılandırmaları arasında geçiş yapar"
|
||||
|
||||
@ -560,22 +562,22 @@ msgstr "Monitör değiştir"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Ekranda yardımı göster"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
msgid "Built-in display"
|
||||
msgstr "Yerleşik ekran"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
msgid "Unknown"
|
||||
msgstr "Bilinmiyor"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
msgid "Unknown Display"
|
||||
msgstr "Bilinmeyen Ekran"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:940
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -590,66 +592,65 @@ msgstr ""
|
||||
"“%2$s” monitöründeki %1$i ekranında zaten başka bir birleştirme yöneticisi "
|
||||
"çalışıyor."
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "Etkinlik zili"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "X Pencere Sistemi “%s” ekranı açılamadı\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Ortam yöneticisine olan bağlantıyı kapat"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Çalışan pencere yöneticisinin yerini al"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Ortam yönetim ID’sini belirt"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "Kullanılacak X Ekranı"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Ortamı kayıtlı dosyadan başlat"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "X çağrılarını eşazamanlı yap"
|
||||
msgstr "X çağrılarını eşzamanlı yap"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Bir wayland dizgicisi olarak çalıştır"
|
||||
msgstr "Wayland dizgici olarak çalıştır"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Yuvalanmış dizgici olarak çalıştır"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Xwayland’i çalıştırmadan Wayland dizgici çalıştır"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "İç içe değil tam ekran sunucusu olarak çalıştır"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "X11 arkayüzüyle çalıştır"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” yanıt vermiyor."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "Uygulama yanıt vermiyor"
|
||||
msgstr "Uygulama yanıt vermiyor."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -657,11 +658,11 @@ msgstr ""
|
||||
"Uygulamanın devam etmesi için bir süre beklemeyi seçebilir veya tümüyle "
|
||||
"çıkması için zorlayabilirsiniz."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Zorla Çık"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "_Bekle"
|
||||
|
||||
@ -688,26 +689,11 @@ msgstr "Sürümü yazdır"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Kullanılacak Mutter eklentisi"
|
||||
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1915
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Çalışma Alanı %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"“%s” ekranı zaten bir pencere yöneticisine sahip; geçerli pencere "
|
||||
"yöneticisinin yerine bir başkasını koymak için --replace seçeneğini "
|
||||
"kullanmayı deneyin."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "“%2$s” monitöründeki %1$d ekranı geçersiz\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter, ayrıntılı kip desteği olmadan derlenmiş\n"
|
||||
@ -717,7 +703,31 @@ msgstr "Mutter, ayrıntılı kip desteği olmadan derlenmiş\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Kip Anahtarı: Kip %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"“%s” ekranı zaten bir pencere yöneticisine sahip; geçerli pencere "
|
||||
"yöneticisinin yerine bir başkasını koymak için --replace seçeneğini "
|
||||
"kullanmayı deneyin."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "GDK ilklendirilemedi\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "X Pencere Sistemi “%s” ekranı açılamadı\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "“%2$s” monitöründeki %1$d ekranı geçersiz\n"
|
||||
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -725,7 +735,7 @@ msgstr ""
|
||||
"Bu pencereler, “geçerli ayarları kaydet” özelliğini desteklemiyor ve bir "
|
||||
"dahaki girişinizde elle yeniden başlatılmak zorundadır."
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (%s üzerinde)"
|
||||
|
100
po/zh_TW.po
100
po/zh_TW.po
@ -9,16 +9,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity 3.3.4\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-06-07 13:00+0000\n"
|
||||
"PO-Revision-Date: 2018-06-09 11:26+0800\n"
|
||||
"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
|
||||
"POT-Creation-Date: 2018-08-06 14:19+0000\n"
|
||||
"PO-Revision-Date: 2018-08-12 16:35+0800\n"
|
||||
"Last-Translator: pan93412 <pan93412@gmail.com>\n"
|
||||
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
|
||||
"Language: zh_TW\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 2.0.8\n"
|
||||
"X-Generator: Poedit 1.8.4\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -515,22 +515,22 @@ msgstr "切換螢幕"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "顯示螢幕求助"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:903
|
||||
#: src/backends/meta-monitor-manager.c:886
|
||||
msgid "Built-in display"
|
||||
msgstr "內建顯示"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:926
|
||||
#: src/backends/meta-monitor-manager.c:909
|
||||
msgid "Unknown"
|
||||
msgstr "不明"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:928
|
||||
#: src/backends/meta-monitor-manager.c:911
|
||||
msgid "Unknown Display"
|
||||
msgstr "不明的顯示器"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:936
|
||||
#: src/backends/meta-monitor-manager.c:919
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@ -544,76 +544,75 @@ msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr "在畫面「%2$s」中的第 %1$i 個螢幕中已啟動另一個組合視窗管理員。"
|
||||
|
||||
#: src/core/bell.c:194
|
||||
#: src/core/bell.c:254
|
||||
msgid "Bell event"
|
||||
msgstr "響鈴事件"
|
||||
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "無法開啟 X Window 系統畫面「%s」\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
#: src/core/main.c:191
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "停用到作業階段管理員的連線"
|
||||
|
||||
#: src/core/main.c:196
|
||||
#: src/core/main.c:197
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "取代執行中的視窗管理員"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "Specify session management ID"
|
||||
msgstr "指定作業階段管理 ID"
|
||||
|
||||
#: src/core/main.c:207
|
||||
#: src/core/main.c:208
|
||||
msgid "X Display to use"
|
||||
msgstr "使用的 X 畫面"
|
||||
|
||||
#: src/core/main.c:213
|
||||
#: src/core/main.c:214
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "以 savefile 初始化作業階段"
|
||||
|
||||
#: src/core/main.c:219
|
||||
#: src/core/main.c:220
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "使用同步方式調用 X 函式"
|
||||
|
||||
#: src/core/main.c:226
|
||||
#: src/core/main.c:227
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "以 wayland 組合器執行"
|
||||
|
||||
#: src/core/main.c:232
|
||||
#: src/core/main.c:233
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "以巢狀組合器執行"
|
||||
|
||||
#: src/core/main.c:240
|
||||
#: src/core/main.c:239
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "在不啟動 Xwayland 的情況下開啟 Wayland 合成器"
|
||||
|
||||
#: src/core/main.c:247
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "以完全顯示伺服器執行,而非巢狀"
|
||||
|
||||
#: src/core/main.c:246
|
||||
#: src/core/main.c:253
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "透過 X11 後端執行"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "「%s」沒有回應。"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
msgid "Application is not responding."
|
||||
msgstr "應用程式沒有回應。"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
msgstr "您可以選擇稍等一下讓它繼續,或者強制完全退出程式。"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Force Quit"
|
||||
msgstr "強制退出(_F)"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
msgid "_Wait"
|
||||
msgstr "等待(_W)"
|
||||
|
||||
@ -640,25 +639,11 @@ msgid "Mutter plugin to use"
|
||||
msgstr "要使用的 Mutter 外掛程式"
|
||||
|
||||
# (Abel) take care of the same string in libwnck
|
||||
#: src/core/prefs.c:1997
|
||||
#: src/core/prefs.c:1787
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "工作區 %d"
|
||||
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"畫面「%s」已經有了視窗管理員;請嘗試使用 --replace 選項來替換目前的視窗管理"
|
||||
"員。"
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "畫面「%2$s」中的第 %1$d 個螢幕無效\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "編譯 Mutter 時並沒有加入詳細偵錯模式的支援\n"
|
||||
@ -668,13 +653,36 @@ msgstr "編譯 Mutter 時並沒有加入詳細偵錯模式的支援\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "模式切換:模式 %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"畫面「%s」已經有了視窗管理員;請嘗試使用 --replace 選項來替換目前的視窗管理"
|
||||
"員。"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "無法初始化 GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "無法開啟 X Window 系統畫面「%s」\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1117
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "畫面「%2$s」中的第 %1$d 個螢幕無效\n"
|
||||
|
||||
#: src/x11/session.c:1819
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
msgstr "這些視窗不支援「儲存目前的設定」,必須在下次登入後自行啟動。"
|
||||
|
||||
#: src/x11/window-props.c:559
|
||||
#: src/x11/window-props.c:565
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s(在 %s)"
|
||||
|
@ -11,13 +11,15 @@ test_programs = \
|
||||
|
||||
if BUILDOPT_INSTALL_TESTS
|
||||
stackingdir = $(pkgdatadir)/tests/stacking
|
||||
dist_stacking_DATA = \
|
||||
tests/stacking/basic-x11.metatest \
|
||||
tests/stacking/basic-wayland.metatest \
|
||||
tests/stacking/minimized.metatest \
|
||||
tests/stacking/mixed-windows.metatest \
|
||||
tests/stacking/set-parent.metatest \
|
||||
tests/stacking/override-redirect.metatest
|
||||
dist_stacking_DATA = \
|
||||
$(srcdir)/tests/stacking/basic-x11.metatest \
|
||||
$(srcdir)/tests/stacking/basic-wayland.metatest \
|
||||
$(srcdir)/tests/stacking/closed-transient.metatest \
|
||||
$(srcdir)/tests/stacking/minimized.metatest \
|
||||
$(srcdir)/tests/stacking/mixed-windows.metatest \
|
||||
$(srcdir)/tests/stacking/set-parent.metatest \
|
||||
$(srcdir)/tests/stacking/set-parent-exported.metatest \
|
||||
$(srcdir)/tests/stacking/override-redirect.metatest
|
||||
|
||||
mutter-all.test: tests/mutter-all.test.in
|
||||
$(AM_V_GEN) sed -e "s|@libexecdir[@]|$(libexecdir)|g" $< > $@.tmp && mv $@.tmp $@
|
||||
@ -72,6 +74,9 @@ mutter_test_headless_start_test_LDADD = $(MUTTER_LIBS) libmutter-$(LIBMUTTER_API
|
||||
|
||||
.PHONY: run-tests run-test-runner-tests run-unit-tests run-headless-start-test
|
||||
|
||||
export G_TEST_SRCDIR = $(abs_srcdir)
|
||||
export G_TEST_BUILDDIR = $(abs_builddir)
|
||||
|
||||
run-test-runner-tests: mutter-test-client mutter-test-runner
|
||||
./mutter-test-runner $(dist_stacking_DATA)
|
||||
|
||||
|
@ -88,9 +88,17 @@ mutter_built_sources += \
|
||||
xdg-output-unstable-v1-server-protocol.h \
|
||||
xwayland-keyboard-grab-unstable-v1-protocol.c \
|
||||
xwayland-keyboard-grab-unstable-v1-server-protocol.h \
|
||||
text-input-unstable-v3-protocol.c \
|
||||
text-input-unstable-v3-server-protocol.h \
|
||||
gtk-text-input-protocol.c \
|
||||
gtk-text-input-server-protocol.h \
|
||||
$(NULL)
|
||||
|
||||
if HAVE_WAYLAND_EGLSTREAM
|
||||
mutter_built_sources += \
|
||||
wayland-eglstream-controller-server-protocol.h \
|
||||
$(NULL)
|
||||
endif
|
||||
endif
|
||||
|
||||
wayland_protocols = \
|
||||
@ -114,6 +122,8 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
|
||||
backends/meta-cursor-tracker-private.h \
|
||||
backends/meta-cursor-renderer.c \
|
||||
backends/meta-cursor-renderer.h \
|
||||
backends/meta-cursor-sprite-xcursor.c \
|
||||
backends/meta-cursor-sprite-xcursor.h \
|
||||
backends/meta-dnd-private.h \
|
||||
backends/meta-egl.c \
|
||||
backends/meta-egl.h \
|
||||
@ -159,6 +169,9 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
|
||||
backends/meta-renderer.h \
|
||||
backends/meta-renderer-view.c \
|
||||
backends/meta-renderer-view.h \
|
||||
backends/meta-remote-access-controller.c \
|
||||
backends/meta-remote-access-controller-private.h \
|
||||
meta/meta-remote-access-controller.h \
|
||||
backends/edid-parse.c \
|
||||
backends/edid.h \
|
||||
backends/gsm-inhibitor-flag.h \
|
||||
@ -176,6 +189,8 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
|
||||
backends/x11/meta-gpu-xrandr.h \
|
||||
backends/x11/cm/meta-backend-x11-cm.c \
|
||||
backends/x11/cm/meta-backend-x11-cm.h \
|
||||
backends/x11/cm/meta-cursor-sprite-xfixes.c \
|
||||
backends/x11/cm/meta-cursor-sprite-xfixes.h \
|
||||
backends/x11/cm/meta-renderer-x11-cm.c \
|
||||
backends/x11/cm/meta-renderer-x11-cm.h \
|
||||
backends/x11/nested/meta-backend-x11-nested.c \
|
||||
@ -279,12 +294,13 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
|
||||
core/edge-resistance.h \
|
||||
core/events.c \
|
||||
core/events.h \
|
||||
core/errors.c \
|
||||
meta/errors.h \
|
||||
core/frame.c \
|
||||
core/frame.h \
|
||||
core/meta-gesture-tracker.c \
|
||||
core/meta-gesture-tracker-private.h \
|
||||
core/meta-workspace-manager.c \
|
||||
core/meta-workspace-manager-private.h \
|
||||
meta/meta-workspace-manager.h \
|
||||
core/keybindings.c \
|
||||
core/keybindings-private.h \
|
||||
core/main-private.h \
|
||||
@ -293,9 +309,6 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
|
||||
core/place.h \
|
||||
core/prefs.c \
|
||||
meta/prefs.h \
|
||||
core/screen.c \
|
||||
core/screen-private.h \
|
||||
meta/screen.h \
|
||||
core/startup-notification.c \
|
||||
core/startup-notification-private.h \
|
||||
meta/types.h \
|
||||
@ -322,6 +335,11 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
|
||||
ui/theme-private.h \
|
||||
ui/ui.c \
|
||||
x11/atomnames.h \
|
||||
x11/meta-x11-display.c \
|
||||
x11/meta-x11-display-private.h \
|
||||
meta/meta-x11-display.h \
|
||||
x11/meta-x11-errors.c \
|
||||
meta/meta-x11-errors.h \
|
||||
x11/events.c \
|
||||
x11/events.h \
|
||||
x11/group-private.h \
|
||||
@ -370,6 +388,8 @@ if HAVE_WAYLAND
|
||||
libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES += \
|
||||
compositor/meta-surface-actor-wayland.c \
|
||||
compositor/meta-surface-actor-wayland.h \
|
||||
wayland/meta-cursor-sprite-wayland.c \
|
||||
wayland/meta-cursor-sprite-wayland.h \
|
||||
wayland/meta-wayland.c \
|
||||
wayland/meta-wayland.h \
|
||||
wayland/meta-wayland-private.h \
|
||||
@ -431,16 +451,18 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES += \
|
||||
wayland/meta-wayland-touch.h \
|
||||
wayland/meta-wayland-surface.c \
|
||||
wayland/meta-wayland-surface.h \
|
||||
wayland/meta-wayland-surface-role-cursor.c \
|
||||
wayland/meta-wayland-surface-role-cursor.h \
|
||||
wayland/meta-wayland-surface-role-tablet-cursor.c \
|
||||
wayland/meta-wayland-surface-role-tablet-cursor.h \
|
||||
wayland/meta-wayland-cursor-surface.c \
|
||||
wayland/meta-wayland-cursor-surface.h \
|
||||
wayland/meta-wayland-tablet-cursor-surface.c \
|
||||
wayland/meta-wayland-tablet-cursor-surface.h \
|
||||
wayland/meta-wayland-actor-surface.c \
|
||||
wayland/meta-wayland-actor-surface.h \
|
||||
wayland/meta-wayland-subsurface.c \
|
||||
wayland/meta-wayland-subsurface.h \
|
||||
wayland/meta-wayland-shell-surface.c \
|
||||
wayland/meta-wayland-shell-surface.h \
|
||||
wayland/meta-wayland-text-input-legacy.c \
|
||||
wayland/meta-wayland-text-input-legacy.h \
|
||||
wayland/meta-wayland-text-input.c \
|
||||
wayland/meta-wayland-text-input.h \
|
||||
wayland/meta-wayland-types.h \
|
||||
@ -524,7 +546,6 @@ libmutterinclude_headers = \
|
||||
meta/compositor-mutter.h \
|
||||
meta/compositor.h \
|
||||
meta/display.h \
|
||||
meta/errors.h \
|
||||
meta/group.h \
|
||||
meta/keybindings.h \
|
||||
meta/main.h \
|
||||
@ -540,6 +561,7 @@ libmutterinclude_headers = \
|
||||
meta/meta-idle-monitor.h \
|
||||
meta/meta-plugin.h \
|
||||
meta/meta-monitor-manager.h \
|
||||
meta/meta-remote-access-controller.h \
|
||||
meta/meta-settings.h \
|
||||
meta/meta-shaped-texture.h \
|
||||
meta/meta-shadow-factory.h \
|
||||
@ -547,8 +569,10 @@ libmutterinclude_headers = \
|
||||
meta/meta-window-actor.h \
|
||||
meta/meta-window-group.h \
|
||||
meta/meta-window-shape.h \
|
||||
meta/meta-workspace-manager.h \
|
||||
meta/meta-x11-display.h \
|
||||
meta/meta-x11-errors.h \
|
||||
meta/prefs.h \
|
||||
meta/screen.h \
|
||||
meta/theme.h \
|
||||
meta/types.h \
|
||||
meta/util.h \
|
||||
@ -760,3 +784,5 @@ endef
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) code $< $@
|
||||
%-server-protocol.h : $(srcdir)/wayland/protocol/%.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) server-header $< $@
|
||||
%-server-protocol.h : $(WAYLAND_EGLSTREAM_DATADIR)/%.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) server-header $< $@
|
||||
|
@ -84,6 +84,8 @@ struct _MetaBackendClass
|
||||
const char *variants,
|
||||
const char *options);
|
||||
|
||||
gboolean (* is_lid_closed) (MetaBackend *backend);
|
||||
|
||||
struct xkb_keymap * (* get_keymap) (MetaBackend *backend);
|
||||
|
||||
xkb_layout_index_t (* get_keymap_layout_group) (MetaBackend *backend);
|
||||
@ -144,6 +146,8 @@ struct xkb_keymap * meta_backend_get_keymap (MetaBackend *backend);
|
||||
|
||||
xkb_layout_index_t meta_backend_get_keymap_layout_group (MetaBackend *backend);
|
||||
|
||||
gboolean meta_backend_is_lid_closed (MetaBackend *backend);
|
||||
|
||||
void meta_backend_update_last_device (MetaBackend *backend,
|
||||
int device_id);
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#ifdef HAVE_REMOTE_DESKTOP
|
||||
#include "backends/meta-dbus-session-watcher.h"
|
||||
#include "backends/meta-screen-cast.h"
|
||||
#include "backends/meta-remote-access-controller-private.h"
|
||||
#include "backends/meta-remote-desktop.h"
|
||||
#endif
|
||||
|
||||
@ -58,6 +59,7 @@ enum
|
||||
KEYMAP_CHANGED,
|
||||
KEYMAP_LAYOUT_GROUP_CHANGED,
|
||||
LAST_DEVICE_CHANGED,
|
||||
LID_IS_CLOSED_CHANGED,
|
||||
|
||||
N_SIGNALS
|
||||
};
|
||||
@ -92,6 +94,7 @@ struct _MetaBackendPrivate
|
||||
MetaEgl *egl;
|
||||
MetaSettings *settings;
|
||||
#ifdef HAVE_REMOTE_DESKTOP
|
||||
MetaRemoteAccessController *remote_access_controller;
|
||||
MetaDbusSessionWatcher *dbus_session_watcher;
|
||||
MetaScreenCast *screen_cast;
|
||||
MetaRemoteDesktop *remote_desktop;
|
||||
@ -111,7 +114,10 @@ struct _MetaBackendPrivate
|
||||
MetaPointerConstraint *client_pointer_constraint;
|
||||
MetaDnd *dnd;
|
||||
|
||||
UpClient *up_client;
|
||||
guint upower_watch_id;
|
||||
GDBusProxy *upower_proxy;
|
||||
gboolean lid_is_closed;
|
||||
|
||||
guint sleep_signal_id;
|
||||
GCancellable *cancellable;
|
||||
GDBusConnection *system_bus;
|
||||
@ -139,14 +145,17 @@ meta_backend_finalize (GObject *object)
|
||||
g_clear_object (&priv->remote_desktop);
|
||||
g_clear_object (&priv->screen_cast);
|
||||
g_clear_object (&priv->dbus_session_watcher);
|
||||
g_clear_object (&priv->remote_access_controller);
|
||||
#endif
|
||||
|
||||
g_object_unref (priv->up_client);
|
||||
if (priv->sleep_signal_id)
|
||||
g_dbus_connection_signal_unsubscribe (priv->system_bus, priv->sleep_signal_id);
|
||||
if (priv->upower_watch_id)
|
||||
g_bus_unwatch_name (priv->upower_watch_id);
|
||||
g_cancellable_cancel (priv->cancellable);
|
||||
g_clear_object (&priv->cancellable);
|
||||
g_clear_object (&priv->system_bus);
|
||||
g_clear_object (&priv->upower_proxy);
|
||||
|
||||
if (priv->device_update_idle_id)
|
||||
g_source_remove (priv->device_update_idle_id);
|
||||
@ -450,6 +459,8 @@ meta_backend_real_post_init (MetaBackend *backend)
|
||||
priv->input_settings = meta_backend_create_input_settings (backend);
|
||||
|
||||
#ifdef HAVE_REMOTE_DESKTOP
|
||||
priv->remote_access_controller =
|
||||
g_object_new (META_TYPE_REMOTE_ACCESS_CONTROLLER, NULL);
|
||||
priv->dbus_session_watcher = g_object_new (META_TYPE_DBUS_SESSION_WATCHER, NULL);
|
||||
priv->screen_cast = meta_screen_cast_new (priv->dbus_session_watcher);
|
||||
priv->remote_desktop = meta_remote_desktop_new (priv->dbus_session_watcher);
|
||||
@ -503,6 +514,144 @@ meta_backend_real_get_relative_motion_deltas (MetaBackend *backend,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_backend_real_is_lid_closed (MetaBackend *backend)
|
||||
{
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
return priv->lid_is_closed;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_backend_is_lid_closed (MetaBackend *backend)
|
||||
{
|
||||
return META_BACKEND_GET_CLASS (backend)->is_lid_closed (backend);
|
||||
}
|
||||
|
||||
static void
|
||||
upower_properties_changed (GDBusProxy *proxy,
|
||||
GVariant *changed_properties,
|
||||
GStrv invalidated_properties,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaBackend *backend = user_data;
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
GVariant *v;
|
||||
gboolean lid_is_closed;
|
||||
|
||||
v = g_variant_lookup_value (changed_properties,
|
||||
"LidIsClosed",
|
||||
G_VARIANT_TYPE_BOOLEAN);
|
||||
if (!v)
|
||||
return;
|
||||
|
||||
lid_is_closed = g_variant_get_boolean (v);
|
||||
g_variant_unref (v);
|
||||
|
||||
if (lid_is_closed == priv->lid_is_closed)
|
||||
return;
|
||||
|
||||
priv->lid_is_closed = lid_is_closed;
|
||||
g_signal_emit (backend, signals[LID_IS_CLOSED_CHANGED], 0,
|
||||
priv->lid_is_closed);
|
||||
|
||||
if (lid_is_closed)
|
||||
return;
|
||||
|
||||
meta_idle_monitor_reset_idletime (meta_idle_monitor_get_core ());
|
||||
}
|
||||
|
||||
static void
|
||||
upower_ready_cb (GObject *source_object,
|
||||
GAsyncResult *res,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaBackend *backend;
|
||||
MetaBackendPrivate *priv;
|
||||
GDBusProxy *proxy;
|
||||
GError *error = NULL;
|
||||
GVariant *v;
|
||||
|
||||
proxy = g_dbus_proxy_new_finish (res, &error);
|
||||
if (!proxy)
|
||||
{
|
||||
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
g_warning ("Failed to create UPower proxy: %s", error->message);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
|
||||
backend = META_BACKEND (user_data);
|
||||
priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
priv->upower_proxy = proxy;
|
||||
g_signal_connect (proxy, "g-properties-changed",
|
||||
G_CALLBACK (upower_properties_changed), backend);
|
||||
|
||||
v = g_dbus_proxy_get_cached_property (proxy, "LidIsClosed");
|
||||
if (!v)
|
||||
return;
|
||||
priv->lid_is_closed = g_variant_get_boolean (v);
|
||||
g_variant_unref (v);
|
||||
|
||||
if (priv->lid_is_closed)
|
||||
{
|
||||
g_signal_emit (backend, signals[LID_IS_CLOSED_CHANGED], 0,
|
||||
priv->lid_is_closed);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
upower_appeared (GDBusConnection *connection,
|
||||
const gchar *name,
|
||||
const gchar *name_owner,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaBackend *backend = META_BACKEND (user_data);
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
g_dbus_proxy_new (connection,
|
||||
G_DBUS_PROXY_FLAGS_NONE,
|
||||
NULL,
|
||||
"org.freedesktop.UPower",
|
||||
"/org/freedesktop/UPower",
|
||||
"org.freedesktop.UPower",
|
||||
priv->cancellable,
|
||||
upower_ready_cb,
|
||||
backend);
|
||||
}
|
||||
|
||||
static void
|
||||
upower_vanished (GDBusConnection *connection,
|
||||
const gchar *name,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaBackend *backend = META_BACKEND (user_data);
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
g_clear_object (&priv->upower_proxy);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_backend_constructed (GObject *object)
|
||||
{
|
||||
MetaBackend *backend = META_BACKEND (object);
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
MetaBackendClass *backend_class =
|
||||
META_BACKEND_GET_CLASS (backend);
|
||||
|
||||
if (backend_class->is_lid_closed != meta_backend_real_is_lid_closed)
|
||||
return;
|
||||
|
||||
priv->upower_watch_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
|
||||
"org.freedesktop.UPower",
|
||||
G_BUS_NAME_WATCHER_FLAGS_NONE,
|
||||
upower_appeared,
|
||||
upower_vanished,
|
||||
backend,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_backend_class_init (MetaBackendClass *klass)
|
||||
{
|
||||
@ -510,6 +659,7 @@ meta_backend_class_init (MetaBackendClass *klass)
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->finalize = meta_backend_finalize;
|
||||
object_class->constructed = meta_backend_constructed;
|
||||
|
||||
klass->post_init = meta_backend_real_post_init;
|
||||
klass->create_cursor_renderer = meta_backend_real_create_cursor_renderer;
|
||||
@ -517,6 +667,7 @@ meta_backend_class_init (MetaBackendClass *klass)
|
||||
klass->ungrab_device = meta_backend_real_ungrab_device;
|
||||
klass->select_stage_events = meta_backend_real_select_stage_events;
|
||||
klass->get_relative_motion_deltas = meta_backend_real_get_relative_motion_deltas;
|
||||
klass->is_lid_closed = meta_backend_real_is_lid_closed;
|
||||
|
||||
signals[KEYMAP_CHANGED] =
|
||||
g_signal_new ("keymap-changed",
|
||||
@ -539,6 +690,13 @@ meta_backend_class_init (MetaBackendClass *klass)
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_INT);
|
||||
signals[LID_IS_CLOSED_CHANGED] =
|
||||
g_signal_new ("lid-is-closed-changed",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
|
||||
|
||||
mutter_stage_views = g_getenv ("MUTTER_STAGE_VIEWS");
|
||||
stage_views_disabled = g_strcmp0 (mutter_stage_views, "0") == 0;
|
||||
@ -562,17 +720,6 @@ meta_backend_create_renderer (MetaBackend *backend,
|
||||
return META_BACKEND_GET_CLASS (backend)->create_renderer (backend, error);
|
||||
}
|
||||
|
||||
static void
|
||||
lid_is_closed_changed_cb (UpClient *client,
|
||||
GParamSpec *pspec,
|
||||
gpointer user_data)
|
||||
{
|
||||
if (up_client_get_lid_is_closed (client))
|
||||
return;
|
||||
|
||||
meta_idle_monitor_reset_idletime (meta_idle_monitor_get_core ());
|
||||
}
|
||||
|
||||
static void
|
||||
prepare_for_sleep_cb (GDBusConnection *connection,
|
||||
const gchar *sender_name,
|
||||
@ -643,10 +790,6 @@ meta_backend_initable_init (GInitable *initable,
|
||||
|
||||
priv->dnd = g_object_new (META_TYPE_DND, NULL);
|
||||
|
||||
priv->up_client = up_client_new ();
|
||||
g_signal_connect (priv->up_client, "notify::lid-is-closed",
|
||||
G_CALLBACK (lid_is_closed_changed_cb), NULL);
|
||||
|
||||
priv->cancellable = g_cancellable_new ();
|
||||
g_bus_get (G_BUS_TYPE_SYSTEM,
|
||||
priv->cancellable,
|
||||
@ -777,6 +920,24 @@ meta_backend_get_remote_desktop (MetaBackend *backend)
|
||||
}
|
||||
#endif /* HAVE_REMOTE_DESKTOP */
|
||||
|
||||
/**
|
||||
* meta_backend_get_remote_access_controller:
|
||||
* @backend: A #MetaBackend
|
||||
*
|
||||
* Return Value: (transfer none): The #MetaRemoteAccessController
|
||||
*/
|
||||
MetaRemoteAccessController *
|
||||
meta_backend_get_remote_access_controller (MetaBackend *backend)
|
||||
{
|
||||
#ifdef HAVE_REMOTE_DESKTOP
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
return priv->remote_access_controller;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_backend_grab_device: (skip)
|
||||
*/
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include "backends/x11/meta-barrier-x11.h"
|
||||
#include <meta/meta-enum-types.h>
|
||||
|
||||
G_DEFINE_TYPE (MetaBarrier, meta_barrier, G_TYPE_OBJECT)
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaBarrier, meta_barrier, G_TYPE_OBJECT)
|
||||
G_DEFINE_TYPE (MetaBarrierImpl, meta_barrier_impl, G_TYPE_OBJECT)
|
||||
|
||||
enum {
|
||||
@ -281,8 +281,6 @@ meta_barrier_class_init (MetaBarrierClass *klass)
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_BARRIER_EVENT);
|
||||
|
||||
g_type_class_add_private (object_class, sizeof(MetaBarrierPrivate));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -193,8 +193,8 @@ meta_cursor_renderer_calculate_rect (MetaCursorRenderer *renderer,
|
||||
}
|
||||
|
||||
static void
|
||||
update_cursor (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
meta_cursor_renderer_update_cursor (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
{
|
||||
MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
|
||||
gboolean handled_by_backend;
|
||||
@ -237,7 +237,7 @@ meta_cursor_renderer_set_cursor (MetaCursorRenderer *renderer,
|
||||
return;
|
||||
priv->displayed_cursor = cursor_sprite;
|
||||
|
||||
update_cursor (renderer, cursor_sprite);
|
||||
meta_cursor_renderer_update_cursor (renderer, cursor_sprite);
|
||||
}
|
||||
|
||||
void
|
||||
@ -246,7 +246,7 @@ meta_cursor_renderer_force_update (MetaCursorRenderer *renderer)
|
||||
MetaCursorRendererPrivate *priv =
|
||||
meta_cursor_renderer_get_instance_private (renderer);
|
||||
|
||||
update_cursor (renderer, priv->displayed_cursor);
|
||||
meta_cursor_renderer_update_cursor (renderer, priv->displayed_cursor);
|
||||
}
|
||||
|
||||
void
|
||||
@ -261,7 +261,7 @@ meta_cursor_renderer_set_position (MetaCursorRenderer *renderer,
|
||||
priv->current_x = x;
|
||||
priv->current_y = y;
|
||||
|
||||
update_cursor (renderer, priv->displayed_cursor);
|
||||
meta_cursor_renderer_update_cursor (renderer, priv->displayed_cursor);
|
||||
}
|
||||
|
||||
ClutterPoint
|
||||
@ -283,28 +283,3 @@ meta_cursor_renderer_get_cursor (MetaCursorRenderer *renderer)
|
||||
|
||||
return priv->displayed_cursor;
|
||||
}
|
||||
|
||||
#ifdef HAVE_WAYLAND
|
||||
void
|
||||
meta_cursor_renderer_realize_cursor_from_wl_buffer (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
struct wl_resource *buffer)
|
||||
{
|
||||
|
||||
MetaCursorRendererClass *renderer_class = META_CURSOR_RENDERER_GET_CLASS (renderer);
|
||||
|
||||
if (renderer_class->realize_cursor_from_wl_buffer)
|
||||
renderer_class->realize_cursor_from_wl_buffer (renderer, cursor_sprite, buffer);
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
meta_cursor_renderer_realize_cursor_from_xcursor (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
XcursorImage *xc_image)
|
||||
{
|
||||
MetaCursorRendererClass *renderer_class = META_CURSOR_RENDERER_GET_CLASS (renderer);
|
||||
|
||||
if (renderer_class->realize_cursor_from_xcursor)
|
||||
renderer_class->realize_cursor_from_xcursor (renderer, cursor_sprite, xc_image);
|
||||
}
|
||||
|
@ -26,12 +26,7 @@
|
||||
#define META_CURSOR_RENDERER_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <X11/Xcursor/Xcursor.h>
|
||||
#ifdef HAVE_WAYLAND
|
||||
#include <wayland-server.h>
|
||||
#endif
|
||||
|
||||
#include <meta/screen.h>
|
||||
#include "meta-cursor.h"
|
||||
|
||||
#define META_TYPE_CURSOR_RENDERER (meta_cursor_renderer_get_type ())
|
||||
@ -44,14 +39,6 @@ struct _MetaCursorRendererClass
|
||||
|
||||
gboolean (* update_cursor) (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite);
|
||||
#ifdef HAVE_WAYLAND
|
||||
void (* realize_cursor_from_wl_buffer) (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
struct wl_resource *buffer);
|
||||
#endif
|
||||
void (* realize_cursor_from_xcursor) (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
XcursorImage *xc_image);
|
||||
};
|
||||
|
||||
MetaCursorRenderer * meta_cursor_renderer_new (void);
|
||||
@ -70,16 +57,6 @@ MetaCursorSprite * meta_cursor_renderer_get_cursor (MetaCursorRenderer *renderer
|
||||
ClutterRect meta_cursor_renderer_calculate_rect (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite);
|
||||
|
||||
#ifdef HAVE_WAYLAND
|
||||
void meta_cursor_renderer_realize_cursor_from_wl_buffer (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
struct wl_resource *buffer);
|
||||
#endif
|
||||
|
||||
void meta_cursor_renderer_realize_cursor_from_xcursor (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
XcursorImage *xc_image);
|
||||
|
||||
void meta_cursor_renderer_emit_painted (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite);
|
||||
|
||||
|
292
src/backends/meta-cursor-sprite-xcursor.c
Normal file
292
src/backends/meta-cursor-sprite-xcursor.c
Normal file
@ -0,0 +1,292 @@
|
||||
/*
|
||||
* Copyright 2013, 2018 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "backends/meta-cursor-sprite-xcursor.h"
|
||||
|
||||
#include "backends/meta-cursor.h"
|
||||
#include "backends/meta-cursor-renderer.h"
|
||||
#include "clutter/clutter.h"
|
||||
#include "cogl/cogl.h"
|
||||
#include "meta/prefs.h"
|
||||
|
||||
struct _MetaCursorSpriteXcursor
|
||||
{
|
||||
MetaCursorSprite parent;
|
||||
|
||||
MetaCursor cursor;
|
||||
|
||||
int current_frame;
|
||||
XcursorImages *xcursor_images;
|
||||
|
||||
int theme_scale;
|
||||
gboolean theme_dirty;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaCursorSpriteXcursor, meta_cursor_sprite_xcursor,
|
||||
META_TYPE_CURSOR_SPRITE)
|
||||
|
||||
static const char *
|
||||
translate_meta_cursor (MetaCursor cursor)
|
||||
{
|
||||
switch (cursor)
|
||||
{
|
||||
case META_CURSOR_DEFAULT:
|
||||
return "left_ptr";
|
||||
case META_CURSOR_NORTH_RESIZE:
|
||||
return "top_side";
|
||||
case META_CURSOR_SOUTH_RESIZE:
|
||||
return "bottom_side";
|
||||
case META_CURSOR_WEST_RESIZE:
|
||||
return "left_side";
|
||||
case META_CURSOR_EAST_RESIZE:
|
||||
return "right_side";
|
||||
case META_CURSOR_SE_RESIZE:
|
||||
return "bottom_right_corner";
|
||||
case META_CURSOR_SW_RESIZE:
|
||||
return "bottom_left_corner";
|
||||
case META_CURSOR_NE_RESIZE:
|
||||
return "top_right_corner";
|
||||
case META_CURSOR_NW_RESIZE:
|
||||
return "top_left_corner";
|
||||
case META_CURSOR_MOVE_OR_RESIZE_WINDOW:
|
||||
return "fleur";
|
||||
case META_CURSOR_BUSY:
|
||||
return "watch";
|
||||
case META_CURSOR_DND_IN_DRAG:
|
||||
return "dnd-none";
|
||||
case META_CURSOR_DND_MOVE:
|
||||
return "dnd-move";
|
||||
case META_CURSOR_DND_COPY:
|
||||
return "dnd-copy";
|
||||
case META_CURSOR_DND_UNSUPPORTED_TARGET:
|
||||
return "dnd-none";
|
||||
case META_CURSOR_POINTING_HAND:
|
||||
return "hand2";
|
||||
case META_CURSOR_CROSSHAIR:
|
||||
return "crosshair";
|
||||
case META_CURSOR_IBEAM:
|
||||
return "xterm";
|
||||
case META_CURSOR_NONE:
|
||||
case META_CURSOR_LAST:
|
||||
break;
|
||||
}
|
||||
|
||||
g_assert_not_reached ();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
MetaCursor
|
||||
meta_cursor_sprite_xcursor_get_cursor (MetaCursorSpriteXcursor *sprite_xcursor)
|
||||
{
|
||||
return sprite_xcursor->cursor;
|
||||
}
|
||||
|
||||
Cursor
|
||||
meta_create_x_cursor (Display *xdisplay,
|
||||
MetaCursor cursor)
|
||||
{
|
||||
return XcursorLibraryLoadCursor (xdisplay, translate_meta_cursor (cursor));
|
||||
}
|
||||
|
||||
static XcursorImages *
|
||||
load_cursor_on_client (MetaCursor cursor, int scale)
|
||||
{
|
||||
return XcursorLibraryLoadImages (translate_meta_cursor (cursor),
|
||||
meta_prefs_get_cursor_theme (),
|
||||
meta_prefs_get_cursor_size () * scale);
|
||||
}
|
||||
|
||||
static void
|
||||
load_from_current_xcursor_image (MetaCursorSpriteXcursor *sprite_xcursor)
|
||||
{
|
||||
MetaCursorSprite *sprite = META_CURSOR_SPRITE (sprite_xcursor);
|
||||
XcursorImage *xc_image;
|
||||
int width, height, rowstride;
|
||||
CoglPixelFormat cogl_format;
|
||||
ClutterBackend *clutter_backend;
|
||||
CoglContext *cogl_context;
|
||||
CoglTexture2D *texture;
|
||||
CoglError *error = NULL;
|
||||
|
||||
g_assert (!meta_cursor_sprite_get_cogl_texture (sprite));
|
||||
|
||||
xc_image = meta_cursor_sprite_xcursor_get_current_image (sprite_xcursor);
|
||||
width = (int) xc_image->width;
|
||||
height = (int) xc_image->height;
|
||||
rowstride = width * 4;
|
||||
|
||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||
cogl_format = COGL_PIXEL_FORMAT_BGRA_8888;
|
||||
#else
|
||||
cogl_format = COGL_PIXEL_FORMAT_ARGB_8888;
|
||||
#endif
|
||||
|
||||
clutter_backend = clutter_get_default_backend ();
|
||||
cogl_context = clutter_backend_get_cogl_context (clutter_backend);
|
||||
texture = cogl_texture_2d_new_from_data (cogl_context,
|
||||
width, height,
|
||||
cogl_format,
|
||||
rowstride,
|
||||
(uint8_t *) xc_image->pixels,
|
||||
&error);
|
||||
if (!texture)
|
||||
{
|
||||
g_warning ("Failed to allocate cursor texture: %s\n", error->message);
|
||||
cogl_error_free (error);
|
||||
}
|
||||
|
||||
meta_cursor_sprite_set_texture (sprite,
|
||||
COGL_TEXTURE (texture),
|
||||
xc_image->xhot, xc_image->yhot);
|
||||
|
||||
g_clear_pointer (&texture, cogl_object_unref);
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_sprite_xcursor_set_theme_scale (MetaCursorSpriteXcursor *sprite_xcursor,
|
||||
int theme_scale)
|
||||
{
|
||||
if (sprite_xcursor->theme_scale != theme_scale)
|
||||
sprite_xcursor->theme_dirty = TRUE;
|
||||
sprite_xcursor->theme_scale = theme_scale;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_cursor_sprite_xcursor_is_animated (MetaCursorSprite *sprite)
|
||||
{
|
||||
MetaCursorSpriteXcursor *sprite_xcursor = META_CURSOR_SPRITE_XCURSOR (sprite);
|
||||
|
||||
return (sprite_xcursor->xcursor_images &&
|
||||
sprite_xcursor->xcursor_images->nimage > 1);
|
||||
}
|
||||
|
||||
XcursorImage *
|
||||
meta_cursor_sprite_xcursor_get_current_image (MetaCursorSpriteXcursor *sprite_xcursor)
|
||||
{
|
||||
return sprite_xcursor->xcursor_images->images[sprite_xcursor->current_frame];
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_xcursor_tick_frame (MetaCursorSprite *sprite)
|
||||
{
|
||||
MetaCursorSpriteXcursor *sprite_xcursor = META_CURSOR_SPRITE_XCURSOR (sprite);
|
||||
|
||||
if (!meta_cursor_sprite_is_animated (sprite))
|
||||
return;
|
||||
|
||||
sprite_xcursor->current_frame++;
|
||||
|
||||
if (sprite_xcursor->current_frame >= sprite_xcursor->xcursor_images->nimage)
|
||||
sprite_xcursor->current_frame = 0;
|
||||
|
||||
meta_cursor_sprite_clear_texture (sprite);
|
||||
load_from_current_xcursor_image (sprite_xcursor);
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
meta_cursor_sprite_xcursor_get_current_frame_time (MetaCursorSprite *sprite)
|
||||
{
|
||||
MetaCursorSpriteXcursor *sprite_xcursor = META_CURSOR_SPRITE_XCURSOR (sprite);
|
||||
XcursorImages *xcursor_images;
|
||||
|
||||
g_return_val_if_fail (meta_cursor_sprite_is_animated (sprite), 0);
|
||||
|
||||
xcursor_images = sprite_xcursor->xcursor_images;
|
||||
return xcursor_images->images[sprite_xcursor->current_frame]->delay;
|
||||
}
|
||||
|
||||
static void
|
||||
load_cursor_from_theme (MetaCursorSprite *sprite)
|
||||
{
|
||||
MetaCursorSpriteXcursor *sprite_xcursor = META_CURSOR_SPRITE_XCURSOR (sprite);
|
||||
|
||||
g_assert (sprite_xcursor->cursor != META_CURSOR_NONE);
|
||||
|
||||
sprite_xcursor->theme_dirty = FALSE;
|
||||
|
||||
/* We might be reloading with a different scale. If so clear the old data. */
|
||||
if (sprite_xcursor->xcursor_images)
|
||||
{
|
||||
meta_cursor_sprite_clear_texture (sprite);
|
||||
XcursorImagesDestroy (sprite_xcursor->xcursor_images);
|
||||
}
|
||||
|
||||
sprite_xcursor->current_frame = 0;
|
||||
sprite_xcursor->xcursor_images =
|
||||
load_cursor_on_client (sprite_xcursor->cursor,
|
||||
sprite_xcursor->theme_scale);
|
||||
if (!sprite_xcursor->xcursor_images)
|
||||
g_error ("Could not find cursor. Perhaps set XCURSOR_PATH?");
|
||||
|
||||
load_from_current_xcursor_image (sprite_xcursor);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_xcursor_realize_texture (MetaCursorSprite *sprite)
|
||||
{
|
||||
MetaCursorSpriteXcursor *sprite_xcursor = META_CURSOR_SPRITE_XCURSOR (sprite);
|
||||
|
||||
if (sprite_xcursor->theme_dirty)
|
||||
load_cursor_from_theme (sprite);
|
||||
}
|
||||
|
||||
MetaCursorSpriteXcursor *
|
||||
meta_cursor_sprite_xcursor_new (MetaCursor cursor)
|
||||
{
|
||||
MetaCursorSpriteXcursor *sprite_xcursor;
|
||||
|
||||
sprite_xcursor = g_object_new (META_TYPE_CURSOR_SPRITE_XCURSOR, NULL);
|
||||
sprite_xcursor->cursor = cursor;
|
||||
|
||||
return sprite_xcursor;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_xcursor_finalize (GObject *object)
|
||||
{
|
||||
MetaCursorSpriteXcursor *sprite_xcursor = META_CURSOR_SPRITE_XCURSOR (object);
|
||||
|
||||
g_clear_pointer (&sprite_xcursor->xcursor_images,
|
||||
XcursorImagesDestroy);
|
||||
|
||||
G_OBJECT_CLASS (meta_cursor_sprite_xcursor_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_xcursor_init (MetaCursorSpriteXcursor *sprite_xcursor)
|
||||
{
|
||||
sprite_xcursor->theme_dirty = TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_xcursor_class_init (MetaCursorSpriteXcursorClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
MetaCursorSpriteClass *cursor_sprite_class = META_CURSOR_SPRITE_CLASS (klass);
|
||||
|
||||
object_class->finalize = meta_cursor_sprite_xcursor_finalize;
|
||||
|
||||
cursor_sprite_class->realize_texture =
|
||||
meta_cursor_sprite_xcursor_realize_texture;
|
||||
cursor_sprite_class->is_animated = meta_cursor_sprite_xcursor_is_animated;
|
||||
cursor_sprite_class->tick_frame = meta_cursor_sprite_xcursor_tick_frame;
|
||||
cursor_sprite_class->get_current_frame_time =
|
||||
meta_cursor_sprite_xcursor_get_current_frame_time;
|
||||
}
|
43
src/backends/meta-cursor-sprite-xcursor.h
Normal file
43
src/backends/meta-cursor-sprite-xcursor.h
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright 2013, 2018 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef META_CURSOR_SPRITE_XCURSOR_H
|
||||
#define META_CURSOR_SPRITE_XCURSOR_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <X11/Xcursor/Xcursor.h>
|
||||
|
||||
#include "backends/meta-cursor.h"
|
||||
|
||||
#define META_TYPE_CURSOR_SPRITE_XCURSOR meta_cursor_sprite_xcursor_get_type ()
|
||||
G_DECLARE_FINAL_TYPE (MetaCursorSpriteXcursor, meta_cursor_sprite_xcursor,
|
||||
META, CURSOR_SPRITE_XCURSOR, MetaCursorSprite)
|
||||
|
||||
MetaCursorSpriteXcursor * meta_cursor_sprite_xcursor_new (MetaCursor cursor);
|
||||
|
||||
void meta_cursor_sprite_xcursor_set_theme_scale (MetaCursorSpriteXcursor *sprite_xcursor,
|
||||
int scale);
|
||||
|
||||
MetaCursor meta_cursor_sprite_xcursor_get_cursor (MetaCursorSpriteXcursor *sprite_xcusror);
|
||||
|
||||
XcursorImage * meta_cursor_sprite_xcursor_get_current_image (MetaCursorSpriteXcursor *sprite_xcursor);
|
||||
|
||||
Cursor meta_create_x_cursor (Display *xdisplay,
|
||||
MetaCursor cursor);
|
||||
|
||||
#endif /* META_CURSOR_SPRITE_XCURSOR_H */
|
@ -26,6 +26,7 @@
|
||||
|
||||
#include "meta-cursor.h"
|
||||
#include "meta-cursor-renderer.h"
|
||||
#include "backends/x11/cm/meta-cursor-sprite-xfixes.h"
|
||||
|
||||
struct _MetaCursorTracker {
|
||||
GObject parent_instance;
|
||||
@ -46,7 +47,7 @@ struct _MetaCursorTracker {
|
||||
MetaCursorSprite *root_cursor;
|
||||
|
||||
/* The cursor from the X11 server. */
|
||||
MetaCursorSprite *xfixes_cursor;
|
||||
MetaCursorSpriteXfixes *xfixes_cursor;
|
||||
};
|
||||
|
||||
struct _MetaCursorTrackerClass {
|
||||
|
@ -33,16 +33,17 @@
|
||||
#include <string.h>
|
||||
#include <meta/main.h>
|
||||
#include <meta/util.h>
|
||||
#include <meta/errors.h>
|
||||
#include <meta/meta-x11-errors.h>
|
||||
|
||||
#include <cogl/cogl.h>
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
|
||||
#include "meta-backend-private.h"
|
||||
#include "backends/x11/cm/meta-cursor-sprite-xfixes.h"
|
||||
#include "x11/meta-x11-display-private.h"
|
||||
|
||||
G_DEFINE_TYPE (MetaCursorTracker, meta_cursor_tracker, G_TYPE_OBJECT);
|
||||
|
||||
@ -161,15 +162,15 @@ meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass)
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_cursor_tracker_get_for_screen:
|
||||
* @screen: the #MetaScreen
|
||||
* meta_cursor_tracker_get_for_display:
|
||||
* @display: the #MetaDisplay
|
||||
*
|
||||
* Retrieves the cursor tracker object for @screen.
|
||||
* Retrieves the cursor tracker object for @display.
|
||||
*
|
||||
* Returns: (transfer none):
|
||||
*/
|
||||
MetaCursorTracker *
|
||||
meta_cursor_tracker_get_for_screen (MetaScreen *screen)
|
||||
meta_cursor_tracker_get_for_display (MetaDisplay *display)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaCursorTracker *tracker = meta_backend_get_cursor_tracker (backend);
|
||||
@ -195,13 +196,13 @@ gboolean
|
||||
meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker,
|
||||
XEvent *xevent)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
MetaX11Display *x11_display = meta_get_display ()->x11_display;
|
||||
XFixesCursorNotifyEvent *notify_event;
|
||||
|
||||
if (meta_is_wayland_compositor ())
|
||||
return FALSE;
|
||||
|
||||
if (xevent->xany.type != display->xfixes_event_base + XFixesCursorNotify)
|
||||
if (xevent->xany.type != x11_display->xfixes_event_base + XFixesCursorNotify)
|
||||
return FALSE;
|
||||
|
||||
notify_event = (XFixesCursorNotifyEvent *)xevent;
|
||||
@ -218,75 +219,14 @@ static void
|
||||
ensure_xfixes_cursor (MetaCursorTracker *tracker)
|
||||
{
|
||||
MetaDisplay *display = meta_get_display ();
|
||||
XFixesCursorImage *cursor_image;
|
||||
CoglTexture2D *sprite;
|
||||
guint8 *cursor_data;
|
||||
gboolean free_cursor_data;
|
||||
CoglContext *ctx;
|
||||
CoglError *error = NULL;
|
||||
g_autoptr (GError) error = NULL;
|
||||
|
||||
if (tracker->xfixes_cursor)
|
||||
return;
|
||||
|
||||
cursor_image = XFixesGetCursorImage (display->xdisplay);
|
||||
if (!cursor_image)
|
||||
return;
|
||||
|
||||
/* Like all X APIs, XFixesGetCursorImage() returns arrays of 32-bit
|
||||
* quantities as arrays of long; we need to convert on 64 bit */
|
||||
if (sizeof(long) == 4)
|
||||
{
|
||||
cursor_data = (guint8 *)cursor_image->pixels;
|
||||
free_cursor_data = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
int i, j;
|
||||
guint32 *cursor_words;
|
||||
gulong *p;
|
||||
guint32 *q;
|
||||
|
||||
cursor_words = g_new (guint32, cursor_image->width * cursor_image->height);
|
||||
cursor_data = (guint8 *)cursor_words;
|
||||
|
||||
p = cursor_image->pixels;
|
||||
q = cursor_words;
|
||||
for (j = 0; j < cursor_image->height; j++)
|
||||
for (i = 0; i < cursor_image->width; i++)
|
||||
*(q++) = *(p++);
|
||||
|
||||
free_cursor_data = TRUE;
|
||||
}
|
||||
|
||||
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
||||
sprite = cogl_texture_2d_new_from_data (ctx,
|
||||
cursor_image->width,
|
||||
cursor_image->height,
|
||||
CLUTTER_CAIRO_FORMAT_ARGB32,
|
||||
cursor_image->width * 4, /* stride */
|
||||
cursor_data,
|
||||
&error);
|
||||
|
||||
if (free_cursor_data)
|
||||
g_free (cursor_data);
|
||||
|
||||
if (error != NULL)
|
||||
{
|
||||
meta_warning ("Failed to allocate cursor sprite texture: %s\n", error->message);
|
||||
cogl_error_free (error);
|
||||
}
|
||||
|
||||
if (sprite != NULL)
|
||||
{
|
||||
MetaCursorSprite *cursor_sprite = meta_cursor_sprite_new ();
|
||||
meta_cursor_sprite_set_texture (cursor_sprite,
|
||||
COGL_TEXTURE (sprite),
|
||||
cursor_image->xhot,
|
||||
cursor_image->yhot);
|
||||
cogl_object_unref (sprite);
|
||||
tracker->xfixes_cursor = cursor_sprite;
|
||||
}
|
||||
XFree (cursor_image);
|
||||
tracker->xfixes_cursor = meta_cursor_sprite_xfixes_new (display, &error);
|
||||
if (!tracker->xfixes_cursor)
|
||||
g_warning ("Failed to create XFIXES cursor: %s", error->message);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -308,7 +248,7 @@ meta_cursor_tracker_get_sprite (MetaCursorTracker *tracker)
|
||||
else
|
||||
{
|
||||
ensure_xfixes_cursor (tracker);
|
||||
cursor_sprite = tracker->xfixes_cursor;
|
||||
cursor_sprite = META_CURSOR_SPRITE (tracker->xfixes_cursor);
|
||||
}
|
||||
|
||||
if (cursor_sprite)
|
||||
@ -345,7 +285,7 @@ meta_cursor_tracker_get_hot (MetaCursorTracker *tracker,
|
||||
else
|
||||
{
|
||||
ensure_xfixes_cursor (tracker);
|
||||
cursor_sprite = tracker->xfixes_cursor;
|
||||
cursor_sprite = META_CURSOR_SPRITE (tracker->xfixes_cursor);
|
||||
}
|
||||
|
||||
if (cursor_sprite)
|
||||
|
@ -23,19 +23,12 @@
|
||||
|
||||
#include "meta-cursor.h"
|
||||
|
||||
#include <meta/errors.h>
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "cogl/cogl.h"
|
||||
#include "meta/common.h"
|
||||
|
||||
#include "display-private.h"
|
||||
#include "screen-private.h"
|
||||
#include "meta-backend-private.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <X11/cursorfont.h>
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
#include <X11/Xcursor/Xcursor.h>
|
||||
|
||||
enum {
|
||||
enum
|
||||
{
|
||||
PREPARE_AT,
|
||||
TEXTURE_CHANGED,
|
||||
|
||||
@ -44,316 +37,148 @@ enum {
|
||||
|
||||
static guint signals[LAST_SIGNAL];
|
||||
|
||||
struct _MetaCursorSprite
|
||||
typedef struct _MetaCursorSpritePrivate
|
||||
{
|
||||
GObject parent;
|
||||
|
||||
MetaCursor cursor;
|
||||
|
||||
CoglTexture2D *texture;
|
||||
float texture_scale;
|
||||
int hot_x, hot_y;
|
||||
} MetaCursorSpritePrivate;
|
||||
|
||||
int current_frame;
|
||||
XcursorImages *xcursor_images;
|
||||
|
||||
int theme_scale;
|
||||
gboolean theme_dirty;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaCursorSprite, meta_cursor_sprite, G_TYPE_OBJECT)
|
||||
|
||||
static const char *
|
||||
translate_meta_cursor (MetaCursor cursor)
|
||||
{
|
||||
switch (cursor)
|
||||
{
|
||||
case META_CURSOR_DEFAULT:
|
||||
return "left_ptr";
|
||||
case META_CURSOR_NORTH_RESIZE:
|
||||
return "top_side";
|
||||
case META_CURSOR_SOUTH_RESIZE:
|
||||
return "bottom_side";
|
||||
case META_CURSOR_WEST_RESIZE:
|
||||
return "left_side";
|
||||
case META_CURSOR_EAST_RESIZE:
|
||||
return "right_side";
|
||||
case META_CURSOR_SE_RESIZE:
|
||||
return "bottom_right_corner";
|
||||
case META_CURSOR_SW_RESIZE:
|
||||
return "bottom_left_corner";
|
||||
case META_CURSOR_NE_RESIZE:
|
||||
return "top_right_corner";
|
||||
case META_CURSOR_NW_RESIZE:
|
||||
return "top_left_corner";
|
||||
case META_CURSOR_MOVE_OR_RESIZE_WINDOW:
|
||||
return "fleur";
|
||||
case META_CURSOR_BUSY:
|
||||
return "watch";
|
||||
case META_CURSOR_DND_IN_DRAG:
|
||||
return "dnd-none";
|
||||
case META_CURSOR_DND_MOVE:
|
||||
return "dnd-move";
|
||||
case META_CURSOR_DND_COPY:
|
||||
return "dnd-copy";
|
||||
case META_CURSOR_DND_UNSUPPORTED_TARGET:
|
||||
return "dnd-none";
|
||||
case META_CURSOR_POINTING_HAND:
|
||||
return "hand2";
|
||||
case META_CURSOR_CROSSHAIR:
|
||||
return "crosshair";
|
||||
case META_CURSOR_IBEAM:
|
||||
return "xterm";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
Cursor
|
||||
meta_cursor_create_x_cursor (Display *xdisplay,
|
||||
MetaCursor cursor)
|
||||
{
|
||||
return XcursorLibraryLoadCursor (xdisplay, translate_meta_cursor (cursor));
|
||||
}
|
||||
|
||||
static XcursorImages *
|
||||
load_cursor_on_client (MetaCursor cursor, int scale)
|
||||
{
|
||||
return XcursorLibraryLoadImages (translate_meta_cursor (cursor),
|
||||
meta_prefs_get_cursor_theme (),
|
||||
meta_prefs_get_cursor_size () * scale);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_load_from_xcursor_image (MetaCursorSprite *self,
|
||||
XcursorImage *xc_image)
|
||||
{
|
||||
MetaBackend *meta_backend = meta_get_backend ();
|
||||
MetaCursorRenderer *renderer = meta_backend_get_cursor_renderer (meta_backend);
|
||||
uint width, height, rowstride;
|
||||
CoglPixelFormat cogl_format;
|
||||
ClutterBackend *clutter_backend;
|
||||
CoglContext *cogl_context;
|
||||
CoglTexture2D *texture;
|
||||
CoglError *error = NULL;
|
||||
|
||||
g_assert (self->texture == NULL);
|
||||
|
||||
width = xc_image->width;
|
||||
height = xc_image->height;
|
||||
rowstride = width * 4;
|
||||
|
||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||
cogl_format = COGL_PIXEL_FORMAT_BGRA_8888;
|
||||
#else
|
||||
cogl_format = COGL_PIXEL_FORMAT_ARGB_8888;
|
||||
#endif
|
||||
|
||||
clutter_backend = clutter_get_default_backend ();
|
||||
cogl_context = clutter_backend_get_cogl_context (clutter_backend);
|
||||
texture = cogl_texture_2d_new_from_data (cogl_context,
|
||||
width, height,
|
||||
cogl_format,
|
||||
rowstride,
|
||||
(uint8_t *) xc_image->pixels,
|
||||
&error);
|
||||
|
||||
if (error)
|
||||
{
|
||||
meta_warning ("Failed to allocate cursor texture: %s\n", error->message);
|
||||
cogl_error_free (error);
|
||||
}
|
||||
|
||||
meta_cursor_sprite_set_texture (self, COGL_TEXTURE (texture),
|
||||
xc_image->xhot, xc_image->yhot);
|
||||
|
||||
if (texture)
|
||||
cogl_object_unref (texture);
|
||||
|
||||
meta_cursor_renderer_realize_cursor_from_xcursor (renderer, self, xc_image);
|
||||
}
|
||||
|
||||
static XcursorImage *
|
||||
meta_cursor_sprite_get_current_frame_image (MetaCursorSprite *self)
|
||||
{
|
||||
return self->xcursor_images->images[self->current_frame];
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_sprite_tick_frame (MetaCursorSprite *self)
|
||||
{
|
||||
XcursorImage *image;
|
||||
|
||||
if (!meta_cursor_sprite_is_animated (self))
|
||||
return;
|
||||
|
||||
self->current_frame++;
|
||||
|
||||
if (self->current_frame >= self->xcursor_images->nimage)
|
||||
self->current_frame = 0;
|
||||
|
||||
image = meta_cursor_sprite_get_current_frame_image (self);
|
||||
|
||||
g_clear_pointer (&self->texture, cogl_object_unref);
|
||||
meta_cursor_sprite_load_from_xcursor_image (self, image);
|
||||
}
|
||||
|
||||
guint
|
||||
meta_cursor_sprite_get_current_frame_time (MetaCursorSprite *self)
|
||||
{
|
||||
if (!meta_cursor_sprite_is_animated (self))
|
||||
return 0;
|
||||
|
||||
return self->xcursor_images->images[self->current_frame]->delay;
|
||||
}
|
||||
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (MetaCursorSprite,
|
||||
meta_cursor_sprite,
|
||||
G_TYPE_OBJECT)
|
||||
|
||||
gboolean
|
||||
meta_cursor_sprite_is_animated (MetaCursorSprite *self)
|
||||
meta_cursor_sprite_is_animated (MetaCursorSprite *sprite)
|
||||
{
|
||||
return (self->xcursor_images &&
|
||||
self->xcursor_images->nimage > 1);
|
||||
}
|
||||
MetaCursorSpriteClass *klass = META_CURSOR_SPRITE_GET_CLASS (sprite);
|
||||
|
||||
MetaCursorSprite *
|
||||
meta_cursor_sprite_new (void)
|
||||
{
|
||||
return g_object_new (META_TYPE_CURSOR_SPRITE, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_load_from_theme (MetaCursorSprite *self)
|
||||
{
|
||||
XcursorImage *image;
|
||||
|
||||
g_assert (self->cursor != META_CURSOR_NONE);
|
||||
|
||||
self->theme_dirty = FALSE;
|
||||
|
||||
/* We might be reloading with a different scale. If so clear the old data. */
|
||||
if (self->xcursor_images)
|
||||
{
|
||||
g_clear_pointer (&self->texture, cogl_object_unref);
|
||||
XcursorImagesDestroy (self->xcursor_images);
|
||||
}
|
||||
|
||||
self->current_frame = 0;
|
||||
self->xcursor_images = load_cursor_on_client (self->cursor,
|
||||
self->theme_scale);
|
||||
if (!self->xcursor_images)
|
||||
meta_fatal ("Could not find cursor. Perhaps set XCURSOR_PATH?");
|
||||
|
||||
image = meta_cursor_sprite_get_current_frame_image (self);
|
||||
meta_cursor_sprite_load_from_xcursor_image (self, image);
|
||||
}
|
||||
|
||||
MetaCursorSprite *
|
||||
meta_cursor_sprite_from_theme (MetaCursor cursor)
|
||||
{
|
||||
MetaCursorSprite *self;
|
||||
|
||||
self = meta_cursor_sprite_new ();
|
||||
|
||||
self->cursor = cursor;
|
||||
self->theme_dirty = TRUE;
|
||||
|
||||
return self;
|
||||
if (klass->is_animated)
|
||||
return klass->is_animated (sprite);
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_sprite_set_texture (MetaCursorSprite *self,
|
||||
meta_cursor_sprite_tick_frame (MetaCursorSprite *sprite)
|
||||
{
|
||||
return META_CURSOR_SPRITE_GET_CLASS (sprite)->tick_frame (sprite);
|
||||
}
|
||||
|
||||
unsigned int
|
||||
meta_cursor_sprite_get_current_frame_time (MetaCursorSprite *sprite)
|
||||
{
|
||||
return META_CURSOR_SPRITE_GET_CLASS (sprite)->get_current_frame_time (sprite);
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_sprite_clear_texture (MetaCursorSprite *sprite)
|
||||
{
|
||||
MetaCursorSpritePrivate *priv =
|
||||
meta_cursor_sprite_get_instance_private (sprite);
|
||||
|
||||
g_clear_pointer (&priv->texture, cogl_object_unref);
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_sprite_set_texture (MetaCursorSprite *sprite,
|
||||
CoglTexture *texture,
|
||||
int hot_x,
|
||||
int hot_y)
|
||||
{
|
||||
if (self->texture == COGL_TEXTURE_2D (texture) &&
|
||||
self->hot_x == hot_x &&
|
||||
self->hot_y == hot_y)
|
||||
MetaCursorSpritePrivate *priv =
|
||||
meta_cursor_sprite_get_instance_private (sprite);
|
||||
|
||||
if (priv->texture == COGL_TEXTURE_2D (texture) &&
|
||||
priv->hot_x == hot_x &&
|
||||
priv->hot_y == hot_y)
|
||||
return;
|
||||
|
||||
g_clear_pointer (&self->texture, cogl_object_unref);
|
||||
g_clear_pointer (&priv->texture, cogl_object_unref);
|
||||
if (texture)
|
||||
self->texture = cogl_object_ref (texture);
|
||||
self->hot_x = hot_x;
|
||||
self->hot_y = hot_y;
|
||||
priv->texture = cogl_object_ref (texture);
|
||||
priv->hot_x = hot_x;
|
||||
priv->hot_y = hot_y;
|
||||
|
||||
g_signal_emit (self, signals[TEXTURE_CHANGED], 0);
|
||||
g_signal_emit (sprite, signals[TEXTURE_CHANGED], 0);
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_sprite_set_texture_scale (MetaCursorSprite *self,
|
||||
meta_cursor_sprite_set_texture_scale (MetaCursorSprite *sprite,
|
||||
float scale)
|
||||
{
|
||||
self->texture_scale = scale;
|
||||
}
|
||||
MetaCursorSpritePrivate *priv =
|
||||
meta_cursor_sprite_get_instance_private (sprite);
|
||||
|
||||
void
|
||||
meta_cursor_sprite_set_theme_scale (MetaCursorSprite *self,
|
||||
int theme_scale)
|
||||
{
|
||||
if (self->theme_scale != theme_scale)
|
||||
self->theme_dirty = TRUE;
|
||||
self->theme_scale = theme_scale;
|
||||
priv->texture_scale = scale;
|
||||
}
|
||||
|
||||
CoglTexture *
|
||||
meta_cursor_sprite_get_cogl_texture (MetaCursorSprite *self)
|
||||
meta_cursor_sprite_get_cogl_texture (MetaCursorSprite *sprite)
|
||||
{
|
||||
return COGL_TEXTURE (self->texture);
|
||||
}
|
||||
MetaCursorSpritePrivate *priv =
|
||||
meta_cursor_sprite_get_instance_private (sprite);
|
||||
|
||||
MetaCursor
|
||||
meta_cursor_sprite_get_meta_cursor (MetaCursorSprite *self)
|
||||
{
|
||||
return self->cursor;
|
||||
return COGL_TEXTURE (priv->texture);
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_sprite_get_hotspot (MetaCursorSprite *self,
|
||||
meta_cursor_sprite_get_hotspot (MetaCursorSprite *sprite,
|
||||
int *hot_x,
|
||||
int *hot_y)
|
||||
{
|
||||
*hot_x = self->hot_x;
|
||||
*hot_y = self->hot_y;
|
||||
MetaCursorSpritePrivate *priv =
|
||||
meta_cursor_sprite_get_instance_private (sprite);
|
||||
|
||||
*hot_x = priv->hot_x;
|
||||
*hot_y = priv->hot_y;
|
||||
}
|
||||
|
||||
float
|
||||
meta_cursor_sprite_get_texture_scale (MetaCursorSprite *self)
|
||||
meta_cursor_sprite_get_texture_scale (MetaCursorSprite *sprite)
|
||||
{
|
||||
return self->texture_scale;
|
||||
MetaCursorSpritePrivate *priv =
|
||||
meta_cursor_sprite_get_instance_private (sprite);
|
||||
|
||||
return priv->texture_scale;
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_sprite_prepare_at (MetaCursorSprite *self,
|
||||
meta_cursor_sprite_prepare_at (MetaCursorSprite *sprite,
|
||||
int x,
|
||||
int y)
|
||||
{
|
||||
g_signal_emit (self, signals[PREPARE_AT], 0, x, y);
|
||||
g_signal_emit (sprite, signals[PREPARE_AT], 0, x, y);
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_sprite_realize_texture (MetaCursorSprite *self)
|
||||
meta_cursor_sprite_realize_texture (MetaCursorSprite *sprite)
|
||||
{
|
||||
if (self->theme_dirty)
|
||||
meta_cursor_sprite_load_from_theme (self);
|
||||
MetaCursorSpriteClass *klass = META_CURSOR_SPRITE_GET_CLASS (sprite);
|
||||
|
||||
if (klass->realize_texture)
|
||||
klass->realize_texture (sprite);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_init (MetaCursorSprite *self)
|
||||
meta_cursor_sprite_init (MetaCursorSprite *sprite)
|
||||
{
|
||||
self->texture_scale = 1.0f;
|
||||
MetaCursorSpritePrivate *priv =
|
||||
meta_cursor_sprite_get_instance_private (sprite);
|
||||
|
||||
priv->texture_scale = 1.0f;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_finalize (GObject *object)
|
||||
{
|
||||
MetaCursorSprite *self = META_CURSOR_SPRITE (object);
|
||||
MetaCursorSprite *sprite = META_CURSOR_SPRITE (object);
|
||||
MetaCursorSpritePrivate *priv =
|
||||
meta_cursor_sprite_get_instance_private (sprite);
|
||||
|
||||
if (self->xcursor_images)
|
||||
XcursorImagesDestroy (self->xcursor_images);
|
||||
|
||||
g_clear_pointer (&self->texture, cogl_object_unref);
|
||||
g_clear_pointer (&priv->texture, cogl_object_unref);
|
||||
|
||||
G_OBJECT_CLASS (meta_cursor_sprite_parent_class)->finalize (object);
|
||||
}
|
||||
|
@ -25,51 +25,50 @@
|
||||
#include <meta/common.h>
|
||||
#include <meta/boxes.h>
|
||||
|
||||
typedef struct _MetaCursorSprite MetaCursorSprite;
|
||||
|
||||
#define META_TYPE_CURSOR_SPRITE (meta_cursor_sprite_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaCursorSprite,
|
||||
meta_cursor_sprite,
|
||||
META, CURSOR_SPRITE,
|
||||
GObject);
|
||||
G_DECLARE_DERIVABLE_TYPE (MetaCursorSprite,
|
||||
meta_cursor_sprite,
|
||||
META, CURSOR_SPRITE,
|
||||
GObject)
|
||||
|
||||
MetaCursorSprite * meta_cursor_sprite_new (void);
|
||||
struct _MetaCursorSpriteClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
MetaCursorSprite * meta_cursor_sprite_from_theme (MetaCursor cursor);
|
||||
void (* realize_texture) (MetaCursorSprite *sprite);
|
||||
gboolean (* is_animated) (MetaCursorSprite *sprite);
|
||||
void (* tick_frame) (MetaCursorSprite *sprite);
|
||||
unsigned int (* get_current_frame_time) (MetaCursorSprite *sprite);
|
||||
};
|
||||
|
||||
|
||||
void meta_cursor_sprite_set_theme_scale (MetaCursorSprite *self,
|
||||
int scale);
|
||||
|
||||
MetaCursor meta_cursor_sprite_get_meta_cursor (MetaCursorSprite *self);
|
||||
|
||||
Cursor meta_cursor_create_x_cursor (Display *xdisplay,
|
||||
MetaCursor cursor);
|
||||
|
||||
void meta_cursor_sprite_prepare_at (MetaCursorSprite *self,
|
||||
void meta_cursor_sprite_prepare_at (MetaCursorSprite *sprite,
|
||||
int x,
|
||||
int y);
|
||||
|
||||
void meta_cursor_sprite_realize_texture (MetaCursorSprite *self);
|
||||
void meta_cursor_sprite_realize_texture (MetaCursorSprite *sprite);
|
||||
|
||||
void meta_cursor_sprite_set_texture (MetaCursorSprite *self,
|
||||
void meta_cursor_sprite_clear_texture (MetaCursorSprite *sprite);
|
||||
|
||||
void meta_cursor_sprite_set_texture (MetaCursorSprite *sprite,
|
||||
CoglTexture *texture,
|
||||
int hot_x,
|
||||
int hot_y);
|
||||
|
||||
void meta_cursor_sprite_set_texture_scale (MetaCursorSprite *self,
|
||||
void meta_cursor_sprite_set_texture_scale (MetaCursorSprite *sprite,
|
||||
float scale);
|
||||
|
||||
CoglTexture *meta_cursor_sprite_get_cogl_texture (MetaCursorSprite *self);
|
||||
CoglTexture *meta_cursor_sprite_get_cogl_texture (MetaCursorSprite *sprite);
|
||||
|
||||
void meta_cursor_sprite_get_hotspot (MetaCursorSprite *self,
|
||||
void meta_cursor_sprite_get_hotspot (MetaCursorSprite *sprite,
|
||||
int *hot_x,
|
||||
int *hot_y);
|
||||
|
||||
float meta_cursor_sprite_get_texture_scale (MetaCursorSprite *self);
|
||||
float meta_cursor_sprite_get_texture_scale (MetaCursorSprite *sprite);
|
||||
|
||||
gboolean meta_cursor_sprite_is_animated (MetaCursorSprite *self);
|
||||
void meta_cursor_sprite_tick_frame (MetaCursorSprite *self);
|
||||
guint meta_cursor_sprite_get_current_frame_time (MetaCursorSprite *self);
|
||||
gboolean meta_cursor_sprite_is_animated (MetaCursorSprite *sprite);
|
||||
|
||||
void meta_cursor_sprite_tick_frame (MetaCursorSprite *sprite);
|
||||
|
||||
unsigned int meta_cursor_sprite_get_current_frame_time (MetaCursorSprite *sprite);
|
||||
|
||||
#endif /* META_CURSOR_H */
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
gboolean meta_dnd_handle_xdnd_event (MetaBackend *backend,
|
||||
MetaCompositor *compositor,
|
||||
MetaDisplay *display,
|
||||
Display *xdisplay,
|
||||
XEvent *xev);
|
||||
|
||||
#ifdef HAVE_WAYLAND
|
||||
|
@ -226,7 +226,7 @@ meta_idle_monitor_inhibited_actions_changed (GDBusProxy *session,
|
||||
{
|
||||
gboolean inhibited;
|
||||
|
||||
inhibited = g_variant_get_uint32 (v) & GSM_INHIBITOR_FLAG_IDLE;
|
||||
inhibited = !!(g_variant_get_uint32 (v) & GSM_INHIBITOR_FLAG_IDLE);
|
||||
g_variant_unref (v);
|
||||
|
||||
if (!inhibited)
|
||||
@ -263,8 +263,12 @@ meta_idle_monitor_init (MetaIdleMonitor *monitor)
|
||||
|
||||
v = g_dbus_proxy_get_cached_property (monitor->session_proxy,
|
||||
"InhibitedActions");
|
||||
monitor->inhibited = g_variant_get_uint32 (v) & GSM_INHIBITOR_FLAG_IDLE;
|
||||
g_variant_unref (v);
|
||||
if (v)
|
||||
{
|
||||
monitor->inhibited = !!(g_variant_get_uint32 (v) &
|
||||
GSM_INHIBITOR_FLAG_IDLE);
|
||||
g_variant_unref (v);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -100,11 +100,12 @@ static MetaMonitorTransform
|
||||
derive_monitor_transform (MetaMonitor *monitor)
|
||||
{
|
||||
MetaOutput *main_output;
|
||||
MetaMonitorTransform transform;
|
||||
|
||||
main_output = meta_monitor_get_main_output (monitor);
|
||||
transform = meta_output_get_assigned_crtc (main_output)->transform;
|
||||
|
||||
return meta_monitor_crtc_to_logical_transform (monitor,
|
||||
main_output->crtc->transform);
|
||||
return meta_monitor_crtc_to_logical_transform (monitor, transform);
|
||||
}
|
||||
|
||||
MetaLogicalMonitor *
|
||||
@ -145,7 +146,7 @@ meta_logical_monitor_add_monitor (MetaLogicalMonitor *logical_monitor,
|
||||
|
||||
is_presentation = logical_monitor->is_presentation;
|
||||
logical_monitor->monitors = g_list_append (logical_monitor->monitors,
|
||||
monitor);
|
||||
g_object_ref (monitor));
|
||||
|
||||
for (l = logical_monitor->monitors; l; l = l->next)
|
||||
{
|
||||
@ -157,10 +158,12 @@ meta_logical_monitor_add_monitor (MetaLogicalMonitor *logical_monitor,
|
||||
for (l_output = outputs; l_output; l_output = l_output->next)
|
||||
{
|
||||
MetaOutput *output = l_output->data;
|
||||
MetaCrtc *crtc;
|
||||
|
||||
is_presentation = is_presentation && output->is_presentation;
|
||||
if (output->crtc)
|
||||
output->crtc->logical_monitor = logical_monitor;
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
if (crtc)
|
||||
crtc->logical_monitor = logical_monitor;
|
||||
}
|
||||
}
|
||||
|
||||
@ -220,7 +223,7 @@ foreach_crtc (MetaMonitor *monitor,
|
||||
ForeachCrtcData *data = user_data;
|
||||
|
||||
data->func (data->logical_monitor,
|
||||
monitor_crtc_mode->output->crtc,
|
||||
meta_output_get_assigned_crtc (monitor_crtc_mode->output),
|
||||
data->user_data);
|
||||
|
||||
return TRUE;
|
||||
@ -254,13 +257,17 @@ meta_logical_monitor_init (MetaLogicalMonitor *logical_monitor)
|
||||
}
|
||||
|
||||
static void
|
||||
meta_logical_monitor_finalize (GObject *object)
|
||||
meta_logical_monitor_dispose (GObject *object)
|
||||
{
|
||||
MetaLogicalMonitor *logical_monitor = META_LOGICAL_MONITOR (object);
|
||||
|
||||
g_list_free (logical_monitor->monitors);
|
||||
if (logical_monitor->monitors)
|
||||
{
|
||||
g_list_free_full (logical_monitor->monitors, g_object_unref);
|
||||
logical_monitor->monitors = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (meta_logical_monitor_parent_class)->finalize (object);
|
||||
G_OBJECT_CLASS (meta_logical_monitor_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -268,38 +275,38 @@ meta_logical_monitor_class_init (MetaLogicalMonitorClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->finalize = meta_logical_monitor_finalize;
|
||||
object_class->dispose = meta_logical_monitor_dispose;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_logical_monitor_has_neighbor (MetaLogicalMonitor *logical_monitor,
|
||||
MetaLogicalMonitor *neighbor,
|
||||
MetaScreenDirection neighbor_direction)
|
||||
meta_logical_monitor_has_neighbor (MetaLogicalMonitor *logical_monitor,
|
||||
MetaLogicalMonitor *neighbor,
|
||||
MetaDisplayDirection neighbor_direction)
|
||||
{
|
||||
switch (neighbor_direction)
|
||||
{
|
||||
case META_SCREEN_RIGHT:
|
||||
case META_DISPLAY_RIGHT:
|
||||
if (neighbor->rect.x == (logical_monitor->rect.x +
|
||||
logical_monitor->rect.width) &&
|
||||
meta_rectangle_vert_overlap (&neighbor->rect,
|
||||
&logical_monitor->rect))
|
||||
return TRUE;
|
||||
break;
|
||||
case META_SCREEN_LEFT:
|
||||
case META_DISPLAY_LEFT:
|
||||
if (logical_monitor->rect.x == (neighbor->rect.x +
|
||||
neighbor->rect.width) &&
|
||||
meta_rectangle_vert_overlap (&neighbor->rect,
|
||||
&logical_monitor->rect))
|
||||
return TRUE;
|
||||
break;
|
||||
case META_SCREEN_UP:
|
||||
case META_DISPLAY_UP:
|
||||
if (logical_monitor->rect.y == (neighbor->rect.y +
|
||||
neighbor->rect.height) &&
|
||||
meta_rectangle_horiz_overlap (&neighbor->rect,
|
||||
&logical_monitor->rect))
|
||||
return TRUE;
|
||||
break;
|
||||
case META_SCREEN_DOWN:
|
||||
case META_DISPLAY_DOWN:
|
||||
if (neighbor->rect.y == (logical_monitor->rect.y +
|
||||
logical_monitor->rect.height) &&
|
||||
meta_rectangle_horiz_overlap (&neighbor->rect,
|
||||
|
@ -90,9 +90,9 @@ MetaRectangle meta_logical_monitor_get_layout (MetaLogicalMonitor *logical_monit
|
||||
|
||||
GList * meta_logical_monitor_get_monitors (MetaLogicalMonitor *logical_monitor);
|
||||
|
||||
gboolean meta_logical_monitor_has_neighbor (MetaLogicalMonitor *logical_monitor,
|
||||
MetaLogicalMonitor *neighbor,
|
||||
MetaScreenDirection neighbor_dir);
|
||||
gboolean meta_logical_monitor_has_neighbor (MetaLogicalMonitor *logical_monitor,
|
||||
MetaLogicalMonitor *neighbor,
|
||||
MetaDisplayDirection neighbor_dir);
|
||||
|
||||
void meta_logical_monitor_foreach_crtc (MetaLogicalMonitor *logical_monitor,
|
||||
MetaLogicalMonitorCrtcFunc func,
|
||||
|
@ -23,6 +23,7 @@
|
||||
|
||||
#include "backends/meta-monitor-config-manager.h"
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "backends/meta-monitor-config-migration.h"
|
||||
#include "backends/meta-monitor-config-store.h"
|
||||
#include "backends/meta-monitor-manager-private.h"
|
||||
@ -326,6 +327,15 @@ meta_monitor_config_manager_assign (MetaMonitorManager *manager,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_lid_closed (MetaMonitorManager *monitor_manager)
|
||||
{
|
||||
MetaBackend *backend;
|
||||
|
||||
backend = meta_monitor_manager_get_backend (monitor_manager);
|
||||
return meta_backend_is_lid_closed (backend);
|
||||
}
|
||||
|
||||
MetaMonitorsConfigKey *
|
||||
meta_create_monitors_config_key_for_current_state (MetaMonitorManager *monitor_manager)
|
||||
{
|
||||
@ -340,7 +350,7 @@ meta_create_monitors_config_key_for_current_state (MetaMonitorManager *monitor_m
|
||||
MetaMonitorSpec *monitor_spec;
|
||||
|
||||
if (meta_monitor_is_laptop_panel (monitor) &&
|
||||
meta_monitor_manager_is_lid_closed (monitor_manager))
|
||||
is_lid_closed (monitor_manager))
|
||||
continue;
|
||||
|
||||
monitor_spec = meta_monitor_spec_clone (meta_monitor_get_spec (monitor));
|
||||
@ -455,7 +465,7 @@ find_primary_monitor (MetaMonitorManager *monitor_manager)
|
||||
{
|
||||
MetaMonitor *monitor;
|
||||
|
||||
if (meta_monitor_manager_is_lid_closed (monitor_manager))
|
||||
if (is_lid_closed (monitor_manager))
|
||||
{
|
||||
monitor = meta_monitor_manager_get_primary_monitor (monitor_manager);
|
||||
if (monitor && !meta_monitor_is_laptop_panel (monitor))
|
||||
@ -598,7 +608,7 @@ meta_monitor_config_manager_create_linear (MetaMonitorConfigManager *config_mana
|
||||
continue;
|
||||
|
||||
if (meta_monitor_is_laptop_panel (monitor) &&
|
||||
meta_monitor_manager_is_lid_closed (monitor_manager))
|
||||
is_lid_closed (monitor_manager))
|
||||
continue;
|
||||
|
||||
logical_monitor_config =
|
||||
@ -1252,7 +1262,7 @@ meta_monitors_config_new (MetaMonitorManager *monitor_manager,
|
||||
MetaMonitor *monitor = l->data;
|
||||
MetaMonitorSpec *monitor_spec;
|
||||
|
||||
if (meta_monitor_manager_is_lid_closed (monitor_manager) &&
|
||||
if (is_lid_closed (monitor_manager) &&
|
||||
meta_monitor_is_laptop_panel (monitor))
|
||||
continue;
|
||||
|
||||
|
@ -486,7 +486,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
|
||||
|
||||
output->is_dirty = TRUE;
|
||||
output->crtc = crtc;
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -531,7 +531,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
continue;
|
||||
}
|
||||
|
||||
output->crtc = NULL;
|
||||
meta_output_unassign_crtc (output);
|
||||
output->is_primary = FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -37,10 +37,8 @@
|
||||
|
||||
#include <cogl/cogl.h>
|
||||
#include <libgnome-desktop/gnome-pnp-ids.h>
|
||||
#include <libupower-glib/upower.h>
|
||||
|
||||
#include "display-private.h"
|
||||
#include <meta/screen.h>
|
||||
#include "stack-tracker.h"
|
||||
#include <meta/meta-monitor-manager.h>
|
||||
|
||||
@ -180,7 +178,6 @@ struct _MetaMonitorManager
|
||||
MetaMonitorConfigManager *config_manager;
|
||||
|
||||
GnomePnpIds *pnp_ids;
|
||||
UpClient *up_client;
|
||||
|
||||
gulong experimental_features_changed_handler_id;
|
||||
|
||||
@ -196,8 +193,6 @@ struct _MetaMonitorManagerClass
|
||||
GBytes* (*read_edid) (MetaMonitorManager *,
|
||||
MetaOutput *);
|
||||
|
||||
gboolean (*is_lid_closed) (MetaMonitorManager *);
|
||||
|
||||
void (*ensure_initial_config) (MetaMonitorManager *);
|
||||
|
||||
gboolean (*apply_monitors_config) (MetaMonitorManager *,
|
||||
@ -279,9 +274,9 @@ MetaLogicalMonitor *meta_monitor_manager_get_logical_monitor_at (MetaMonitorMana
|
||||
MetaLogicalMonitor *meta_monitor_manager_get_logical_monitor_from_rect (MetaMonitorManager *manager,
|
||||
MetaRectangle *rect);
|
||||
|
||||
MetaLogicalMonitor *meta_monitor_manager_get_logical_monitor_neighbor (MetaMonitorManager *manager,
|
||||
MetaLogicalMonitor *logical_monitor,
|
||||
MetaScreenDirection direction);
|
||||
MetaLogicalMonitor *meta_monitor_manager_get_logical_monitor_neighbor (MetaMonitorManager *manager,
|
||||
MetaLogicalMonitor *logical_monitor,
|
||||
MetaDisplayDirection direction);
|
||||
|
||||
MetaMonitor * meta_monitor_manager_get_primary_monitor (MetaMonitorManager *manager);
|
||||
|
||||
@ -336,8 +331,6 @@ void meta_monitor_manager_update_logical_state (MetaMonitorManager
|
||||
void meta_monitor_manager_update_logical_state_derived (MetaMonitorManager *manager,
|
||||
MetaMonitorsConfig *config);
|
||||
|
||||
gboolean meta_monitor_manager_is_lid_closed (MetaMonitorManager *manager);
|
||||
|
||||
void meta_monitor_manager_lid_is_closed_changed (MetaMonitorManager *manager);
|
||||
|
||||
gboolean meta_monitor_manager_is_headless (MetaMonitorManager *manager);
|
||||
|
@ -34,8 +34,9 @@
|
||||
|
||||
#include <meta/main.h>
|
||||
#include "util-private.h"
|
||||
#include <meta/errors.h>
|
||||
#include <meta/meta-x11-errors.h>
|
||||
#include "edid.h"
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "backends/meta-crtc.h"
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
#include "backends/meta-monitor.h"
|
||||
@ -346,30 +347,14 @@ meta_monitor_manager_lid_is_closed_changed (MetaMonitorManager *manager)
|
||||
}
|
||||
|
||||
static void
|
||||
lid_is_closed_changed (UpClient *client,
|
||||
GParamSpec *pspec,
|
||||
gpointer user_data)
|
||||
lid_is_closed_changed (MetaBackend *backend,
|
||||
gboolean lid_is_closed,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaMonitorManager *manager = user_data;
|
||||
|
||||
meta_monitor_manager_lid_is_closed_changed (manager);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_monitor_manager_real_is_lid_closed (MetaMonitorManager *manager)
|
||||
{
|
||||
if (!manager->up_client)
|
||||
return FALSE;
|
||||
|
||||
return up_client_get_lid_is_closed (manager->up_client);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_monitor_manager_is_lid_closed (MetaMonitorManager *manager)
|
||||
{
|
||||
return META_MONITOR_MANAGER_GET_CLASS (manager)->is_lid_closed (manager);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_monitor_manager_is_headless (MetaMonitorManager *manager)
|
||||
{
|
||||
@ -585,6 +570,8 @@ meta_monitor_manager_ensure_configured (MetaMonitorManager *manager)
|
||||
&error))
|
||||
{
|
||||
g_clear_object (&config);
|
||||
g_warning ("Failed to use linear monitor configuration: %s",
|
||||
error->message);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
else
|
||||
@ -602,6 +589,8 @@ meta_monitor_manager_ensure_configured (MetaMonitorManager *manager)
|
||||
&error))
|
||||
{
|
||||
g_clear_object (&config);
|
||||
g_warning ("Failed to use fallback monitor configuration: %s",
|
||||
error->message);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
else
|
||||
@ -715,8 +704,6 @@ static void
|
||||
meta_monitor_manager_constructed (GObject *object)
|
||||
{
|
||||
MetaMonitorManager *manager = META_MONITOR_MANAGER (object);
|
||||
MetaMonitorManagerClass *manager_class =
|
||||
META_MONITOR_MANAGER_GET_CLASS (manager);
|
||||
MetaBackend *backend = manager->backend;
|
||||
MetaSettings *settings = meta_backend_get_settings (backend);
|
||||
|
||||
@ -726,13 +713,6 @@ meta_monitor_manager_constructed (GObject *object)
|
||||
G_CALLBACK (experimental_features_changed),
|
||||
manager);
|
||||
|
||||
if (manager_class->is_lid_closed == meta_monitor_manager_real_is_lid_closed)
|
||||
{
|
||||
manager->up_client = up_client_new ();
|
||||
g_signal_connect_object (manager->up_client, "notify::lid-is-closed",
|
||||
G_CALLBACK (lid_is_closed_changed), manager, 0);
|
||||
}
|
||||
|
||||
g_signal_connect_object (manager, "notify::power-save-mode",
|
||||
G_CALLBACK (power_save_mode_changed), manager, 0);
|
||||
|
||||
@ -741,6 +721,11 @@ meta_monitor_manager_constructed (GObject *object)
|
||||
G_CALLBACK (orientation_changed),
|
||||
manager, 0);
|
||||
|
||||
g_signal_connect_object (backend,
|
||||
"lid-is-closed-changed",
|
||||
G_CALLBACK (lid_is_closed_changed),
|
||||
manager, 0);
|
||||
|
||||
manager->current_switch_config = META_MONITOR_SWITCH_CONFIG_UNKNOWN;
|
||||
|
||||
initialize_dbus_interface (manager);
|
||||
@ -772,7 +757,6 @@ meta_monitor_manager_dispose (GObject *object)
|
||||
}
|
||||
|
||||
g_clear_object (&manager->config_manager);
|
||||
g_clear_object (&manager->up_client);
|
||||
|
||||
G_OBJECT_CLASS (meta_monitor_manager_parent_class)->dispose (object);
|
||||
}
|
||||
@ -840,7 +824,6 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
|
||||
|
||||
klass->get_edid_file = meta_monitor_manager_real_get_edid_file;
|
||||
klass->read_edid = meta_monitor_manager_real_read_edid;
|
||||
klass->is_lid_closed = meta_monitor_manager_real_is_lid_closed;
|
||||
|
||||
signals[MONITORS_CHANGED_INTERNAL] =
|
||||
g_signal_new ("monitors-changed-internal",
|
||||
@ -1041,6 +1024,7 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
|
||||
GVariantBuilder crtcs, modes, clones, properties;
|
||||
GBytes *edid;
|
||||
char *edid_file;
|
||||
MetaCrtc *crtc;
|
||||
int crtc_index;
|
||||
|
||||
g_variant_builder_init (&crtcs, G_VARIANT_TYPE ("au"));
|
||||
@ -1134,8 +1118,8 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
|
||||
output->tile_info.tile_h));
|
||||
}
|
||||
|
||||
crtc_index = output->crtc ? g_list_index (combined_crtcs, output->crtc)
|
||||
: -1;
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
crtc_index = crtc ? g_list_index (combined_crtcs, crtc) : -1;
|
||||
g_variant_builder_add (&output_builder, "(uxiausauaua{sv})",
|
||||
i, /* ID */
|
||||
(gint64)output->winsys_id,
|
||||
@ -1318,9 +1302,13 @@ meta_monitor_manager_handle_get_current_state (MetaDBusDisplayConfig *skeleton,
|
||||
GVariantBuilder mode_properties_builder;
|
||||
MetaCrtcModeFlag mode_flags;
|
||||
|
||||
if (!meta_monitor_mode_should_be_advertised (monitor_mode))
|
||||
continue;
|
||||
|
||||
mode_id = meta_monitor_mode_get_id (monitor_mode);
|
||||
meta_monitor_mode_get_resolution (monitor_mode,
|
||||
&mode_width, &mode_height);
|
||||
|
||||
refresh_rate = meta_monitor_mode_get_refresh_rate (monitor_mode);
|
||||
|
||||
preferred_scale =
|
||||
@ -1577,7 +1565,7 @@ meta_monitor_manager_is_config_applicable (MetaMonitorManager *manager,
|
||||
}
|
||||
|
||||
if (meta_monitor_is_laptop_panel (monitor) &&
|
||||
meta_monitor_manager_is_lid_closed (manager))
|
||||
meta_backend_is_lid_closed (manager->backend))
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Refusing to activate a closed laptop panel");
|
||||
@ -2487,9 +2475,9 @@ meta_monitor_manager_get_logical_monitor_from_rect (MetaMonitorManager *manager,
|
||||
}
|
||||
|
||||
MetaLogicalMonitor *
|
||||
meta_monitor_manager_get_logical_monitor_neighbor (MetaMonitorManager *manager,
|
||||
MetaLogicalMonitor *logical_monitor,
|
||||
MetaScreenDirection direction)
|
||||
meta_monitor_manager_get_logical_monitor_neighbor (MetaMonitorManager *manager,
|
||||
MetaLogicalMonitor *logical_monitor,
|
||||
MetaDisplayDirection direction)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
@ -2903,11 +2891,7 @@ meta_monitor_manager_get_monitor_for_connector (MetaMonitorManager *manager,
|
||||
|
||||
if (meta_monitor_is_active (monitor) &&
|
||||
g_str_equal (connector, meta_monitor_get_connector (monitor)))
|
||||
{
|
||||
MetaOutput *main_output = meta_monitor_get_main_output (monitor);
|
||||
|
||||
return main_output->crtc->logical_monitor->number;
|
||||
}
|
||||
return meta_monitor_get_logical_monitor (monitor)->number;
|
||||
}
|
||||
|
||||
return -1;
|
||||
@ -2983,7 +2967,7 @@ meta_monitor_manager_switch_config (MetaMonitorManager *manager,
|
||||
gboolean
|
||||
meta_monitor_manager_can_switch_config (MetaMonitorManager *manager)
|
||||
{
|
||||
return (!meta_monitor_manager_is_lid_closed (manager) &&
|
||||
return (!meta_backend_is_lid_closed (manager->backend) &&
|
||||
g_list_length (manager->monitors) > 1);
|
||||
}
|
||||
|
||||
|
@ -203,11 +203,9 @@ meta_monitor_get_main_output (MetaMonitor *monitor)
|
||||
gboolean
|
||||
meta_monitor_is_active (MetaMonitor *monitor)
|
||||
{
|
||||
MetaOutput *output;
|
||||
MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
|
||||
|
||||
output = meta_monitor_get_main_output (monitor);
|
||||
|
||||
return output->crtc && output->crtc->current_mode;
|
||||
return !!priv->current_mode;
|
||||
}
|
||||
|
||||
gboolean
|
||||
@ -385,6 +383,21 @@ meta_monitor_crtc_to_logical_transform (MetaMonitor *monitor,
|
||||
return new_transform;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_monitor_dispose (GObject *object)
|
||||
{
|
||||
MetaMonitor *monitor = META_MONITOR (object);
|
||||
MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
|
||||
|
||||
if (priv->outputs)
|
||||
{
|
||||
g_list_free_full (priv->outputs, g_object_unref);
|
||||
priv->outputs = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (meta_monitor_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_monitor_finalize (GObject *object)
|
||||
{
|
||||
@ -393,7 +406,6 @@ meta_monitor_finalize (GObject *object)
|
||||
|
||||
g_hash_table_destroy (priv->mode_ids);
|
||||
g_list_free_full (priv->modes, (GDestroyNotify) meta_monitor_mode_free);
|
||||
g_clear_pointer (&priv->outputs, g_list_free);
|
||||
meta_monitor_spec_free (priv->spec);
|
||||
|
||||
G_OBJECT_CLASS (meta_monitor_parent_class)->finalize (object);
|
||||
@ -412,6 +424,7 @@ meta_monitor_class_init (MetaMonitorClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->dispose = meta_monitor_dispose;
|
||||
object_class->finalize = meta_monitor_finalize;
|
||||
}
|
||||
|
||||
@ -493,6 +506,7 @@ meta_monitor_normal_generate_modes (MetaMonitorNormal *monitor_normal)
|
||||
for (i = 0; i < output->n_modes; i++)
|
||||
{
|
||||
MetaCrtcMode *crtc_mode = output->modes[i];
|
||||
MetaCrtc *crtc;
|
||||
MetaMonitorMode *mode;
|
||||
gboolean replace;
|
||||
|
||||
@ -526,7 +540,9 @@ meta_monitor_normal_generate_modes (MetaMonitorNormal *monitor_normal)
|
||||
|
||||
if (crtc_mode == output->preferred_mode)
|
||||
monitor_priv->preferred_mode = mode;
|
||||
if (output->crtc && crtc_mode == output->crtc->current_mode)
|
||||
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
if (crtc && crtc_mode == crtc->current_mode)
|
||||
monitor_priv->current_mode = mode;
|
||||
}
|
||||
}
|
||||
@ -545,7 +561,7 @@ meta_monitor_normal_new (MetaGpu *gpu,
|
||||
|
||||
monitor_priv->gpu = gpu;
|
||||
|
||||
monitor_priv->outputs = g_list_append (NULL, output);
|
||||
monitor_priv->outputs = g_list_append (NULL, g_object_ref (output));
|
||||
monitor_priv->winsys_id = output->winsys_id;
|
||||
meta_monitor_generate_spec (monitor);
|
||||
|
||||
@ -568,13 +584,15 @@ meta_monitor_normal_derive_layout (MetaMonitor *monitor,
|
||||
MetaRectangle *layout)
|
||||
{
|
||||
MetaOutput *output;
|
||||
MetaCrtc *crtc;
|
||||
|
||||
output = meta_monitor_get_main_output (monitor);
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
*layout = (MetaRectangle) {
|
||||
.x = output->crtc->rect.x,
|
||||
.y = output->crtc->rect.y,
|
||||
.width = output->crtc->rect.width,
|
||||
.height = output->crtc->rect.height
|
||||
.x = crtc->rect.x,
|
||||
.y = crtc->rect.y,
|
||||
.width = crtc->rect.width,
|
||||
.height = crtc->rect.height
|
||||
};
|
||||
}
|
||||
|
||||
@ -658,7 +676,8 @@ add_tiled_monitor_outputs (MetaGpu *gpu,
|
||||
g_warn_if_fail (output->subpixel_order ==
|
||||
monitor_tiled->origin_output->subpixel_order);
|
||||
|
||||
monitor_priv->outputs = g_list_append (monitor_priv->outputs, output);
|
||||
monitor_priv->outputs = g_list_append (monitor_priv->outputs,
|
||||
g_object_ref (output));
|
||||
}
|
||||
}
|
||||
|
||||
@ -764,12 +783,13 @@ is_monitor_mode_assigned (MetaMonitor *monitor,
|
||||
{
|
||||
MetaOutput *output = l->data;
|
||||
MetaMonitorCrtcMode *monitor_crtc_mode = &mode->crtc_modes[i];
|
||||
MetaCrtc *crtc;
|
||||
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
if (monitor_crtc_mode->crtc_mode &&
|
||||
(!output->crtc ||
|
||||
output->crtc->current_mode != monitor_crtc_mode->crtc_mode))
|
||||
(!crtc || crtc->current_mode != monitor_crtc_mode->crtc_mode))
|
||||
return FALSE;
|
||||
else if (!monitor_crtc_mode->crtc_mode && output->crtc)
|
||||
else if (!monitor_crtc_mode->crtc_mode && crtc)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -1217,14 +1237,16 @@ meta_monitor_tiled_derive_layout (MetaMonitor *monitor,
|
||||
for (l = monitor_priv->outputs; l; l = l->next)
|
||||
{
|
||||
MetaOutput *output = l->data;
|
||||
MetaCrtc *crtc;
|
||||
|
||||
if (!output->crtc)
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
min_x = MIN (output->crtc->rect.x, min_x);
|
||||
min_y = MIN (output->crtc->rect.y, min_y);
|
||||
max_x = MAX (output->crtc->rect.x + output->crtc->rect.width, max_x);
|
||||
max_y = MAX (output->crtc->rect.y + output->crtc->rect.height, max_y);
|
||||
min_x = MIN (crtc->rect.x, min_x);
|
||||
min_y = MIN (crtc->rect.y, min_y);
|
||||
max_x = MAX (crtc->rect.x + crtc->rect.width, max_x);
|
||||
max_y = MAX (crtc->rect.y + crtc->rect.height, max_y);
|
||||
}
|
||||
|
||||
*layout = (MetaRectangle) {
|
||||
@ -1318,10 +1340,14 @@ meta_monitor_get_spec (MetaMonitor *monitor)
|
||||
MetaLogicalMonitor *
|
||||
meta_monitor_get_logical_monitor (MetaMonitor *monitor)
|
||||
{
|
||||
MetaOutput *output = meta_monitor_get_main_output (monitor);
|
||||
MetaOutput *output;
|
||||
MetaCrtc *crtc;
|
||||
|
||||
if (output->crtc)
|
||||
return output->crtc->logical_monitor;
|
||||
output = meta_monitor_get_main_output (monitor);
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
|
||||
if (crtc)
|
||||
return crtc->logical_monitor;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
@ -1381,6 +1407,18 @@ meta_monitor_get_current_mode (MetaMonitor *monitor)
|
||||
return priv->current_mode;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_current_mode_known (MetaMonitor *monitor)
|
||||
{
|
||||
MetaOutput *output;
|
||||
MetaCrtc *crtc;
|
||||
|
||||
output = meta_monitor_get_main_output (monitor);
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
|
||||
return meta_monitor_is_active (monitor) == (crtc && crtc->current_mode);
|
||||
}
|
||||
|
||||
void
|
||||
meta_monitor_derive_current_mode (MetaMonitor *monitor)
|
||||
{
|
||||
@ -1400,6 +1438,8 @@ meta_monitor_derive_current_mode (MetaMonitor *monitor)
|
||||
}
|
||||
|
||||
priv->current_mode = current_mode;
|
||||
|
||||
g_warn_if_fail (is_current_mode_known (monitor));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1523,6 +1563,22 @@ meta_monitor_calculate_mode_scale (MetaMonitor *monitor,
|
||||
return calculate_scale (monitor, monitor_mode);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_logical_size_large_enough (gint width, gint height)
|
||||
{
|
||||
return width >= MINIMUM_LOGICAL_WIDTH &&
|
||||
height >= MINIMUM_LOGICAL_HEIGHT;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_monitor_mode_should_be_advertised (MetaMonitorMode *monitor_mode)
|
||||
{
|
||||
g_return_val_if_fail (monitor_mode != NULL, FALSE);
|
||||
|
||||
return is_logical_size_large_enough (monitor_mode->spec.width,
|
||||
monitor_mode->spec.height);
|
||||
}
|
||||
|
||||
static float
|
||||
get_closest_scale_factor_for_resolution (float width,
|
||||
float height,
|
||||
@ -1543,8 +1599,7 @@ get_closest_scale_factor_for_resolution (float width,
|
||||
|
||||
if (scale < MINIMUM_SCALE_FACTOR ||
|
||||
scale > MAXIMUM_SCALE_FACTOR ||
|
||||
floorf (scaled_w) < MINIMUM_LOGICAL_WIDTH ||
|
||||
floorf (scaled_h) < MINIMUM_LOGICAL_HEIGHT)
|
||||
!is_logical_size_large_enough (floorf (scaled_w), floorf (scaled_h)))
|
||||
goto out;
|
||||
|
||||
if (floorf (scaled_w) == scaled_w && floorf (scaled_h) == scaled_h)
|
||||
|
@ -219,6 +219,8 @@ gboolean meta_monitor_mode_foreach_output (MetaMonitor *monitor,
|
||||
gpointer user_data,
|
||||
GError **error);
|
||||
|
||||
gboolean meta_monitor_mode_should_be_advertised (MetaMonitorMode *monitor_mode);
|
||||
|
||||
MetaMonitorSpec * meta_monitor_spec_clone (MetaMonitorSpec *monitor_id);
|
||||
|
||||
gboolean meta_monitor_spec_equals (MetaMonitorSpec *monitor_id,
|
||||
|
@ -21,7 +21,13 @@
|
||||
|
||||
#include "backends/meta-output.h"
|
||||
|
||||
G_DEFINE_TYPE (MetaOutput, meta_output, G_TYPE_OBJECT)
|
||||
typedef struct _MetaOutputPrivate
|
||||
{
|
||||
/* The CRTC driving this output, NULL if the output is not enabled */
|
||||
MetaCrtc *crtc;
|
||||
} MetaOutputPrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaOutput, meta_output, G_TYPE_OBJECT)
|
||||
|
||||
MetaGpu *
|
||||
meta_output_get_gpu (MetaOutput *output)
|
||||
@ -29,6 +35,44 @@ meta_output_get_gpu (MetaOutput *output)
|
||||
return output->gpu;
|
||||
}
|
||||
|
||||
void
|
||||
meta_output_assign_crtc (MetaOutput *output,
|
||||
MetaCrtc *crtc)
|
||||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
g_assert (crtc);
|
||||
|
||||
g_set_object (&priv->crtc, crtc);
|
||||
}
|
||||
|
||||
void
|
||||
meta_output_unassign_crtc (MetaOutput *output)
|
||||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
g_clear_object (&priv->crtc);
|
||||
}
|
||||
|
||||
MetaCrtc *
|
||||
meta_output_get_assigned_crtc (MetaOutput *output)
|
||||
{
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
return priv->crtc;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_output_dispose (GObject *object)
|
||||
{
|
||||
MetaOutput *output = META_OUTPUT (object);
|
||||
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
|
||||
|
||||
g_clear_object (&priv->crtc);
|
||||
|
||||
G_OBJECT_CLASS (meta_output_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_output_finalize (GObject *object)
|
||||
{
|
||||
@ -58,5 +102,6 @@ meta_output_class_init (MetaOutputClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->dispose = meta_output_dispose;
|
||||
object_class->finalize = meta_output_finalize;
|
||||
}
|
||||
|
@ -64,9 +64,6 @@ struct _MetaOutput
|
||||
|
||||
MetaGpu *gpu;
|
||||
|
||||
/* The CRTC driving this output, NULL if the output is not enabled */
|
||||
MetaCrtc *crtc;
|
||||
|
||||
/* The low-level ID of this output, used to apply back configuration */
|
||||
glong winsys_id;
|
||||
char *name;
|
||||
@ -122,4 +119,11 @@ G_DECLARE_FINAL_TYPE (MetaOutput, meta_output, META, OUTPUT, GObject)
|
||||
|
||||
MetaGpu * meta_output_get_gpu (MetaOutput *output);
|
||||
|
||||
void meta_output_assign_crtc (MetaOutput *output,
|
||||
MetaCrtc *crtc);
|
||||
|
||||
void meta_output_unassign_crtc (MetaOutput *output);
|
||||
|
||||
MetaCrtc * meta_output_get_assigned_crtc (MetaOutput *output);
|
||||
|
||||
#endif /* META_OUTPUT_H */
|
||||
|
31
src/backends/meta-remote-access-controller-private.h
Normal file
31
src/backends/meta-remote-access-controller-private.h
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Red Hat Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef META_REMOTE_ACCESS_CONTROLLER_PRIVATE_H
|
||||
#define META_REMOTE_ACCESS_CONTROLLER_PRIVATE_H
|
||||
|
||||
#include "meta/meta-remote-access-controller.h"
|
||||
|
||||
void meta_remote_access_controller_notify_new_handle (MetaRemoteAccessController *controller,
|
||||
MetaRemoteAccessHandle *handle);
|
||||
|
||||
void meta_remote_access_handle_notify_stopped (MetaRemoteAccessHandle *handle);
|
||||
|
||||
#endif /* META_REMOTE_ACCESS_CONTROLLER_PRIVATE_H */
|
130
src/backends/meta-remote-access-controller.c
Normal file
130
src/backends/meta-remote-access-controller.c
Normal file
@ -0,0 +1,130 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Red Hat Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "backends/meta-remote-access-controller-private.h"
|
||||
|
||||
enum
|
||||
{
|
||||
HANDLE_STOPPED,
|
||||
|
||||
N_HANDLE_SIGNALS
|
||||
};
|
||||
|
||||
static int handle_signals[N_HANDLE_SIGNALS];
|
||||
|
||||
enum
|
||||
{
|
||||
CONTROLLER_NEW_HANDLE,
|
||||
|
||||
N_CONTROLLER_SIGNALS
|
||||
};
|
||||
|
||||
static int controller_signals[N_CONTROLLER_SIGNALS];
|
||||
|
||||
typedef struct _MetaRemoteAccessHandlePrivate
|
||||
{
|
||||
gboolean has_stopped;
|
||||
} MetaRemoteAccessHandlePrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaRemoteAccessHandle,
|
||||
meta_remote_access_handle,
|
||||
G_TYPE_OBJECT)
|
||||
|
||||
struct _MetaRemoteAccessController
|
||||
{
|
||||
GObject parent;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaRemoteAccessController,
|
||||
meta_remote_access_controller,
|
||||
G_TYPE_OBJECT)
|
||||
|
||||
/**
|
||||
* meta_remote_access_handle_stop:
|
||||
* @handle: A #MetaRemoteAccessHandle
|
||||
*
|
||||
* Stop the associated remote access session.
|
||||
*/
|
||||
void
|
||||
meta_remote_access_handle_stop (MetaRemoteAccessHandle *handle)
|
||||
{
|
||||
MetaRemoteAccessHandlePrivate *priv =
|
||||
meta_remote_access_handle_get_instance_private (handle);
|
||||
|
||||
if (priv->has_stopped)
|
||||
return;
|
||||
|
||||
META_REMOTE_ACCESS_HANDLE_GET_CLASS (handle)->stop (handle);
|
||||
}
|
||||
|
||||
void
|
||||
meta_remote_access_handle_notify_stopped (MetaRemoteAccessHandle *handle)
|
||||
{
|
||||
MetaRemoteAccessHandlePrivate *priv =
|
||||
meta_remote_access_handle_get_instance_private (handle);
|
||||
|
||||
priv->has_stopped = TRUE;
|
||||
g_signal_emit (handle, handle_signals[HANDLE_STOPPED], 0);
|
||||
}
|
||||
|
||||
void
|
||||
meta_remote_access_controller_notify_new_handle (MetaRemoteAccessController *controller,
|
||||
MetaRemoteAccessHandle *handle)
|
||||
{
|
||||
g_signal_emit (controller, controller_signals[CONTROLLER_NEW_HANDLE], 0,
|
||||
handle);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_remote_access_handle_init (MetaRemoteAccessHandle *handle)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_remote_access_handle_class_init (MetaRemoteAccessHandleClass *klass)
|
||||
{
|
||||
handle_signals[HANDLE_STOPPED] =
|
||||
g_signal_new ("stopped",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_remote_access_controller_init (MetaRemoteAccessController *controller)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_remote_access_controller_class_init (MetaRemoteAccessControllerClass *klass)
|
||||
{
|
||||
controller_signals[CONTROLLER_NEW_HANDLE] =
|
||||
g_signal_new ("new-handle",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_REMOTE_ACCESS_HANDLE);
|
||||
}
|
@ -30,11 +30,11 @@
|
||||
|
||||
#include "backends/meta-dbus-session-watcher.h"
|
||||
#include "backends/meta-screen-cast-session.h"
|
||||
#include "backends/meta-remote-access-controller-private.h"
|
||||
#include "backends/native/meta-backend-native.h"
|
||||
#include "backends/x11/meta-backend-x11.h"
|
||||
#include "cogl/cogl.h"
|
||||
#include "meta/meta-backend.h"
|
||||
#include "meta/errors.h"
|
||||
#include "meta-dbus-remote-desktop.h"
|
||||
|
||||
#define META_REMOTE_DESKTOP_SESSION_DBUS_PATH "/org/gnome/Mutter/RemoteDesktop/Session"
|
||||
@ -59,6 +59,8 @@ struct _MetaRemoteDesktopSession
|
||||
ClutterVirtualInputDevice *virtual_pointer;
|
||||
ClutterVirtualInputDevice *virtual_keyboard;
|
||||
ClutterVirtualInputDevice *virtual_touchscreen;
|
||||
|
||||
MetaRemoteDesktopSessionHandle *handle;
|
||||
};
|
||||
|
||||
static void
|
||||
@ -75,12 +77,41 @@ G_DEFINE_TYPE_WITH_CODE (MetaRemoteDesktopSession,
|
||||
G_IMPLEMENT_INTERFACE (META_TYPE_DBUS_SESSION,
|
||||
meta_dbus_session_init_iface))
|
||||
|
||||
struct _MetaRemoteDesktopSessionHandle
|
||||
{
|
||||
MetaRemoteAccessHandle parent;
|
||||
|
||||
MetaRemoteDesktopSession *session;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaRemoteDesktopSessionHandle,
|
||||
meta_remote_desktop_session_handle,
|
||||
META_TYPE_REMOTE_ACCESS_HANDLE)
|
||||
|
||||
static MetaRemoteDesktopSessionHandle *
|
||||
meta_remote_desktop_session_handle_new (MetaRemoteDesktopSession *session);
|
||||
|
||||
static gboolean
|
||||
meta_remote_desktop_session_is_running (MetaRemoteDesktopSession *session)
|
||||
{
|
||||
return !!session->virtual_pointer;
|
||||
}
|
||||
|
||||
static void
|
||||
init_remote_access_handle (MetaRemoteDesktopSession *session)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaRemoteAccessController *remote_access_controller;
|
||||
MetaRemoteAccessHandle *remote_access_handle;
|
||||
|
||||
session->handle = meta_remote_desktop_session_handle_new (session);
|
||||
|
||||
remote_access_controller = meta_backend_get_remote_access_controller (backend);
|
||||
remote_access_handle = META_REMOTE_ACCESS_HANDLE (session->handle);
|
||||
meta_remote_access_controller_notify_new_handle (remote_access_controller,
|
||||
remote_access_handle);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_remote_desktop_session_start (MetaRemoteDesktopSession *session,
|
||||
GError **error)
|
||||
@ -107,6 +138,8 @@ meta_remote_desktop_session_start (MetaRemoteDesktopSession *session,
|
||||
clutter_device_manager_create_virtual_device (device_manager,
|
||||
CLUTTER_TOUCHSCREEN_DEVICE);
|
||||
|
||||
init_remote_access_handle (session);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -131,6 +164,14 @@ meta_remote_desktop_session_close (MetaRemoteDesktopSession *session)
|
||||
meta_dbus_remote_desktop_session_emit_closed (skeleton);
|
||||
g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (session));
|
||||
|
||||
if (session->handle)
|
||||
{
|
||||
MetaRemoteAccessHandle *remote_access_handle =
|
||||
META_REMOTE_ACCESS_HANDLE (session->handle);
|
||||
|
||||
meta_remote_access_handle_notify_stopped (remote_access_handle);
|
||||
}
|
||||
|
||||
g_object_unref (session);
|
||||
}
|
||||
|
||||
@ -729,6 +770,7 @@ meta_remote_desktop_session_finalize (GObject *object)
|
||||
|
||||
g_assert (!meta_remote_desktop_session_is_running (session));
|
||||
|
||||
g_clear_object (&session->handle);
|
||||
g_free (session->peer_name);
|
||||
g_free (session->session_id);
|
||||
g_free (session->object_path);
|
||||
@ -763,3 +805,40 @@ meta_remote_desktop_session_class_init (MetaRemoteDesktopSessionClass *klass)
|
||||
|
||||
object_class->finalize = meta_remote_desktop_session_finalize;
|
||||
}
|
||||
|
||||
static MetaRemoteDesktopSessionHandle *
|
||||
meta_remote_desktop_session_handle_new (MetaRemoteDesktopSession *session)
|
||||
{
|
||||
MetaRemoteDesktopSessionHandle *handle;
|
||||
|
||||
handle = g_object_new (META_TYPE_REMOTE_DESKTOP_SESSION_HANDLE, NULL);
|
||||
handle->session = session;
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_remote_desktop_session_handle_stop (MetaRemoteAccessHandle *handle)
|
||||
{
|
||||
MetaRemoteDesktopSession *session;
|
||||
|
||||
session = META_REMOTE_DESKTOP_SESSION_HANDLE (handle)->session;
|
||||
if (!session)
|
||||
return;
|
||||
|
||||
meta_remote_desktop_session_close (session);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_remote_desktop_session_handle_init (MetaRemoteDesktopSessionHandle *handle)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_remote_desktop_session_handle_class_init (MetaRemoteDesktopSessionHandleClass *klass)
|
||||
{
|
||||
MetaRemoteAccessHandleClass *remote_access_handle_class =
|
||||
META_REMOTE_ACCESS_HANDLE_CLASS (klass);
|
||||
|
||||
remote_access_handle_class->stop = meta_remote_desktop_session_handle_stop;
|
||||
}
|
||||
|
@ -33,6 +33,12 @@ G_DECLARE_FINAL_TYPE (MetaRemoteDesktopSession, meta_remote_desktop_session,
|
||||
META, REMOTE_DESKTOP_SESSION,
|
||||
MetaDBusRemoteDesktopSessionSkeleton)
|
||||
|
||||
#define META_TYPE_REMOTE_DESKTOP_SESSION_HANDLE (meta_remote_desktop_session_handle_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaRemoteDesktopSessionHandle,
|
||||
meta_remote_desktop_session_handle,
|
||||
META, REMOTE_DESKTOP_SESSION_HANDLE,
|
||||
MetaRemoteAccessHandle)
|
||||
|
||||
char * meta_remote_desktop_session_get_object_path (MetaRemoteDesktopSession *session);
|
||||
|
||||
char * meta_remote_desktop_session_get_session_id (MetaRemoteDesktopSession *session);
|
||||
|
@ -37,7 +37,6 @@
|
||||
#include "backends/meta-cursor-renderer.h"
|
||||
#include "backends/meta-remote-desktop-session.h"
|
||||
#include "backends/native/meta-cursor-renderer-native.h"
|
||||
#include "meta/errors.h"
|
||||
#include "meta/meta-backend.h"
|
||||
|
||||
#define META_REMOTE_DESKTOP_DBUS_SERVICE "org.gnome.Mutter.RemoteDesktop"
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "backends/meta-dbus-session-watcher.h"
|
||||
#include "backends/meta-screen-cast-monitor-stream.h"
|
||||
#include "backends/meta-screen-cast-stream.h"
|
||||
#include "backends/meta-remote-access-controller-private.h"
|
||||
|
||||
#define META_SCREEN_CAST_SESSION_DBUS_PATH "/org/gnome/Mutter/ScreenCast/Session"
|
||||
|
||||
@ -41,6 +42,8 @@ struct _MetaScreenCastSession
|
||||
char *object_path;
|
||||
|
||||
GList *streams;
|
||||
|
||||
MetaScreenCastSessionHandle *handle;
|
||||
};
|
||||
|
||||
static void
|
||||
@ -57,6 +60,35 @@ G_DEFINE_TYPE_WITH_CODE (MetaScreenCastSession,
|
||||
G_IMPLEMENT_INTERFACE (META_TYPE_DBUS_SESSION,
|
||||
meta_dbus_session_init_iface))
|
||||
|
||||
struct _MetaScreenCastSessionHandle
|
||||
{
|
||||
MetaRemoteAccessHandle parent;
|
||||
|
||||
MetaScreenCastSession *session;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaScreenCastSessionHandle,
|
||||
meta_screen_cast_session_handle,
|
||||
META_TYPE_REMOTE_ACCESS_HANDLE)
|
||||
|
||||
static MetaScreenCastSessionHandle *
|
||||
meta_screen_cast_session_handle_new (MetaScreenCastSession *session);
|
||||
|
||||
static void
|
||||
init_remote_access_handle (MetaScreenCastSession *session)
|
||||
{
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaRemoteAccessController *remote_access_controller;
|
||||
MetaRemoteAccessHandle *remote_access_handle;
|
||||
|
||||
session->handle = meta_screen_cast_session_handle_new (session);
|
||||
|
||||
remote_access_controller = meta_backend_get_remote_access_controller (backend);
|
||||
remote_access_handle = META_REMOTE_ACCESS_HANDLE (session->handle);
|
||||
meta_remote_access_controller_notify_new_handle (remote_access_controller,
|
||||
remote_access_handle);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_screen_cast_session_start (MetaScreenCastSession *session,
|
||||
GError **error)
|
||||
@ -71,6 +103,8 @@ meta_screen_cast_session_start (MetaScreenCastSession *session,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
init_remote_access_handle (session);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -94,6 +128,14 @@ meta_screen_cast_session_close (MetaScreenCastSession *session)
|
||||
|
||||
g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (session));
|
||||
|
||||
if (session->handle)
|
||||
{
|
||||
MetaRemoteAccessHandle *remote_access_handle =
|
||||
META_REMOTE_ACCESS_HANDLE (session->handle);
|
||||
|
||||
meta_remote_access_handle_notify_stopped (remote_access_handle);
|
||||
}
|
||||
|
||||
g_object_unref (session);
|
||||
}
|
||||
|
||||
@ -361,6 +403,7 @@ meta_screen_cast_session_finalize (GObject *object)
|
||||
{
|
||||
MetaScreenCastSession *session = META_SCREEN_CAST_SESSION (object);
|
||||
|
||||
g_clear_object (&session->handle);
|
||||
g_free (session->peer_name);
|
||||
g_free (session->object_path);
|
||||
|
||||
@ -379,3 +422,40 @@ meta_screen_cast_session_class_init (MetaScreenCastSessionClass *klass)
|
||||
|
||||
object_class->finalize = meta_screen_cast_session_finalize;
|
||||
}
|
||||
|
||||
static MetaScreenCastSessionHandle *
|
||||
meta_screen_cast_session_handle_new (MetaScreenCastSession *session)
|
||||
{
|
||||
MetaScreenCastSessionHandle *handle;
|
||||
|
||||
handle = g_object_new (META_TYPE_SCREEN_CAST_SESSION_HANDLE, NULL);
|
||||
handle->session = session;
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_screen_cast_session_handle_stop (MetaRemoteAccessHandle *handle)
|
||||
{
|
||||
MetaScreenCastSession *session;
|
||||
|
||||
session = META_SCREEN_CAST_SESSION_HANDLE (handle)->session;
|
||||
if (!session)
|
||||
return;
|
||||
|
||||
meta_screen_cast_session_close (session);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_screen_cast_session_handle_init (MetaScreenCastSessionHandle *handle)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_screen_cast_session_handle_class_init (MetaScreenCastSessionHandleClass *klass)
|
||||
{
|
||||
MetaRemoteAccessHandleClass *remote_access_handle_class =
|
||||
META_REMOTE_ACCESS_HANDLE_CLASS (klass);
|
||||
|
||||
remote_access_handle_class->stop = meta_screen_cast_session_handle_stop;
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "backends/meta-screen-cast.h"
|
||||
|
||||
#include "backends/meta-screen-cast-stream.h"
|
||||
#include "meta/meta-remote-access-controller.h"
|
||||
|
||||
typedef enum _MetaScreenCastSessionType
|
||||
{
|
||||
@ -38,6 +39,12 @@ G_DECLARE_FINAL_TYPE (MetaScreenCastSession, meta_screen_cast_session,
|
||||
META, SCREEN_CAST_SESSION,
|
||||
MetaDBusScreenCastSessionSkeleton)
|
||||
|
||||
#define META_TYPE_SCREEN_CAST_SESSION_HANDLE (meta_screen_cast_session_handle_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaScreenCastSessionHandle,
|
||||
meta_screen_cast_session_handle,
|
||||
META, SCREEN_CAST_SESSION_HANDLE,
|
||||
MetaRemoteAccessHandle)
|
||||
|
||||
char * meta_screen_cast_session_get_object_path (MetaScreenCastSession *session);
|
||||
|
||||
MetaScreenCastSession * meta_screen_cast_session_new (MetaScreenCast *screen_cast,
|
||||
|
@ -132,8 +132,8 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
||||
{
|
||||
MetaScreenCastStreamSrcPrivate *priv =
|
||||
meta_screen_cast_stream_src_get_instance_private (src);
|
||||
uint32_t buffer_id;
|
||||
struct spa_buffer *buffer;
|
||||
struct pw_buffer *buffer;
|
||||
struct spa_buffer *spa_buffer;
|
||||
uint8_t *map = NULL;
|
||||
uint8_t *data;
|
||||
uint64_t now_us;
|
||||
@ -148,22 +148,24 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
||||
if (!priv->pipewire_stream)
|
||||
return;
|
||||
|
||||
buffer_id = pw_stream_get_empty_buffer (priv->pipewire_stream);
|
||||
if (buffer_id == SPA_ID_INVALID)
|
||||
return;
|
||||
|
||||
buffer = pw_stream_peek_buffer (priv->pipewire_stream, buffer_id);
|
||||
buffer = pw_stream_dequeue_buffer (priv->pipewire_stream);
|
||||
if (!buffer)
|
||||
{
|
||||
g_warning ("Failed to peek at PipeWire buffer");
|
||||
g_warning ("Failed to dequeue at PipeWire buffer");
|
||||
return;
|
||||
}
|
||||
|
||||
if (buffer->datas[0].type == priv->pipewire_type->data.MemFd)
|
||||
spa_buffer = buffer->buffer;
|
||||
|
||||
if (spa_buffer->datas[0].data)
|
||||
{
|
||||
map = mmap (NULL, buffer->datas[0].maxsize + buffer->datas[0].mapoffset,
|
||||
data = spa_buffer->datas[0].data;
|
||||
}
|
||||
else if (spa_buffer->datas[0].type == priv->pipewire_type->data.MemFd)
|
||||
{
|
||||
map = mmap (NULL, spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset,
|
||||
PROT_READ | PROT_WRITE, MAP_SHARED,
|
||||
buffer->datas[0].fd, 0);
|
||||
spa_buffer->datas[0].fd, 0);
|
||||
if (map == MAP_FAILED)
|
||||
{
|
||||
g_warning ("Failed to mmap pipewire stream buffer: %s\n",
|
||||
@ -171,14 +173,11 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
||||
return;
|
||||
}
|
||||
|
||||
data = SPA_MEMBER (map, buffer->datas[0].mapoffset, uint8_t);
|
||||
}
|
||||
else if (buffer->datas[0].type == priv->pipewire_type->data.MemPtr)
|
||||
{
|
||||
data = buffer->datas[0].data;
|
||||
data = SPA_MEMBER (map, spa_buffer->datas[0].mapoffset, uint8_t);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("Unhandled spa buffer type: %d", spa_buffer->datas[0].type);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -186,11 +185,11 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
||||
priv->last_frame_timestamp_us = now_us;
|
||||
|
||||
if (map)
|
||||
munmap (map, buffer->datas[0].maxsize + buffer->datas[0].mapoffset);
|
||||
munmap (map, spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset);
|
||||
|
||||
buffer->datas[0].chunk->size = buffer->datas[0].maxsize;
|
||||
spa_buffer->datas[0].chunk->size = spa_buffer->datas[0].maxsize;
|
||||
|
||||
pw_stream_send_buffer (priv->pipewire_stream, buffer_id);
|
||||
pw_stream_queue_buffer (priv->pipewire_stream, buffer);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -266,8 +265,8 @@ on_stream_state_changed (void *data,
|
||||
}
|
||||
|
||||
static void
|
||||
on_stream_format_changed (void *data,
|
||||
struct spa_pod *format)
|
||||
on_stream_format_changed (void *data,
|
||||
const struct spa_pod *format)
|
||||
{
|
||||
MetaScreenCastStreamSrc *src = data;
|
||||
MetaScreenCastStreamSrcPrivate *priv =
|
||||
@ -276,7 +275,7 @@ on_stream_format_changed (void *data,
|
||||
uint8_t params_buffer[1024];
|
||||
int32_t width, height, stride, size;
|
||||
struct spa_pod_builder pod_builder;
|
||||
struct spa_pod *params[1];
|
||||
const struct spa_pod *params[1];
|
||||
const int bpp = 4;
|
||||
|
||||
if (!format)
|
||||
@ -360,9 +359,9 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src,
|
||||
":", spa_type->format_video.format, "I", spa_type->video_format.BGRx,
|
||||
":", spa_type->format_video.size, "R", &SPA_RECTANGLE (width, height),
|
||||
":", spa_type->format_video.framerate, "F", &SPA_FRACTION (0, 1),
|
||||
":", spa_type->format_video.max_framerate, "Fr", &max_framerate,
|
||||
PROP_RANGE (&min_framerate,
|
||||
&max_framerate));
|
||||
":", spa_type->format_video.max_framerate, "Fru", &max_framerate,
|
||||
PROP_RANGE (&min_framerate,
|
||||
&max_framerate));
|
||||
|
||||
pw_stream_add_listener (pipewire_stream,
|
||||
&priv->pipewire_stream_listener,
|
||||
@ -372,7 +371,8 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src,
|
||||
result = pw_stream_connect (pipewire_stream,
|
||||
PW_DIRECTION_OUTPUT,
|
||||
NULL,
|
||||
PW_STREAM_FLAG_NONE,
|
||||
(PW_STREAM_FLAG_DRIVER |
|
||||
PW_STREAM_FLAG_MAP_BUFFERS),
|
||||
params, G_N_ELEMENTS (params));
|
||||
if (result != 0)
|
||||
{
|
||||
@ -578,9 +578,9 @@ meta_screen_cast_stream_src_finalize (GObject *object)
|
||||
if (meta_screen_cast_stream_src_is_enabled (src))
|
||||
meta_screen_cast_stream_src_disable (src);
|
||||
|
||||
g_clear_pointer (&priv->pipewire_stream, (GDestroyNotify) pw_stream_destroy);
|
||||
g_clear_pointer (&priv->pipewire_remote, (GDestroyNotify) pw_remote_destroy);
|
||||
g_clear_pointer (&priv->pipewire_core, (GDestroyNotify) pw_core_destroy);
|
||||
g_clear_pointer (&priv->pipewire_stream, pw_stream_destroy);
|
||||
g_clear_pointer (&priv->pipewire_remote, pw_remote_destroy);
|
||||
g_clear_pointer (&priv->pipewire_core, pw_core_destroy);
|
||||
g_source_destroy (&priv->pipewire_source->base);
|
||||
|
||||
G_OBJECT_CLASS (meta_screen_cast_stream_src_parent_class)->finalize (object);
|
||||
|
@ -29,7 +29,6 @@
|
||||
|
||||
#include <meta/main.h>
|
||||
#include <clutter/evdev/clutter-evdev.h>
|
||||
#include <libupower-glib/upower.h>
|
||||
|
||||
#include "clutter/egl/clutter-egl.h"
|
||||
#include "clutter/evdev/clutter-evdev.h"
|
||||
@ -212,7 +211,7 @@ relative_motion_across_outputs (MetaMonitorManager *monitor_manager,
|
||||
MetaLogicalMonitor *cur = current;
|
||||
float x = cur_x, y = cur_y;
|
||||
float dx = *dx_inout, dy = *dy_inout;
|
||||
MetaScreenDirection direction = -1;
|
||||
MetaDisplayDirection direction = -1;
|
||||
|
||||
while (cur)
|
||||
{
|
||||
@ -240,18 +239,18 @@ relative_motion_across_outputs (MetaMonitorManager *monitor_manager,
|
||||
{ cur->rect.x + cur->rect.width, cur->rect.y + cur->rect.height }
|
||||
};
|
||||
|
||||
if (direction != META_SCREEN_RIGHT &&
|
||||
if (direction != META_DISPLAY_RIGHT &&
|
||||
meta_line2_intersects_with (&motion, &left, &intersection))
|
||||
direction = META_SCREEN_LEFT;
|
||||
else if (direction != META_SCREEN_LEFT &&
|
||||
direction = META_DISPLAY_LEFT;
|
||||
else if (direction != META_DISPLAY_LEFT &&
|
||||
meta_line2_intersects_with (&motion, &right, &intersection))
|
||||
direction = META_SCREEN_RIGHT;
|
||||
else if (direction != META_SCREEN_DOWN &&
|
||||
direction = META_DISPLAY_RIGHT;
|
||||
else if (direction != META_DISPLAY_DOWN &&
|
||||
meta_line2_intersects_with (&motion, &top, &intersection))
|
||||
direction = META_SCREEN_UP;
|
||||
else if (direction != META_SCREEN_UP &&
|
||||
direction = META_DISPLAY_UP;
|
||||
else if (direction != META_DISPLAY_UP &&
|
||||
meta_line2_intersects_with (&motion, &bottom, &intersection))
|
||||
direction = META_SCREEN_DOWN;
|
||||
direction = META_DISPLAY_DOWN;
|
||||
else
|
||||
{
|
||||
/* We reached the dest logical monitor */
|
||||
@ -645,8 +644,6 @@ void meta_backend_native_resume (MetaBackendNative *native)
|
||||
meta_backend_get_monitor_manager (backend);
|
||||
MetaMonitorManagerKms *monitor_manager_kms =
|
||||
META_MONITOR_MANAGER_KMS (monitor_manager);
|
||||
MetaCursorRenderer *cursor_renderer;
|
||||
MetaCursorRendererNative *cursor_renderer_native;
|
||||
ClutterActor *stage;
|
||||
MetaIdleMonitor *idle_monitor;
|
||||
|
||||
@ -658,10 +655,6 @@ void meta_backend_native_resume (MetaBackendNative *native)
|
||||
stage = meta_backend_get_stage (backend);
|
||||
clutter_actor_queue_redraw (stage);
|
||||
|
||||
cursor_renderer = meta_backend_get_cursor_renderer (backend);
|
||||
cursor_renderer_native = META_CURSOR_RENDERER_NATIVE (cursor_renderer);
|
||||
meta_cursor_renderer_native_force_update (cursor_renderer_native);
|
||||
|
||||
idle_monitor = meta_backend_get_idle_monitor (backend, 0);
|
||||
meta_idle_monitor_reset_idletime (idle_monitor);
|
||||
}
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include <meta/meta-backend.h>
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "backends/meta-cursor-sprite-xcursor.h"
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
#include "backends/meta-monitor.h"
|
||||
#include "backends/meta-monitor-manager-private.h"
|
||||
@ -43,6 +44,11 @@
|
||||
#include "core/boxes-private.h"
|
||||
#include "meta/boxes.h"
|
||||
|
||||
#ifdef HAVE_WAYLAND
|
||||
#include "wayland/meta-cursor-sprite-wayland.h"
|
||||
#include "wayland/meta-wayland-buffer.h"
|
||||
#endif
|
||||
|
||||
#ifndef DRM_CAP_CURSOR_WIDTH
|
||||
#define DRM_CAP_CURSOR_WIDTH 0x8
|
||||
#endif
|
||||
@ -113,6 +119,11 @@ static GQuark quark_cursor_renderer_native_gpu_data = 0;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaCursorRendererNative, meta_cursor_renderer_native, META_TYPE_CURSOR_RENDERER);
|
||||
|
||||
static void
|
||||
realize_cursor_sprite (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
GList *gpus);
|
||||
|
||||
static MetaCursorNativeGpuState *
|
||||
get_cursor_gpu_state (MetaCursorNativePrivate *cursor_priv,
|
||||
MetaGpuKms *gpu_kms);
|
||||
@ -152,7 +163,8 @@ static void
|
||||
meta_cursor_renderer_native_finalize (GObject *object)
|
||||
{
|
||||
MetaCursorRendererNative *renderer = META_CURSOR_RENDERER_NATIVE (object);
|
||||
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (renderer);
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (renderer);
|
||||
|
||||
if (priv->animation_timeout_id)
|
||||
g_source_remove (priv->animation_timeout_id);
|
||||
@ -203,7 +215,8 @@ set_crtc_cursor (MetaCursorRendererNative *native,
|
||||
MetaCrtc *crtc,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
{
|
||||
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||
MetaGpuKms *gpu_kms;
|
||||
int kms_fd;
|
||||
@ -291,6 +304,7 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
|
||||
data->in_cursor_renderer_native;
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (cursor_renderer_native);
|
||||
MetaCrtc *crtc;
|
||||
MetaMonitorTransform transform;
|
||||
ClutterRect scaled_crtc_rect;
|
||||
float scale;
|
||||
@ -330,6 +344,8 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
|
||||
},
|
||||
};
|
||||
|
||||
crtc = meta_output_get_assigned_crtc (monitor_crtc_mode->output);
|
||||
|
||||
if (priv->has_hw_cursor &&
|
||||
clutter_rect_intersection (&scaled_crtc_rect,
|
||||
&data->in_local_cursor_rect,
|
||||
@ -340,7 +356,7 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
|
||||
float crtc_cursor_x, crtc_cursor_y;
|
||||
|
||||
set_crtc_cursor (data->in_cursor_renderer_native,
|
||||
monitor_crtc_mode->output->crtc,
|
||||
crtc,
|
||||
data->in_cursor_sprite);
|
||||
|
||||
gpu_kms = META_GPU_KMS (meta_monitor_get_gpu (monitor));
|
||||
@ -350,7 +366,7 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
|
||||
crtc_cursor_y = (data->in_local_cursor_rect.origin.y -
|
||||
scaled_crtc_rect.origin.y) * scale;
|
||||
drmModeMoveCursor (kms_fd,
|
||||
monitor_crtc_mode->output->crtc->crtc_id,
|
||||
crtc->crtc_id,
|
||||
roundf (crtc_cursor_x),
|
||||
roundf (crtc_cursor_y));
|
||||
|
||||
@ -358,8 +374,7 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
|
||||
}
|
||||
else
|
||||
{
|
||||
set_crtc_cursor (data->in_cursor_renderer_native,
|
||||
monitor_crtc_mode->output->crtc, NULL);
|
||||
set_crtc_cursor (data->in_cursor_renderer_native, crtc, NULL);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
@ -369,7 +384,8 @@ static void
|
||||
update_hw_cursor (MetaCursorRendererNative *native,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
{
|
||||
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native);
|
||||
MetaMonitorManager *monitor_manager = priv->monitor_manager;
|
||||
GList *logical_monitors;
|
||||
@ -562,18 +578,15 @@ can_draw_cursor_unscaled (MetaCursorRenderer *renderer,
|
||||
|
||||
static gboolean
|
||||
should_have_hw_cursor (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
GList *gpus)
|
||||
{
|
||||
MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
|
||||
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
|
||||
GList *gpus;
|
||||
GList *l;
|
||||
CoglTexture *texture;
|
||||
|
||||
if (!cursor_sprite)
|
||||
return FALSE;
|
||||
|
||||
gpus = meta_monitor_manager_get_gpus (priv->monitor_manager);
|
||||
for (l = gpus; l; l = l->next)
|
||||
{
|
||||
MetaGpuKms *gpu_kms = l->data;
|
||||
@ -607,7 +620,8 @@ should_have_hw_cursor (MetaCursorRenderer *renderer,
|
||||
static gboolean
|
||||
meta_cursor_renderer_native_update_animation (MetaCursorRendererNative *native)
|
||||
{
|
||||
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native);
|
||||
MetaCursorSprite *cursor_sprite = meta_cursor_renderer_get_cursor (renderer);
|
||||
|
||||
@ -619,10 +633,11 @@ meta_cursor_renderer_native_update_animation (MetaCursorRendererNative *native)
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_renderer_native_trigger_frame (MetaCursorRendererNative *native,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
maybe_schedule_cursor_sprite_animation_frame (MetaCursorRendererNative *native,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
{
|
||||
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
gboolean cursor_change;
|
||||
guint delay;
|
||||
|
||||
@ -654,21 +669,78 @@ meta_cursor_renderer_native_trigger_frame (MetaCursorRendererNative *native,
|
||||
}
|
||||
}
|
||||
|
||||
static GList *
|
||||
calculate_cursor_sprite_gpus (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
{
|
||||
MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
MetaMonitorManager *monitor_manager = priv->monitor_manager;
|
||||
GList *gpus = NULL;
|
||||
GList *logical_monitors;
|
||||
GList *l;
|
||||
ClutterRect cursor_rect;
|
||||
|
||||
cursor_rect = meta_cursor_renderer_calculate_rect (renderer, cursor_sprite);
|
||||
|
||||
logical_monitors =
|
||||
meta_monitor_manager_get_logical_monitors (monitor_manager);
|
||||
for (l = logical_monitors; l; l = l->next)
|
||||
{
|
||||
MetaLogicalMonitor *logical_monitor = l->data;
|
||||
MetaRectangle logical_monitor_layout;
|
||||
ClutterRect logical_monitor_rect;
|
||||
GList *monitors, *l_mon;
|
||||
|
||||
logical_monitor_layout =
|
||||
meta_logical_monitor_get_layout (logical_monitor);
|
||||
logical_monitor_rect =
|
||||
meta_rectangle_to_clutter_rect (&logical_monitor_layout);
|
||||
|
||||
if (!clutter_rect_intersection (&cursor_rect, &logical_monitor_rect,
|
||||
NULL))
|
||||
continue;
|
||||
|
||||
monitors = meta_logical_monitor_get_monitors (logical_monitor);
|
||||
for (l_mon = monitors; l_mon; l_mon = l_mon->next)
|
||||
{
|
||||
MetaMonitor *monitor = l_mon->data;
|
||||
MetaGpu *gpu;
|
||||
|
||||
gpu = meta_monitor_get_gpu (monitor);
|
||||
if (!g_list_find (gpus, gpu))
|
||||
gpus = g_list_prepend (gpus, gpu);
|
||||
}
|
||||
}
|
||||
|
||||
return gpus;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
{
|
||||
MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
|
||||
MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
g_autoptr (GList) gpus = NULL;
|
||||
|
||||
if (cursor_sprite)
|
||||
meta_cursor_sprite_realize_texture (cursor_sprite);
|
||||
{
|
||||
meta_cursor_sprite_realize_texture (cursor_sprite);
|
||||
gpus = calculate_cursor_sprite_gpus (renderer, cursor_sprite);
|
||||
realize_cursor_sprite (renderer, cursor_sprite, gpus);
|
||||
}
|
||||
|
||||
meta_cursor_renderer_native_trigger_frame (native, cursor_sprite);
|
||||
maybe_schedule_cursor_sprite_animation_frame (native, cursor_sprite);
|
||||
|
||||
priv->has_hw_cursor = should_have_hw_cursor (renderer, cursor_sprite);
|
||||
priv->has_hw_cursor = should_have_hw_cursor (renderer, cursor_sprite, gpus);
|
||||
update_hw_cursor (native, cursor_sprite);
|
||||
return priv->has_hw_cursor;
|
||||
|
||||
return (priv->has_hw_cursor ||
|
||||
!cursor_sprite ||
|
||||
!meta_cursor_sprite_get_cogl_texture (cursor_sprite));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -677,7 +749,7 @@ cursor_gpu_state_free (MetaCursorNativeGpuState *cursor_gpu_state)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < HW_CURSOR_BUFFER_COUNT; i++)
|
||||
g_clear_pointer (&cursor_gpu_state->bos[i], (GDestroyNotify) gbm_bo_destroy);
|
||||
g_clear_pointer (&cursor_gpu_state->bos[i], gbm_bo_destroy);
|
||||
g_free (cursor_gpu_state);
|
||||
}
|
||||
|
||||
@ -704,6 +776,24 @@ ensure_cursor_gpu_state (MetaCursorNativePrivate *cursor_priv,
|
||||
return cursor_gpu_state;
|
||||
}
|
||||
|
||||
static void
|
||||
on_cursor_sprite_texture_changed (MetaCursorSprite *cursor_sprite)
|
||||
{
|
||||
MetaCursorNativePrivate *cursor_priv = get_cursor_priv (cursor_sprite);
|
||||
GHashTableIter iter;
|
||||
MetaCursorNativeGpuState *cursor_gpu_state;
|
||||
|
||||
g_hash_table_iter_init (&iter, cursor_priv->gpu_states);
|
||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &cursor_gpu_state))
|
||||
{
|
||||
guint pending_bo;
|
||||
pending_bo = get_pending_cursor_sprite_gbm_bo_index (cursor_gpu_state);
|
||||
g_clear_pointer (&cursor_gpu_state->bos[pending_bo],
|
||||
gbm_bo_destroy);
|
||||
cursor_gpu_state->pending_bo_state = META_CURSOR_GBM_BO_STATE_INVALIDATED;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
cursor_priv_free (MetaCursorNativePrivate *cursor_priv)
|
||||
{
|
||||
@ -736,6 +826,9 @@ ensure_cursor_priv (MetaCursorSprite *cursor_sprite)
|
||||
cursor_priv,
|
||||
(GDestroyNotify) cursor_priv_free);
|
||||
|
||||
g_signal_connect (cursor_sprite, "texture-changed",
|
||||
G_CALLBACK (on_cursor_sprite_texture_changed), NULL);
|
||||
|
||||
return cursor_priv;
|
||||
}
|
||||
|
||||
@ -803,57 +896,71 @@ load_cursor_sprite_gbm_buffer_for_gpu (MetaCursorRendererNative *native,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
invalidate_pending_cursor_sprite_gbm_bo (MetaCursorSprite *cursor_sprite,
|
||||
MetaGpuKms *gpu_kms)
|
||||
static gboolean
|
||||
is_cursor_hw_state_valid (MetaCursorSprite *cursor_sprite,
|
||||
MetaGpuKms *gpu_kms)
|
||||
{
|
||||
MetaCursorNativePrivate *cursor_priv;
|
||||
MetaCursorNativeGpuState *cursor_gpu_state;
|
||||
guint pending_bo;
|
||||
|
||||
cursor_priv = get_cursor_priv (cursor_sprite);
|
||||
if (!cursor_priv)
|
||||
return;
|
||||
return FALSE;
|
||||
|
||||
cursor_gpu_state = get_cursor_gpu_state (cursor_priv, gpu_kms);
|
||||
if (!cursor_gpu_state)
|
||||
return;
|
||||
return FALSE;
|
||||
|
||||
pending_bo = get_pending_cursor_sprite_gbm_bo_index (cursor_gpu_state);
|
||||
g_clear_pointer (&cursor_gpu_state->bos[pending_bo],
|
||||
(GDestroyNotify) gbm_bo_destroy);
|
||||
cursor_gpu_state->pending_bo_state = META_CURSOR_GBM_BO_STATE_INVALIDATED;
|
||||
switch (cursor_gpu_state->pending_bo_state)
|
||||
{
|
||||
case META_CURSOR_GBM_BO_STATE_SET:
|
||||
case META_CURSOR_GBM_BO_STATE_NONE:
|
||||
return TRUE;
|
||||
case META_CURSOR_GBM_BO_STATE_INVALIDATED:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
#ifdef HAVE_WAYLAND
|
||||
static void
|
||||
meta_cursor_renderer_native_realize_cursor_from_wl_buffer_for_gpu (MetaCursorRenderer *renderer,
|
||||
MetaGpuKms *gpu_kms,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
struct wl_resource *buffer)
|
||||
realize_cursor_sprite_from_wl_buffer_for_gpu (MetaCursorRenderer *renderer,
|
||||
MetaGpuKms *gpu_kms,
|
||||
MetaCursorSpriteWayland *sprite_wayland)
|
||||
{
|
||||
MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
|
||||
MetaCursorSprite *cursor_sprite = META_CURSOR_SPRITE (sprite_wayland);
|
||||
MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||
uint32_t gbm_format;
|
||||
uint64_t cursor_width, cursor_height;
|
||||
CoglTexture *texture;
|
||||
uint width, height;
|
||||
MetaWaylandBuffer *buffer;
|
||||
struct wl_resource *buffer_resource;
|
||||
struct wl_shm_buffer *shm_buffer;
|
||||
|
||||
cursor_renderer_gpu_data =
|
||||
meta_cursor_renderer_native_gpu_data_from_gpu (gpu_kms);
|
||||
if (!cursor_renderer_gpu_data || cursor_renderer_gpu_data->hw_cursor_broken)
|
||||
return;
|
||||
|
||||
/* Destroy any previous pending cursor buffer; we'll always either fail (which
|
||||
* should unset, or succeed, which will set new buffer.
|
||||
*/
|
||||
invalidate_pending_cursor_sprite_gbm_bo (cursor_sprite, gpu_kms);
|
||||
if (is_cursor_hw_state_valid (cursor_sprite, gpu_kms))
|
||||
return;
|
||||
|
||||
texture = meta_cursor_sprite_get_cogl_texture (cursor_sprite);
|
||||
width = cogl_texture_get_width (texture);
|
||||
height = cogl_texture_get_height (texture);
|
||||
|
||||
struct wl_shm_buffer *shm_buffer = wl_shm_buffer_get (buffer);
|
||||
buffer = meta_cursor_sprite_wayland_get_buffer (sprite_wayland);
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
buffer_resource = meta_wayland_buffer_get_resource (buffer);
|
||||
if (!buffer_resource)
|
||||
return;
|
||||
|
||||
shm_buffer = wl_shm_buffer_get (buffer_resource);
|
||||
if (shm_buffer)
|
||||
{
|
||||
int rowstride = wl_shm_buffer_get_stride (shm_buffer);
|
||||
@ -927,47 +1034,27 @@ meta_cursor_renderer_native_realize_cursor_from_wl_buffer_for_gpu (MetaCursorRen
|
||||
set_pending_cursor_sprite_gbm_bo (cursor_sprite, gpu_kms, bo);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_renderer_native_realize_cursor_from_wl_buffer (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
struct wl_resource *buffer)
|
||||
{
|
||||
MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
GList *gpus;
|
||||
GList *l;
|
||||
|
||||
gpus = meta_monitor_manager_get_gpus (priv->monitor_manager);
|
||||
for (l = gpus; l; l = l->next)
|
||||
{
|
||||
MetaGpuKms *gpu_kms = l->data;
|
||||
|
||||
meta_cursor_renderer_native_realize_cursor_from_wl_buffer_for_gpu (
|
||||
renderer,
|
||||
gpu_kms,
|
||||
cursor_sprite,
|
||||
buffer);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
meta_cursor_renderer_native_realize_cursor_from_xcursor_for_gpu (MetaCursorRenderer *renderer,
|
||||
MetaGpuKms *gpu_kms,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
XcursorImage *xc_image)
|
||||
realize_cursor_sprite_from_xcursor_for_gpu (MetaCursorRenderer *renderer,
|
||||
MetaGpuKms *gpu_kms,
|
||||
MetaCursorSpriteXcursor *sprite_xcursor)
|
||||
{
|
||||
MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
|
||||
MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||
MetaCursorSprite *cursor_sprite = META_CURSOR_SPRITE (sprite_xcursor);
|
||||
XcursorImage *xc_image;
|
||||
|
||||
cursor_renderer_gpu_data =
|
||||
meta_cursor_renderer_native_gpu_data_from_gpu (gpu_kms);
|
||||
if (!cursor_renderer_gpu_data || cursor_renderer_gpu_data->hw_cursor_broken)
|
||||
return;
|
||||
|
||||
invalidate_pending_cursor_sprite_gbm_bo (cursor_sprite, gpu_kms);
|
||||
if (is_cursor_hw_state_valid (cursor_sprite, gpu_kms))
|
||||
return;
|
||||
|
||||
xc_image = meta_cursor_sprite_xcursor_get_current_image (sprite_xcursor);
|
||||
|
||||
load_cursor_sprite_gbm_buffer_for_gpu (native,
|
||||
gpu_kms,
|
||||
@ -980,26 +1067,44 @@ meta_cursor_renderer_native_realize_cursor_from_xcursor_for_gpu (MetaCursorRende
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_renderer_native_realize_cursor_from_xcursor (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
XcursorImage *xc_image)
|
||||
realize_cursor_sprite_for_gpu (MetaCursorRenderer *renderer,
|
||||
MetaGpuKms *gpu_kms,
|
||||
MetaCursorSprite *cursor_sprite)
|
||||
{
|
||||
if (META_IS_CURSOR_SPRITE_XCURSOR (cursor_sprite))
|
||||
{
|
||||
MetaCursorSpriteXcursor *sprite_xcursor =
|
||||
META_CURSOR_SPRITE_XCURSOR (cursor_sprite);
|
||||
|
||||
realize_cursor_sprite_from_xcursor_for_gpu (renderer,
|
||||
gpu_kms,
|
||||
sprite_xcursor);
|
||||
}
|
||||
#ifdef HAVE_WAYLAND
|
||||
else if (META_IS_CURSOR_SPRITE_WAYLAND (cursor_sprite))
|
||||
{
|
||||
MetaCursorSpriteWayland *sprite_wayland =
|
||||
META_CURSOR_SPRITE_WAYLAND (cursor_sprite);
|
||||
|
||||
realize_cursor_sprite_from_wl_buffer_for_gpu (renderer,
|
||||
gpu_kms,
|
||||
sprite_wayland);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
realize_cursor_sprite (MetaCursorRenderer *renderer,
|
||||
MetaCursorSprite *cursor_sprite,
|
||||
GList *gpus)
|
||||
{
|
||||
MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
|
||||
MetaCursorRendererNativePrivate *priv =
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
GList *gpus;
|
||||
GList *l;
|
||||
|
||||
gpus = meta_monitor_manager_get_gpus (priv->monitor_manager);
|
||||
for (l = gpus; l; l = l->next)
|
||||
{
|
||||
MetaGpuKms *gpu_kms = l->data;
|
||||
|
||||
meta_cursor_renderer_native_realize_cursor_from_xcursor_for_gpu (
|
||||
renderer,
|
||||
gpu_kms,
|
||||
cursor_sprite,
|
||||
xc_image);
|
||||
realize_cursor_sprite_for_gpu (renderer, gpu_kms, cursor_sprite);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1011,12 +1116,6 @@ meta_cursor_renderer_native_class_init (MetaCursorRendererNativeClass *klass)
|
||||
|
||||
object_class->finalize = meta_cursor_renderer_native_finalize;
|
||||
renderer_class->update_cursor = meta_cursor_renderer_native_update_cursor;
|
||||
#ifdef HAVE_WAYLAND
|
||||
renderer_class->realize_cursor_from_wl_buffer =
|
||||
meta_cursor_renderer_native_realize_cursor_from_wl_buffer;
|
||||
#endif
|
||||
renderer_class->realize_cursor_from_xcursor =
|
||||
meta_cursor_renderer_native_realize_cursor_from_xcursor;
|
||||
|
||||
quark_cursor_sprite = g_quark_from_static_string ("-meta-cursor-native");
|
||||
quark_cursor_renderer_native_gpu_data =
|
||||
@ -1031,14 +1130,13 @@ force_update_hw_cursor (MetaCursorRendererNative *native)
|
||||
meta_cursor_renderer_native_get_instance_private (native);
|
||||
|
||||
priv->hw_state_invalidated = TRUE;
|
||||
update_hw_cursor (native, meta_cursor_renderer_get_cursor (renderer));
|
||||
meta_cursor_renderer_force_update (renderer);
|
||||
}
|
||||
|
||||
static void
|
||||
on_monitors_changed (MetaMonitorManager *monitors,
|
||||
MetaCursorRendererNative *native)
|
||||
{
|
||||
/* Our tracking is all messed up, so force an update. */
|
||||
force_update_hw_cursor (native);
|
||||
}
|
||||
|
||||
@ -1110,9 +1208,3 @@ static void
|
||||
meta_cursor_renderer_native_init (MetaCursorRendererNative *native)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_renderer_native_force_update (MetaCursorRendererNative *native)
|
||||
{
|
||||
force_update_hw_cursor (native);
|
||||
}
|
||||
|
@ -26,14 +26,13 @@
|
||||
#define META_CURSOR_RENDERER_NATIVE_H
|
||||
|
||||
#include "meta-cursor-renderer.h"
|
||||
#include "meta/meta-backend.h"
|
||||
|
||||
#define META_TYPE_CURSOR_RENDERER_NATIVE (meta_cursor_renderer_native_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaCursorRendererNative, meta_cursor_renderer_native,
|
||||
META, CURSOR_RENDERER_NATIVE,
|
||||
MetaCursorRenderer)
|
||||
|
||||
void meta_cursor_renderer_native_force_update (MetaCursorRendererNative *renderer);
|
||||
|
||||
MetaCursorRendererNative * meta_cursor_renderer_native_new (MetaBackend *backend);
|
||||
|
||||
#endif /* META_CURSOR_RENDERER_NATIVE_H */
|
||||
|
@ -68,6 +68,8 @@ struct _MetaGpuKms
|
||||
int max_buffer_height;
|
||||
|
||||
gboolean page_flips_not_supported;
|
||||
|
||||
gboolean resources_init_failed_before;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaGpuKms, meta_gpu_kms, META_TYPE_GPU)
|
||||
@ -110,8 +112,10 @@ get_crtc_drm_connectors (MetaGpu *gpu,
|
||||
for (l = meta_gpu_get_outputs (gpu); l; l = l->next)
|
||||
{
|
||||
MetaOutput *output = l->data;
|
||||
MetaCrtc *assigned_crtc;
|
||||
|
||||
if (output->crtc == crtc)
|
||||
assigned_crtc = meta_output_get_assigned_crtc (output);
|
||||
if (assigned_crtc == crtc)
|
||||
g_array_append_val (connectors_array, output->winsys_id);
|
||||
}
|
||||
|
||||
@ -146,7 +150,10 @@ meta_gpu_kms_apply_crtc_mode (MetaGpuKms *gpu_kms,
|
||||
connectors, n_connectors,
|
||||
mode) != 0)
|
||||
{
|
||||
g_warning ("Failed to set CRTC mode %s: %m", crtc->current_mode->name);
|
||||
if (mode)
|
||||
g_warning ("Failed to set CRTC mode %s: %m", crtc->current_mode->name);
|
||||
else
|
||||
g_warning ("Failed to disable CRTC");
|
||||
g_free (connectors);
|
||||
return FALSE;
|
||||
}
|
||||
@ -191,8 +198,10 @@ meta_gpu_kms_is_crtc_active (MetaGpuKms *gpu_kms,
|
||||
for (l = meta_gpu_get_outputs (gpu); l; l = l->next)
|
||||
{
|
||||
MetaOutput *output = l->data;
|
||||
MetaCrtc *assigned_crtc;
|
||||
|
||||
if (output->crtc == crtc)
|
||||
assigned_crtc = meta_output_get_assigned_crtc (output);
|
||||
if (assigned_crtc == crtc)
|
||||
{
|
||||
connected_crtc_found = TRUE;
|
||||
break;
|
||||
@ -719,20 +728,34 @@ init_outputs (MetaGpuKms *gpu_kms,
|
||||
setup_output_clones (gpu);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_kms_resources_init (MetaKmsResources *resources,
|
||||
int fd)
|
||||
static gboolean
|
||||
meta_kms_resources_init (MetaKmsResources *resources,
|
||||
int fd,
|
||||
GError **error)
|
||||
|
||||
{
|
||||
drmModeRes *drm_resources;
|
||||
unsigned int i;
|
||||
|
||||
drm_resources = drmModeGetResources (fd);
|
||||
|
||||
if (!drm_resources)
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_FAILED,
|
||||
"Calling drmModeGetResources() failed");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
resources->resources = drm_resources;
|
||||
|
||||
resources->n_encoders = (unsigned int) drm_resources->count_encoders;
|
||||
resources->encoders = g_new (drmModeEncoder *, resources->n_encoders);
|
||||
for (i = 0; i < resources->n_encoders; i++)
|
||||
resources->encoders[i] = drmModeGetEncoder (fd, drm_resources->encoders[i]);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -744,7 +767,7 @@ meta_kms_resources_release (MetaKmsResources *resources)
|
||||
drmModeFreeEncoder (resources->encoders[i]);
|
||||
g_free (resources->encoders);
|
||||
|
||||
drmModeFreeResources (resources->resources);
|
||||
g_clear_pointer (&resources->resources, drmModeFreeResources);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -755,8 +778,18 @@ meta_gpu_kms_read_current (MetaGpu *gpu,
|
||||
MetaMonitorManager *monitor_manager =
|
||||
meta_gpu_get_monitor_manager (gpu);
|
||||
MetaKmsResources resources;
|
||||
g_autoptr (GError) local_error = NULL;
|
||||
|
||||
meta_kms_resources_init (&resources, gpu_kms->fd);
|
||||
if (!meta_kms_resources_init (&resources, gpu_kms->fd, &local_error))
|
||||
{
|
||||
if (!gpu_kms->resources_init_failed_before)
|
||||
{
|
||||
g_warning ("meta_kms_resources_init failed: %s, assuming we have no outputs",
|
||||
local_error->message);
|
||||
gpu_kms->resources_init_failed_before = TRUE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gpu_kms->max_buffer_width = resources.resources->max_width;
|
||||
gpu_kms->max_buffer_height = resources.resources->max_height;
|
||||
@ -779,6 +812,12 @@ meta_gpu_kms_read_current (MetaGpu *gpu,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_gpu_kms_can_have_outputs (MetaGpuKms *gpu_kms)
|
||||
{
|
||||
return gpu_kms->n_connectors > 0;
|
||||
}
|
||||
|
||||
MetaGpuKms *
|
||||
meta_gpu_kms_new (MetaMonitorManagerKms *monitor_manager_kms,
|
||||
const char *kms_file_path,
|
||||
@ -807,6 +846,8 @@ meta_gpu_kms_new (MetaMonitorManagerKms *monitor_manager_kms,
|
||||
|
||||
drmSetClientCap (gpu_kms->fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
|
||||
|
||||
meta_gpu_kms_read_current (META_GPU (gpu_kms), NULL);
|
||||
|
||||
source = g_source_new (&kms_event_funcs, sizeof (MetaKmsSource));
|
||||
kms_source = (MetaKmsSource *) source;
|
||||
kms_source->fd_tag = g_source_add_unix_fd (source,
|
||||
|
@ -53,6 +53,8 @@ gboolean meta_gpu_kms_apply_crtc_mode (MetaGpuKms *gpu_kms,
|
||||
int y,
|
||||
uint32_t fb_id);
|
||||
|
||||
gboolean meta_gpu_kms_can_have_outputs (MetaGpuKms *gpu_kms);
|
||||
|
||||
gboolean meta_gpu_kms_is_crtc_active (MetaGpuKms *gpu_kms,
|
||||
MetaCrtc *crtc);
|
||||
|
||||
|
@ -62,20 +62,179 @@ meta_launcher_get_seat_id (MetaLauncher *launcher)
|
||||
return launcher->seat_id;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
find_systemd_session (gchar **session_id,
|
||||
GError **error)
|
||||
{
|
||||
const gchar * const graphical_session_types[] = { "wayland", "x11", "mir", NULL };
|
||||
const gchar * const active_states[] = { "active", "online", NULL };
|
||||
g_autofree gchar *class = NULL;
|
||||
g_autofree gchar *local_session_id = NULL;
|
||||
g_autofree gchar *type = NULL;
|
||||
g_autofree gchar *state = NULL;
|
||||
g_auto (GStrv) sessions = NULL;
|
||||
int n_sessions;
|
||||
int saved_errno;
|
||||
|
||||
g_assert (session_id != NULL);
|
||||
g_assert (error == NULL || *error == NULL);
|
||||
|
||||
/* if we are in a logind session, we can trust that value, so use it. This
|
||||
* happens for example when you run mutter directly from a VT but when
|
||||
* systemd starts us we will not be in a logind session. */
|
||||
saved_errno = sd_pid_get_session (0, &local_session_id);
|
||||
if (saved_errno < 0)
|
||||
{
|
||||
if (saved_errno != -ENODATA)
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"Failed to get session by pid for user %d (%s)",
|
||||
getuid (),
|
||||
g_strerror (-saved_errno));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*session_id = g_steal_pointer (&local_session_id);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
saved_errno = sd_uid_get_display (getuid (), &local_session_id);
|
||||
if (saved_errno < 0)
|
||||
{
|
||||
/* no session, maybe there's a greeter session */
|
||||
if (saved_errno == -ENODATA)
|
||||
{
|
||||
n_sessions = sd_uid_get_sessions (getuid (), 1, &sessions);
|
||||
if (n_sessions < 0)
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"Failed to get all sessions for user %d (%m)",
|
||||
getuid ());
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (n_sessions == 0)
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"User %d has no sessions",
|
||||
getuid ());
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (int i = 0; i < n_sessions; ++i)
|
||||
{
|
||||
saved_errno = sd_session_get_class (sessions[i], &class);
|
||||
if (saved_errno < 0)
|
||||
{
|
||||
g_warning ("Couldn't get class for session '%d': %s",
|
||||
i,
|
||||
g_strerror (-saved_errno));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (g_strcmp0 (class, "greeter") == 0)
|
||||
{
|
||||
local_session_id = g_strdup (sessions[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!local_session_id)
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"Couldn't find a session or a greeter session for user %d",
|
||||
getuid ());
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"Couldn't get display for user %d: %s",
|
||||
getuid (),
|
||||
g_strerror (-saved_errno));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* sd_uid_get_display will return any session if there is no graphical
|
||||
* one, so let's check it really is graphical. */
|
||||
saved_errno = sd_session_get_type (local_session_id, &type);
|
||||
if (saved_errno < 0)
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"Couldn't get type for session '%s': %s",
|
||||
local_session_id,
|
||||
g_strerror (-saved_errno));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!g_strv_contains (graphical_session_types, type))
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"Session '%s' is not a graphical session (type: '%s')",
|
||||
local_session_id,
|
||||
type);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* and display sessions can be 'closing' if they are logged out but
|
||||
* some processes are lingering; we shouldn't consider these */
|
||||
saved_errno = sd_session_get_state (local_session_id, &state);
|
||||
if (saved_errno < 0)
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"Couldn't get state for session '%s': %s",
|
||||
local_session_id,
|
||||
g_strerror (-saved_errno));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!g_strv_contains (active_states, state))
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"Session '%s' is not active",
|
||||
local_session_id);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*session_id = g_steal_pointer (&local_session_id);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static Login1Session *
|
||||
get_session_proxy (GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
g_autofree char *proxy_path = NULL;
|
||||
g_autofree char *session_id = NULL;
|
||||
g_autoptr (GError) local_error = NULL;
|
||||
Login1Session *session_proxy;
|
||||
|
||||
if (sd_pid_get_session (getpid (), &session_id) < 0)
|
||||
if (!find_systemd_session (&session_id, &local_error))
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"Could not get session ID: %m");
|
||||
g_propagate_prefixed_error (error, local_error, "Could not get session ID: ");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -302,17 +461,14 @@ on_active_changed (Login1Session *session,
|
||||
static gchar *
|
||||
get_seat_id (GError **error)
|
||||
{
|
||||
g_autoptr (GError) local_error = NULL;
|
||||
g_autofree char *session_id = NULL;
|
||||
char *seat_id = NULL;
|
||||
int r;
|
||||
|
||||
r = sd_pid_get_session (0, &session_id);
|
||||
if (r < 0)
|
||||
if (!find_systemd_session (&session_id, &local_error))
|
||||
{
|
||||
g_set_error (error,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_NOT_FOUND,
|
||||
"Could not get session for PID: %s", g_strerror (-r));
|
||||
g_propagate_prefixed_error (error, local_error, "Could not get session ID: ");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include <meta/main.h>
|
||||
#include <meta/errors.h>
|
||||
#include <meta/meta-x11-errors.h>
|
||||
|
||||
#include <gudev/gudev.h>
|
||||
|
||||
@ -188,7 +188,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
MetaOutput *output = g_ptr_array_index (crtc_info->outputs, j);
|
||||
|
||||
output->is_dirty = TRUE;
|
||||
output->crtc = crtc;
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
}
|
||||
}
|
||||
|
||||
@ -249,7 +249,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
continue;
|
||||
}
|
||||
|
||||
output->crtc = NULL;
|
||||
meta_output_unassign_crtc (output);
|
||||
output->is_primary = FALSE;
|
||||
}
|
||||
}
|
||||
@ -642,10 +642,12 @@ meta_monitor_manager_kms_initable_init (GInitable *initable,
|
||||
GError **error)
|
||||
{
|
||||
MetaMonitorManagerKms *manager_kms = META_MONITOR_MANAGER_KMS (initable);
|
||||
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_kms);
|
||||
const char *subsystems[2] = { "drm", NULL };
|
||||
GList *gpu_paths;
|
||||
g_autofree char *primary_gpu_path = NULL;
|
||||
GList *l;
|
||||
gboolean can_have_outputs;
|
||||
|
||||
manager_kms->udev = g_udev_client_new (subsystems);
|
||||
|
||||
@ -691,6 +693,24 @@ meta_monitor_manager_kms_initable_init (GInitable *initable,
|
||||
}
|
||||
g_list_free_full (gpu_paths, g_free);
|
||||
|
||||
can_have_outputs = FALSE;
|
||||
for (l = meta_monitor_manager_get_gpus (manager); l; l = l->next)
|
||||
{
|
||||
MetaGpuKms *gpu_kms = l->data;
|
||||
|
||||
if (meta_gpu_kms_can_have_outputs (gpu_kms))
|
||||
{
|
||||
can_have_outputs = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!can_have_outputs)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
|
||||
"No GPUs with outputs found");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -64,11 +64,13 @@ typedef struct _MetaOutputKms
|
||||
void
|
||||
meta_output_kms_set_underscan (MetaOutput *output)
|
||||
{
|
||||
if (!output->crtc)
|
||||
MetaCrtc *crtc;
|
||||
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
if (!crtc)
|
||||
return;
|
||||
|
||||
meta_crtc_kms_set_underscan (output->crtc,
|
||||
output->is_underscanning);
|
||||
meta_crtc_kms_set_underscan (crtc, output->is_underscanning);
|
||||
}
|
||||
|
||||
void
|
||||
@ -600,14 +602,14 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
|
||||
|
||||
if (crtc->crtc_id == output_kms->current_encoder->crtc_id)
|
||||
{
|
||||
output->crtc = crtc;
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
output->crtc = NULL;
|
||||
meta_output_unassign_crtc (output);
|
||||
}
|
||||
|
||||
if (old_output)
|
||||
|
@ -103,8 +103,6 @@ typedef struct _MetaRendererNativeGpuData
|
||||
|
||||
MetaRendererNativeMode mode;
|
||||
|
||||
gboolean no_add_fb2;
|
||||
|
||||
EGLDisplay egl_display;
|
||||
|
||||
/*
|
||||
@ -993,14 +991,29 @@ meta_renderer_native_choose_egl_config (CoglDisplay *cogl_display,
|
||||
CoglRendererEGL *cogl_renderer_egl = cogl_renderer->winsys;
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
MetaEgl *egl = meta_backend_get_egl (backend);
|
||||
MetaRendererNativeGpuData *renderer_gpu_data = cogl_renderer_egl->platform;
|
||||
EGLDisplay egl_display = cogl_renderer_egl->edpy;
|
||||
|
||||
return choose_egl_config_from_gbm_format (egl,
|
||||
egl_display,
|
||||
attributes,
|
||||
GBM_FORMAT_XRGB8888,
|
||||
out_config,
|
||||
error);
|
||||
switch (renderer_gpu_data->mode)
|
||||
{
|
||||
case META_RENDERER_NATIVE_MODE_GBM:
|
||||
return choose_egl_config_from_gbm_format (egl,
|
||||
egl_display,
|
||||
attributes,
|
||||
GBM_FORMAT_XRGB8888,
|
||||
out_config,
|
||||
error);
|
||||
#ifdef HAVE_EGL_DEVICE
|
||||
case META_RENDERER_NATIVE_MODE_EGL_DEVICE:
|
||||
return meta_egl_choose_first_config (egl,
|
||||
egl_display,
|
||||
attributes,
|
||||
out_config,
|
||||
error);
|
||||
#endif
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -1612,12 +1625,23 @@ gbm_get_next_fb_id (MetaGpuKms *gpu_kms,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < gbm_bo_get_plane_count (next_bo); i++)
|
||||
if (gbm_bo_get_handle_for_plane (next_bo, 0).s32 == -1)
|
||||
{
|
||||
strides[i] = gbm_bo_get_stride_for_plane (next_bo, i);
|
||||
handles[i] = gbm_bo_get_handle_for_plane (next_bo, i).u32;
|
||||
offsets[i] = gbm_bo_get_offset (next_bo, i);
|
||||
modifiers[i] = gbm_bo_get_modifier (next_bo);
|
||||
/* Failed to fetch handle to plane, falling back to old method */
|
||||
strides[0] = gbm_bo_get_stride (next_bo);
|
||||
handles[0] = gbm_bo_get_handle (next_bo).u32;
|
||||
offsets[0] = 0;
|
||||
modifiers[0] = DRM_FORMAT_MOD_INVALID;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < gbm_bo_get_plane_count (next_bo); i++)
|
||||
{
|
||||
strides[i] = gbm_bo_get_stride_for_plane (next_bo, i);
|
||||
handles[i] = gbm_bo_get_handle_for_plane (next_bo, i).u32;
|
||||
offsets[i] = gbm_bo_get_offset (next_bo, i);
|
||||
modifiers[i] = gbm_bo_get_modifier (next_bo);
|
||||
}
|
||||
}
|
||||
|
||||
kms_fd = meta_gpu_kms_get_fd (gpu_kms);
|
||||
@ -2094,6 +2118,7 @@ meta_renderer_native_create_surface_egl_device (CoglOnscreen *onscreen,
|
||||
EGLDisplay egl_display = renderer_gpu_data->egl_display;
|
||||
MetaMonitor *monitor;
|
||||
MetaOutput *output;
|
||||
MetaCrtc *crtc;
|
||||
EGLConfig egl_config;
|
||||
EGLStreamKHR egl_stream;
|
||||
EGLSurface egl_surface;
|
||||
@ -2117,6 +2142,7 @@ meta_renderer_native_create_surface_egl_device (CoglOnscreen *onscreen,
|
||||
|
||||
monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
|
||||
output = meta_monitor_get_main_output (monitor);
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
|
||||
/*
|
||||
* An "logical_monitor" may have multiple outputs/crtcs in case its tiled,
|
||||
@ -2124,7 +2150,7 @@ meta_renderer_native_create_surface_egl_device (CoglOnscreen *onscreen,
|
||||
* lets pass the first one.
|
||||
*/
|
||||
output_attribs[0] = EGL_DRM_CRTC_EXT;
|
||||
output_attribs[1] = output->crtc->crtc_id;
|
||||
output_attribs[1] = crtc->crtc_id;
|
||||
output_attribs[2] = EGL_NONE;
|
||||
|
||||
if (!meta_egl_get_output_layers (egl, egl_display,
|
||||
@ -2181,14 +2207,15 @@ init_dumb_fb (MetaDumbBuffer *dumb_fb,
|
||||
uint32_t format,
|
||||
GError **error)
|
||||
{
|
||||
MetaRendererNative *renderer_native = meta_renderer_native_from_gpu (gpu_kms);
|
||||
MetaRendererNativeGpuData *renderer_gpu_data;
|
||||
struct drm_mode_create_dumb create_arg;
|
||||
struct drm_mode_destroy_dumb destroy_arg;
|
||||
struct drm_mode_map_dumb map_arg;
|
||||
uint32_t fb_id = 0;
|
||||
void *map;
|
||||
int kms_fd;
|
||||
uint32_t handles[4] = { 0, };
|
||||
uint32_t pitches[4] = { 0, };
|
||||
uint32_t offsets[4] = { 0, };
|
||||
|
||||
kms_fd = meta_gpu_kms_get_fd (gpu_kms);
|
||||
|
||||
@ -2206,25 +2233,18 @@ init_dumb_fb (MetaDumbBuffer *dumb_fb,
|
||||
goto err_ioctl;
|
||||
}
|
||||
|
||||
renderer_gpu_data = meta_renderer_native_get_gpu_data (renderer_native,
|
||||
gpu_kms);
|
||||
if (!renderer_gpu_data->no_add_fb2)
|
||||
{
|
||||
uint32_t handles[4] = { create_arg.handle, };
|
||||
uint32_t pitches[4] = { create_arg.pitch, };
|
||||
uint32_t offsets[4] = { 0 };
|
||||
handles[0] = create_arg.handle;
|
||||
pitches[0] = create_arg.pitch;
|
||||
|
||||
if (drmModeAddFB2 (kms_fd, width, height, format,
|
||||
handles, pitches, offsets,
|
||||
&fb_id, 0) != 0)
|
||||
{
|
||||
g_warning ("drmModeAddFB2 failed (%s), falling back to drmModeAddFB",
|
||||
g_strerror (errno));
|
||||
renderer_gpu_data->no_add_fb2 = TRUE;
|
||||
}
|
||||
if (drmModeAddFB2 (kms_fd, width, height, format,
|
||||
handles, pitches, offsets,
|
||||
&fb_id, 0) != 0)
|
||||
{
|
||||
g_debug ("drmModeAddFB2 failed (%s), falling back to drmModeAddFB",
|
||||
g_strerror (errno));
|
||||
}
|
||||
|
||||
if (renderer_gpu_data->no_add_fb2)
|
||||
if (fb_id == 0)
|
||||
{
|
||||
if (drmModeAddFB (kms_fd, width, height,
|
||||
24 /* depth of RGBX8888 */,
|
||||
@ -2722,9 +2742,12 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
|
||||
{
|
||||
MetaMonitor *main_monitor;
|
||||
MetaOutput *main_output;
|
||||
MetaCrtc *crtc;
|
||||
MetaMonitorTransform crtc_transform;
|
||||
|
||||
main_monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
|
||||
main_output = meta_monitor_get_main_output (main_monitor);
|
||||
crtc = meta_output_get_assigned_crtc (main_output);
|
||||
crtc_transform =
|
||||
meta_monitor_logical_to_crtc_transform (main_monitor,
|
||||
logical_monitor->transform);
|
||||
@ -2735,7 +2758,7 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
|
||||
*/
|
||||
|
||||
if (meta_monitor_manager_is_transform_handled (monitor_manager,
|
||||
main_output->crtc,
|
||||
crtc,
|
||||
crtc_transform))
|
||||
return META_MONITOR_TRANSFORM_NORMAL;
|
||||
else
|
||||
@ -2912,10 +2935,11 @@ meta_renderer_native_set_property (GObject *object,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
create_secondary_egl_config (MetaEgl *egl,
|
||||
EGLDisplay egl_display,
|
||||
EGLConfig *egl_config,
|
||||
GError **error)
|
||||
create_secondary_egl_config (MetaEgl *egl,
|
||||
MetaRendererNativeMode mode,
|
||||
EGLDisplay egl_display,
|
||||
EGLConfig *egl_config,
|
||||
GError **error)
|
||||
{
|
||||
EGLint attributes[] = {
|
||||
EGL_RED_SIZE, 1,
|
||||
@ -2928,12 +2952,26 @@ create_secondary_egl_config (MetaEgl *egl,
|
||||
EGL_NONE
|
||||
};
|
||||
|
||||
return choose_egl_config_from_gbm_format (egl,
|
||||
egl_display,
|
||||
attributes,
|
||||
GBM_FORMAT_XRGB8888,
|
||||
egl_config,
|
||||
error);
|
||||
switch (mode)
|
||||
{
|
||||
case META_RENDERER_NATIVE_MODE_GBM:
|
||||
return choose_egl_config_from_gbm_format (egl,
|
||||
egl_display,
|
||||
attributes,
|
||||
GBM_FORMAT_XRGB8888,
|
||||
egl_config,
|
||||
error);
|
||||
#ifdef HAVE_EGL_DEVICE
|
||||
case META_RENDERER_NATIVE_MODE_EGL_DEVICE:
|
||||
return meta_egl_choose_first_config (egl,
|
||||
egl_display,
|
||||
attributes,
|
||||
egl_config,
|
||||
error);
|
||||
#endif
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static EGLContext
|
||||
@ -2977,7 +3015,8 @@ init_secondary_gpu_data_gpu (MetaRendererNativeGpuData *renderer_gpu_data,
|
||||
EGLContext egl_context;
|
||||
char **missing_gl_extensions;
|
||||
|
||||
if (!create_secondary_egl_config (egl,egl_display, &egl_config, error))
|
||||
if (!create_secondary_egl_config (egl, renderer_gpu_data->mode, egl_display,
|
||||
&egl_config, error))
|
||||
return FALSE;
|
||||
|
||||
egl_context = create_secondary_egl_context (egl, egl_display, egl_config, error);
|
||||
|
231
src/backends/x11/cm/meta-cursor-sprite-xfixes.c
Normal file
231
src/backends/x11/cm/meta-cursor-sprite-xfixes.c
Normal file
@ -0,0 +1,231 @@
|
||||
/*
|
||||
* Copyright 2013, 2018 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "backends/x11/cm/meta-cursor-sprite-xfixes.h"
|
||||
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
|
||||
#include "core/display-private.h"
|
||||
#include "meta/meta-x11-display.h"
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
|
||||
PROP_DISPLAY,
|
||||
|
||||
N_PROPS
|
||||
};
|
||||
|
||||
static GParamSpec *obj_props[N_PROPS];
|
||||
|
||||
struct _MetaCursorSpriteXfixes
|
||||
{
|
||||
MetaCursorSprite parent;
|
||||
|
||||
MetaDisplay *display;
|
||||
};
|
||||
|
||||
static void
|
||||
meta_screen_cast_xfixes_init_initable_iface (GInitableIface *iface);
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (MetaCursorSpriteXfixes,
|
||||
meta_cursor_sprite_xfixes,
|
||||
META_TYPE_CURSOR_SPRITE,
|
||||
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
||||
meta_screen_cast_xfixes_init_initable_iface))
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_xfixes_realize_texture (MetaCursorSprite *sprite)
|
||||
{
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_cursor_sprite_xfixes_is_animated (MetaCursorSprite *sprite)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_xfixes_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaCursorSpriteXfixes *sprite_xfixes = META_CURSOR_SPRITE_XFIXES (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_DISPLAY:
|
||||
g_value_set_object (value, sprite_xfixes->display);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_xfixes_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaCursorSpriteXfixes *sprite_xfixes = META_CURSOR_SPRITE_XFIXES (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_DISPLAY:
|
||||
sprite_xfixes->display = g_value_get_object (value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
MetaCursorSpriteXfixes *
|
||||
meta_cursor_sprite_xfixes_new (MetaDisplay *display,
|
||||
GError **error)
|
||||
{
|
||||
return g_initable_new (META_TYPE_CURSOR_SPRITE_XFIXES,
|
||||
NULL, error,
|
||||
"display", display,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_cursor_sprite_xfixes_initable_init (GInitable *initable,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
MetaCursorSpriteXfixes *sprite_xfixes =
|
||||
META_CURSOR_SPRITE_XFIXES (initable);
|
||||
MetaCursorSprite *sprite = META_CURSOR_SPRITE (sprite_xfixes);
|
||||
MetaX11Display *x11_display;
|
||||
Display *xdisplay;
|
||||
XFixesCursorImage *cursor_image;
|
||||
CoglTexture2D *texture;
|
||||
uint8_t *cursor_data;
|
||||
gboolean free_cursor_data;
|
||||
ClutterBackend *clutter_backend;
|
||||
CoglContext *cogl_context;
|
||||
|
||||
x11_display = meta_display_get_x11_display (sprite_xfixes->display);
|
||||
xdisplay = meta_x11_display_get_xdisplay (x11_display);
|
||||
cursor_image = XFixesGetCursorImage (xdisplay);
|
||||
if (!cursor_image)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Failed to get cursor image");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Like all X APIs, XFixesGetCursorImage() returns arrays of 32-bit
|
||||
* quantities as arrays of long; we need to convert on 64 bit
|
||||
*/
|
||||
if (sizeof (long) == 4)
|
||||
{
|
||||
cursor_data = (uint8_t *) cursor_image->pixels;
|
||||
free_cursor_data = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
int i, j;
|
||||
uint32_t *cursor_words;
|
||||
unsigned long *p;
|
||||
uint32_t *q;
|
||||
|
||||
cursor_words = g_new (uint32_t,
|
||||
cursor_image->width * cursor_image->height);
|
||||
cursor_data = (uint8_t *) cursor_words;
|
||||
|
||||
p = cursor_image->pixels;
|
||||
q = cursor_words;
|
||||
for (j = 0; j < cursor_image->height; j++)
|
||||
{
|
||||
for (i = 0; i < cursor_image->width; i++)
|
||||
*(q++) = *(p++);
|
||||
}
|
||||
|
||||
free_cursor_data = TRUE;
|
||||
}
|
||||
|
||||
clutter_backend = clutter_get_default_backend ();
|
||||
cogl_context = clutter_backend_get_cogl_context (clutter_backend);
|
||||
texture = cogl_texture_2d_new_from_data (cogl_context,
|
||||
cursor_image->width,
|
||||
cursor_image->height,
|
||||
CLUTTER_CAIRO_FORMAT_ARGB32,
|
||||
cursor_image->width * 4, /* stride */
|
||||
cursor_data,
|
||||
error);
|
||||
|
||||
if (free_cursor_data)
|
||||
g_free (cursor_data);
|
||||
|
||||
if (!sprite)
|
||||
return FALSE;
|
||||
|
||||
meta_cursor_sprite_set_texture (sprite,
|
||||
COGL_TEXTURE (texture),
|
||||
cursor_image->xhot,
|
||||
cursor_image->yhot);
|
||||
cogl_object_unref (texture);
|
||||
XFree (cursor_image);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_screen_cast_xfixes_init_initable_iface (GInitableIface *iface)
|
||||
{
|
||||
iface->init = meta_cursor_sprite_xfixes_initable_init;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_xfixes_init (MetaCursorSpriteXfixes *sprite_xfixes)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_sprite_xfixes_class_init (MetaCursorSpriteXfixesClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
MetaCursorSpriteClass *cursor_sprite_class = META_CURSOR_SPRITE_CLASS (klass);
|
||||
|
||||
object_class->get_property = meta_cursor_sprite_xfixes_get_property;
|
||||
object_class->set_property = meta_cursor_sprite_xfixes_set_property;
|
||||
|
||||
cursor_sprite_class->realize_texture =
|
||||
meta_cursor_sprite_xfixes_realize_texture;
|
||||
cursor_sprite_class->is_animated = meta_cursor_sprite_xfixes_is_animated;
|
||||
|
||||
obj_props[PROP_DISPLAY] =
|
||||
g_param_spec_object ("display",
|
||||
"display",
|
||||
"MetaDisplay",
|
||||
META_TYPE_DISPLAY,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY |
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
g_object_class_install_properties (object_class, N_PROPS, obj_props);
|
||||
}
|
36
src/backends/x11/cm/meta-cursor-sprite-xfixes.h
Normal file
36
src/backends/x11/cm/meta-cursor-sprite-xfixes.h
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2013, 2018 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef META_CURSOR_SPRITE_XFIXES_H
|
||||
#define META_CURSOR_SPRITE_XFIXES_H
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
#include "backends/meta-cursor.h"
|
||||
#include "meta/types.h"
|
||||
|
||||
#define META_TYPE_CURSOR_SPRITE_XFIXES (meta_cursor_sprite_xfixes_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaCursorSpriteXfixes,
|
||||
meta_cursor_sprite_xfixes,
|
||||
META, CURSOR_SPRITE_XFIXES,
|
||||
MetaCursorSprite)
|
||||
|
||||
MetaCursorSpriteXfixes * meta_cursor_sprite_xfixes_new (MetaDisplay *display,
|
||||
GError **error);
|
||||
|
||||
#endif /* META_CURSOR_SPRITE_XFIXES_H */
|
@ -176,7 +176,7 @@ translate_device_event (MetaBackendX11 *x11,
|
||||
|
||||
meta_backend_x11_translate_device_event (x11, device_event);
|
||||
|
||||
if (!device_event->send_event && device_event->time != CurrentTime)
|
||||
if (!device_event->send_event && device_event->time != META_CURRENT_TIME)
|
||||
{
|
||||
if (XSERVER_TIME_IS_BEFORE (device_event->time, priv->latest_evtime))
|
||||
{
|
||||
@ -332,7 +332,7 @@ handle_host_xevent (MetaBackend *backend,
|
||||
if (meta_plugin_manager_xevent_filter (compositor->plugin_mgr, event))
|
||||
bypass_clutter = TRUE;
|
||||
|
||||
if (meta_dnd_handle_xdnd_event (backend, compositor, display, event))
|
||||
if (meta_dnd_handle_xdnd_event (backend, compositor, priv->xdisplay, event))
|
||||
bypass_clutter = TRUE;
|
||||
}
|
||||
}
|
||||
@ -547,8 +547,9 @@ meta_backend_x11_grab_device (MetaBackend *backend,
|
||||
XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits };
|
||||
int ret;
|
||||
|
||||
if (timestamp != CurrentTime)
|
||||
timestamp = MAX (timestamp, priv->latest_evtime);
|
||||
if (timestamp != META_CURRENT_TIME &&
|
||||
XSERVER_TIME_IS_BEFORE (timestamp, priv->latest_evtime))
|
||||
timestamp = priv->latest_evtime;
|
||||
|
||||
XISetMask (mask.mask, XI_ButtonPress);
|
||||
XISetMask (mask.mask, XI_ButtonRelease);
|
||||
@ -802,3 +803,13 @@ meta_backend_x11_get_xwindow (MetaBackendX11 *x11)
|
||||
ClutterActor *stage = meta_backend_get_stage (META_BACKEND (x11));
|
||||
return clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
|
||||
}
|
||||
|
||||
void
|
||||
meta_backend_x11_reload_cursor (MetaBackendX11 *x11)
|
||||
{
|
||||
MetaBackend *backend = META_BACKEND (x11);
|
||||
MetaCursorRenderer *cursor_renderer =
|
||||
meta_backend_get_cursor_renderer (backend);
|
||||
|
||||
meta_cursor_renderer_force_update (cursor_renderer);
|
||||
}
|
||||
|
@ -57,4 +57,6 @@ void meta_backend_x11_handle_event (MetaBackendX11 *x11,
|
||||
|
||||
uint8_t meta_backend_x11_get_xkb_event_base (MetaBackendX11 *x11);
|
||||
|
||||
void meta_backend_x11_reload_cursor (MetaBackendX11 *x11);
|
||||
|
||||
#endif /* META_BACKEND_X11_H */
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include <meta/barrier.h>
|
||||
#include "backends/x11/meta-barrier-x11.h"
|
||||
#include "display-private.h"
|
||||
#include "x11/meta-x11-display-private.h"
|
||||
|
||||
struct _MetaBarrierImplX11Private
|
||||
{
|
||||
@ -68,10 +69,11 @@ _meta_barrier_impl_x11_release (MetaBarrierImpl *impl,
|
||||
MetaBarrierImplX11Private *priv =
|
||||
meta_barrier_impl_x11_get_instance_private (self);
|
||||
MetaDisplay *display = priv->barrier->priv->display;
|
||||
Display *dpy = meta_x11_display_get_xdisplay (display->x11_display);
|
||||
|
||||
if (META_DISPLAY_HAS_XINPUT_23 (display))
|
||||
if (META_X11_DISPLAY_HAS_XINPUT_23 (display->x11_display))
|
||||
{
|
||||
XIBarrierReleasePointer (display->xdisplay,
|
||||
XIBarrierReleasePointer (dpy,
|
||||
META_VIRTUAL_CORE_POINTER_ID,
|
||||
priv->xbarrier, event->event_id);
|
||||
}
|
||||
@ -89,13 +91,13 @@ _meta_barrier_impl_x11_destroy (MetaBarrierImpl *impl)
|
||||
if (display == NULL)
|
||||
return;
|
||||
|
||||
dpy = display->xdisplay;
|
||||
dpy = meta_x11_display_get_xdisplay (display->x11_display);
|
||||
|
||||
if (!meta_barrier_is_active (priv->barrier))
|
||||
return;
|
||||
|
||||
XFixesDestroyPointerBarrier (dpy, priv->xbarrier);
|
||||
g_hash_table_remove (display->xids, &priv->xbarrier);
|
||||
g_hash_table_remove (display->x11_display->xids, &priv->xbarrier);
|
||||
priv->xbarrier = 0;
|
||||
}
|
||||
|
||||
@ -119,7 +121,7 @@ meta_barrier_impl_x11_new (MetaBarrier *barrier)
|
||||
priv = meta_barrier_impl_x11_get_instance_private (self);
|
||||
priv->barrier = barrier;
|
||||
|
||||
dpy = display->xdisplay;
|
||||
dpy = meta_x11_display_get_xdisplay (display->x11_display);
|
||||
root = DefaultRootWindow (dpy);
|
||||
|
||||
allowed_motion_dirs =
|
||||
@ -132,7 +134,7 @@ meta_barrier_impl_x11_new (MetaBarrier *barrier)
|
||||
allowed_motion_dirs,
|
||||
0, NULL);
|
||||
|
||||
g_hash_table_insert (display->xids, &priv->xbarrier, barrier);
|
||||
g_hash_table_insert (display->x11_display->xids, &priv->xbarrier, barrier);
|
||||
|
||||
return META_BARRIER_IMPL (self);
|
||||
}
|
||||
@ -172,8 +174,8 @@ meta_barrier_fire_xevent (MetaBarrier *barrier,
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_display_process_barrier_xevent (MetaDisplay *display,
|
||||
XIEvent *event)
|
||||
meta_x11_display_process_barrier_xevent (MetaX11Display *x11_display,
|
||||
XIEvent *event)
|
||||
{
|
||||
MetaBarrier *barrier;
|
||||
XIBarrierEvent *xev;
|
||||
@ -191,7 +193,7 @@ meta_display_process_barrier_xevent (MetaDisplay *display,
|
||||
}
|
||||
|
||||
xev = (XIBarrierEvent *) event;
|
||||
barrier = g_hash_table_lookup (display->xids, &xev->barrier);
|
||||
barrier = g_hash_table_lookup (x11_display->xids, &xev->barrier);
|
||||
if (barrier != NULL)
|
||||
{
|
||||
meta_barrier_fire_xevent (barrier, xev);
|
||||
|
@ -30,6 +30,7 @@
|
||||
|
||||
#include "meta-backend-x11.h"
|
||||
#include "meta-stage-private.h"
|
||||
#include "backends/meta-cursor-sprite-xcursor.h"
|
||||
|
||||
struct _MetaCursorRendererX11Private
|
||||
{
|
||||
@ -59,13 +60,18 @@ meta_cursor_renderer_x11_update_cursor (MetaCursorRenderer *renderer,
|
||||
|
||||
gboolean has_server_cursor = FALSE;
|
||||
|
||||
if (cursor_sprite)
|
||||
if (cursor_sprite && META_IS_CURSOR_SPRITE_XCURSOR (cursor_sprite))
|
||||
{
|
||||
MetaCursor cursor = meta_cursor_sprite_get_meta_cursor (cursor_sprite);
|
||||
MetaCursorSpriteXcursor *sprite_xcursor =
|
||||
META_CURSOR_SPRITE_XCURSOR (cursor_sprite);
|
||||
MetaCursor cursor;
|
||||
|
||||
cursor = meta_cursor_sprite_xcursor_get_cursor (sprite_xcursor);
|
||||
if (cursor != META_CURSOR_NONE)
|
||||
{
|
||||
Cursor xcursor = meta_cursor_create_x_cursor (xdisplay, cursor);
|
||||
Cursor xcursor;
|
||||
|
||||
xcursor = meta_create_x_cursor (xdisplay, cursor);
|
||||
XDefineCursor (xdisplay, xwindow, xcursor);
|
||||
XFlush (xdisplay);
|
||||
XFreeCursor (xdisplay, xcursor);
|
||||
|
@ -35,7 +35,7 @@
|
||||
#include <gudev/gudev.h>
|
||||
#endif
|
||||
|
||||
#include <meta/errors.h>
|
||||
#include <meta/meta-x11-errors.h>
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
|
||||
typedef struct _MetaInputSettingsX11Private
|
||||
@ -63,9 +63,9 @@ device_free_xdevice (gpointer user_data)
|
||||
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||
XDevice *xdev = user_data;
|
||||
|
||||
meta_error_trap_push (display);
|
||||
meta_x11_error_trap_push (display->x11_display);
|
||||
XCloseDevice (xdisplay, xdev);
|
||||
meta_error_trap_pop (display);
|
||||
meta_x11_error_trap_pop (display->x11_display);
|
||||
}
|
||||
|
||||
static XDevice *
|
||||
@ -81,9 +81,9 @@ device_ensure_xdevice (ClutterInputDevice *device)
|
||||
if (xdev)
|
||||
return xdev;
|
||||
|
||||
meta_error_trap_push (display);
|
||||
meta_x11_error_trap_push (display->x11_display);
|
||||
xdev = XOpenDevice (xdisplay, device_id);
|
||||
meta_error_trap_pop (display);
|
||||
meta_x11_error_trap_pop (display->x11_display);
|
||||
|
||||
if (xdev)
|
||||
{
|
||||
@ -586,7 +586,7 @@ meta_input_settings_x11_set_tablet_mapping (MetaInputSettings *settings,
|
||||
return;
|
||||
|
||||
/* Grab the puke bucket! */
|
||||
meta_error_trap_push (display);
|
||||
meta_x11_error_trap_push (display->x11_display);
|
||||
xdev = device_ensure_xdevice (device);
|
||||
if (xdev)
|
||||
{
|
||||
@ -595,7 +595,7 @@ meta_input_settings_x11_set_tablet_mapping (MetaInputSettings *settings,
|
||||
Absolute : Relative);
|
||||
}
|
||||
|
||||
if (meta_error_trap_pop_with_return (display))
|
||||
if (meta_x11_error_trap_pop_with_return (display->x11_display))
|
||||
{
|
||||
g_warning ("Could not set tablet mapping for %s",
|
||||
clutter_input_device_get_device_name (device));
|
||||
@ -782,7 +782,6 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti
|
||||
return;
|
||||
|
||||
/* Grab the puke bucket! */
|
||||
meta_error_trap_push (display);
|
||||
xdev = device_ensure_xdevice (device);
|
||||
if (xdev)
|
||||
{
|
||||
@ -800,7 +799,7 @@ meta_input_settings_x11_set_stylus_button_map (MetaInputSettings *setti
|
||||
XSetDeviceButtonMapping (xdisplay, xdev, map, G_N_ELEMENTS (map));
|
||||
}
|
||||
|
||||
if (meta_error_trap_pop_with_return (display))
|
||||
if (meta_x11_error_trap_pop_with_return (display->x11_display))
|
||||
{
|
||||
g_warning ("Could not set stylus button map for %s",
|
||||
clutter_input_device_get_device_name (device));
|
||||
|
@ -39,7 +39,7 @@
|
||||
|
||||
#include "meta-backend-x11.h"
|
||||
#include <meta/main.h>
|
||||
#include <meta/errors.h>
|
||||
#include <meta/meta-x11-errors.h>
|
||||
#include "backends/meta-crtc.h"
|
||||
#include "backends/meta-monitor-config-manager.h"
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
@ -225,8 +225,10 @@ is_crtc_assignment_changed (MetaCrtc *crtc,
|
||||
for (j = 0; j < crtc_info->outputs->len; j++)
|
||||
{
|
||||
MetaOutput *output = ((MetaOutput**) crtc_info->outputs->pdata)[j];
|
||||
MetaCrtc *assigned_crtc;
|
||||
|
||||
if (output->crtc != crtc)
|
||||
assigned_crtc = meta_output_get_assigned_crtc (output);
|
||||
if (assigned_crtc != crtc)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -243,6 +245,7 @@ is_output_assignment_changed (MetaOutput *output,
|
||||
MetaOutputInfo **output_infos,
|
||||
unsigned int n_output_infos)
|
||||
{
|
||||
MetaCrtc *assigned_crtc;
|
||||
gboolean output_is_found = FALSE;
|
||||
unsigned int i;
|
||||
|
||||
@ -265,8 +268,10 @@ is_output_assignment_changed (MetaOutput *output,
|
||||
output_is_found = TRUE;
|
||||
}
|
||||
|
||||
assigned_crtc = meta_output_get_assigned_crtc (output);
|
||||
|
||||
if (!output_is_found)
|
||||
return output->crtc != NULL;
|
||||
return assigned_crtc != NULL;
|
||||
|
||||
for (i = 0; i < n_crtc_infos; i++)
|
||||
{
|
||||
@ -279,7 +284,7 @@ is_output_assignment_changed (MetaOutput *output,
|
||||
((MetaOutput**) crtc_info->outputs->pdata)[j];
|
||||
|
||||
if (crtc_info_output == output &&
|
||||
crtc_info->crtc == output->crtc)
|
||||
crtc_info->crtc == assigned_crtc)
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@ -455,7 +460,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
|
||||
|
||||
output->is_dirty = TRUE;
|
||||
output->crtc = crtc;
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
|
||||
output_ids[j] = output->winsys_id;
|
||||
}
|
||||
@ -521,7 +526,7 @@ apply_crtc_assignments (MetaMonitorManager *manager,
|
||||
continue;
|
||||
}
|
||||
|
||||
output->crtc = NULL;
|
||||
meta_output_unassign_crtc (output);
|
||||
output->is_primary = FALSE;
|
||||
}
|
||||
|
||||
|
@ -97,10 +97,13 @@ output_set_underscanning_xrandr (MetaOutput *output,
|
||||
* make the border configurable. */
|
||||
if (underscanning)
|
||||
{
|
||||
MetaCrtc *crtc;
|
||||
uint32_t border_value;
|
||||
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
|
||||
prop = XInternAtom (xdisplay, "underscan hborder", False);
|
||||
border_value = output->crtc->current_mode->width * 0.05;
|
||||
border_value = crtc->current_mode->width * 0.05;
|
||||
|
||||
xcb_randr_change_output_property (XGetXCBConnection (xdisplay),
|
||||
(XID) output->winsys_id,
|
||||
@ -109,7 +112,7 @@ output_set_underscanning_xrandr (MetaOutput *output,
|
||||
1, &border_value);
|
||||
|
||||
prop = XInternAtom (xdisplay, "underscan vborder", False);
|
||||
border_value = output->crtc->current_mode->height * 0.05;
|
||||
border_value = crtc->current_mode->height * 0.05;
|
||||
|
||||
xcb_randr_change_output_property (XGetXCBConnection (xdisplay),
|
||||
(XID) output->winsys_id,
|
||||
@ -737,14 +740,14 @@ output_get_crtcs (MetaOutput *output,
|
||||
}
|
||||
output->n_possible_crtcs = n_actual_crtcs;
|
||||
|
||||
output->crtc = NULL;
|
||||
meta_output_unassign_crtc (output);
|
||||
for (l = meta_gpu_get_crtcs (gpu); l; l = l->next)
|
||||
{
|
||||
MetaCrtc *crtc = l->data;
|
||||
|
||||
if ((XID) crtc->crtc_id == xrandr_output->crtc)
|
||||
{
|
||||
output->crtc = crtc;
|
||||
meta_output_assign_crtc (output, crtc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -113,7 +113,7 @@ draw_crtc (MetaMonitor *monitor,
|
||||
CoglTexture *texture = data->texture;
|
||||
MetaLogicalMonitor *logical_monitor = data->logical_monitor;
|
||||
MetaOutput *output = monitor_crtc_mode->output;
|
||||
MetaCrtc *crtc = output->crtc;
|
||||
MetaCrtc *crtc;
|
||||
MetaRendererView *renderer_view = META_RENDERER_VIEW (data->view);
|
||||
MetaMonitorTransform view_transform;
|
||||
MetaMonitorTransform layout_transform = META_MONITOR_TRANSFORM_NORMAL;
|
||||
@ -129,6 +129,8 @@ draw_crtc (MetaMonitor *monitor,
|
||||
texture_width = cogl_texture_get_width (texture);
|
||||
texture_height = cogl_texture_get_height (texture);
|
||||
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
|
||||
clutter_stage_view_get_layout (data->view, &view_layout);
|
||||
sample_x = crtc->rect.x - view_layout.x;
|
||||
sample_y = crtc->rect.y - view_layout.y;
|
||||
|
@ -26,6 +26,8 @@
|
||||
|
||||
#include "backends/x11/nested/meta-cursor-renderer-x11-nested.h"
|
||||
|
||||
#include <X11/Xcursor/Xcursor.h>
|
||||
|
||||
#include "backends/x11/meta-backend-x11.h"
|
||||
|
||||
struct _MetaCursorRendererX11Nested
|
||||
|
@ -50,20 +50,22 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
|
||||
{
|
||||
MetaMonitor *main_monitor;
|
||||
MetaOutput *main_output;
|
||||
MetaCrtc *crtc;
|
||||
MetaMonitorTransform crtc_transform;
|
||||
|
||||
main_monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
|
||||
main_output = meta_monitor_get_main_output (main_monitor);
|
||||
crtc = meta_output_get_assigned_crtc (main_output);
|
||||
crtc_transform =
|
||||
meta_monitor_logical_to_crtc_transform (main_monitor,
|
||||
logical_monitor->transform);
|
||||
|
||||
/*
|
||||
* Pick any monitor and output and check; all CRTCs of a logical monitor will
|
||||
* always have the same transform assigned to them.
|
||||
*/
|
||||
|
||||
if (meta_monitor_manager_is_transform_handled (monitor_manager,
|
||||
main_output->crtc,
|
||||
crtc,
|
||||
crtc_transform))
|
||||
return META_MONITOR_TRANSFORM_NORMAL;
|
||||
else
|
||||
|
@ -22,7 +22,6 @@ struct _MetaCompositor
|
||||
gint64 server_time_offset;
|
||||
|
||||
guint server_time_is_monotonic_time : 1;
|
||||
guint no_mipmaps : 1;
|
||||
|
||||
ClutterActor *stage, *window_group, *top_window_group, *feedback_group;
|
||||
ClutterActor *background_actor;
|
||||
|
@ -42,8 +42,8 @@
|
||||
* There's two containers in the stage that are used to place window actors, here
|
||||
* are listed in the order in which they are painted:
|
||||
*
|
||||
* - window group, accessible with meta_get_window_group_for_screen()
|
||||
* - top window group, accessible with meta_get_top_window_group_for_screen()
|
||||
* - window group, accessible with meta_get_window_group_for_display()
|
||||
* - top window group, accessible with meta_get_top_window_group_for_display()
|
||||
*
|
||||
* Mutter will place actors representing windows in the window group, except for
|
||||
* override-redirect windows (ie. popups and menus) which will be placed in the
|
||||
@ -55,8 +55,7 @@
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
|
||||
#include "core.h"
|
||||
#include <meta/screen.h>
|
||||
#include <meta/errors.h>
|
||||
#include <meta/meta-x11-errors.h>
|
||||
#include <meta/window.h>
|
||||
#include "compositor-private.h"
|
||||
#include <meta/compositor-mutter.h>
|
||||
@ -80,6 +79,8 @@
|
||||
#include "backends/x11/meta-backend-x11.h"
|
||||
#include "clutter/clutter-mutter.h"
|
||||
|
||||
#include "x11/meta-x11-display-private.h"
|
||||
|
||||
#ifdef HAVE_WAYLAND
|
||||
#include "wayland/meta-wayland-private.h"
|
||||
#endif
|
||||
@ -149,78 +150,78 @@ process_damage (MetaCompositor *compositor,
|
||||
|
||||
/* compat helper */
|
||||
static MetaCompositor *
|
||||
get_compositor_for_screen (MetaScreen *screen)
|
||||
get_compositor_for_display (MetaDisplay *display)
|
||||
{
|
||||
return screen->display->compositor;
|
||||
return display->compositor;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_get_stage_for_screen:
|
||||
* @screen: a #MetaScreen
|
||||
* meta_get_stage_for_display:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Returns: (transfer none): The #ClutterStage for the screen
|
||||
* Returns: (transfer none): The #ClutterStage for the display
|
||||
*/
|
||||
ClutterActor *
|
||||
meta_get_stage_for_screen (MetaScreen *screen)
|
||||
meta_get_stage_for_display (MetaDisplay *display)
|
||||
{
|
||||
MetaCompositor *compositor = get_compositor_for_screen (screen);
|
||||
MetaCompositor *compositor = get_compositor_for_display (display);
|
||||
return compositor->stage;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_get_window_group_for_screen:
|
||||
* @screen: a #MetaScreen
|
||||
* meta_get_window_group_for_display:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Returns: (transfer none): The window group corresponding to @screen
|
||||
* Returns: (transfer none): The window group corresponding to @display
|
||||
*/
|
||||
ClutterActor *
|
||||
meta_get_window_group_for_screen (MetaScreen *screen)
|
||||
meta_get_window_group_for_display (MetaDisplay *display)
|
||||
{
|
||||
MetaCompositor *compositor = get_compositor_for_screen (screen);
|
||||
MetaCompositor *compositor = get_compositor_for_display (display);
|
||||
return compositor->window_group;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_get_top_window_group_for_screen:
|
||||
* @screen: a #MetaScreen
|
||||
* meta_get_top_window_group_for_display:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Returns: (transfer none): The top window group corresponding to @screen
|
||||
* Returns: (transfer none): The top window group corresponding to @display
|
||||
*/
|
||||
ClutterActor *
|
||||
meta_get_top_window_group_for_screen (MetaScreen *screen)
|
||||
meta_get_top_window_group_for_display (MetaDisplay *display)
|
||||
{
|
||||
MetaCompositor *compositor = get_compositor_for_screen (screen);
|
||||
MetaCompositor *compositor = get_compositor_for_display (display);
|
||||
return compositor->top_window_group;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_get_feedback_group_for_screen:
|
||||
* @screen: a #MetaScreen
|
||||
* meta_get_feedback_group_for_display:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Returns: (transfer none): The feedback group corresponding to @screen
|
||||
* Returns: (transfer none): The feedback group corresponding to @display
|
||||
*/
|
||||
ClutterActor *
|
||||
meta_get_feedback_group_for_screen (MetaScreen *screen)
|
||||
meta_get_feedback_group_for_display (MetaDisplay *display)
|
||||
{
|
||||
MetaCompositor *compositor = get_compositor_for_screen (screen);
|
||||
MetaCompositor *compositor = get_compositor_for_display (display);
|
||||
return compositor->feedback_group;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_get_window_actors:
|
||||
* @screen: a #MetaScreen
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Returns: (transfer none) (element-type Clutter.Actor): The set of #MetaWindowActor on @screen
|
||||
* Returns: (transfer none) (element-type Clutter.Actor): The set of #MetaWindowActor on @display
|
||||
*/
|
||||
GList *
|
||||
meta_get_window_actors (MetaScreen *screen)
|
||||
meta_get_window_actors (MetaDisplay *display)
|
||||
{
|
||||
MetaCompositor *compositor = get_compositor_for_screen (screen);
|
||||
MetaCompositor *compositor = get_compositor_for_display (display);
|
||||
return compositor->windows;
|
||||
}
|
||||
|
||||
void
|
||||
meta_set_stage_input_region (MetaScreen *screen,
|
||||
meta_set_stage_input_region (MetaDisplay *display,
|
||||
XserverRegion region)
|
||||
{
|
||||
/* As a wayland compositor we can simply ignore all this trickery
|
||||
@ -230,9 +231,8 @@ meta_set_stage_input_region (MetaScreen *screen,
|
||||
*/
|
||||
if (!meta_is_wayland_compositor ())
|
||||
{
|
||||
MetaDisplay *display = screen->display;
|
||||
MetaCompositor *compositor = display->compositor;
|
||||
Display *xdpy = meta_display_get_xdisplay (display);
|
||||
Display *xdpy = meta_x11_display_get_xdisplay (display->x11_display);
|
||||
Window xstage = clutter_x11_get_stage_window (CLUTTER_STAGE (compositor->stage));
|
||||
|
||||
XFixesSetWindowShapeRegion (xdpy, xstage, ShapeInput, 0, 0, region);
|
||||
@ -247,7 +247,7 @@ meta_set_stage_input_region (MetaScreen *screen,
|
||||
}
|
||||
|
||||
void
|
||||
meta_empty_stage_input_region (MetaScreen *screen)
|
||||
meta_empty_stage_input_region (MetaDisplay *display)
|
||||
{
|
||||
/* Using a static region here is a bit hacky, but Metacity never opens more than
|
||||
* one XDisplay, so it works fine. */
|
||||
@ -255,22 +255,21 @@ meta_empty_stage_input_region (MetaScreen *screen)
|
||||
|
||||
if (region == None)
|
||||
{
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Display *xdpy = meta_display_get_xdisplay (display);
|
||||
Display *xdpy = meta_x11_display_get_xdisplay (display->x11_display);
|
||||
region = XFixesCreateRegion (xdpy, NULL, 0);
|
||||
}
|
||||
|
||||
meta_set_stage_input_region (screen, region);
|
||||
meta_set_stage_input_region (display, region);
|
||||
}
|
||||
|
||||
void
|
||||
meta_focus_stage_window (MetaScreen *screen,
|
||||
guint32 timestamp)
|
||||
meta_focus_stage_window (MetaDisplay *display,
|
||||
guint32 timestamp)
|
||||
{
|
||||
ClutterStage *stage;
|
||||
Window window;
|
||||
|
||||
stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen));
|
||||
stage = CLUTTER_STAGE (meta_get_stage_for_display (display));
|
||||
if (!stage)
|
||||
return;
|
||||
|
||||
@ -279,14 +278,13 @@ meta_focus_stage_window (MetaScreen *screen,
|
||||
if (window == None)
|
||||
return;
|
||||
|
||||
meta_display_set_input_focus_xwindow (screen->display,
|
||||
screen,
|
||||
window,
|
||||
timestamp);
|
||||
meta_x11_display_set_input_focus_xwindow (display->x11_display,
|
||||
window,
|
||||
timestamp);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_stage_is_focused (MetaScreen *screen)
|
||||
meta_stage_is_focused (MetaDisplay *display)
|
||||
{
|
||||
ClutterStage *stage;
|
||||
Window window;
|
||||
@ -294,7 +292,7 @@ meta_stage_is_focused (MetaScreen *screen)
|
||||
if (meta_is_wayland_compositor ())
|
||||
return TRUE;
|
||||
|
||||
stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen));
|
||||
stage = CLUTTER_STAGE (meta_get_stage_for_display (display));
|
||||
if (!stage)
|
||||
return FALSE;
|
||||
|
||||
@ -303,7 +301,7 @@ meta_stage_is_focused (MetaScreen *screen)
|
||||
if (window == None)
|
||||
return FALSE;
|
||||
|
||||
return (screen->display->focus_xwindow == window);
|
||||
return (display->x11_display->focus_xwindow == window);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -364,11 +362,14 @@ meta_begin_modal_for_plugin (MetaCompositor *compositor,
|
||||
if (is_modal (display) || display->grab_op != META_GRAB_OP_NONE)
|
||||
return FALSE;
|
||||
|
||||
/* XXX: why is this needed? */
|
||||
XIUngrabDevice (display->xdisplay,
|
||||
META_VIRTUAL_CORE_POINTER_ID,
|
||||
timestamp);
|
||||
XSync (display->xdisplay, False);
|
||||
if (display->x11_display)
|
||||
{
|
||||
/* XXX: why is this needed? */
|
||||
XIUngrabDevice (display->x11_display->xdisplay,
|
||||
META_VIRTUAL_CORE_POINTER_ID,
|
||||
timestamp);
|
||||
XSync (display->x11_display->xdisplay, False);
|
||||
}
|
||||
|
||||
if (!grab_devices (options, timestamp))
|
||||
return FALSE;
|
||||
@ -380,7 +381,7 @@ meta_begin_modal_for_plugin (MetaCompositor *compositor,
|
||||
display->grab_have_keyboard = TRUE;
|
||||
|
||||
g_signal_emit_by_name (display, "grab-op-begin",
|
||||
meta_plugin_get_screen (plugin),
|
||||
meta_plugin_get_display (plugin),
|
||||
display->grab_window, display->grab_op);
|
||||
|
||||
if (meta_is_wayland_compositor ())
|
||||
@ -407,7 +408,7 @@ meta_end_modal_for_plugin (MetaCompositor *compositor,
|
||||
g_return_if_fail (is_modal (display));
|
||||
|
||||
g_signal_emit_by_name (display, "grab-op-end",
|
||||
meta_plugin_get_screen (plugin),
|
||||
meta_plugin_get_display (plugin),
|
||||
display->grab_window, display->grab_op);
|
||||
|
||||
display->grab_op = META_GRAB_OP_NONE;
|
||||
@ -445,14 +446,13 @@ after_stage_paint (ClutterStage *stage,
|
||||
}
|
||||
|
||||
static void
|
||||
redirect_windows (MetaScreen *screen)
|
||||
redirect_windows (MetaX11Display *x11_display)
|
||||
{
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
Window xroot = meta_screen_get_xroot (screen);
|
||||
int screen_number = meta_screen_get_screen_number (screen);
|
||||
guint n_retries;
|
||||
guint max_retries;
|
||||
Display *xdisplay = meta_x11_display_get_xdisplay (x11_display);
|
||||
Window xroot = meta_x11_display_get_xroot (x11_display);
|
||||
int screen_number = meta_x11_display_get_screen_number (x11_display);
|
||||
guint n_retries;
|
||||
guint max_retries;
|
||||
|
||||
if (meta_get_replace_current_wm ())
|
||||
max_retries = 5;
|
||||
@ -467,11 +467,11 @@ redirect_windows (MetaScreen *screen)
|
||||
*/
|
||||
while (TRUE)
|
||||
{
|
||||
meta_error_trap_push (display);
|
||||
meta_x11_error_trap_push (x11_display);
|
||||
XCompositeRedirectSubwindows (xdisplay, xroot, CompositeRedirectManual);
|
||||
XSync (xdisplay, FALSE);
|
||||
|
||||
if (!meta_error_trap_pop_with_return (display))
|
||||
if (!meta_x11_error_trap_pop_with_return (x11_display))
|
||||
break;
|
||||
|
||||
if (n_retries == max_retries)
|
||||
@ -479,7 +479,7 @@ redirect_windows (MetaScreen *screen)
|
||||
/* This probably means that a non-WM compositor like xcompmgr is running;
|
||||
* we have no way to get it to exit */
|
||||
meta_fatal (_("Another compositing manager is already running on screen %i on display “%s”."),
|
||||
screen_number, display->name);
|
||||
screen_number, x11_display->name);
|
||||
}
|
||||
|
||||
n_retries++;
|
||||
@ -491,11 +491,14 @@ void
|
||||
meta_compositor_manage (MetaCompositor *compositor)
|
||||
{
|
||||
MetaDisplay *display = compositor->display;
|
||||
Display *xdisplay = display->xdisplay;
|
||||
MetaScreen *screen = display->screen;
|
||||
Display *xdisplay = NULL;
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
|
||||
meta_screen_set_cm_selection (display->screen);
|
||||
if (display->x11_display)
|
||||
{
|
||||
xdisplay = display->x11_display->xdisplay;
|
||||
meta_x11_display_set_cm_selection (display->x11_display);
|
||||
}
|
||||
|
||||
compositor->stage = meta_backend_get_stage (backend);
|
||||
|
||||
@ -516,9 +519,9 @@ meta_compositor_manage (MetaCompositor *compositor)
|
||||
|
||||
clutter_stage_set_sync_delay (CLUTTER_STAGE (compositor->stage), META_SYNC_DELAY);
|
||||
|
||||
compositor->window_group = meta_window_group_new (screen);
|
||||
compositor->top_window_group = meta_window_group_new (screen);
|
||||
compositor->feedback_group = meta_window_group_new (screen);
|
||||
compositor->window_group = meta_window_group_new (display);
|
||||
compositor->top_window_group = meta_window_group_new (display);
|
||||
compositor->feedback_group = meta_window_group_new (display);
|
||||
|
||||
clutter_actor_add_child (compositor->stage, compositor->window_group);
|
||||
clutter_actor_add_child (compositor->stage, compositor->top_window_group);
|
||||
@ -535,13 +538,13 @@ meta_compositor_manage (MetaCompositor *compositor)
|
||||
{
|
||||
Window xwin;
|
||||
|
||||
compositor->output = screen->composite_overlay_window;
|
||||
compositor->output = display->x11_display->composite_overlay_window;
|
||||
|
||||
xwin = meta_backend_x11_get_xwindow (META_BACKEND_X11 (backend));
|
||||
|
||||
XReparentWindow (xdisplay, xwin, compositor->output, 0, 0);
|
||||
|
||||
meta_empty_stage_input_region (screen);
|
||||
meta_empty_stage_input_region (display);
|
||||
|
||||
/* Make sure there isn't any left-over output shape on the
|
||||
* overlay window by setting the whole screen to be an
|
||||
@ -561,7 +564,8 @@ meta_compositor_manage (MetaCompositor *compositor)
|
||||
compositor->have_x11_sync_object = meta_sync_ring_init (xdisplay);
|
||||
}
|
||||
|
||||
redirect_windows (display->screen);
|
||||
if (display->x11_display)
|
||||
redirect_windows (display->x11_display);
|
||||
|
||||
compositor->plugin_mgr = meta_plugin_manager_new (compositor);
|
||||
}
|
||||
@ -571,9 +575,9 @@ meta_compositor_unmanage (MetaCompositor *compositor)
|
||||
{
|
||||
if (!meta_is_wayland_compositor ())
|
||||
{
|
||||
MetaDisplay *display = compositor->display;
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
Window xroot = display->screen->xroot;
|
||||
MetaX11Display *display = compositor->display->x11_display;
|
||||
Display *xdisplay = display->xdisplay;
|
||||
Window xroot = display->xroot;
|
||||
|
||||
/* This is the most important part of cleanup - we have to do this
|
||||
* before giving up the window manager selection or the next
|
||||
@ -598,7 +602,7 @@ meta_shape_cow_for_window (MetaCompositor *compositor,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MetaDisplay *display = compositor->display;
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
Display *xdisplay = meta_x11_display_get_xdisplay (display->x11_display);
|
||||
|
||||
if (window == NULL)
|
||||
XFixesSetWindowShapeRegion (xdisplay, compositor->output, ShapeBounding, 0, 0, None);
|
||||
@ -616,7 +620,7 @@ meta_shape_cow_for_window (MetaCompositor *compositor,
|
||||
window_bounds.width = rect.width;
|
||||
window_bounds.height = rect.height;
|
||||
|
||||
meta_screen_get_size (display->screen, &width, &height);
|
||||
meta_display_get_size (display, &width, &height);
|
||||
screen_rect.x = 0;
|
||||
screen_rect.y = 0;
|
||||
screen_rect.width = width;
|
||||
@ -659,12 +663,12 @@ meta_compositor_add_window (MetaCompositor *compositor,
|
||||
{
|
||||
MetaDisplay *display = compositor->display;
|
||||
|
||||
meta_error_trap_push (display);
|
||||
meta_x11_error_trap_push (display->x11_display);
|
||||
|
||||
meta_window_actor_new (window);
|
||||
sync_actor_stacking (compositor);
|
||||
|
||||
meta_error_trap_pop (display);
|
||||
meta_x11_error_trap_pop (display->x11_display);
|
||||
}
|
||||
|
||||
void
|
||||
@ -744,8 +748,10 @@ meta_compositor_process_event (MetaCompositor *compositor,
|
||||
XEvent *event,
|
||||
MetaWindow *window)
|
||||
{
|
||||
MetaX11Display *x11_display = compositor->display->x11_display;
|
||||
|
||||
if (!meta_is_wayland_compositor () &&
|
||||
event->type == meta_display_get_damage_event_base (compositor->display) + XDamageNotify)
|
||||
event->type == meta_x11_display_get_damage_event_base (x11_display) + XDamageNotify)
|
||||
{
|
||||
/* Core code doesn't handle damage events, so we need to extract the MetaWindow
|
||||
* ourselves
|
||||
@ -753,7 +759,7 @@ meta_compositor_process_event (MetaCompositor *compositor,
|
||||
if (window == NULL)
|
||||
{
|
||||
Window xwin = ((XDamageNotifyEvent *) event)->drawable;
|
||||
window = meta_display_lookup_x_window (compositor->display, xwin);
|
||||
window = meta_x11_display_lookup_x_window (x11_display, xwin);
|
||||
}
|
||||
|
||||
if (window)
|
||||
@ -943,11 +949,13 @@ get_top_visible_window_actor (MetaCompositor *compositor)
|
||||
MetaWindowActor *window_actor = l->data;
|
||||
MetaWindow *window = meta_window_actor_get_meta_window (window_actor);
|
||||
MetaRectangle buffer_rect;
|
||||
MetaRectangle display_rect = { 0 };
|
||||
|
||||
meta_window_get_buffer_rect (window, &buffer_rect);
|
||||
meta_display_get_size (compositor->display,
|
||||
&display_rect.width, &display_rect.height);
|
||||
|
||||
if (meta_rectangle_overlap (&compositor->display->screen->rect,
|
||||
&buffer_rect))
|
||||
if (meta_rectangle_overlap (&display_rect, &buffer_rect))
|
||||
return window_actor;
|
||||
}
|
||||
|
||||
@ -961,7 +969,7 @@ on_top_window_actor_destroyed (MetaWindowActor *window_actor,
|
||||
compositor->top_window_actor = NULL;
|
||||
compositor->windows = g_list_remove (compositor->windows, window_actor);
|
||||
|
||||
meta_stack_tracker_queue_sync_stack (compositor->display->screen->stack_tracker);
|
||||
meta_stack_tracker_queue_sync_stack (compositor->display->stack_tracker);
|
||||
}
|
||||
|
||||
void
|
||||
@ -1169,7 +1177,7 @@ meta_pre_paint_func (gpointer data)
|
||||
if (compositor->have_x11_sync_object)
|
||||
compositor->have_x11_sync_object = meta_sync_ring_insert_wait ();
|
||||
else
|
||||
XSync (compositor->display->xdisplay, False);
|
||||
XSync (compositor->display->x11_display->xdisplay, False);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
@ -1241,9 +1249,6 @@ meta_compositor_new (MetaDisplay *display)
|
||||
compositor->display = display;
|
||||
compositor->context = clutter_backend->cogl_context;
|
||||
|
||||
if (g_getenv("META_DISABLE_MIPMAPS"))
|
||||
compositor->no_mipmaps = TRUE;
|
||||
|
||||
g_signal_connect (meta_shadow_factory_get_default (),
|
||||
"changed",
|
||||
G_CALLBACK (on_shadow_factory_changed),
|
||||
@ -1264,44 +1269,44 @@ meta_compositor_new (MetaDisplay *display)
|
||||
|
||||
/**
|
||||
* meta_get_overlay_window: (skip)
|
||||
* @screen: a #MetaScreen
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
*/
|
||||
Window
|
||||
meta_get_overlay_window (MetaScreen *screen)
|
||||
meta_get_overlay_window (MetaDisplay *display)
|
||||
{
|
||||
MetaCompositor *compositor = get_compositor_for_screen (screen);
|
||||
MetaCompositor *compositor = get_compositor_for_display (display);
|
||||
return compositor->output;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_disable_unredirect_for_screen:
|
||||
* @screen: a #MetaScreen
|
||||
* meta_disable_unredirect_for_display:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Disables unredirection, can be usefull in situations where having
|
||||
* unredirected windows is undesireable like when recording a video.
|
||||
*
|
||||
*/
|
||||
void
|
||||
meta_disable_unredirect_for_screen (MetaScreen *screen)
|
||||
meta_disable_unredirect_for_display (MetaDisplay *display)
|
||||
{
|
||||
MetaCompositor *compositor = get_compositor_for_screen (screen);
|
||||
MetaCompositor *compositor = get_compositor_for_display (display);
|
||||
compositor->disable_unredirect_count++;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_enable_unredirect_for_screen:
|
||||
* @screen: a #MetaScreen
|
||||
* meta_enable_unredirect_for_display:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Enables unredirection which reduces the overhead for apps like games.
|
||||
*
|
||||
*/
|
||||
void
|
||||
meta_enable_unredirect_for_screen (MetaScreen *screen)
|
||||
meta_enable_unredirect_for_display (MetaDisplay *display)
|
||||
{
|
||||
MetaCompositor *compositor = get_compositor_for_screen (screen);
|
||||
MetaCompositor *compositor = get_compositor_for_display (display);
|
||||
if (compositor->disable_unredirect_count == 0)
|
||||
g_warning ("Called enable_unredirect_for_screen while unredirection is enabled.");
|
||||
g_warning ("Called enable_unredirect_for_display while unredirection is enabled.");
|
||||
if (compositor->disable_unredirect_count > 0)
|
||||
compositor->disable_unredirect_count--;
|
||||
}
|
||||
@ -1318,15 +1323,15 @@ flash_out_completed (ClutterTimeline *timeline,
|
||||
}
|
||||
|
||||
void
|
||||
meta_compositor_flash_screen (MetaCompositor *compositor,
|
||||
MetaScreen *screen)
|
||||
meta_compositor_flash_display (MetaCompositor *compositor,
|
||||
MetaDisplay *display)
|
||||
{
|
||||
ClutterActor *stage;
|
||||
ClutterActor *flash;
|
||||
ClutterTransition *transition;
|
||||
gfloat width, height;
|
||||
|
||||
stage = meta_get_stage_for_screen (screen);
|
||||
stage = meta_get_stage_for_display (display);
|
||||
clutter_actor_get_size (stage, &width, &height);
|
||||
|
||||
flash = clutter_actor_new ();
|
||||
|
@ -3,7 +3,6 @@
|
||||
#ifndef META_BACKGROUND_ACTOR_PRIVATE_H
|
||||
#define META_BACKGROUND_ACTOR_PRIVATE_H
|
||||
|
||||
#include <meta/screen.h>
|
||||
#include <meta/meta-background-actor.h>
|
||||
|
||||
cairo_region_t *meta_background_actor_get_clip_region (MetaBackgroundActor *self);
|
||||
|
@ -78,14 +78,15 @@
|
||||
|
||||
#include "cogl-utils.h"
|
||||
#include "clutter-utils.h"
|
||||
#include <meta/errors.h>
|
||||
#include <meta/meta-x11-errors.h>
|
||||
#include "meta-background-actor-private.h"
|
||||
#include "meta-background-private.h"
|
||||
#include "meta-cullable.h"
|
||||
#include "meta/display.h"
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_META_SCREEN = 1,
|
||||
PROP_META_DISPLAY = 1,
|
||||
PROP_MONITOR,
|
||||
PROP_BACKGROUND,
|
||||
PROP_GRADIENT,
|
||||
@ -150,7 +151,7 @@ typedef enum {
|
||||
|
||||
struct _MetaBackgroundActorPrivate
|
||||
{
|
||||
MetaScreen *screen;
|
||||
MetaDisplay *display;
|
||||
int monitor;
|
||||
|
||||
MetaBackground *background;
|
||||
@ -175,6 +176,7 @@ struct _MetaBackgroundActorPrivate
|
||||
static void cullable_iface_init (MetaCullableInterface *iface);
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR,
|
||||
G_ADD_PRIVATE (MetaBackgroundActor)
|
||||
G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init));
|
||||
|
||||
static void
|
||||
@ -183,7 +185,7 @@ set_clip_region (MetaBackgroundActor *self,
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
|
||||
g_clear_pointer (&priv->clip_region, (GDestroyNotify) cairo_region_destroy);
|
||||
g_clear_pointer (&priv->clip_region, cairo_region_destroy);
|
||||
if (clip_region)
|
||||
priv->clip_region = cairo_region_copy (clip_region);
|
||||
}
|
||||
@ -213,7 +215,9 @@ get_preferred_size (MetaBackgroundActor *self,
|
||||
MetaBackgroundActorPrivate *priv = META_BACKGROUND_ACTOR (self)->priv;
|
||||
MetaRectangle monitor_geometry;
|
||||
|
||||
meta_screen_get_monitor_geometry (priv->screen, priv->monitor, &monitor_geometry);
|
||||
meta_display_get_monitor_geometry (priv->display,
|
||||
priv->monitor,
|
||||
&monitor_geometry);
|
||||
|
||||
if (width != NULL)
|
||||
*width = monitor_geometry.width;
|
||||
@ -381,7 +385,8 @@ setup_pipeline (MetaBackgroundActor *self,
|
||||
MetaRectangle monitor_geometry;
|
||||
float gradient_height_perc;
|
||||
|
||||
meta_screen_get_monitor_geometry (priv->screen, priv->monitor, &monitor_geometry);
|
||||
meta_display_get_monitor_geometry (priv->display,
|
||||
priv->monitor, &monitor_geometry);
|
||||
gradient_height_perc = MAX (0.0001, priv->gradient_height / (float)monitor_geometry.height);
|
||||
cogl_pipeline_set_uniform_1f (priv->pipeline,
|
||||
cogl_pipeline_get_uniform_location (priv->pipeline,
|
||||
@ -548,8 +553,8 @@ meta_background_actor_set_property (GObject *object,
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_META_SCREEN:
|
||||
priv->screen = g_value_get_object (value);
|
||||
case PROP_META_DISPLAY:
|
||||
priv->display = g_value_get_object (value);
|
||||
break;
|
||||
case PROP_MONITOR:
|
||||
meta_background_actor_set_monitor (self, g_value_get_int (value));
|
||||
@ -609,8 +614,8 @@ meta_background_actor_get_property (GObject *object,
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_META_SCREEN:
|
||||
g_value_set_object (value, priv->screen);
|
||||
case PROP_META_DISPLAY:
|
||||
g_value_set_object (value, priv->display);
|
||||
break;
|
||||
case PROP_MONITOR:
|
||||
g_value_set_int (value, priv->monitor);
|
||||
@ -649,8 +654,6 @@ meta_background_actor_class_init (MetaBackgroundActorClass *klass)
|
||||
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
|
||||
GParamSpec *param_spec;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MetaBackgroundActorPrivate));
|
||||
|
||||
object_class->dispose = meta_background_actor_dispose;
|
||||
object_class->set_property = meta_background_actor_set_property;
|
||||
object_class->get_property = meta_background_actor_get_property;
|
||||
@ -660,14 +663,14 @@ meta_background_actor_class_init (MetaBackgroundActorClass *klass)
|
||||
actor_class->get_paint_volume = meta_background_actor_get_paint_volume;
|
||||
actor_class->paint = meta_background_actor_paint;
|
||||
|
||||
param_spec = g_param_spec_object ("meta-screen",
|
||||
"MetaScreen",
|
||||
"MetaScreen",
|
||||
META_TYPE_SCREEN,
|
||||
param_spec = g_param_spec_object ("meta-display",
|
||||
"MetaDisplay",
|
||||
"MetaDisplay",
|
||||
META_TYPE_DISPLAY,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_META_SCREEN,
|
||||
PROP_META_DISPLAY,
|
||||
param_spec);
|
||||
|
||||
param_spec = g_param_spec_int ("monitor",
|
||||
@ -778,13 +781,13 @@ meta_background_actor_init (MetaBackgroundActor *self)
|
||||
* Return value: the newly created background actor
|
||||
*/
|
||||
ClutterActor *
|
||||
meta_background_actor_new (MetaScreen *screen,
|
||||
int monitor)
|
||||
meta_background_actor_new (MetaDisplay *display,
|
||||
int monitor)
|
||||
{
|
||||
MetaBackgroundActor *self;
|
||||
|
||||
self = g_object_new (META_TYPE_BACKGROUND_ACTOR,
|
||||
"meta-screen", screen,
|
||||
"meta-display", display,
|
||||
"monitor", monitor,
|
||||
NULL);
|
||||
|
||||
@ -923,12 +926,13 @@ meta_background_actor_set_monitor (MetaBackgroundActor *self,
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
MetaRectangle old_monitor_geometry;
|
||||
MetaRectangle new_monitor_geometry;
|
||||
MetaDisplay *display = priv->display;
|
||||
|
||||
if(priv->monitor == monitor)
|
||||
return;
|
||||
|
||||
meta_screen_get_monitor_geometry (priv->screen, priv->monitor, &old_monitor_geometry);
|
||||
meta_screen_get_monitor_geometry (priv->screen, monitor, &new_monitor_geometry);
|
||||
meta_display_get_monitor_geometry (display, priv->monitor, &old_monitor_geometry);
|
||||
meta_display_get_monitor_geometry (display, monitor, &new_monitor_geometry);
|
||||
if(old_monitor_geometry.height != new_monitor_geometry.height)
|
||||
invalidate_pipeline (self, CHANGED_GRADIENT_PARAMETERS);
|
||||
|
||||
|
@ -17,9 +17,11 @@
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <meta/display.h>
|
||||
#include <meta/util.h>
|
||||
#include <meta/meta-background.h>
|
||||
#include <meta/meta-background-image.h>
|
||||
#include <meta/meta-monitor-manager.h>
|
||||
#include "meta-background-private.h"
|
||||
#include "cogl-utils.h"
|
||||
|
||||
@ -44,7 +46,7 @@ struct _MetaBackgroundMonitor
|
||||
|
||||
struct _MetaBackgroundPrivate
|
||||
{
|
||||
MetaScreen *screen;
|
||||
MetaDisplay *display;
|
||||
MetaBackgroundMonitor *monitors;
|
||||
int n_monitors;
|
||||
|
||||
@ -68,11 +70,11 @@ struct _MetaBackgroundPrivate
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_META_SCREEN = 1,
|
||||
PROP_META_DISPLAY = 1,
|
||||
PROP_MONITOR,
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (MetaBackground, meta_background, G_TYPE_OBJECT)
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaBackground, meta_background, G_TYPE_OBJECT)
|
||||
|
||||
static gboolean texture_has_alpha (CoglTexture *texture);
|
||||
|
||||
@ -128,8 +130,7 @@ free_wallpaper_texture (MetaBackground *self)
|
||||
}
|
||||
|
||||
static void
|
||||
on_monitors_changed (MetaScreen *screen,
|
||||
MetaBackground *self)
|
||||
invalidate_monitor_backgrounds (MetaBackground *self)
|
||||
{
|
||||
MetaBackgroundPrivate *priv = self->priv;
|
||||
|
||||
@ -138,11 +139,11 @@ on_monitors_changed (MetaScreen *screen,
|
||||
priv->monitors = NULL;
|
||||
priv->n_monitors = 0;
|
||||
|
||||
if (priv->screen)
|
||||
if (priv->display)
|
||||
{
|
||||
int i;
|
||||
|
||||
priv->n_monitors = meta_screen_get_n_monitors (screen);
|
||||
priv->n_monitors = meta_display_get_n_monitors (priv->display);
|
||||
priv->monitors = g_new0 (MetaBackgroundMonitor, priv->n_monitors);
|
||||
|
||||
for (i = 0; i < priv->n_monitors; i++)
|
||||
@ -151,27 +152,20 @@ on_monitors_changed (MetaScreen *screen,
|
||||
}
|
||||
|
||||
static void
|
||||
set_screen (MetaBackground *self,
|
||||
MetaScreen *screen)
|
||||
on_monitors_changed (MetaBackground *self)
|
||||
{
|
||||
invalidate_monitor_backgrounds (self);
|
||||
}
|
||||
|
||||
static void
|
||||
set_display (MetaBackground *self,
|
||||
MetaDisplay *display)
|
||||
{
|
||||
MetaBackgroundPrivate *priv = self->priv;
|
||||
|
||||
if (priv->screen != NULL)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (priv->screen,
|
||||
(gpointer)on_monitors_changed,
|
||||
self);
|
||||
}
|
||||
g_set_object (&priv->display, display);
|
||||
|
||||
g_set_object (&priv->screen, screen);
|
||||
|
||||
if (priv->screen != NULL)
|
||||
{
|
||||
g_signal_connect (priv->screen, "monitors-changed",
|
||||
G_CALLBACK (on_monitors_changed), self);
|
||||
}
|
||||
|
||||
on_monitors_changed (priv->screen, self);
|
||||
invalidate_monitor_backgrounds (self);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -182,8 +176,8 @@ meta_background_set_property (GObject *object,
|
||||
{
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_META_SCREEN:
|
||||
set_screen (META_BACKGROUND (object), g_value_get_object (value));
|
||||
case PROP_META_DISPLAY:
|
||||
set_display (META_BACKGROUND (object), g_value_get_object (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
@ -201,8 +195,8 @@ meta_background_get_property (GObject *object,
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_META_SCREEN:
|
||||
g_value_set_object (value, priv->screen);
|
||||
case PROP_META_DISPLAY:
|
||||
g_value_set_object (value, priv->display);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
@ -304,7 +298,7 @@ meta_background_dispose (GObject *object)
|
||||
set_file (self, &priv->file1, &priv->background_image1, NULL);
|
||||
set_file (self, &priv->file2, &priv->background_image2, NULL);
|
||||
|
||||
set_screen (self, NULL);
|
||||
set_display (self, NULL);
|
||||
|
||||
G_OBJECT_CLASS (meta_background_parent_class)->dispose (object);
|
||||
}
|
||||
@ -322,11 +316,16 @@ meta_background_constructed (GObject *object)
|
||||
{
|
||||
MetaBackground *self = META_BACKGROUND (object);
|
||||
MetaBackgroundPrivate *priv = self->priv;
|
||||
MetaMonitorManager *monitor_manager = meta_monitor_manager_get ();
|
||||
|
||||
G_OBJECT_CLASS (meta_background_parent_class)->constructed (object);
|
||||
|
||||
g_signal_connect_object (meta_screen_get_display (priv->screen), "gl-video-memory-purged",
|
||||
g_signal_connect_object (priv->display, "gl-video-memory-purged",
|
||||
G_CALLBACK (mark_changed), object, G_CONNECT_SWAPPED);
|
||||
|
||||
g_signal_connect_object (monitor_manager, "monitors-changed",
|
||||
G_CALLBACK (on_monitors_changed), self,
|
||||
G_CONNECT_SWAPPED);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -335,8 +334,6 @@ meta_background_class_init (MetaBackgroundClass *klass)
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GParamSpec *param_spec;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MetaBackgroundPrivate));
|
||||
|
||||
object_class->dispose = meta_background_dispose;
|
||||
object_class->finalize = meta_background_finalize;
|
||||
object_class->constructed = meta_background_constructed;
|
||||
@ -351,14 +348,14 @@ meta_background_class_init (MetaBackgroundClass *klass)
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
param_spec = g_param_spec_object ("meta-screen",
|
||||
"MetaScreen",
|
||||
"MetaScreen",
|
||||
META_TYPE_SCREEN,
|
||||
param_spec = g_param_spec_object ("meta-display",
|
||||
"MetaDisplay",
|
||||
"MetaDisplay",
|
||||
META_TYPE_DISPLAY,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_META_SCREEN,
|
||||
PROP_META_DISPLAY,
|
||||
param_spec);
|
||||
|
||||
}
|
||||
@ -407,7 +404,7 @@ get_texture_area (MetaBackground *self,
|
||||
set_texture_area_from_monitor_area (monitor_rect, texture_area);
|
||||
break;
|
||||
case G_DESKTOP_BACKGROUND_STYLE_WALLPAPER:
|
||||
meta_screen_get_size (priv->screen, &screen_width, &screen_height);
|
||||
meta_display_get_size (priv->display, &screen_width, &screen_height);
|
||||
|
||||
/* Start off by centering a tile in the middle of the
|
||||
* total screen area.
|
||||
@ -476,7 +473,7 @@ get_texture_area (MetaBackground *self,
|
||||
/* paint region is the union of all monitors, with the origin
|
||||
* of the region set to align with monitor associated with the background.
|
||||
*/
|
||||
meta_screen_get_size (priv->screen, &screen_width, &screen_height);
|
||||
meta_display_get_size (priv->display, &screen_width, &screen_height);
|
||||
|
||||
/* unclipped texture area is whole screen */
|
||||
image_area.width = screen_width;
|
||||
@ -750,7 +747,7 @@ meta_background_get_texture (MetaBackground *self,
|
||||
|
||||
monitor = &priv->monitors[monitor_index];
|
||||
|
||||
meta_screen_get_monitor_geometry (priv->screen, monitor_index, &geometry);
|
||||
meta_display_get_monitor_geometry (priv->display, monitor_index, &geometry);
|
||||
monitor_area.x = geometry.x;
|
||||
monitor_area.y = geometry.y;
|
||||
monitor_area.width = geometry.width;
|
||||
@ -879,10 +876,10 @@ meta_background_get_texture (MetaBackground *self,
|
||||
}
|
||||
|
||||
MetaBackground *
|
||||
meta_background_new (MetaScreen *screen)
|
||||
meta_background_new (MetaDisplay *display)
|
||||
{
|
||||
return g_object_new (META_TYPE_BACKGROUND,
|
||||
"meta-screen", screen,
|
||||
"meta-display", display,
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user