Compare commits
87 Commits
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 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -94,6 +94,8 @@ 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
|
||||
|
49
NEWS
49
NEWS
@@ -1,3 +1,52 @@
|
||||
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]
|
||||
|
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
|
@@ -1093,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 { \
|
||||
@@ -4289,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
|
||||
@@ -12910,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
|
||||
*/
|
||||
@@ -20704,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
|
||||
@@ -20742,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
|
||||
@@ -20757,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
|
||||
|
@@ -2,7 +2,7 @@ AC_PREREQ(2.62)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [29])
|
||||
m4_define([mutter_micro_version], [4])
|
||||
m4_define([mutter_micro_version], [92])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
@@ -244,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"])
|
||||
@@ -325,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)
|
||||
])
|
||||
|
@@ -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.
|
||||
|
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)"
|
||||
|
98
po/fur.po
98
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-06-07 13:00+0000\n"
|
||||
"PO-Revision-Date: 2018-06-29 15:33+0200\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.8\n"
|
||||
"X-Generator: Poedit 2.0.7\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@@ -538,22 +538,22 @@ msgstr "Cambie visôr"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Mostre jutori a schermi"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:903
|
||||
#: src/backends/meta-monitor-manager.c:886
|
||||
msgid "Built-in display"
|
||||
msgstr "Display integrât"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:926
|
||||
#: src/backends/meta-monitor-manager.c:909
|
||||
msgid "Unknown"
|
||||
msgstr "No cognossût"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:928
|
||||
#: 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:936
|
||||
#: src/backends/meta-monitor-manager.c:919
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
@@ -568,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."
|
||||
@@ -635,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"
|
||||
|
||||
@@ -666,25 +665,11 @@ 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
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Il display “%s” al à za un window manager; prove dopre la opzion --replace "
|
||||
"par rimplaçâ chel atuâl."
|
||||
|
||||
#: src/core/screen.c:668
|
||||
#, 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"
|
||||
@@ -694,7 +679,30 @@ msgstr "Mutter al è stât compilât cence supuart pe modalitât fetose\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Cambie mût: mût %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 ""
|
||||
"Il display “%s” al à za un window manager; prove dopre la opzion --replace "
|
||||
"par rimplaçâ chel atuâl."
|
||||
|
||||
#: 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/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 +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)"
|
||||
|
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)"
|
||||
|
@@ -14,6 +14,7 @@ stackingdir = $(pkgdatadir)/tests/stacking
|
||||
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 \
|
||||
|
@@ -88,6 +88,8 @@ 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)
|
||||
@@ -167,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 \
|
||||
@@ -456,6 +461,8 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES += \
|
||||
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 \
|
||||
@@ -554,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 \
|
||||
|
@@ -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
|
||||
|
||||
@@ -93,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;
|
||||
@@ -143,6 +145,7 @@ 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
|
||||
|
||||
if (priv->sleep_signal_id)
|
||||
@@ -456,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);
|
||||
@@ -915,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
|
||||
|
@@ -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)
|
||||
@@ -265,7 +265,8 @@ meta_idle_monitor_init (MetaIdleMonitor *monitor)
|
||||
"InhibitedActions");
|
||||
if (v)
|
||||
{
|
||||
monitor->inhibited = g_variant_get_uint32 (v) & GSM_INHIBITOR_FLAG_IDLE;
|
||||
monitor->inhibited = !!(g_variant_get_uint32 (v) &
|
||||
GSM_INHIBITOR_FLAG_IDLE);
|
||||
g_variant_unref (v);
|
||||
}
|
||||
}
|
||||
|
@@ -1302,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 =
|
||||
|
@@ -203,13 +203,9 @@ meta_monitor_get_main_output (MetaMonitor *monitor)
|
||||
gboolean
|
||||
meta_monitor_is_active (MetaMonitor *monitor)
|
||||
{
|
||||
MetaOutput *output;
|
||||
MetaCrtc *crtc;
|
||||
MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
|
||||
|
||||
output = meta_monitor_get_main_output (monitor);
|
||||
crtc = meta_output_get_assigned_crtc (output);
|
||||
|
||||
return crtc && crtc->current_mode;
|
||||
return !!priv->current_mode;
|
||||
}
|
||||
|
||||
gboolean
|
||||
@@ -1411,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)
|
||||
{
|
||||
@@ -1430,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
|
||||
@@ -1553,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,
|
||||
@@ -1573,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,
|
||||
|
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,6 +30,7 @@
|
||||
|
||||
#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"
|
||||
@@ -58,6 +59,8 @@ struct _MetaRemoteDesktopSession
|
||||
ClutterVirtualInputDevice *virtual_pointer;
|
||||
ClutterVirtualInputDevice *virtual_keyboard;
|
||||
ClutterVirtualInputDevice *virtual_touchscreen;
|
||||
|
||||
MetaRemoteDesktopSessionHandle *handle;
|
||||
};
|
||||
|
||||
static void
|
||||
@@ -74,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)
|
||||
@@ -106,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;
|
||||
}
|
||||
|
||||
@@ -130,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);
|
||||
}
|
||||
|
||||
@@ -728,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);
|
||||
@@ -762,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);
|
||||
|
@@ -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,
|
||||
|
@@ -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);
|
||||
|
@@ -749,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);
|
||||
}
|
||||
|
||||
@@ -789,7 +789,7 @@ on_cursor_sprite_texture_changed (MetaCursorSprite *cursor_sprite)
|
||||
guint pending_bo;
|
||||
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);
|
||||
gbm_bo_destroy);
|
||||
cursor_gpu_state->pending_bo_state = META_CURSOR_GBM_BO_STATE_INVALIDATED;
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
||||
@@ -148,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;
|
||||
}
|
||||
@@ -723,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
|
||||
@@ -748,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
|
||||
@@ -759,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;
|
||||
@@ -783,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,
|
||||
@@ -811,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);
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -1625,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);
|
||||
@@ -2732,9 +2743,14 @@ 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
|
||||
@@ -2743,10 +2759,10 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
|
||||
|
||||
if (meta_monitor_manager_is_transform_handled (monitor_manager,
|
||||
crtc,
|
||||
crtc->transform))
|
||||
crtc_transform))
|
||||
return META_MONITOR_TRANSFORM_NORMAL;
|
||||
else
|
||||
return crtc->transform;
|
||||
return crtc_transform;
|
||||
}
|
||||
|
||||
static MetaRendererView *
|
||||
|
@@ -547,8 +547,9 @@ meta_backend_x11_grab_device (MetaBackend *backend,
|
||||
XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits };
|
||||
int ret;
|
||||
|
||||
if (timestamp != META_CURRENT_TIME)
|
||||
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);
|
||||
|
@@ -51,10 +51,14 @@ 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.
|
||||
@@ -62,10 +66,10 @@ calculate_view_transform (MetaMonitorManager *monitor_manager,
|
||||
|
||||
if (meta_monitor_manager_is_transform_handled (monitor_manager,
|
||||
crtc,
|
||||
crtc->transform))
|
||||
crtc_transform))
|
||||
return META_MONITOR_TRANSFORM_NORMAL;
|
||||
else
|
||||
return crtc->transform;
|
||||
return crtc_transform;
|
||||
}
|
||||
|
||||
static MetaRendererView *
|
||||
|
@@ -176,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
|
||||
@@ -184,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);
|
||||
}
|
||||
@@ -653,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;
|
||||
|
@@ -74,7 +74,7 @@ enum
|
||||
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);
|
||||
|
||||
@@ -334,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;
|
||||
|
@@ -41,7 +41,7 @@ struct _MetaModulePrivate
|
||||
#define META_MODULE_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), META_TYPE_MODULE, MetaModulePrivate))
|
||||
|
||||
G_DEFINE_TYPE (MetaModule, meta_module, G_TYPE_TYPE_MODULE);
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaModule, meta_module, G_TYPE_TYPE_MODULE);
|
||||
|
||||
static gboolean
|
||||
meta_module_load (GTypeModule *gmodule)
|
||||
@@ -184,8 +184,6 @@ meta_module_class_init (MetaModuleClass *klass)
|
||||
NULL,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (MetaModulePrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -41,20 +41,19 @@
|
||||
#include "meta-window-actor-private.h"
|
||||
#include "meta-monitor-manager-private.h"
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE (MetaPlugin, meta_plugin, G_TYPE_OBJECT);
|
||||
|
||||
#define META_PLUGIN_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), META_TYPE_PLUGIN, MetaPluginPrivate))
|
||||
|
||||
struct _MetaPluginPrivate
|
||||
{
|
||||
MetaCompositor *compositor;
|
||||
};
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (MetaPlugin, meta_plugin, G_TYPE_OBJECT);
|
||||
|
||||
#define META_PLUGIN_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), META_TYPE_PLUGIN, MetaPluginPrivate))
|
||||
|
||||
static void
|
||||
meta_plugin_class_init (MetaPluginClass *klass)
|
||||
{
|
||||
g_type_class_add_private (klass, sizeof (MetaPluginPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -70,9 +70,6 @@ static gboolean meta_shaped_texture_get_paint_volume (ClutterActor *self, Clutte
|
||||
|
||||
static void cullable_iface_init (MetaCullableInterface *iface);
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (MetaShapedTexture, meta_shaped_texture, CLUTTER_TYPE_ACTOR,
|
||||
G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init));
|
||||
|
||||
#define META_SHAPED_TEXTURE_GET_PRIVATE(obj) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), META_TYPE_SHAPED_TEXTURE, \
|
||||
MetaShapedTexturePrivate))
|
||||
@@ -117,6 +114,10 @@ struct _MetaShapedTexturePrivate
|
||||
guint create_mipmaps : 1;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (MetaShapedTexture, meta_shaped_texture, CLUTTER_TYPE_ACTOR,
|
||||
G_ADD_PRIVATE (MetaShapedTexture)
|
||||
G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init));
|
||||
|
||||
static void
|
||||
meta_shaped_texture_class_init (MetaShapedTextureClass *klass)
|
||||
{
|
||||
@@ -136,8 +137,6 @@ meta_shaped_texture_class_init (MetaShapedTextureClass *klass)
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MetaShapedTexturePrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -161,7 +160,7 @@ set_unobscured_region (MetaShapedTexture *self,
|
||||
{
|
||||
MetaShapedTexturePrivate *priv = self->priv;
|
||||
|
||||
g_clear_pointer (&priv->unobscured_region, (GDestroyNotify) cairo_region_destroy);
|
||||
g_clear_pointer (&priv->unobscured_region, cairo_region_destroy);
|
||||
if (unobscured_region)
|
||||
{
|
||||
guint width, height;
|
||||
@@ -189,7 +188,7 @@ set_clip_region (MetaShapedTexture *self,
|
||||
{
|
||||
MetaShapedTexturePrivate *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);
|
||||
}
|
||||
|
@@ -32,6 +32,7 @@ struct _MetaSurfaceActorPrivate
|
||||
static void cullable_iface_init (MetaCullableInterface *iface);
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE_WITH_CODE (MetaSurfaceActor, meta_surface_actor, CLUTTER_TYPE_ACTOR,
|
||||
G_ADD_PRIVATE (MetaSurfaceActor)
|
||||
G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init));
|
||||
|
||||
enum {
|
||||
@@ -142,8 +143,6 @@ meta_surface_actor_class_init (MetaSurfaceActorClass *klass)
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MetaSurfaceActorPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -191,6 +191,7 @@ static void do_send_frame_timings (MetaWindowActor *self,
|
||||
static void cullable_iface_init (MetaCullableInterface *iface);
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (MetaWindowActor, meta_window_actor, CLUTTER_TYPE_ACTOR,
|
||||
G_ADD_PRIVATE (MetaWindowActor)
|
||||
G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init));
|
||||
|
||||
static void
|
||||
@@ -206,8 +207,6 @@ meta_window_actor_class_init (MetaWindowActorClass *klass)
|
||||
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
|
||||
GParamSpec *pspec;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MetaWindowActorPrivate));
|
||||
|
||||
object_class->dispose = meta_window_actor_dispose;
|
||||
object_class->finalize = meta_window_actor_finalize;
|
||||
object_class->set_property = meta_window_actor_set_property;
|
||||
|
@@ -98,8 +98,6 @@ static void confirm_display_change (MetaPlugin *plugin);
|
||||
|
||||
static const MetaPluginInfo * plugin_info (MetaPlugin *plugin);
|
||||
|
||||
META_PLUGIN_DECLARE(MetaDefaultPlugin, meta_default_plugin);
|
||||
|
||||
/*
|
||||
* Plugin private data that we store in the .plugin_private member.
|
||||
*/
|
||||
@@ -116,6 +114,9 @@ struct _MetaDefaultPluginPrivate
|
||||
MetaPluginInfo info;
|
||||
};
|
||||
|
||||
META_PLUGIN_DECLARE_WITH_CODE (MetaDefaultPlugin, meta_default_plugin,
|
||||
G_ADD_PRIVATE_DYNAMIC (MetaDefaultPlugin));
|
||||
|
||||
/*
|
||||
* Per actor private data we attach to each actor.
|
||||
*/
|
||||
@@ -209,8 +210,6 @@ meta_default_plugin_class_init (MetaDefaultPluginClass *klass)
|
||||
plugin_class->kill_window_effects = kill_window_effects;
|
||||
plugin_class->kill_switch_workspace = kill_switch_workspace;
|
||||
plugin_class->confirm_display_change = confirm_display_change;
|
||||
|
||||
g_type_class_add_private (gobject_class, sizeof (MetaDefaultPluginPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@@ -787,7 +787,7 @@ constrain_custom_rule (MetaWindow *window,
|
||||
MetaPlacementRule *placement_rule;
|
||||
MetaRectangle intersection;
|
||||
gboolean constraint_satisfied;
|
||||
MetaPlacementRule current_rule;
|
||||
MetaPlacementRule *current_rule;
|
||||
|
||||
if (priority > PRIORITY_CUSTOM_RULE)
|
||||
return TRUE;
|
||||
@@ -796,6 +796,14 @@ constrain_custom_rule (MetaWindow *window,
|
||||
if (!placement_rule)
|
||||
return TRUE;
|
||||
|
||||
if (window->constrained_placement_rule)
|
||||
{
|
||||
meta_window_process_placement (window,
|
||||
window->constrained_placement_rule,
|
||||
&info->current.x, &info->current.y);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
meta_rectangle_intersect (&info->current, &info->work_area_monitor,
|
||||
&intersection);
|
||||
|
||||
@@ -803,24 +811,28 @@ constrain_custom_rule (MetaWindow *window,
|
||||
placement_rule,
|
||||
&intersection);
|
||||
|
||||
if (constraint_satisfied || check_only)
|
||||
if (check_only)
|
||||
return constraint_satisfied;
|
||||
|
||||
current_rule = *placement_rule;
|
||||
current_rule = g_new0 (MetaPlacementRule, 1);
|
||||
*current_rule = *placement_rule;
|
||||
|
||||
if (constraint_satisfied)
|
||||
goto done;
|
||||
|
||||
if (info->current.width != intersection.width &&
|
||||
(current_rule.constraint_adjustment &
|
||||
(current_rule->constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_X))
|
||||
{
|
||||
try_flip_window_position (window, info, ¤t_rule,
|
||||
try_flip_window_position (window, info, current_rule,
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_X,
|
||||
&info->current, &intersection);
|
||||
}
|
||||
if (info->current.height != intersection.height &&
|
||||
(current_rule.constraint_adjustment &
|
||||
(current_rule->constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_Y))
|
||||
{
|
||||
try_flip_window_position (window, info, ¤t_rule,
|
||||
try_flip_window_position (window, info, current_rule,
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_Y,
|
||||
&info->current, &intersection);
|
||||
}
|
||||
@@ -832,9 +844,9 @@ constrain_custom_rule (MetaWindow *window,
|
||||
&intersection);
|
||||
|
||||
if (constraint_satisfied)
|
||||
return TRUE;
|
||||
goto done;
|
||||
|
||||
if (current_rule.constraint_adjustment &
|
||||
if (current_rule->constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_X)
|
||||
{
|
||||
if (info->current.x != intersection.x)
|
||||
@@ -842,7 +854,7 @@ constrain_custom_rule (MetaWindow *window,
|
||||
else if (info->current.width != intersection.width)
|
||||
info->current.x -= info->current.width - intersection.width;
|
||||
}
|
||||
if (current_rule.constraint_adjustment &
|
||||
if (current_rule->constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_Y)
|
||||
{
|
||||
if (info->current.y != intersection.y)
|
||||
@@ -858,21 +870,25 @@ constrain_custom_rule (MetaWindow *window,
|
||||
&intersection);
|
||||
|
||||
if (constraint_satisfied)
|
||||
return TRUE;
|
||||
goto done;
|
||||
|
||||
if (current_rule.constraint_adjustment &
|
||||
if (current_rule->constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_RESIZE_X)
|
||||
{
|
||||
info->current.x = intersection.x;
|
||||
info->current.width = intersection.width;
|
||||
}
|
||||
if (current_rule.constraint_adjustment &
|
||||
if (current_rule->constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_RESIZE_Y)
|
||||
{
|
||||
info->current.y = intersection.y;
|
||||
info->current.height = intersection.height;
|
||||
}
|
||||
|
||||
done:
|
||||
g_clear_pointer (&window->constrained_placement_rule, g_free);
|
||||
window->constrained_placement_rule = current_rule;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@@ -931,9 +931,9 @@ meta_display_close (MetaDisplay *display,
|
||||
|
||||
g_clear_object (&display->gesture_tracker);
|
||||
|
||||
g_clear_pointer (&display->stack, (GDestroyNotify) meta_stack_free);
|
||||
g_clear_pointer (&display->stack, meta_stack_free);
|
||||
g_clear_pointer (&display->stack_tracker,
|
||||
(GDestroyNotify) meta_stack_tracker_free);
|
||||
meta_stack_tracker_free);
|
||||
|
||||
if (display->focus_timeout_id)
|
||||
g_source_remove (display->focus_timeout_id);
|
||||
|
@@ -1916,6 +1916,15 @@ process_event (MetaDisplay *display,
|
||||
if (meta_compositor_filter_keybinding (display->compositor, binding))
|
||||
goto not_found;
|
||||
|
||||
if (event->flags & CLUTTER_EVENT_FLAG_REPEATED &&
|
||||
binding->flags & META_KEY_BINDING_IGNORE_AUTOREPEAT)
|
||||
{
|
||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||
"Ignore autorepeat for handler %s\n",
|
||||
binding->name);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (binding->handler == NULL)
|
||||
meta_bug ("Binding %s has no handler\n", binding->name);
|
||||
else
|
||||
@@ -3585,73 +3594,85 @@ init_builtin_key_bindings (MetaDisplay *display)
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-1",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_1,
|
||||
handle_switch_to_workspace, 0);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-2",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_2,
|
||||
handle_switch_to_workspace, 1);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-3",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_3,
|
||||
handle_switch_to_workspace, 2);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-4",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_4,
|
||||
handle_switch_to_workspace, 3);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-5",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_5,
|
||||
handle_switch_to_workspace, 4);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-6",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_6,
|
||||
handle_switch_to_workspace, 5);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-7",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_7,
|
||||
handle_switch_to_workspace, 6);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-8",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_8,
|
||||
handle_switch_to_workspace, 7);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-9",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_9,
|
||||
handle_switch_to_workspace, 8);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-10",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_10,
|
||||
handle_switch_to_workspace, 9);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-11",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_11,
|
||||
handle_switch_to_workspace, 10);
|
||||
add_builtin_keybinding (display,
|
||||
"switch-to-workspace-12",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_NONE,
|
||||
META_KEY_BINDING_NONE |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_WORKSPACE_12,
|
||||
handle_switch_to_workspace, 11);
|
||||
|
||||
@@ -3950,189 +3971,216 @@ init_builtin_key_bindings (MetaDisplay *display)
|
||||
add_builtin_keybinding (display,
|
||||
"activate-window-menu",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_ACTIVATE_WINDOW_MENU,
|
||||
handle_activate_window_menu, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"toggle-fullscreen",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_TOGGLE_FULLSCREEN,
|
||||
handle_toggle_fullscreen, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"toggle-maximized",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_TOGGLE_MAXIMIZED,
|
||||
handle_toggle_maximized, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"toggle-tiled-left",
|
||||
mutter_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_TOGGLE_TILED_LEFT,
|
||||
handle_toggle_tiled, META_TILE_LEFT);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"toggle-tiled-right",
|
||||
mutter_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_TOGGLE_TILED_RIGHT,
|
||||
handle_toggle_tiled, META_TILE_RIGHT);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"toggle-above",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_TOGGLE_ABOVE,
|
||||
handle_toggle_above, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"maximize",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MAXIMIZE,
|
||||
handle_maximize, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"unmaximize",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_UNMAXIMIZE,
|
||||
handle_unmaximize, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"toggle-shaded",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_TOGGLE_SHADED,
|
||||
handle_toggle_shaded, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"minimize",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MINIMIZE,
|
||||
handle_minimize, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"close",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_CLOSE,
|
||||
handle_close, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"begin-move",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_BEGIN_MOVE,
|
||||
handle_begin_move, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"begin-resize",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_BEGIN_RESIZE,
|
||||
handle_begin_resize, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"toggle-on-all-workspaces",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_TOGGLE_ON_ALL_WORKSPACES,
|
||||
handle_toggle_on_all_workspaces, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-1",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_1,
|
||||
handle_move_to_workspace, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-2",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_2,
|
||||
handle_move_to_workspace, 1);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-3",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_3,
|
||||
handle_move_to_workspace, 2);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-4",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_4,
|
||||
handle_move_to_workspace, 3);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-5",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_5,
|
||||
handle_move_to_workspace, 4);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-6",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_6,
|
||||
handle_move_to_workspace, 5);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-7",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_7,
|
||||
handle_move_to_workspace, 6);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-8",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_8,
|
||||
handle_move_to_workspace, 7);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-9",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_9,
|
||||
handle_move_to_workspace, 8);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-10",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_10,
|
||||
handle_move_to_workspace, 9);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-11",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_11,
|
||||
handle_move_to_workspace, 10);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-12",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_12,
|
||||
handle_move_to_workspace, 11);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-workspace-last",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_WORKSPACE_LAST,
|
||||
handle_move_to_workspace_last, 0);
|
||||
|
||||
@@ -4195,105 +4243,120 @@ init_builtin_key_bindings (MetaDisplay *display)
|
||||
add_builtin_keybinding (display,
|
||||
"raise-or-lower",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_RAISE_OR_LOWER,
|
||||
handle_raise_or_lower, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"raise",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_RAISE,
|
||||
handle_raise, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"lower",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_LOWER,
|
||||
handle_lower, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"maximize-vertically",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MAXIMIZE_VERTICALLY,
|
||||
handle_maximize_vertically, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"maximize-horizontally",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MAXIMIZE_HORIZONTALLY,
|
||||
handle_maximize_horizontally, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"always-on-top",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_ALWAYS_ON_TOP,
|
||||
handle_always_on_top, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-corner-nw",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_CORNER_NW,
|
||||
handle_move_to_corner_nw, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-corner-ne",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_CORNER_NE,
|
||||
handle_move_to_corner_ne, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-corner-sw",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_CORNER_SW,
|
||||
handle_move_to_corner_sw, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-corner-se",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_CORNER_SE,
|
||||
handle_move_to_corner_se, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-side-n",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_SIDE_N,
|
||||
handle_move_to_side_n, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-side-s",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_SIDE_S,
|
||||
handle_move_to_side_s, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-side-e",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_SIDE_E,
|
||||
handle_move_to_side_e, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-side-w",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_SIDE_W,
|
||||
handle_move_to_side_w, 0);
|
||||
|
||||
add_builtin_keybinding (display,
|
||||
"move-to-center",
|
||||
common_keybindings,
|
||||
META_KEY_BINDING_PER_WINDOW,
|
||||
META_KEY_BINDING_PER_WINDOW |
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT,
|
||||
META_KEYBINDING_ACTION_MOVE_TO_CENTER,
|
||||
handle_move_to_center, 0);
|
||||
|
||||
|
128
src/core/prefs.c
128
src/core/prefs.c
@@ -146,8 +146,6 @@ static gboolean button_layout_handler (GVariant*, gpointer*, gpointer);
|
||||
static gboolean overlay_key_handler (GVariant*, gpointer*, gpointer);
|
||||
static gboolean iso_next_group_handler (GVariant*, gpointer*, gpointer);
|
||||
|
||||
static void do_override (char *key, char *schema);
|
||||
|
||||
static void init_bindings (void);
|
||||
|
||||
typedef struct
|
||||
@@ -492,21 +490,6 @@ static MetaIntPreference preferences_int[] =
|
||||
{ { NULL, 0, 0 }, NULL },
|
||||
};
|
||||
|
||||
/*
|
||||
* This is used to keep track of override schemas used to
|
||||
* override preferences from the "normal" metacity/mutter
|
||||
* schemas; we modify the preferences arrays directly, but
|
||||
* we also need to remember what we have done to handle
|
||||
* subsequent overrides correctly.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
char *key;
|
||||
char *new_schema;
|
||||
} MetaPrefsOverriddenKey;
|
||||
|
||||
static GSList *overridden_keys;
|
||||
|
||||
static void
|
||||
handle_preference_init_enum (void)
|
||||
{
|
||||
@@ -940,7 +923,6 @@ void
|
||||
meta_prefs_init (void)
|
||||
{
|
||||
GSettings *settings;
|
||||
GSList *tmp;
|
||||
|
||||
settings_schemas = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, g_object_unref);
|
||||
@@ -974,13 +956,6 @@ meta_prefs_init (void)
|
||||
G_CALLBACK (settings_changed), NULL);
|
||||
g_hash_table_insert (settings_schemas, g_strdup (SCHEMA_INPUT_SOURCES), settings);
|
||||
|
||||
|
||||
for (tmp = overridden_keys; tmp; tmp = tmp->next)
|
||||
{
|
||||
MetaPrefsOverriddenKey *override = tmp->data;
|
||||
do_override (override->key, override->new_schema);
|
||||
}
|
||||
|
||||
/* Pick up initial values. */
|
||||
|
||||
handle_preference_init_enum ();
|
||||
@@ -1019,109 +994,6 @@ find_pref (void *prefs,
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
do_override (char *key,
|
||||
char *schema)
|
||||
{
|
||||
MetaBasePreference *pref;
|
||||
GSettings *settings;
|
||||
char *detailed_signal;
|
||||
gpointer data;
|
||||
guint handler_id;
|
||||
|
||||
g_return_if_fail (settings_schemas != NULL);
|
||||
|
||||
if (!find_pref (preferences_enum, sizeof(MetaEnumPreference), key, &pref) &&
|
||||
!find_pref (preferences_bool, sizeof(MetaBoolPreference), key, &pref) &&
|
||||
!find_pref (preferences_string, sizeof(MetaStringPreference), key, &pref) &&
|
||||
!find_pref (preferences_int, sizeof(MetaIntPreference), key, &pref))
|
||||
{
|
||||
meta_warning ("Can't override preference key, \"%s\" not found\n", key);
|
||||
return;
|
||||
}
|
||||
|
||||
settings = SETTINGS (pref->schema);
|
||||
data = g_object_get_data (G_OBJECT (settings), key);
|
||||
if (data)
|
||||
{
|
||||
handler_id = GPOINTER_TO_UINT (data);
|
||||
g_signal_handler_disconnect (settings, handler_id);
|
||||
}
|
||||
|
||||
pref->schema = schema;
|
||||
settings = SETTINGS (pref->schema);
|
||||
if (!settings)
|
||||
{
|
||||
settings = g_settings_new (pref->schema);
|
||||
g_hash_table_insert (settings_schemas, g_strdup (pref->schema), settings);
|
||||
}
|
||||
|
||||
detailed_signal = g_strdup_printf ("changed::%s", key);
|
||||
handler_id = g_signal_connect (settings, detailed_signal,
|
||||
G_CALLBACK (settings_changed), NULL);
|
||||
g_free (detailed_signal);
|
||||
|
||||
g_object_set_data (G_OBJECT (settings), key, GUINT_TO_POINTER (handler_id));
|
||||
|
||||
settings_changed (settings, key, NULL);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* meta_prefs_override_preference_schema:
|
||||
* @key: the preference name
|
||||
* @schema: new schema for preference @key
|
||||
*
|
||||
* Specify a schema whose keys are used to override the standard Metacity
|
||||
* keys. This might be used if a plugin expected a different value for
|
||||
* some preference than the Metacity default. While this function can be
|
||||
* called at any point, this function should generally be called in a
|
||||
* plugin's constructor, rather than in its start() method so the preference
|
||||
* isn't first loaded with one value then changed to another value.
|
||||
*/
|
||||
void
|
||||
meta_prefs_override_preference_schema (const char *key, const char *schema)
|
||||
{
|
||||
MetaPrefsOverriddenKey *overridden;
|
||||
GSList *tmp;
|
||||
|
||||
/* Merge identical overrides, this isn't an error */
|
||||
for (tmp = overridden_keys; tmp; tmp = tmp->next)
|
||||
{
|
||||
MetaPrefsOverriddenKey *tmp_overridden = tmp->data;
|
||||
if (strcmp (tmp_overridden->key, key) == 0 &&
|
||||
strcmp (tmp_overridden->new_schema, schema) == 0)
|
||||
return;
|
||||
}
|
||||
|
||||
overridden = NULL;
|
||||
|
||||
for (tmp = overridden_keys; tmp; tmp = tmp->next)
|
||||
{
|
||||
MetaPrefsOverriddenKey *tmp_overridden = tmp->data;
|
||||
if (strcmp (tmp_overridden->key, key) == 0)
|
||||
overridden = tmp_overridden;
|
||||
}
|
||||
|
||||
if (overridden)
|
||||
{
|
||||
g_free (overridden->new_schema);
|
||||
overridden->new_schema = g_strdup (schema);
|
||||
}
|
||||
else
|
||||
{
|
||||
overridden = g_slice_new (MetaPrefsOverriddenKey);
|
||||
overridden->key = g_strdup (key);
|
||||
overridden->new_schema = g_strdup (schema);
|
||||
|
||||
overridden_keys = g_slist_prepend (overridden_keys, overridden);
|
||||
}
|
||||
|
||||
if (settings_schemas != NULL)
|
||||
do_override (overridden->key, overridden->new_schema);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************/
|
||||
/* Updates. */
|
||||
/****************************************************************************/
|
||||
|
@@ -121,6 +121,13 @@ typedef enum
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_RESIZE_Y = 1 << 5,
|
||||
} MetaPlacementConstraintAdjustment;
|
||||
|
||||
typedef enum _MetaWindowUpdateMonitorFlags
|
||||
{
|
||||
META_WINDOW_UPDATE_MONITOR_FLAGS_NONE = 0,
|
||||
META_WINDOW_UPDATE_MONITOR_FLAGS_USER_OP = 1 << 0,
|
||||
META_WINDOW_UPDATE_MONITOR_FLAGS_FORCE = 1 << 1,
|
||||
} MetaWindowUpdateMonitorFlags;
|
||||
|
||||
typedef struct _MetaPlacementRule
|
||||
{
|
||||
MetaRectangle anchor_rect;
|
||||
@@ -514,6 +521,7 @@ struct _MetaWindow
|
||||
guint bypass_compositor;
|
||||
|
||||
MetaPlacementRule *placement_rule;
|
||||
MetaPlacementRule *constrained_placement_rule;
|
||||
};
|
||||
|
||||
struct _MetaWindowClass
|
||||
@@ -548,8 +556,8 @@ struct _MetaWindowClass
|
||||
cairo_surface_t **icon,
|
||||
cairo_surface_t **mini_icon);
|
||||
uint32_t (*get_client_pid) (MetaWindow *window);
|
||||
void (*update_main_monitor) (MetaWindow *window,
|
||||
gboolean user_op);
|
||||
void (*update_main_monitor) (MetaWindow *window,
|
||||
MetaWindowUpdateMonitorFlags flags);
|
||||
void (*main_monitor_changed) (MetaWindow *window,
|
||||
const MetaLogicalMonitor *old);
|
||||
void (*force_restore_shortcuts) (MetaWindow *window,
|
||||
@@ -766,8 +774,8 @@ void meta_window_activate_full (MetaWindow *window,
|
||||
MetaLogicalMonitor * meta_window_calculate_main_logical_monitor (MetaWindow *window);
|
||||
|
||||
MetaLogicalMonitor * meta_window_get_main_logical_monitor (MetaWindow *window);
|
||||
void meta_window_update_monitor (MetaWindow *window,
|
||||
gboolean user_op);
|
||||
void meta_window_update_monitor (MetaWindow *window,
|
||||
MetaWindowUpdateMonitorFlags flags);
|
||||
|
||||
void meta_window_set_urgent (MetaWindow *window,
|
||||
gboolean urgent);
|
||||
|
@@ -313,6 +313,7 @@ meta_window_finalize (GObject *object)
|
||||
g_free (window->gtk_app_menu_object_path);
|
||||
g_free (window->gtk_menubar_object_path);
|
||||
g_free (window->placement_rule);
|
||||
g_free (window->constrained_placement_rule);
|
||||
|
||||
G_OBJECT_CLASS (meta_window_parent_class)->finalize (object);
|
||||
}
|
||||
@@ -1483,7 +1484,9 @@ meta_window_unmanage (MetaWindow *window,
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Focusing default window since we're unmanaging %s\n",
|
||||
window->desc);
|
||||
meta_workspace_focus_default_window (workspace_manager->active_workspace, NULL, timestamp);
|
||||
meta_workspace_focus_default_window (workspace_manager->active_workspace,
|
||||
window,
|
||||
timestamp);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3750,13 +3753,23 @@ meta_window_updates_are_frozen (MetaWindow *window)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_reposition (MetaWindow *window)
|
||||
{
|
||||
meta_window_move_resize_internal (window,
|
||||
(META_MOVE_RESIZE_MOVE_ACTION |
|
||||
META_MOVE_RESIZE_RESIZE_ACTION),
|
||||
NorthWestGravity,
|
||||
window->rect);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
maybe_move_attached_dialog (MetaWindow *window,
|
||||
maybe_move_attached_window (MetaWindow *window,
|
||||
void *data)
|
||||
{
|
||||
if (meta_window_is_attached_dialog (window))
|
||||
/* It ignores x,y for such a dialog */
|
||||
meta_window_move_frame (window, FALSE, 0, 0);
|
||||
if (meta_window_is_attached_dialog (window) ||
|
||||
meta_window_get_placement_rule (window))
|
||||
meta_window_reposition (window);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@@ -3823,7 +3836,8 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
|
||||
|
||||
if (window->override_redirect || window->type == META_WINDOW_DESKTOP)
|
||||
{
|
||||
meta_window_update_monitor (window, FALSE);
|
||||
meta_window_update_monitor (window,
|
||||
META_WINDOW_UPDATE_MONITOR_FLAGS_FORCE);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3858,19 +3872,20 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_window_update_monitor (window, FALSE);
|
||||
meta_window_update_monitor (window,
|
||||
META_WINDOW_UPDATE_MONITOR_FLAGS_FORCE);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_update_monitor (MetaWindow *window,
|
||||
gboolean user_op)
|
||||
meta_window_update_monitor (MetaWindow *window,
|
||||
MetaWindowUpdateMonitorFlags flags)
|
||||
{
|
||||
MetaWorkspaceManager *workspace_manager = window->display->workspace_manager;
|
||||
const MetaLogicalMonitor *old;
|
||||
|
||||
old = window->monitor;
|
||||
META_WINDOW_GET_CLASS (window)->update_main_monitor (window, user_op);
|
||||
META_WINDOW_GET_CLASS (window)->update_main_monitor (window, flags);
|
||||
if (old != window->monitor)
|
||||
{
|
||||
meta_window_on_all_workspaces_changed (window);
|
||||
@@ -3884,7 +3899,8 @@ meta_window_update_monitor (MetaWindow *window,
|
||||
* That should be handled by explicitly moving the window before changing the
|
||||
* workspace.
|
||||
*/
|
||||
if (meta_prefs_get_workspaces_only_on_primary () && user_op &&
|
||||
if (meta_prefs_get_workspaces_only_on_primary () &&
|
||||
flags & META_WINDOW_UPDATE_MONITOR_FLAGS_USER_OP &&
|
||||
meta_window_is_on_primary_monitor (window) &&
|
||||
workspace_manager->active_workspace != window->workspace)
|
||||
meta_window_change_workspace (window, workspace_manager->active_workspace);
|
||||
@@ -3928,6 +3944,7 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
MetaRectangle constrained_rect;
|
||||
MetaMoveResizeResultFlags result = 0;
|
||||
gboolean moved_or_resized = FALSE;
|
||||
MetaWindowUpdateMonitorFlags update_monitor_flags;
|
||||
|
||||
g_return_if_fail (!window->override_redirect);
|
||||
|
||||
@@ -4028,13 +4045,17 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
did_placement);
|
||||
}
|
||||
|
||||
update_monitor_flags = META_WINDOW_UPDATE_MONITOR_FLAGS_NONE;
|
||||
if (flags & META_MOVE_RESIZE_USER_ACTION)
|
||||
update_monitor_flags |= META_WINDOW_UPDATE_MONITOR_FLAGS_USER_OP;
|
||||
|
||||
if (window->monitor)
|
||||
{
|
||||
guint old_output_winsys_id;
|
||||
|
||||
old_output_winsys_id = window->monitor->winsys_id;
|
||||
|
||||
meta_window_update_monitor (window, flags & META_MOVE_RESIZE_USER_ACTION);
|
||||
meta_window_update_monitor (window, update_monitor_flags);
|
||||
|
||||
if (old_output_winsys_id != window->monitor->winsys_id &&
|
||||
flags & META_MOVE_RESIZE_MOVE_ACTION && flags & META_MOVE_RESIZE_USER_ACTION)
|
||||
@@ -4042,7 +4063,7 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_window_update_monitor (window, flags & META_MOVE_RESIZE_USER_ACTION);
|
||||
meta_window_update_monitor (window, update_monitor_flags);
|
||||
}
|
||||
|
||||
if ((result & META_MOVE_RESIZE_RESULT_FRAME_SHAPE_CHANGED) && window->frame_bounds)
|
||||
@@ -4051,7 +4072,7 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
window->frame_bounds = NULL;
|
||||
}
|
||||
|
||||
meta_window_foreach_transient (window, maybe_move_attached_dialog, NULL);
|
||||
meta_window_foreach_transient (window, maybe_move_attached_window, NULL);
|
||||
|
||||
meta_stack_update_window_tile_matches (window->display->stack,
|
||||
workspace_manager->active_workspace);
|
||||
@@ -4644,6 +4665,7 @@ meta_window_focus (MetaWindow *window,
|
||||
window->desc, window->input, window->take_focus);
|
||||
|
||||
if (window->display->grab_window &&
|
||||
window->display->grab_window != window &&
|
||||
window->display->grab_window->all_keys_grabbed &&
|
||||
!window->display->grab_window->unmanaging)
|
||||
{
|
||||
|
@@ -29,6 +29,7 @@
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
#include "meta/meta-dnd.h"
|
||||
#include "meta/meta-remote-access-controller.h"
|
||||
|
||||
typedef struct _MetaBackend MetaBackend;
|
||||
typedef struct _MetaBackendClass MetaBackendClass;
|
||||
@@ -54,6 +55,8 @@ MetaDnd *meta_backend_get_dnd (MetaBackend *backend);
|
||||
|
||||
MetaSettings *meta_backend_get_settings (MetaBackend *backend);
|
||||
|
||||
MetaRemoteAccessController * meta_backend_get_remote_access_controller (MetaBackend *backend);
|
||||
|
||||
void meta_clutter_init (void);
|
||||
|
||||
#endif /* META_BACKEND_H */
|
||||
|
@@ -303,7 +303,7 @@ struct _MetaPluginVersion
|
||||
/*
|
||||
* Convenience macro to set up the plugin type. Based on GEdit.
|
||||
*/
|
||||
#define META_PLUGIN_DECLARE(ObjectName, object_name) \
|
||||
#define META_PLUGIN_DECLARE_WITH_CODE(ObjectName, object_name, CODE) \
|
||||
G_MODULE_EXPORT MetaPluginVersion meta_plugin_version = \
|
||||
{ \
|
||||
META_MAJOR_VERSION, \
|
||||
@@ -312,65 +312,31 @@ struct _MetaPluginVersion
|
||||
META_PLUGIN_API_VERSION \
|
||||
}; \
|
||||
\
|
||||
static GType g_define_type_id = 0; \
|
||||
\
|
||||
/* Prototypes */ \
|
||||
G_MODULE_EXPORT \
|
||||
GType object_name##_get_type (void); \
|
||||
G_MODULE_EXPORT GType \
|
||||
object_name##_get_type (void); \
|
||||
\
|
||||
G_MODULE_EXPORT \
|
||||
GType object_name##_register_type (GTypeModule *type_module); \
|
||||
\
|
||||
G_MODULE_EXPORT \
|
||||
GType meta_plugin_register_type (GTypeModule *type_module); \
|
||||
\
|
||||
GType \
|
||||
object_name##_get_type (void) \
|
||||
{ \
|
||||
return g_define_type_id; \
|
||||
} \
|
||||
\
|
||||
static void object_name##_init (ObjectName *self); \
|
||||
static void object_name##_class_init (ObjectName##Class *klass); \
|
||||
static gpointer object_name##_parent_class = NULL; \
|
||||
static void object_name##_class_intern_init (gpointer klass) \
|
||||
{ \
|
||||
object_name##_parent_class = g_type_class_peek_parent (klass); \
|
||||
object_name##_class_init ((ObjectName##Class *) klass); \
|
||||
} \
|
||||
\
|
||||
GType \
|
||||
object_name##_register_type (GTypeModule *type_module) \
|
||||
{ \
|
||||
static const GTypeInfo our_info = \
|
||||
{ \
|
||||
sizeof (ObjectName##Class), \
|
||||
NULL, /* base_init */ \
|
||||
NULL, /* base_finalize */ \
|
||||
(GClassInitFunc) object_name##_class_intern_init, \
|
||||
NULL, \
|
||||
NULL, /* class_data */ \
|
||||
sizeof (ObjectName), \
|
||||
0, /* n_preallocs */ \
|
||||
(GInstanceInitFunc) object_name##_init \
|
||||
}; \
|
||||
\
|
||||
g_define_type_id = g_type_module_register_type (type_module, \
|
||||
META_TYPE_PLUGIN, \
|
||||
#ObjectName, \
|
||||
&our_info, \
|
||||
0); \
|
||||
G_MODULE_EXPORT GType \
|
||||
meta_plugin_register_type (GTypeModule *type_module); \
|
||||
\
|
||||
\
|
||||
return g_define_type_id; \
|
||||
} \
|
||||
G_DEFINE_DYNAMIC_TYPE_EXTENDED(ObjectName, object_name, \
|
||||
META_TYPE_PLUGIN, 0, CODE) \
|
||||
\
|
||||
/* Unused, but required by G_DEFINE_DYNAMIC_TYPE */ \
|
||||
static void \
|
||||
object_name##_class_finalize (ObjectName##Class *klass) {} \
|
||||
\
|
||||
G_MODULE_EXPORT GType \
|
||||
meta_plugin_register_type (GTypeModule *type_module) \
|
||||
{ \
|
||||
return object_name##_register_type (type_module); \
|
||||
object_name##_register_type (type_module); \
|
||||
return object_name##_get_type (); \
|
||||
} \
|
||||
|
||||
#define META_PLUGIN_DECLARE(ObjectName, object_name) \
|
||||
META_PLUGIN_DECLARE_WITH_CODE(ObjectName, object_name, {})
|
||||
|
||||
void
|
||||
meta_plugin_switch_workspace_completed (MetaPlugin *plugin);
|
||||
|
||||
|
47
src/meta/meta-remote-access-controller.h
Normal file
47
src/meta/meta-remote-access-controller.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* 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_H
|
||||
#define META_REMOTE_ACCESS_CONTROLLER_H
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
#define META_TYPE_REMOTE_ACCESS_HANDLE meta_remote_access_handle_get_type ()
|
||||
G_DECLARE_DERIVABLE_TYPE (MetaRemoteAccessHandle,
|
||||
meta_remote_access_handle,
|
||||
META, REMOTE_ACCESS_HANDLE,
|
||||
GObject)
|
||||
|
||||
struct _MetaRemoteAccessHandleClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
void (*stop) (MetaRemoteAccessHandle *handle);
|
||||
};
|
||||
|
||||
void meta_remote_access_handle_stop (MetaRemoteAccessHandle *handle);
|
||||
|
||||
#define META_TYPE_REMOTE_ACCESS_CONTROLLER meta_remote_access_controller_get_type ()
|
||||
G_DECLARE_FINAL_TYPE (MetaRemoteAccessController,
|
||||
meta_remote_access_controller,
|
||||
META, REMOTE_ACCESS_CONTROLLER,
|
||||
GObject)
|
||||
|
||||
#endif /* META_REMOTE_ACCESS_CONTROLLER_H */
|
@@ -115,9 +115,6 @@ void meta_prefs_remove_listener (MetaPrefsChangedFunc func,
|
||||
|
||||
void meta_prefs_init (void);
|
||||
|
||||
void meta_prefs_override_preference_schema (const char *key,
|
||||
const char *schema);
|
||||
|
||||
const char* meta_preference_to_string (MetaPreference pref);
|
||||
|
||||
MetaVirtualModifier meta_prefs_get_mouse_button_mods (void);
|
||||
@@ -381,6 +378,7 @@ typedef enum
|
||||
META_KEY_BINDING_BUILTIN = 1 << 1,
|
||||
META_KEY_BINDING_IS_REVERSED = 1 << 2,
|
||||
META_KEY_BINDING_NON_MASKABLE = 1 << 3,
|
||||
META_KEY_BINDING_IGNORE_AUTOREPEAT = 1 << 4,
|
||||
} MetaKeyBindingFlags;
|
||||
|
||||
/**
|
||||
|
@@ -366,7 +366,7 @@
|
||||
2 : logical
|
||||
|
||||
With physical layout mode, each logical monitor has the same dimensions
|
||||
an the monitor modes of the associated monitors assigned to it, no
|
||||
as the monitor modes of the associated monitors assigned to it, no
|
||||
matter what scale is in use.
|
||||
|
||||
With logical mode, the dimension of a logical monitor is the dimension
|
||||
|
19
src/tests/stacking/closed-transient.metatest
Normal file
19
src/tests/stacking/closed-transient.metatest
Normal file
@@ -0,0 +1,19 @@
|
||||
new_client 1 wayland
|
||||
create 1/1
|
||||
show 1/1
|
||||
|
||||
new_client 2 wayland
|
||||
create 2/1
|
||||
show 2/1
|
||||
|
||||
create 1/2
|
||||
show 1/2
|
||||
set_parent 1/2 1
|
||||
|
||||
wait
|
||||
assert_stacking 1/1 2/1 1/2
|
||||
|
||||
destroy 1/2
|
||||
|
||||
wait
|
||||
assert_stacking 2/1 1/1
|
@@ -90,15 +90,44 @@ meta_wayland_actor_surface_assigned (MetaWaylandSurfaceRole *surface_role)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
queue_surface_actor_frame_callbacks (MetaSurfaceActorWayland *surface_actor,
|
||||
MetaWaylandPendingState *pending)
|
||||
void
|
||||
meta_wayland_actor_surface_queue_frame_callbacks (MetaWaylandActorSurface *actor_surface,
|
||||
MetaWaylandPendingState *pending)
|
||||
{
|
||||
meta_surface_actor_wayland_add_frame_callbacks (surface_actor,
|
||||
MetaWaylandActorSurfacePrivate *priv =
|
||||
meta_wayland_actor_surface_get_instance_private (actor_surface);
|
||||
MetaSurfaceActorWayland *surface_actor_wayland =
|
||||
META_SURFACE_ACTOR_WAYLAND (priv->actor);
|
||||
|
||||
meta_surface_actor_wayland_add_frame_callbacks (surface_actor_wayland,
|
||||
&pending->frame_callback_list);
|
||||
wl_list_init (&pending->frame_callback_list);
|
||||
}
|
||||
|
||||
static double
|
||||
meta_wayland_actor_surface_get_geometry_scale (MetaWaylandActorSurface *actor_surface)
|
||||
{
|
||||
MetaWaylandSurfaceRole *surface_role =
|
||||
META_WAYLAND_SURFACE_ROLE (actor_surface);
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWindow *toplevel_window;
|
||||
|
||||
toplevel_window = meta_wayland_surface_get_toplevel_window (surface);
|
||||
if (meta_is_stage_views_scaled ())
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!toplevel_window ||
|
||||
toplevel_window->client_type == META_WINDOW_CLIENT_TYPE_X11)
|
||||
return 1;
|
||||
else
|
||||
return meta_window_wayland_get_geometry_scale (toplevel_window);
|
||||
}
|
||||
}
|
||||
|
||||
double
|
||||
meta_wayland_actor_surface_calculate_scale (MetaWaylandActorSurface *actor_surface)
|
||||
{
|
||||
@@ -106,25 +135,12 @@ meta_wayland_actor_surface_calculate_scale (MetaWaylandActorSurface *actor_surfa
|
||||
META_WAYLAND_SURFACE_ROLE (actor_surface);
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWindow *toplevel_window;
|
||||
int geometry_scale;
|
||||
double geometry_scale;
|
||||
|
||||
toplevel_window = meta_wayland_surface_get_toplevel_window (surface);
|
||||
if (meta_is_stage_views_scaled ())
|
||||
{
|
||||
geometry_scale = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!toplevel_window ||
|
||||
toplevel_window->client_type == META_WINDOW_CLIENT_TYPE_X11)
|
||||
geometry_scale = 1;
|
||||
else
|
||||
geometry_scale =
|
||||
meta_window_wayland_get_geometry_scale (toplevel_window);
|
||||
}
|
||||
geometry_scale =
|
||||
meta_wayland_actor_surface_get_geometry_scale (actor_surface);
|
||||
|
||||
return (double) geometry_scale / (double) surface->scale;
|
||||
return geometry_scale / (double) surface->scale;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -140,6 +156,8 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor
|
||||
MetaShapedTexture *stex;
|
||||
double actor_scale;
|
||||
GList *l;
|
||||
cairo_rectangle_int_t surface_rect;
|
||||
int geometry_scale;
|
||||
|
||||
surface_actor = priv->actor;
|
||||
stex = meta_surface_actor_get_texture (surface_actor);
|
||||
@@ -147,15 +165,21 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor
|
||||
actor_scale = meta_wayland_actor_surface_calculate_scale (actor_surface);
|
||||
clutter_actor_set_scale (CLUTTER_ACTOR (stex), actor_scale, actor_scale);
|
||||
|
||||
/* Wayland surface coordinate space -> stage coordinate space */
|
||||
geometry_scale = meta_wayland_actor_surface_get_geometry_scale (actor_surface);
|
||||
|
||||
surface_rect = (cairo_rectangle_int_t) {
|
||||
.width = meta_wayland_surface_get_width (surface) * geometry_scale,
|
||||
.height = meta_wayland_surface_get_height (surface) * geometry_scale,
|
||||
};
|
||||
|
||||
if (surface->input_region)
|
||||
{
|
||||
cairo_region_t *scaled_input_region;
|
||||
int region_scale;
|
||||
|
||||
/* Wayland surface coordinate space -> stage coordinate space */
|
||||
region_scale = (int) (surface->scale * actor_scale);
|
||||
scaled_input_region = meta_region_scale (surface->input_region,
|
||||
region_scale);
|
||||
geometry_scale);
|
||||
cairo_region_intersect_rectangle (scaled_input_region, &surface_rect);
|
||||
meta_surface_actor_set_input_region (surface_actor, scaled_input_region);
|
||||
cairo_region_destroy (scaled_input_region);
|
||||
}
|
||||
@@ -170,7 +194,8 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor
|
||||
|
||||
/* Wayland surface coordinate space -> stage coordinate space */
|
||||
scaled_opaque_region = meta_region_scale (surface->opaque_region,
|
||||
surface->scale);
|
||||
geometry_scale);
|
||||
cairo_region_intersect_rectangle (scaled_opaque_region, &surface_rect);
|
||||
meta_surface_actor_set_opaque_region (surface_actor,
|
||||
scaled_opaque_region);
|
||||
cairo_region_destroy (scaled_opaque_region);
|
||||
@@ -203,16 +228,13 @@ static void
|
||||
meta_wayland_actor_surface_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
MetaWaylandPendingState *pending)
|
||||
{
|
||||
MetaWaylandActorSurfacePrivate *priv =
|
||||
meta_wayland_actor_surface_get_instance_private (META_WAYLAND_ACTOR_SURFACE (surface_role));
|
||||
MetaWaylandActorSurface *actor_surface =
|
||||
META_WAYLAND_ACTOR_SURFACE (surface_role);
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWaylandSurface *toplevel_surface;
|
||||
|
||||
queue_surface_actor_frame_callbacks (META_SURFACE_ACTOR_WAYLAND (priv->actor),
|
||||
pending);
|
||||
meta_wayland_actor_surface_queue_frame_callbacks (actor_surface, pending);
|
||||
|
||||
toplevel_surface = meta_wayland_surface_get_toplevel (surface);
|
||||
if (!toplevel_surface || !toplevel_surface->window)
|
||||
|
@@ -43,4 +43,7 @@ double meta_wayland_actor_surface_calculate_scale (MetaWaylandActorSurface *acto
|
||||
MetaSurfaceActor * meta_wayland_actor_surface_get_actor (MetaWaylandActorSurface *actor_surface);
|
||||
void meta_wayland_actor_surface_reset_actor (MetaWaylandActorSurface *actor_surface);
|
||||
|
||||
void meta_wayland_actor_surface_queue_frame_callbacks (MetaWaylandActorSurface *actor_surface,
|
||||
MetaWaylandPendingState *pending);
|
||||
|
||||
#endif /* META_WAYLAND_ACTOR_SURFACE_H */
|
||||
|
@@ -71,15 +71,13 @@ gtk_surface_set_dbus_properties (struct wl_client *client,
|
||||
{
|
||||
MetaWaylandGtkSurface *gtk_surface = wl_resource_get_user_data (resource);
|
||||
MetaWaylandSurface *surface = gtk_surface->surface;
|
||||
MetaWindow *window;
|
||||
|
||||
/* Broken client, let it die instead of us */
|
||||
if (!surface->window)
|
||||
{
|
||||
meta_warning ("meta-wayland-surface: set_dbus_properties called with invalid window!\n");
|
||||
return;
|
||||
}
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
meta_window_set_gtk_dbus_properties (surface->window,
|
||||
meta_window_set_gtk_dbus_properties (window,
|
||||
application_id,
|
||||
unique_bus_name,
|
||||
app_menu_path,
|
||||
@@ -94,12 +92,17 @@ gtk_surface_set_modal (struct wl_client *client,
|
||||
{
|
||||
MetaWaylandGtkSurface *gtk_surface = wl_resource_get_user_data (resource);
|
||||
MetaWaylandSurface *surface = gtk_surface->surface;
|
||||
MetaWindow *window;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (gtk_surface->is_modal)
|
||||
return;
|
||||
|
||||
gtk_surface->is_modal = TRUE;
|
||||
meta_window_set_type (surface->window, META_WINDOW_MODAL_DIALOG);
|
||||
meta_window_set_type (window, META_WINDOW_MODAL_DIALOG);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -108,12 +111,17 @@ gtk_surface_unset_modal (struct wl_client *client,
|
||||
{
|
||||
MetaWaylandGtkSurface *gtk_surface = wl_resource_get_user_data (resource);
|
||||
MetaWaylandSurface *surface = gtk_surface->surface;
|
||||
MetaWindow *window;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (!gtk_surface->is_modal)
|
||||
return;
|
||||
|
||||
gtk_surface->is_modal = FALSE;
|
||||
meta_window_set_type (surface->window, META_WINDOW_NORMAL);
|
||||
meta_window_set_type (window, META_WINDOW_NORMAL);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -123,8 +131,9 @@ gtk_surface_present (struct wl_client *client,
|
||||
{
|
||||
MetaWaylandGtkSurface *gtk_surface = wl_resource_get_user_data (resource);
|
||||
MetaWaylandSurface *surface = gtk_surface->surface;
|
||||
MetaWindow *window = surface->window;
|
||||
MetaWindow *window;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
|
@@ -89,7 +89,7 @@ unbind_resource (struct wl_resource *resource)
|
||||
}
|
||||
|
||||
static int
|
||||
create_anonymous_file (off_t size,
|
||||
create_anonymous_file (off_t size,
|
||||
GError **error)
|
||||
{
|
||||
static const char template[] = "mutter-shared-XXXXXX";
|
||||
@@ -126,35 +126,66 @@ create_anonymous_file (off_t size,
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void
|
||||
send_keymap (MetaWaylandKeyboard *keyboard,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandXkbInfo *xkb_info = &keyboard->xkb_info;
|
||||
GError *error = NULL;
|
||||
int fd;
|
||||
char *keymap_area;
|
||||
|
||||
if (!xkb_info->keymap_string)
|
||||
return;
|
||||
|
||||
fd = create_anonymous_file (xkb_info->keymap_size, &error);
|
||||
if (fd < 0)
|
||||
{
|
||||
g_warning ("Creating a keymap file for %lu bytes failed: %s",
|
||||
(unsigned long) xkb_info->keymap_size,
|
||||
error->message);
|
||||
g_clear_error (&error);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
keymap_area = mmap (NULL, xkb_info->keymap_size,
|
||||
PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||
if (keymap_area == MAP_FAILED)
|
||||
{
|
||||
g_warning ("Failed to mmap() %lu bytes\n",
|
||||
(unsigned long) xkb_info->keymap_size);
|
||||
close (fd);
|
||||
return;
|
||||
}
|
||||
|
||||
strcpy (keymap_area, xkb_info->keymap_string);
|
||||
|
||||
munmap (keymap_area, xkb_info->keymap_size);
|
||||
|
||||
wl_keyboard_send_keymap (resource,
|
||||
WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
|
||||
fd,
|
||||
keyboard->xkb_info.keymap_size);
|
||||
close (fd);
|
||||
}
|
||||
|
||||
static void
|
||||
inform_clients_of_new_keymap (MetaWaylandKeyboard *keyboard)
|
||||
{
|
||||
struct wl_resource *keyboard_resource;
|
||||
|
||||
wl_resource_for_each (keyboard_resource, &keyboard->resource_list)
|
||||
{
|
||||
wl_keyboard_send_keymap (keyboard_resource,
|
||||
WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
|
||||
keyboard->xkb_info.keymap_fd,
|
||||
keyboard->xkb_info.keymap_size);
|
||||
}
|
||||
send_keymap (keyboard, keyboard_resource);
|
||||
wl_resource_for_each (keyboard_resource, &keyboard->focus_resource_list)
|
||||
{
|
||||
wl_keyboard_send_keymap (keyboard_resource,
|
||||
WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
|
||||
keyboard->xkb_info.keymap_fd,
|
||||
keyboard->xkb_info.keymap_size);
|
||||
}
|
||||
send_keymap (keyboard, keyboard_resource);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_keyboard_take_keymap (MetaWaylandKeyboard *keyboard,
|
||||
struct xkb_keymap *keymap)
|
||||
{
|
||||
MetaWaylandXkbInfo *xkb_info = &keyboard->xkb_info;
|
||||
GError *error = NULL;
|
||||
char *keymap_str;
|
||||
size_t previous_size;
|
||||
MetaWaylandXkbInfo *xkb_info = &keyboard->xkb_info;
|
||||
|
||||
if (keymap == NULL)
|
||||
{
|
||||
@@ -162,60 +193,24 @@ meta_wayland_keyboard_take_keymap (MetaWaylandKeyboard *keyboard,
|
||||
return;
|
||||
}
|
||||
|
||||
g_clear_pointer (&xkb_info->keymap_string, g_free);
|
||||
xkb_keymap_unref (xkb_info->keymap);
|
||||
xkb_info->keymap = xkb_keymap_ref (keymap);
|
||||
|
||||
meta_wayland_keyboard_update_xkb_state (keyboard);
|
||||
|
||||
keymap_str = xkb_map_get_as_string (xkb_info->keymap);
|
||||
if (keymap_str == NULL)
|
||||
xkb_info->keymap_string =
|
||||
xkb_keymap_get_as_string (xkb_info->keymap, XKB_KEYMAP_FORMAT_TEXT_V1);
|
||||
if (!xkb_info->keymap_string)
|
||||
{
|
||||
g_warning ("failed to get string version of keymap");
|
||||
g_warning ("Failed to get string version of keymap");
|
||||
return;
|
||||
}
|
||||
previous_size = xkb_info->keymap_size;
|
||||
xkb_info->keymap_size = strlen (keymap_str) + 1;
|
||||
|
||||
if (xkb_info->keymap_fd >= 0)
|
||||
close (xkb_info->keymap_fd);
|
||||
|
||||
xkb_info->keymap_fd = create_anonymous_file (xkb_info->keymap_size, &error);
|
||||
if (xkb_info->keymap_fd < 0)
|
||||
{
|
||||
g_warning ("creating a keymap file for %lu bytes failed: %s",
|
||||
(unsigned long) xkb_info->keymap_size,
|
||||
error->message);
|
||||
g_clear_error (&error);
|
||||
goto err_keymap_str;
|
||||
}
|
||||
|
||||
if (xkb_info->keymap_area)
|
||||
munmap (xkb_info->keymap_area, previous_size);
|
||||
|
||||
xkb_info->keymap_area = mmap (NULL, xkb_info->keymap_size,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_SHARED, xkb_info->keymap_fd, 0);
|
||||
if (xkb_info->keymap_area == MAP_FAILED)
|
||||
{
|
||||
g_warning ("failed to mmap() %lu bytes\n",
|
||||
(unsigned long) xkb_info->keymap_size);
|
||||
goto err_dev_zero;
|
||||
}
|
||||
strcpy (xkb_info->keymap_area, keymap_str);
|
||||
free (keymap_str);
|
||||
xkb_info->keymap_size = strlen (xkb_info->keymap_string) + 1;
|
||||
|
||||
inform_clients_of_new_keymap (keyboard);
|
||||
|
||||
notify_modifiers (keyboard);
|
||||
|
||||
return;
|
||||
|
||||
err_dev_zero:
|
||||
close (xkb_info->keymap_fd);
|
||||
xkb_info->keymap_fd = -1;
|
||||
err_keymap_str:
|
||||
free (keymap_str);
|
||||
return;
|
||||
}
|
||||
|
||||
static xkb_mod_mask_t
|
||||
@@ -298,14 +293,23 @@ meta_wayland_keyboard_broadcast_key (MetaWaylandKeyboard *keyboard,
|
||||
{
|
||||
MetaWaylandInputDevice *input_device =
|
||||
META_WAYLAND_INPUT_DEVICE (keyboard);
|
||||
uint32_t serial;
|
||||
|
||||
keyboard->key_serial =
|
||||
meta_wayland_input_device_next_serial (input_device);
|
||||
serial = meta_wayland_input_device_next_serial (input_device);
|
||||
|
||||
if (state)
|
||||
{
|
||||
keyboard->key_down_serial = serial;
|
||||
keyboard->key_down_keycode = key;
|
||||
}
|
||||
else
|
||||
{
|
||||
keyboard->key_up_serial = serial;
|
||||
keyboard->key_up_keycode = key;
|
||||
}
|
||||
|
||||
wl_resource_for_each (resource, &keyboard->focus_resource_list)
|
||||
{
|
||||
wl_keyboard_send_key (resource, keyboard->key_serial, time, key, state);
|
||||
}
|
||||
wl_keyboard_send_key (resource, serial, time, key, state);
|
||||
}
|
||||
|
||||
/* Eat the key events if we have a focused surface. */
|
||||
@@ -643,10 +647,9 @@ default_grab_key (MetaWaylandKeyboardGrab *grab,
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
#endif
|
||||
|
||||
/* Synthetic key events are for autorepeat. Ignore those, as
|
||||
* autorepeat in Wayland is done on the client side. */
|
||||
if ((event->key.flags & CLUTTER_EVENT_FLAG_SYNTHETIC) &&
|
||||
!(event->key.flags & CLUTTER_EVENT_FLAG_INPUT_METHOD))
|
||||
/* Ignore autorepeat events, as autorepeat in Wayland is done on the client
|
||||
* side. */
|
||||
if (event->key.flags & CLUTTER_EVENT_FLAG_REPEATED)
|
||||
return FALSE;
|
||||
|
||||
#ifdef HAVE_NATIVE_BACKEND
|
||||
@@ -707,28 +710,12 @@ meta_wayland_keyboard_enable (MetaWaylandKeyboard *keyboard)
|
||||
maybe_restore_numlock_state (keyboard);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_xkb_info_init (MetaWaylandXkbInfo *xkb_info)
|
||||
{
|
||||
xkb_info->keymap_fd = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_xkb_info_destroy (MetaWaylandXkbInfo *xkb_info)
|
||||
{
|
||||
g_clear_pointer (&xkb_info->keymap, xkb_keymap_unref);
|
||||
g_clear_pointer (&xkb_info->state, xkb_state_unref);
|
||||
|
||||
if (xkb_info->keymap_area)
|
||||
{
|
||||
munmap (xkb_info->keymap_area, xkb_info->keymap_size);
|
||||
xkb_info->keymap_area = NULL;
|
||||
}
|
||||
if (xkb_info->keymap_fd >= 0)
|
||||
{
|
||||
close (xkb_info->keymap_fd);
|
||||
xkb_info->keymap_fd = -1;
|
||||
}
|
||||
g_clear_pointer (&xkb_info->keymap_string, g_free);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1001,10 +988,7 @@ meta_wayland_keyboard_create_new_resource (MetaWaylandKeyboard *keyboard,
|
||||
wl_resource_set_implementation (resource, &keyboard_interface,
|
||||
keyboard, unbind_resource);
|
||||
|
||||
wl_keyboard_send_keymap (resource,
|
||||
WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
|
||||
keyboard->xkb_info.keymap_fd,
|
||||
keyboard->xkb_info.keymap_size);
|
||||
send_keymap (keyboard, resource);
|
||||
|
||||
notify_key_repeat_for_resource (keyboard, resource);
|
||||
|
||||
@@ -1026,7 +1010,9 @@ gboolean
|
||||
meta_wayland_keyboard_can_popup (MetaWaylandKeyboard *keyboard,
|
||||
uint32_t serial)
|
||||
{
|
||||
return keyboard->key_serial == serial;
|
||||
return (keyboard->key_down_serial == serial ||
|
||||
((keyboard->key_down_keycode == keyboard->key_up_keycode) &&
|
||||
keyboard->key_up_serial == serial));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1050,8 +1036,6 @@ meta_wayland_keyboard_init (MetaWaylandKeyboard *keyboard)
|
||||
wl_list_init (&keyboard->resource_list);
|
||||
wl_list_init (&keyboard->focus_resource_list);
|
||||
|
||||
meta_wayland_xkb_info_init (&keyboard->xkb_info);
|
||||
|
||||
keyboard->default_grab.interface = &default_keyboard_grab_interface;
|
||||
keyboard->default_grab.keyboard = keyboard;
|
||||
keyboard->grab = &keyboard->default_grab;
|
||||
|
@@ -74,9 +74,8 @@ typedef struct
|
||||
{
|
||||
struct xkb_keymap *keymap;
|
||||
struct xkb_state *state;
|
||||
int keymap_fd;
|
||||
size_t keymap_size;
|
||||
char *keymap_area;
|
||||
char *keymap_string;
|
||||
} MetaWaylandXkbInfo;
|
||||
|
||||
struct _MetaWaylandKeyboard
|
||||
@@ -89,7 +88,12 @@ struct _MetaWaylandKeyboard
|
||||
MetaWaylandSurface *focus_surface;
|
||||
struct wl_listener focus_surface_listener;
|
||||
uint32_t focus_serial;
|
||||
uint32_t key_serial;
|
||||
|
||||
uint32_t key_down_keycode;
|
||||
uint32_t key_down_serial;
|
||||
|
||||
uint32_t key_up_keycode;
|
||||
uint32_t key_up_serial;
|
||||
|
||||
MetaWaylandXkbInfo xkb_info;
|
||||
enum xkb_state_component mods_changed;
|
||||
|
@@ -185,6 +185,11 @@ zxdg_toplevel_v6_set_parent (struct wl_client *client,
|
||||
{
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *transient_for = NULL;
|
||||
MetaWindow *window;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (parent_resource)
|
||||
{
|
||||
@@ -194,7 +199,7 @@ zxdg_toplevel_v6_set_parent (struct wl_client *client,
|
||||
transient_for = parent_surface->window;
|
||||
}
|
||||
|
||||
meta_window_set_transient_for (surface->window, transient_for);
|
||||
meta_window_set_transient_for (window, transient_for);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -203,11 +208,16 @@ zxdg_toplevel_v6_set_title (struct wl_client *client,
|
||||
const char *title)
|
||||
{
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (!g_utf8_validate (title, -1, NULL))
|
||||
title = "";
|
||||
|
||||
meta_window_set_title (surface->window, title);
|
||||
meta_window_set_title (window, title);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -216,11 +226,16 @@ zxdg_toplevel_v6_set_app_id (struct wl_client *client,
|
||||
const char *app_id)
|
||||
{
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (!g_utf8_validate (app_id, -1, NULL))
|
||||
app_id = "";
|
||||
|
||||
meta_window_set_wm_class (surface->window, app_id, app_id);
|
||||
meta_window_set_wm_class (window, app_id, app_id);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -233,15 +248,20 @@ zxdg_toplevel_v6_show_window_menu (struct wl_client *client,
|
||||
{
|
||||
MetaWaylandSeat *seat = wl_resource_get_user_data (seat_resource);
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
int monitor_scale;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, FALSE, NULL, NULL))
|
||||
return;
|
||||
|
||||
monitor_scale = surface->window->monitor->scale;
|
||||
meta_window_show_menu (surface->window, META_WINDOW_MENU_WM,
|
||||
surface->window->buffer_rect.x + (x * monitor_scale),
|
||||
surface->window->buffer_rect.y + (y * monitor_scale));
|
||||
monitor_scale = window->monitor->scale;
|
||||
meta_window_show_menu (window, META_WINDOW_MENU_WM,
|
||||
window->buffer_rect.x + (x * monitor_scale),
|
||||
window->buffer_rect.y + (y * monitor_scale));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -252,8 +272,13 @@ zxdg_toplevel_v6_move (struct wl_client *client,
|
||||
{
|
||||
MetaWaylandSeat *seat = wl_resource_get_user_data (seat_resource);
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
gfloat x, y;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, TRUE, &x, &y))
|
||||
return;
|
||||
|
||||
@@ -292,9 +317,14 @@ zxdg_toplevel_v6_resize (struct wl_client *client,
|
||||
{
|
||||
MetaWaylandSeat *seat = wl_resource_get_user_data (seat_resource);
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
gfloat x, y;
|
||||
MetaGrabOp grab_op;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (!meta_wayland_seat_get_grab_info (seat, surface, serial, TRUE, &x, &y))
|
||||
return;
|
||||
|
||||
@@ -309,6 +339,11 @@ zxdg_toplevel_v6_set_max_size (struct wl_client *client,
|
||||
int32_t height)
|
||||
{
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (width < 0 || height < 0)
|
||||
{
|
||||
@@ -331,6 +366,11 @@ zxdg_toplevel_v6_set_min_size (struct wl_client *client,
|
||||
int32_t height)
|
||||
{
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (width < 0 || height < 0)
|
||||
{
|
||||
@@ -351,9 +391,14 @@ zxdg_toplevel_v6_set_maximized (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
|
||||
meta_window_force_placement (surface->window, TRUE);
|
||||
meta_window_maximize (surface->window, META_MAXIMIZE_BOTH);
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
meta_window_force_placement (window, TRUE);
|
||||
meta_window_maximize (window, META_MAXIMIZE_BOTH);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -361,8 +406,13 @@ zxdg_toplevel_v6_unset_maximized (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
|
||||
meta_window_unmaximize (surface->window, META_MAXIMIZE_BOTH);
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
meta_window_unmaximize (window, META_MAXIMIZE_BOTH);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -371,15 +421,20 @@ zxdg_toplevel_v6_set_fullscreen (struct wl_client *client,
|
||||
struct wl_resource *output_resource)
|
||||
{
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (output_resource)
|
||||
{
|
||||
MetaWaylandOutput *output = wl_resource_get_user_data (output_resource);
|
||||
if (output)
|
||||
meta_window_move_to_monitor (surface->window, output->logical_monitor->number);
|
||||
meta_window_move_to_monitor (window, output->logical_monitor->number);
|
||||
}
|
||||
|
||||
meta_window_make_fullscreen (surface->window);
|
||||
meta_window_make_fullscreen (window);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -387,8 +442,13 @@ zxdg_toplevel_v6_unset_fullscreen (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
|
||||
meta_window_unmake_fullscreen (surface->window);
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
meta_window_unmake_fullscreen (window);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -396,8 +456,13 @@ zxdg_toplevel_v6_set_minimized (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandSurface *surface = surface_from_xdg_toplevel_resource (resource);
|
||||
MetaWindow *window;
|
||||
|
||||
meta_window_minimize (surface->window);
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
meta_window_minimize (window);
|
||||
}
|
||||
|
||||
static const struct zxdg_toplevel_v6_interface meta_wayland_zxdg_toplevel_v6_interface = {
|
||||
@@ -598,11 +663,18 @@ meta_wayland_zxdg_toplevel_v6_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
MetaWaylandSurfaceRoleClass *surface_role_class;
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWindow *window = surface->window;
|
||||
MetaWindow *window;
|
||||
MetaRectangle window_geometry;
|
||||
MetaRectangle old_geometry;
|
||||
gboolean geometry_changed;
|
||||
|
||||
window = surface->window;
|
||||
if (!window)
|
||||
{
|
||||
meta_wayland_surface_cache_pending_frame_callbacks (surface, pending);
|
||||
return;
|
||||
}
|
||||
|
||||
old_geometry = xdg_surface_priv->geometry;
|
||||
|
||||
surface_role_class =
|
||||
@@ -1304,8 +1376,9 @@ meta_wayland_zxdg_surface_v6_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
|
||||
if (pending->has_new_geometry)
|
||||
{
|
||||
/* If we have new geometry, use it. */
|
||||
priv->geometry = pending->new_geometry;
|
||||
meta_wayland_shell_surface_determine_geometry (shell_surface,
|
||||
&pending->new_geometry,
|
||||
&priv->geometry);
|
||||
priv->has_set_geometry = TRUE;
|
||||
}
|
||||
else if (!priv->has_set_geometry)
|
||||
|
@@ -365,12 +365,38 @@ meta_wayland_output_new (MetaWaylandCompositor *compositor,
|
||||
}
|
||||
|
||||
static void
|
||||
nullify_logical_monitor (gpointer key,
|
||||
gpointer value,
|
||||
gpointer data)
|
||||
make_output_resources_inert (MetaWaylandOutput *wayland_output)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
for (l = wayland_output->resources; l; l = l->next)
|
||||
{
|
||||
struct wl_resource *output_resource = l->data;
|
||||
|
||||
wl_resource_set_user_data (output_resource, NULL);
|
||||
}
|
||||
g_list_free (wayland_output->resources);
|
||||
wayland_output->resources = NULL;
|
||||
|
||||
for (l = wayland_output->xdg_output_resources; l; l = l->next)
|
||||
{
|
||||
struct wl_resource *xdg_output_resource = l->data;
|
||||
|
||||
wl_resource_set_user_data (xdg_output_resource, NULL);
|
||||
}
|
||||
g_list_free (wayland_output->xdg_output_resources);
|
||||
wayland_output->xdg_output_resources = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
make_output_inert (gpointer key,
|
||||
gpointer value,
|
||||
gpointer data)
|
||||
{
|
||||
MetaWaylandOutput *wayland_output = value;
|
||||
|
||||
wayland_output->logical_monitor = NULL;
|
||||
make_output_resources_inert (wayland_output);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -420,7 +446,7 @@ meta_wayland_compositor_update_outputs (MetaWaylandCompositor *compositor,
|
||||
wayland_output);
|
||||
}
|
||||
|
||||
g_hash_table_foreach (compositor->outputs, nullify_logical_monitor, NULL);
|
||||
g_hash_table_foreach (compositor->outputs, make_output_inert, NULL);
|
||||
g_timeout_add_seconds (10, delayed_destroy_outputs, compositor->outputs);
|
||||
|
||||
return new_table;
|
||||
@@ -442,30 +468,13 @@ static void
|
||||
meta_wayland_output_finalize (GObject *object)
|
||||
{
|
||||
MetaWaylandOutput *wayland_output = META_WAYLAND_OUTPUT (object);
|
||||
GList *l;
|
||||
|
||||
wl_global_destroy (wayland_output->global);
|
||||
|
||||
/* Make sure the wl_output destructor doesn't try to access MetaWaylandOutput
|
||||
* after we have freed it.
|
||||
*/
|
||||
for (l = wayland_output->resources; l; l = l->next)
|
||||
{
|
||||
struct wl_resource *output_resource = l->data;
|
||||
|
||||
wl_resource_set_user_data (output_resource, NULL);
|
||||
}
|
||||
|
||||
g_list_free (wayland_output->resources);
|
||||
|
||||
for (l = wayland_output->xdg_output_resources; l; l = l->next)
|
||||
{
|
||||
struct wl_resource *xdg_output_resource = l->data;
|
||||
|
||||
wl_resource_set_user_data (xdg_output_resource, NULL);
|
||||
}
|
||||
|
||||
g_list_free (wayland_output->xdg_output_resources);
|
||||
make_output_resources_inert (wayland_output);
|
||||
|
||||
G_OBJECT_CLASS (meta_wayland_output_parent_class)->finalize (object);
|
||||
}
|
||||
|
@@ -64,7 +64,7 @@ typedef struct
|
||||
struct _MetaWaylandCompositor
|
||||
{
|
||||
struct wl_display *wayland_display;
|
||||
const char *display_name;
|
||||
char *display_name;
|
||||
GHashTable *outputs;
|
||||
struct wl_list frame_callbacks;
|
||||
|
||||
|
@@ -226,6 +226,7 @@ meta_wayland_seat_new (MetaWaylandCompositor *compositor,
|
||||
NULL);
|
||||
|
||||
seat->text_input = meta_wayland_text_input_new (seat);
|
||||
seat->gtk_text_input = meta_wayland_gtk_text_input_new (seat);
|
||||
|
||||
meta_wayland_data_device_init (&seat->data_device);
|
||||
|
||||
@@ -262,6 +263,7 @@ meta_wayland_seat_free (MetaWaylandSeat *seat)
|
||||
g_object_unref (seat->pointer);
|
||||
g_object_unref (seat->keyboard);
|
||||
g_object_unref (seat->touch);
|
||||
meta_wayland_gtk_text_input_destroy (seat->gtk_text_input);
|
||||
meta_wayland_text_input_destroy (seat->text_input);
|
||||
|
||||
g_slice_free (MetaWaylandSeat, seat);
|
||||
@@ -385,6 +387,10 @@ meta_wayland_seat_handle_event (MetaWaylandSeat *seat,
|
||||
if (meta_wayland_text_input_handle_event (seat->text_input, event))
|
||||
return TRUE;
|
||||
|
||||
if (meta_wayland_gtk_text_input_handle_event (seat->gtk_text_input,
|
||||
event))
|
||||
return TRUE;
|
||||
|
||||
if (meta_wayland_seat_has_keyboard (seat))
|
||||
return meta_wayland_keyboard_handle_event (seat->keyboard,
|
||||
(const ClutterKeyEvent *) event);
|
||||
@@ -429,6 +435,7 @@ meta_wayland_seat_set_input_focus (MetaWaylandSeat *seat,
|
||||
meta_wayland_tablet_seat_set_pad_focus (tablet_seat, surface);
|
||||
|
||||
meta_wayland_text_input_set_focus (seat->text_input, surface);
|
||||
meta_wayland_gtk_text_input_set_focus (seat->gtk_text_input, surface);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@@ -33,6 +33,7 @@
|
||||
#include "meta-wayland-data-device.h"
|
||||
#include "meta-wayland-tablet-tool.h"
|
||||
#include "meta-wayland-text-input.h"
|
||||
#include "meta-wayland-text-input-legacy.h"
|
||||
|
||||
struct _MetaWaylandSeat
|
||||
{
|
||||
@@ -45,6 +46,7 @@ struct _MetaWaylandSeat
|
||||
|
||||
MetaWaylandDataDevice data_device;
|
||||
|
||||
MetaWaylandGtkTextInput *gtk_text_input;
|
||||
MetaWaylandTextInput *text_input;
|
||||
|
||||
guint capabilities;
|
||||
|
@@ -42,21 +42,12 @@ meta_wayland_shell_surface_calculate_geometry (MetaWaylandShellSurface *shell_su
|
||||
META_WAYLAND_SURFACE_ROLE (shell_surface);
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWaylandBuffer *buffer;
|
||||
CoglTexture *texture;
|
||||
MetaRectangle geometry;
|
||||
GList *l;
|
||||
|
||||
buffer = surface->buffer_ref.buffer;
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
texture = meta_wayland_buffer_get_texture (buffer);
|
||||
geometry = (MetaRectangle) {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.width = cogl_texture_get_width (texture) / surface->scale,
|
||||
.height = cogl_texture_get_height (texture) / surface->scale,
|
||||
.width = meta_wayland_surface_get_width (surface),
|
||||
.height = meta_wayland_surface_get_height (surface),
|
||||
};
|
||||
|
||||
for (l = surface->subsurfaces; l; l = l->next)
|
||||
@@ -73,6 +64,23 @@ meta_wayland_shell_surface_calculate_geometry (MetaWaylandShellSurface *shell_su
|
||||
*out_geometry = geometry;
|
||||
}
|
||||
|
||||
void
|
||||
meta_wayland_shell_surface_determine_geometry (MetaWaylandShellSurface *shell_surface,
|
||||
MetaRectangle *set_geometry,
|
||||
MetaRectangle *out_geometry)
|
||||
{
|
||||
MetaRectangle bounding_geometry = { 0 };
|
||||
MetaRectangle intersected_geometry = { 0 };
|
||||
|
||||
meta_wayland_shell_surface_calculate_geometry (shell_surface,
|
||||
&bounding_geometry);
|
||||
|
||||
meta_rectangle_intersect (set_geometry, &bounding_geometry,
|
||||
&intersected_geometry);
|
||||
|
||||
*out_geometry = intersected_geometry;
|
||||
}
|
||||
|
||||
void
|
||||
meta_wayland_shell_surface_set_window (MetaWaylandShellSurface *shell_surface,
|
||||
MetaWindow *window)
|
||||
@@ -83,7 +91,7 @@ meta_wayland_shell_surface_set_window (MetaWaylandShellSurface *shell_surface,
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
|
||||
meta_wayland_surface_set_window (surface, window);
|
||||
meta_window_update_monitor (window, FALSE);
|
||||
meta_window_update_monitor (window, META_WINDOW_UPDATE_MONITOR_FLAGS_NONE);
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -64,6 +64,10 @@ void meta_wayland_shell_surface_managed (MetaWaylandShellSurface *shell_surface,
|
||||
void meta_wayland_shell_surface_calculate_geometry (MetaWaylandShellSurface *shell_surface,
|
||||
MetaRectangle *out_geometry);
|
||||
|
||||
void meta_wayland_shell_surface_determine_geometry (MetaWaylandShellSurface *shell_surface,
|
||||
MetaRectangle *set_geometry,
|
||||
MetaRectangle *out_geometry);
|
||||
|
||||
void meta_wayland_shell_surface_set_window (MetaWaylandShellSurface *shell_surface,
|
||||
MetaWindow *window);
|
||||
|
||||
|
@@ -152,21 +152,14 @@ meta_wayland_subsurface_union_geometry (MetaWaylandSubsurface *subsurface,
|
||||
MetaWaylandSurfaceRole *surface_role = META_WAYLAND_SURFACE_ROLE (subsurface);
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWaylandBuffer *buffer;
|
||||
CoglTexture *texture;
|
||||
MetaRectangle geometry;
|
||||
GList *l;
|
||||
|
||||
buffer = surface->buffer_ref.buffer;
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
texture = meta_wayland_buffer_get_texture (buffer);
|
||||
geometry = (MetaRectangle) {
|
||||
.x = surface->offset_x + surface->sub.x,
|
||||
.y = surface->offset_y + surface->sub.y,
|
||||
.width = cogl_texture_get_width (texture) / surface->scale,
|
||||
.height = cogl_texture_get_height (texture) / surface->scale,
|
||||
.width = meta_wayland_surface_get_width (surface),
|
||||
.height = meta_wayland_surface_get_height (surface),
|
||||
};
|
||||
|
||||
meta_rectangle_union (out_geometry, &geometry, out_geometry);
|
||||
|
@@ -257,8 +257,6 @@ surface_process_damage (MetaWaylandSurface *surface,
|
||||
cairo_region_t *buffer_region)
|
||||
{
|
||||
MetaWaylandBuffer *buffer = surface->buffer_ref.buffer;
|
||||
unsigned int buffer_width;
|
||||
unsigned int buffer_height;
|
||||
cairo_rectangle_int_t surface_rect;
|
||||
cairo_region_t *scaled_region;
|
||||
int i, n_rectangles;
|
||||
@@ -273,11 +271,9 @@ surface_process_damage (MetaWaylandSurface *surface,
|
||||
/* Intersect the damage region with the surface region before scaling in
|
||||
* order to avoid integer overflow when scaling a damage region is too large
|
||||
* (for example INT32_MAX which mesa passes). */
|
||||
buffer_width = cogl_texture_get_width (buffer->texture);
|
||||
buffer_height = cogl_texture_get_height (buffer->texture);
|
||||
surface_rect = (cairo_rectangle_int_t) {
|
||||
.width = buffer_width / surface->scale,
|
||||
.height = buffer_height / surface->scale,
|
||||
.width = meta_wayland_surface_get_width (surface),
|
||||
.height = meta_wayland_surface_get_height (surface),
|
||||
};
|
||||
cairo_region_intersect_rectangle (surface_region, &surface_rect);
|
||||
|
||||
@@ -591,6 +587,15 @@ parent_surface_state_applied (gpointer data,
|
||||
meta_wayland_subsurface_parent_state_applied (subsurface);
|
||||
}
|
||||
|
||||
void
|
||||
meta_wayland_surface_cache_pending_frame_callbacks (MetaWaylandSurface *surface,
|
||||
MetaWaylandPendingState *pending)
|
||||
{
|
||||
wl_list_insert_list (&surface->pending_frame_callback_list,
|
||||
&pending->frame_callback_list);
|
||||
wl_list_init (&pending->frame_callback_list);
|
||||
}
|
||||
|
||||
void
|
||||
meta_wayland_surface_apply_pending_state (MetaWaylandSurface *surface,
|
||||
MetaWaylandPendingState *pending)
|
||||
@@ -712,13 +717,7 @@ meta_wayland_surface_apply_pending_state (MetaWaylandSurface *surface,
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Since there is no role assigned to the surface yet, keep frame
|
||||
* callbacks queued until a role is assigned and we know how
|
||||
* the surface will be drawn.
|
||||
*/
|
||||
wl_list_insert_list (&surface->pending_frame_callback_list,
|
||||
&pending->frame_callback_list);
|
||||
wl_list_init (&pending->frame_callback_list);
|
||||
meta_wayland_surface_cache_pending_frame_callbacks (surface, pending);
|
||||
|
||||
if (pending->newly_attached)
|
||||
{
|
||||
@@ -1689,15 +1688,13 @@ meta_wayland_surface_calculate_input_region (MetaWaylandSurface *surface)
|
||||
{
|
||||
cairo_region_t *region;
|
||||
cairo_rectangle_int_t buffer_rect;
|
||||
CoglTexture *texture;
|
||||
|
||||
if (!surface->buffer_ref.buffer)
|
||||
return NULL;
|
||||
|
||||
texture = surface->buffer_ref.buffer->texture;
|
||||
buffer_rect = (cairo_rectangle_int_t) {
|
||||
.width = cogl_texture_get_width (texture) / surface->scale,
|
||||
.height = cogl_texture_get_height (texture) / surface->scale,
|
||||
.width = meta_wayland_surface_get_width (surface),
|
||||
.height = meta_wayland_surface_get_height (surface),
|
||||
};
|
||||
region = cairo_region_create_rectangle (&buffer_rect);
|
||||
|
||||
@@ -1747,3 +1744,37 @@ meta_wayland_surface_notify_geometry_changed (MetaWaylandSurface *surface)
|
||||
{
|
||||
g_signal_emit (surface, surface_signals[SURFACE_GEOMETRY_CHANGED], 0);
|
||||
}
|
||||
|
||||
int
|
||||
meta_wayland_surface_get_width (MetaWaylandSurface *surface)
|
||||
{
|
||||
MetaWaylandBuffer *buffer;
|
||||
|
||||
buffer = surface->buffer_ref.buffer;
|
||||
if (buffer)
|
||||
{
|
||||
CoglTexture *texture = meta_wayland_buffer_get_texture (buffer);
|
||||
return cogl_texture_get_width (texture) / surface->scale;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
meta_wayland_surface_get_height (MetaWaylandSurface *surface)
|
||||
{
|
||||
MetaWaylandBuffer *buffer;
|
||||
|
||||
buffer = surface->buffer_ref.buffer;
|
||||
if (buffer)
|
||||
{
|
||||
CoglTexture *texture = meta_wayland_buffer_get_texture (buffer);
|
||||
return cogl_texture_get_height (texture) / surface->scale;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@@ -256,6 +256,9 @@ MetaWaylandSurface *meta_wayland_surface_get_toplevel (MetaWaylandSurface *surfa
|
||||
|
||||
MetaWindow * meta_wayland_surface_get_toplevel_window (MetaWaylandSurface *surface);
|
||||
|
||||
void meta_wayland_surface_cache_pending_frame_callbacks (MetaWaylandSurface *surface,
|
||||
MetaWaylandPendingState *pending);
|
||||
|
||||
void meta_wayland_surface_queue_pending_frame_callbacks (MetaWaylandSurface *surface);
|
||||
|
||||
void meta_wayland_surface_queue_pending_state_frame_callbacks (MetaWaylandSurface *surface,
|
||||
@@ -302,4 +305,7 @@ MetaSurfaceActor * meta_wayland_surface_get_actor (MetaWaylandSurface *surface)
|
||||
|
||||
void meta_wayland_surface_notify_geometry_changed (MetaWaylandSurface *surface);
|
||||
|
||||
int meta_wayland_surface_get_width (MetaWaylandSurface *surface);
|
||||
int meta_wayland_surface_get_height (MetaWaylandSurface *surface);
|
||||
|
||||
#endif
|
||||
|
626
src/wayland/meta-wayland-text-input-legacy.c
Normal file
626
src/wayland/meta-wayland-text-input-legacy.c
Normal file
@@ -0,0 +1,626 @@
|
||||
/*
|
||||
* Copyright (C) 2017, 2018 Red Hat
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Author: Carlos Garnacho <carlosg@gnome.org>
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <wayland-server.h>
|
||||
|
||||
#include "gtk-text-input-server-protocol.h"
|
||||
#include "wayland/meta-wayland-private.h"
|
||||
#include "wayland/meta-wayland-seat.h"
|
||||
#include "wayland/meta-wayland-text-input-legacy.h"
|
||||
#include "wayland/meta-wayland-versions.h"
|
||||
|
||||
#define META_TYPE_WAYLAND_GTK_TEXT_INPUT_FOCUS (meta_wayland_gtk_text_input_focus_get_type ())
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_WAYLAND_PENDING_STATE_NONE = 0,
|
||||
META_WAYLAND_PENDING_STATE_INPUT_RECT = 1 << 0,
|
||||
META_WAYLAND_PENDING_STATE_CONTENT_TYPE = 1 << 1,
|
||||
META_WAYLAND_PENDING_STATE_SURROUNDING_TEXT = 1 << 2,
|
||||
} MetaWaylandTextInputPendingState;
|
||||
|
||||
typedef struct _MetaWaylandGtkTextInput MetaWaylandGtkTextInput;
|
||||
|
||||
struct _MetaWaylandGtkTextInput
|
||||
{
|
||||
MetaWaylandSeat *seat;
|
||||
ClutterInputFocus *input_focus;
|
||||
|
||||
struct wl_list resource_list;
|
||||
struct wl_list focus_resource_list;
|
||||
MetaWaylandSurface *surface;
|
||||
struct wl_listener surface_listener;
|
||||
uint32_t focus_serial;
|
||||
|
||||
MetaWaylandTextInputPendingState pending_state;
|
||||
|
||||
struct
|
||||
{
|
||||
char *text;
|
||||
uint32_t cursor;
|
||||
uint32_t anchor;
|
||||
} surrounding;
|
||||
|
||||
cairo_rectangle_int_t cursor_rect;
|
||||
|
||||
uint32_t content_type_hint;
|
||||
uint32_t content_type_purpose;
|
||||
};
|
||||
|
||||
struct _MetaWaylandGtkTextInputFocus
|
||||
{
|
||||
ClutterInputFocus parent_instance;
|
||||
MetaWaylandGtkTextInput *text_input;
|
||||
};
|
||||
|
||||
G_DECLARE_FINAL_TYPE (MetaWaylandGtkTextInputFocus,
|
||||
meta_wayland_gtk_text_input_focus,
|
||||
META, WAYLAND_GTK_TEXT_INPUT_FOCUS, ClutterInputFocus)
|
||||
G_DEFINE_TYPE (MetaWaylandGtkTextInputFocus, meta_wayland_gtk_text_input_focus,
|
||||
CLUTTER_TYPE_INPUT_FOCUS)
|
||||
|
||||
static void
|
||||
meta_wayland_text_input_focus_request_surrounding (ClutterInputFocus *focus)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input;
|
||||
|
||||
text_input = META_WAYLAND_GTK_TEXT_INPUT_FOCUS (focus)->text_input;
|
||||
clutter_input_focus_set_surrounding (focus,
|
||||
text_input->surrounding.text,
|
||||
text_input->surrounding.cursor,
|
||||
text_input->surrounding.anchor);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_text_input_focus_delete_surrounding (ClutterInputFocus *focus,
|
||||
guint cursor,
|
||||
guint len)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input;
|
||||
struct wl_resource *resource;
|
||||
|
||||
text_input = META_WAYLAND_GTK_TEXT_INPUT_FOCUS (focus)->text_input;
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
gtk_text_input_send_delete_surrounding_text (resource, cursor, len);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_text_input_focus_commit_text (ClutterInputFocus *focus,
|
||||
const gchar *text)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input;
|
||||
struct wl_resource *resource;
|
||||
|
||||
text_input = META_WAYLAND_GTK_TEXT_INPUT_FOCUS (focus)->text_input;
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
gtk_text_input_send_preedit_string (resource, NULL, 0);
|
||||
gtk_text_input_send_commit_string (resource, text);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_text_input_focus_set_preedit_text (ClutterInputFocus *focus,
|
||||
const gchar *text,
|
||||
guint cursor)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input;
|
||||
struct wl_resource *resource;
|
||||
|
||||
text_input = META_WAYLAND_GTK_TEXT_INPUT_FOCUS (focus)->text_input;
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
gtk_text_input_send_preedit_string (resource, text, cursor);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_gtk_text_input_focus_class_init (MetaWaylandGtkTextInputFocusClass *klass)
|
||||
{
|
||||
ClutterInputFocusClass *focus_class = CLUTTER_INPUT_FOCUS_CLASS (klass);
|
||||
|
||||
focus_class->request_surrounding = meta_wayland_text_input_focus_request_surrounding;
|
||||
focus_class->delete_surrounding = meta_wayland_text_input_focus_delete_surrounding;
|
||||
focus_class->commit_text = meta_wayland_text_input_focus_commit_text;
|
||||
focus_class->set_preedit_text = meta_wayland_text_input_focus_set_preedit_text;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_gtk_text_input_focus_init (MetaWaylandGtkTextInputFocus *focus)
|
||||
{
|
||||
}
|
||||
|
||||
static ClutterInputFocus *
|
||||
meta_wayland_text_input_focus_new (MetaWaylandGtkTextInput *text_input)
|
||||
{
|
||||
MetaWaylandGtkTextInputFocus *focus;
|
||||
|
||||
focus = g_object_new (META_TYPE_WAYLAND_GTK_TEXT_INPUT_FOCUS, NULL);
|
||||
focus->text_input = text_input;
|
||||
|
||||
return CLUTTER_INPUT_FOCUS (focus);
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_handle_focus_surface_destroy (struct wl_listener *listener,
|
||||
void *data)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input = wl_container_of (listener, text_input,
|
||||
surface_listener);
|
||||
|
||||
meta_wayland_gtk_text_input_set_focus (text_input, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
move_resources (struct wl_list *destination, struct wl_list *source)
|
||||
{
|
||||
wl_list_insert_list (destination, source);
|
||||
wl_list_init (source);
|
||||
}
|
||||
|
||||
static void
|
||||
move_resources_for_client (struct wl_list *destination,
|
||||
struct wl_list *source,
|
||||
struct wl_client *client)
|
||||
{
|
||||
struct wl_resource *resource, *tmp;
|
||||
wl_resource_for_each_safe (resource, tmp, source)
|
||||
{
|
||||
if (wl_resource_get_client (resource) == client)
|
||||
{
|
||||
wl_list_remove (wl_resource_get_link (resource));
|
||||
wl_list_insert (destination, wl_resource_get_link (resource));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_wayland_gtk_text_input_set_focus (MetaWaylandGtkTextInput *text_input,
|
||||
MetaWaylandSurface *surface)
|
||||
{
|
||||
if (text_input->surface == surface)
|
||||
return;
|
||||
|
||||
text_input->pending_state = META_WAYLAND_PENDING_STATE_NONE;
|
||||
|
||||
if (text_input->surface)
|
||||
{
|
||||
if (!wl_list_empty (&text_input->focus_resource_list))
|
||||
{
|
||||
ClutterInputFocus *focus = text_input->input_focus;
|
||||
ClutterInputMethod *input_method;
|
||||
struct wl_resource *resource;
|
||||
uint32_t serial;
|
||||
|
||||
if (clutter_input_focus_is_focused (focus))
|
||||
{
|
||||
input_method = clutter_backend_get_input_method (clutter_get_default_backend ());
|
||||
clutter_input_method_focus_out (input_method);
|
||||
}
|
||||
|
||||
serial = wl_display_next_serial (text_input->seat->wl_display);
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
gtk_text_input_send_leave (resource, serial,
|
||||
text_input->surface->resource);
|
||||
}
|
||||
|
||||
move_resources (&text_input->resource_list,
|
||||
&text_input->focus_resource_list);
|
||||
}
|
||||
|
||||
wl_list_remove (&text_input->surface_listener.link);
|
||||
text_input->surface = NULL;
|
||||
}
|
||||
|
||||
if (surface)
|
||||
{
|
||||
struct wl_resource *focus_surface_resource;
|
||||
|
||||
text_input->surface = surface;
|
||||
focus_surface_resource = text_input->surface->resource;
|
||||
wl_resource_add_destroy_listener (focus_surface_resource,
|
||||
&text_input->surface_listener);
|
||||
|
||||
move_resources_for_client (&text_input->focus_resource_list,
|
||||
&text_input->resource_list,
|
||||
wl_resource_get_client (focus_surface_resource));
|
||||
|
||||
if (!wl_list_empty (&text_input->focus_resource_list))
|
||||
{
|
||||
struct wl_resource *resource;
|
||||
|
||||
text_input->focus_serial =
|
||||
wl_display_next_serial (text_input->seat->wl_display);
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
gtk_text_input_send_enter (resource, text_input->focus_serial,
|
||||
surface->resource);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
unbind_resource (struct wl_resource *resource)
|
||||
{
|
||||
wl_list_remove (wl_resource_get_link (resource));
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_destroy (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
wl_resource_destroy (resource);
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_enable (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
uint32_t serial,
|
||||
uint32_t flags)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
ClutterInputFocus *focus = text_input->input_focus;
|
||||
ClutterInputMethod *input_method;
|
||||
gboolean show_preedit;
|
||||
|
||||
if (serial != text_input->focus_serial)
|
||||
return;
|
||||
|
||||
if (!clutter_input_focus_is_focused (focus))
|
||||
{
|
||||
input_method = clutter_backend_get_input_method (clutter_get_default_backend ());
|
||||
if (input_method)
|
||||
clutter_input_method_focus_in (input_method, focus);
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
show_preedit = (flags & GTK_TEXT_INPUT_ENABLE_FLAGS_CAN_SHOW_PREEDIT) != 0;
|
||||
clutter_input_focus_set_can_show_preedit (focus, show_preedit);
|
||||
|
||||
if (flags & GTK_TEXT_INPUT_ENABLE_FLAGS_TOGGLE_INPUT_PANEL)
|
||||
clutter_input_focus_request_toggle_input_panel (focus);
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_disable (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
ClutterInputFocus *focus = text_input->input_focus;
|
||||
ClutterInputMethod *input_method;
|
||||
|
||||
if (!clutter_input_focus_is_focused (focus))
|
||||
return;
|
||||
|
||||
clutter_input_focus_reset (text_input->input_focus);
|
||||
text_input->pending_state = META_WAYLAND_PENDING_STATE_NONE;
|
||||
|
||||
input_method = clutter_backend_get_input_method (clutter_get_default_backend ());
|
||||
clutter_input_method_focus_out (input_method);
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_set_surrounding_text (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
const char *text,
|
||||
int32_t cursor,
|
||||
int32_t anchor)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
|
||||
g_free (text_input->surrounding.text);
|
||||
text_input->surrounding.text = g_strdup (text);
|
||||
text_input->surrounding.cursor = cursor;
|
||||
text_input->surrounding.anchor = anchor;
|
||||
text_input->pending_state |= META_WAYLAND_PENDING_STATE_SURROUNDING_TEXT;
|
||||
}
|
||||
|
||||
static ClutterInputContentHintFlags
|
||||
translate_hints (uint32_t hints)
|
||||
{
|
||||
ClutterInputContentHintFlags clutter_hints = 0;
|
||||
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_COMPLETION)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_COMPLETION;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_SPELLCHECK)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_SPELLCHECK;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_LOWERCASE)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_LOWERCASE;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_UPPERCASE)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_UPPERCASE;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_TITLECASE)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_TITLECASE;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_HIDDEN_TEXT)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_HIDDEN_TEXT;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_SENSITIVE_DATA)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_SENSITIVE_DATA;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_LATIN)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_LATIN;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_MULTILINE)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_MULTILINE;
|
||||
|
||||
return clutter_hints;
|
||||
}
|
||||
|
||||
static ClutterInputContentPurpose
|
||||
translate_purpose (uint32_t purpose)
|
||||
{
|
||||
switch (purpose)
|
||||
{
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_NORMAL:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_NORMAL;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_ALPHA:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_ALPHA;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_DIGITS:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_DIGITS;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_NUMBER:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_NUMBER;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_PHONE:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_PHONE;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_URL:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_URL;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_EMAIL:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_EMAIL;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_NAME:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_NAME;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_PASSWORD:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_PASSWORD;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_DATE:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_DATE;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_TIME:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_TIME;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_DATETIME:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_DATETIME;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_TERMINAL:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_TERMINAL;
|
||||
}
|
||||
|
||||
g_warn_if_reached ();
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_NORMAL;
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_set_content_type (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
uint32_t hint,
|
||||
uint32_t purpose)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
|
||||
if (!text_input->surface)
|
||||
return;
|
||||
|
||||
text_input->content_type_hint = hint;
|
||||
text_input->content_type_purpose = purpose;
|
||||
text_input->pending_state |= META_WAYLAND_PENDING_STATE_CONTENT_TYPE;
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_set_cursor_rectangle (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
int32_t x,
|
||||
int32_t y,
|
||||
int32_t width,
|
||||
int32_t height)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
|
||||
if (!text_input->surface)
|
||||
return;
|
||||
|
||||
text_input->cursor_rect = (cairo_rectangle_int_t) { x, y, width, height };
|
||||
text_input->pending_state |= META_WAYLAND_PENDING_STATE_INPUT_RECT;
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_commit_state (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
ClutterInputFocus *focus = text_input->input_focus;
|
||||
|
||||
if (!clutter_input_focus_is_focused (focus))
|
||||
return;
|
||||
if (text_input->surface == NULL)
|
||||
return;
|
||||
|
||||
if (text_input->pending_state & META_WAYLAND_PENDING_STATE_CONTENT_TYPE)
|
||||
{
|
||||
clutter_input_focus_set_content_hints (text_input->input_focus,
|
||||
translate_hints (text_input->content_type_hint));
|
||||
clutter_input_focus_set_content_purpose (text_input->input_focus,
|
||||
translate_purpose (text_input->content_type_purpose));
|
||||
}
|
||||
|
||||
if (text_input->pending_state & META_WAYLAND_PENDING_STATE_SURROUNDING_TEXT)
|
||||
{
|
||||
clutter_input_focus_set_surrounding (text_input->input_focus,
|
||||
text_input->surrounding.text,
|
||||
text_input->surrounding.cursor,
|
||||
text_input->surrounding.anchor);
|
||||
}
|
||||
|
||||
if (text_input->pending_state & META_WAYLAND_PENDING_STATE_INPUT_RECT)
|
||||
{
|
||||
ClutterRect cursor_rect;
|
||||
float x1, y1, x2, y2;
|
||||
cairo_rectangle_int_t rect;
|
||||
|
||||
rect = text_input->cursor_rect;
|
||||
meta_wayland_surface_get_absolute_coordinates (text_input->surface,
|
||||
rect.x, rect.y, &x1, &y1);
|
||||
meta_wayland_surface_get_absolute_coordinates (text_input->surface,
|
||||
rect.x + rect.width,
|
||||
rect.y + rect.height,
|
||||
&x2, &y2);
|
||||
|
||||
clutter_rect_init (&cursor_rect, x1, y1, x2 - x1, y2 - y1);
|
||||
clutter_input_focus_set_cursor_location (text_input->input_focus,
|
||||
&cursor_rect);
|
||||
}
|
||||
|
||||
text_input->pending_state = META_WAYLAND_PENDING_STATE_NONE;
|
||||
}
|
||||
|
||||
static struct gtk_text_input_interface meta_text_input_interface = {
|
||||
text_input_destroy,
|
||||
text_input_enable,
|
||||
text_input_disable,
|
||||
text_input_set_surrounding_text,
|
||||
text_input_set_content_type,
|
||||
text_input_set_cursor_rectangle,
|
||||
text_input_commit_state,
|
||||
};
|
||||
|
||||
MetaWaylandGtkTextInput *
|
||||
meta_wayland_gtk_text_input_new (MetaWaylandSeat *seat)
|
||||
{
|
||||
MetaWaylandGtkTextInput *text_input;
|
||||
|
||||
text_input = g_new0 (MetaWaylandGtkTextInput, 1);
|
||||
text_input->input_focus = meta_wayland_text_input_focus_new (text_input);
|
||||
text_input->seat = seat;
|
||||
|
||||
wl_list_init (&text_input->resource_list);
|
||||
wl_list_init (&text_input->focus_resource_list);
|
||||
text_input->surface_listener.notify = text_input_handle_focus_surface_destroy;
|
||||
|
||||
return text_input;
|
||||
}
|
||||
|
||||
void
|
||||
meta_wayland_gtk_text_input_destroy (MetaWaylandGtkTextInput *text_input)
|
||||
{
|
||||
meta_wayland_gtk_text_input_set_focus (text_input, NULL);
|
||||
g_object_unref (text_input->input_focus);
|
||||
g_free (text_input);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_text_input_create_new_resource (MetaWaylandGtkTextInput *text_input,
|
||||
struct wl_client *client,
|
||||
struct wl_resource *seat_resource,
|
||||
uint32_t id)
|
||||
{
|
||||
struct wl_resource *text_input_resource;
|
||||
|
||||
text_input_resource = wl_resource_create (client,
|
||||
>k_text_input_interface,
|
||||
META_GTK_TEXT_INPUT_VERSION,
|
||||
id);
|
||||
|
||||
wl_resource_set_implementation (text_input_resource,
|
||||
&meta_text_input_interface,
|
||||
text_input, unbind_resource);
|
||||
|
||||
if (text_input->surface &&
|
||||
wl_resource_get_client (text_input->surface->resource) == client)
|
||||
{
|
||||
wl_list_insert (&text_input->focus_resource_list,
|
||||
wl_resource_get_link (text_input_resource));
|
||||
|
||||
gtk_text_input_send_enter (text_input_resource,
|
||||
text_input->focus_serial,
|
||||
text_input->surface->resource);
|
||||
}
|
||||
else
|
||||
{
|
||||
wl_list_insert (&text_input->resource_list,
|
||||
wl_resource_get_link (text_input_resource));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_manager_destroy (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
wl_resource_destroy (resource);
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_manager_get_text_input (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
uint32_t id,
|
||||
struct wl_resource *seat_resource)
|
||||
{
|
||||
MetaWaylandSeat *seat = wl_resource_get_user_data (seat_resource);
|
||||
|
||||
meta_wayland_text_input_create_new_resource (seat->gtk_text_input, client,
|
||||
seat_resource, id);
|
||||
}
|
||||
|
||||
static struct gtk_text_input_manager_interface meta_text_input_manager_interface = {
|
||||
text_input_manager_destroy,
|
||||
text_input_manager_get_text_input,
|
||||
};
|
||||
|
||||
static void
|
||||
bind_text_input (struct wl_client *client,
|
||||
void *data,
|
||||
uint32_t version,
|
||||
uint32_t id)
|
||||
{
|
||||
struct wl_resource *resource;
|
||||
|
||||
resource = wl_resource_create (client,
|
||||
>k_text_input_manager_interface,
|
||||
META_GTK_TEXT_INPUT_VERSION,
|
||||
id);
|
||||
wl_resource_set_implementation (resource,
|
||||
&meta_text_input_manager_interface,
|
||||
NULL, NULL);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_wayland_gtk_text_input_init (MetaWaylandCompositor *compositor)
|
||||
{
|
||||
return (wl_global_create (compositor->wayland_display,
|
||||
>k_text_input_manager_interface,
|
||||
META_GTK_TEXT_INPUT_VERSION,
|
||||
compositor->seat->gtk_text_input,
|
||||
bind_text_input) != NULL);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_wayland_gtk_text_input_handle_event (MetaWaylandGtkTextInput *text_input,
|
||||
const ClutterEvent *event)
|
||||
{
|
||||
if (!text_input->surface ||
|
||||
!clutter_input_focus_is_focused (text_input->input_focus))
|
||||
return FALSE;
|
||||
|
||||
return clutter_input_focus_filter_key_event (text_input->input_focus,
|
||||
(const ClutterKeyEvent *) event);
|
||||
}
|
42
src/wayland/meta-wayland-text-input-legacy.h
Normal file
42
src/wayland/meta-wayland-text-input-legacy.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (C) 2017 Red Hat
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Author: Carlos Garnacho <carlosg@gnome.org>
|
||||
*/
|
||||
|
||||
#ifndef META_WAYLAND_GTK_TEXT_INPUT_H
|
||||
#define META_WAYLAND_GTK_TEXT_INPUT_H
|
||||
|
||||
#include <wayland-server.h>
|
||||
#include "wayland/meta-wayland-types.h"
|
||||
#include "meta/window.h"
|
||||
|
||||
typedef struct _MetaWaylandGtkTextInput MetaWaylandGtkTextInput;
|
||||
|
||||
MetaWaylandGtkTextInput * meta_wayland_gtk_text_input_new (MetaWaylandSeat *seat);
|
||||
void meta_wayland_gtk_text_input_destroy (MetaWaylandGtkTextInput *text_input);
|
||||
|
||||
gboolean meta_wayland_gtk_text_input_init (MetaWaylandCompositor *compositor);
|
||||
|
||||
void meta_wayland_gtk_text_input_set_focus (MetaWaylandGtkTextInput *text_input,
|
||||
MetaWaylandSurface *surface);
|
||||
|
||||
gboolean meta_wayland_gtk_text_input_handle_event (MetaWaylandGtkTextInput *text_input,
|
||||
const ClutterEvent *event);
|
||||
|
||||
#endif /* META_WAYLAND_GTK_TEXT_INPUT_H */
|
@@ -23,7 +23,7 @@
|
||||
|
||||
#include <wayland-server.h>
|
||||
|
||||
#include "gtk-text-input-server-protocol.h"
|
||||
#include "text-input-unstable-v3-server-protocol.h"
|
||||
#include "wayland/meta-wayland-private.h"
|
||||
#include "wayland/meta-wayland-seat.h"
|
||||
#include "wayland/meta-wayland-text-input.h"
|
||||
@@ -37,6 +37,8 @@ typedef enum
|
||||
META_WAYLAND_PENDING_STATE_INPUT_RECT = 1 << 0,
|
||||
META_WAYLAND_PENDING_STATE_CONTENT_TYPE = 1 << 1,
|
||||
META_WAYLAND_PENDING_STATE_SURROUNDING_TEXT = 1 << 2,
|
||||
META_WAYLAND_PENDING_STATE_CHANGE_CAUSE = 1 << 3,
|
||||
META_WAYLAND_PENDING_STATE_ENABLED = 1 << 4,
|
||||
} MetaWaylandTextInputPendingState;
|
||||
|
||||
typedef struct _MetaWaylandTextInput MetaWaylandTextInput;
|
||||
@@ -50,10 +52,11 @@ struct _MetaWaylandTextInput
|
||||
struct wl_list focus_resource_list;
|
||||
MetaWaylandSurface *surface;
|
||||
struct wl_listener surface_listener;
|
||||
uint32_t focus_serial;
|
||||
|
||||
MetaWaylandTextInputPendingState pending_state;
|
||||
|
||||
GHashTable *resource_serials;
|
||||
|
||||
struct
|
||||
{
|
||||
char *text;
|
||||
@@ -65,6 +68,8 @@ struct _MetaWaylandTextInput
|
||||
|
||||
uint32_t content_type_hint;
|
||||
uint32_t content_type_purpose;
|
||||
uint32_t text_change_cause;
|
||||
gboolean enabled;
|
||||
};
|
||||
|
||||
struct _MetaWaylandTextInputFocus
|
||||
@@ -90,6 +95,25 @@ meta_wayland_text_input_focus_request_surrounding (ClutterInputFocus *focus)
|
||||
text_input->surrounding.anchor);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
lookup_serial (MetaWaylandTextInput *text_input,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
return GPOINTER_TO_UINT (g_hash_table_lookup (text_input->resource_serials,
|
||||
resource));
|
||||
}
|
||||
|
||||
static void
|
||||
increment_serial (MetaWaylandTextInput *text_input,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
uint32_t serial;
|
||||
|
||||
serial = lookup_serial (text_input, resource);
|
||||
g_hash_table_insert (text_input->resource_serials, resource,
|
||||
GUINT_TO_POINTER (serial + 1));
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_text_input_focus_delete_surrounding (ClutterInputFocus *focus,
|
||||
guint cursor,
|
||||
@@ -102,7 +126,9 @@ meta_wayland_text_input_focus_delete_surrounding (ClutterInputFocus *focus,
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
gtk_text_input_send_delete_surrounding_text (resource, cursor, len);
|
||||
zwp_text_input_v3_send_delete_surrounding_text (resource, cursor, len);
|
||||
zwp_text_input_v3_send_done (resource,
|
||||
lookup_serial (text_input, resource));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,8 +143,10 @@ meta_wayland_text_input_focus_commit_text (ClutterInputFocus *focus,
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
gtk_text_input_send_preedit_string (resource, NULL, 0);
|
||||
gtk_text_input_send_commit_string (resource, text);
|
||||
zwp_text_input_v3_send_preedit_string (resource, NULL, 0, 0);
|
||||
zwp_text_input_v3_send_commit_string (resource, text);
|
||||
zwp_text_input_v3_send_done (resource,
|
||||
lookup_serial (text_input, resource));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,7 +162,9 @@ meta_wayland_text_input_focus_set_preedit_text (ClutterInputFocus *focus,
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
gtk_text_input_send_preedit_string (resource, text, cursor);
|
||||
zwp_text_input_v3_send_preedit_string (resource, text, cursor, cursor);
|
||||
zwp_text_input_v3_send_done (resource,
|
||||
lookup_serial (text_input, resource));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,7 +244,6 @@ meta_wayland_text_input_set_focus (MetaWaylandTextInput *text_input,
|
||||
ClutterInputFocus *focus = text_input->input_focus;
|
||||
ClutterInputMethod *input_method;
|
||||
struct wl_resource *resource;
|
||||
uint32_t serial;
|
||||
|
||||
if (clutter_input_focus_is_focused (focus))
|
||||
{
|
||||
@@ -222,12 +251,10 @@ meta_wayland_text_input_set_focus (MetaWaylandTextInput *text_input,
|
||||
clutter_input_method_focus_out (input_method);
|
||||
}
|
||||
|
||||
serial = wl_display_next_serial (text_input->seat->wl_display);
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
gtk_text_input_send_leave (resource, serial,
|
||||
text_input->surface->resource);
|
||||
zwp_text_input_v3_send_leave (resource,
|
||||
text_input->surface->resource);
|
||||
}
|
||||
|
||||
move_resources (&text_input->resource_list,
|
||||
@@ -255,21 +282,20 @@ meta_wayland_text_input_set_focus (MetaWaylandTextInput *text_input,
|
||||
{
|
||||
struct wl_resource *resource;
|
||||
|
||||
text_input->focus_serial =
|
||||
wl_display_next_serial (text_input->seat->wl_display);
|
||||
|
||||
wl_resource_for_each (resource, &text_input->focus_resource_list)
|
||||
{
|
||||
gtk_text_input_send_enter (resource, text_input->focus_serial,
|
||||
surface->resource);
|
||||
zwp_text_input_v3_send_enter (resource, surface->resource);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
unbind_resource (struct wl_resource *resource)
|
||||
text_input_destructor (struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
|
||||
g_hash_table_remove (text_input->resource_serials, resource);
|
||||
wl_list_remove (wl_resource_get_link (resource));
|
||||
}
|
||||
|
||||
@@ -282,32 +308,12 @@ text_input_destroy (struct wl_client *client,
|
||||
|
||||
static void
|
||||
text_input_enable (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
uint32_t serial,
|
||||
uint32_t flags)
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
ClutterInputFocus *focus = text_input->input_focus;
|
||||
ClutterInputMethod *input_method;
|
||||
gboolean show_preedit;
|
||||
|
||||
if (serial != text_input->focus_serial)
|
||||
return;
|
||||
|
||||
if (!clutter_input_focus_is_focused (focus))
|
||||
{
|
||||
input_method = clutter_backend_get_input_method (clutter_get_default_backend ());
|
||||
if (input_method)
|
||||
clutter_input_method_focus_in (input_method, focus);
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
show_preedit = (flags & GTK_TEXT_INPUT_ENABLE_FLAGS_CAN_SHOW_PREEDIT) != 0;
|
||||
clutter_input_focus_set_can_show_preedit (focus, show_preedit);
|
||||
|
||||
if (flags & GTK_TEXT_INPUT_ENABLE_FLAGS_TOGGLE_INPUT_PANEL)
|
||||
clutter_input_focus_request_toggle_input_panel (focus);
|
||||
text_input->enabled = TRUE;
|
||||
text_input->pending_state |= META_WAYLAND_PENDING_STATE_ENABLED;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -315,17 +321,9 @@ text_input_disable (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
ClutterInputFocus *focus = text_input->input_focus;
|
||||
ClutterInputMethod *input_method;
|
||||
|
||||
if (!clutter_input_focus_is_focused (focus))
|
||||
return;
|
||||
|
||||
clutter_input_focus_reset (text_input->input_focus);
|
||||
text_input->pending_state = META_WAYLAND_PENDING_STATE_NONE;
|
||||
|
||||
input_method = clutter_backend_get_input_method (clutter_get_default_backend ());
|
||||
clutter_input_method_focus_out (input_method);
|
||||
text_input->enabled = FALSE;
|
||||
text_input->pending_state |= META_WAYLAND_PENDING_STATE_ENABLED;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -344,30 +342,41 @@ text_input_set_surrounding_text (struct wl_client *client,
|
||||
text_input->pending_state |= META_WAYLAND_PENDING_STATE_SURROUNDING_TEXT;
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_set_text_change_cause (struct wl_client *client,
|
||||
struct wl_resource *resource,
|
||||
uint32_t cause)
|
||||
{
|
||||
MetaWaylandTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
|
||||
text_input->text_change_cause = cause;
|
||||
text_input->pending_state |= META_WAYLAND_PENDING_STATE_CHANGE_CAUSE;
|
||||
}
|
||||
|
||||
static ClutterInputContentHintFlags
|
||||
translate_hints (uint32_t hints)
|
||||
{
|
||||
ClutterInputContentHintFlags clutter_hints = 0;
|
||||
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_COMPLETION)
|
||||
if (hints & ZWP_TEXT_INPUT_V3_CONTENT_HINT_COMPLETION)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_COMPLETION;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_SPELLCHECK)
|
||||
if (hints & ZWP_TEXT_INPUT_V3_CONTENT_HINT_SPELLCHECK)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_SPELLCHECK;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION)
|
||||
if (hints & ZWP_TEXT_INPUT_V3_CONTENT_HINT_AUTO_CAPITALIZATION)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_LOWERCASE)
|
||||
if (hints & ZWP_TEXT_INPUT_V3_CONTENT_HINT_LOWERCASE)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_LOWERCASE;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_UPPERCASE)
|
||||
if (hints & ZWP_TEXT_INPUT_V3_CONTENT_HINT_UPPERCASE)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_UPPERCASE;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_TITLECASE)
|
||||
if (hints & ZWP_TEXT_INPUT_V3_CONTENT_HINT_TITLECASE)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_TITLECASE;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_HIDDEN_TEXT)
|
||||
if (hints & ZWP_TEXT_INPUT_V3_CONTENT_HINT_HIDDEN_TEXT)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_HIDDEN_TEXT;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_SENSITIVE_DATA)
|
||||
if (hints & ZWP_TEXT_INPUT_V3_CONTENT_HINT_SENSITIVE_DATA)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_SENSITIVE_DATA;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_LATIN)
|
||||
if (hints & ZWP_TEXT_INPUT_V3_CONTENT_HINT_LATIN)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_LATIN;
|
||||
if (hints & GTK_TEXT_INPUT_CONTENT_HINT_MULTILINE)
|
||||
if (hints & ZWP_TEXT_INPUT_V3_CONTENT_HINT_MULTILINE)
|
||||
clutter_hints |= CLUTTER_INPUT_CONTENT_HINT_MULTILINE;
|
||||
|
||||
return clutter_hints;
|
||||
@@ -378,31 +387,31 @@ translate_purpose (uint32_t purpose)
|
||||
{
|
||||
switch (purpose)
|
||||
{
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_NORMAL:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_NORMAL:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_NORMAL;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_ALPHA:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_ALPHA:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_ALPHA;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_DIGITS:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_DIGITS:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_DIGITS;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_NUMBER:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_NUMBER:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_NUMBER;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_PHONE:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_PHONE:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_PHONE;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_URL:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_URL:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_URL;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_EMAIL:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_EMAIL:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_EMAIL;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_NAME:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_NAME:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_NAME;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_PASSWORD:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_PASSWORD:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_PASSWORD;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_DATE:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_DATE:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_DATE;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_TIME:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_TIME:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_TIME;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_DATETIME:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_DATETIME:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_DATETIME;
|
||||
case GTK_TEXT_INPUT_CONTENT_PURPOSE_TERMINAL:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_TERMINAL:
|
||||
return CLUTTER_INPUT_CONTENT_PURPOSE_TERMINAL;
|
||||
}
|
||||
|
||||
@@ -443,18 +452,60 @@ text_input_set_cursor_rectangle (struct wl_client *client,
|
||||
text_input->pending_state |= META_WAYLAND_PENDING_STATE_INPUT_RECT;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_text_input_reset (MetaWaylandTextInput *text_input)
|
||||
{
|
||||
g_clear_pointer (&text_input->surrounding.text, g_free);
|
||||
text_input->content_type_hint = ZWP_TEXT_INPUT_V3_CONTENT_HINT_NONE;
|
||||
text_input->content_type_purpose = ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_NORMAL;
|
||||
text_input->text_change_cause = ZWP_TEXT_INPUT_V3_CHANGE_CAUSE_INPUT_METHOD;
|
||||
text_input->cursor_rect = (cairo_rectangle_int_t) { 0, 0, 0, 0 };
|
||||
}
|
||||
|
||||
static void
|
||||
text_input_commit_state (struct wl_client *client,
|
||||
struct wl_resource *resource)
|
||||
{
|
||||
MetaWaylandTextInput *text_input = wl_resource_get_user_data (resource);
|
||||
ClutterInputFocus *focus = text_input->input_focus;
|
||||
gboolean toggle_panel = FALSE;
|
||||
|
||||
increment_serial (text_input, resource);
|
||||
|
||||
if (!clutter_input_focus_is_focused (focus))
|
||||
return;
|
||||
if (text_input->surface == NULL)
|
||||
return;
|
||||
|
||||
if (text_input->pending_state & META_WAYLAND_PENDING_STATE_ENABLED)
|
||||
{
|
||||
ClutterInputMethod *input_method;
|
||||
|
||||
input_method = clutter_backend_get_input_method (clutter_get_default_backend ());
|
||||
|
||||
if (text_input->enabled)
|
||||
{
|
||||
meta_wayland_text_input_reset (text_input);
|
||||
|
||||
if (!clutter_input_focus_is_focused (focus))
|
||||
{
|
||||
if (input_method)
|
||||
clutter_input_method_focus_in (input_method, focus);
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
clutter_input_focus_set_can_show_preedit (focus, TRUE);
|
||||
toggle_panel = TRUE;
|
||||
}
|
||||
else if (clutter_input_focus_is_focused (focus))
|
||||
{
|
||||
text_input->pending_state = META_WAYLAND_PENDING_STATE_NONE;
|
||||
clutter_input_focus_reset (text_input->input_focus);
|
||||
clutter_input_method_focus_out (input_method);
|
||||
}
|
||||
}
|
||||
else if (!clutter_input_focus_is_focused (focus))
|
||||
return;
|
||||
|
||||
if (text_input->pending_state & META_WAYLAND_PENDING_STATE_CONTENT_TYPE)
|
||||
{
|
||||
clutter_input_focus_set_content_hints (text_input->input_focus,
|
||||
@@ -491,13 +542,17 @@ text_input_commit_state (struct wl_client *client,
|
||||
}
|
||||
|
||||
text_input->pending_state = META_WAYLAND_PENDING_STATE_NONE;
|
||||
|
||||
if (toggle_panel)
|
||||
clutter_input_focus_request_toggle_input_panel (focus);
|
||||
}
|
||||
|
||||
static struct gtk_text_input_interface meta_text_input_interface = {
|
||||
static struct zwp_text_input_v3_interface meta_text_input_interface = {
|
||||
text_input_destroy,
|
||||
text_input_enable,
|
||||
text_input_disable,
|
||||
text_input_set_surrounding_text,
|
||||
text_input_set_text_change_cause,
|
||||
text_input_set_content_type,
|
||||
text_input_set_cursor_rectangle,
|
||||
text_input_commit_state,
|
||||
@@ -516,6 +571,8 @@ meta_wayland_text_input_new (MetaWaylandSeat *seat)
|
||||
wl_list_init (&text_input->focus_resource_list);
|
||||
text_input->surface_listener.notify = text_input_handle_focus_surface_destroy;
|
||||
|
||||
text_input->resource_serials = g_hash_table_new (NULL, NULL);
|
||||
|
||||
return text_input;
|
||||
}
|
||||
|
||||
@@ -524,6 +581,7 @@ meta_wayland_text_input_destroy (MetaWaylandTextInput *text_input)
|
||||
{
|
||||
meta_wayland_text_input_set_focus (text_input, NULL);
|
||||
g_object_unref (text_input->input_focus);
|
||||
g_hash_table_destroy (text_input->resource_serials);
|
||||
g_free (text_input);
|
||||
}
|
||||
|
||||
@@ -536,13 +594,13 @@ meta_wayland_text_input_create_new_resource (MetaWaylandTextInput *text_input,
|
||||
struct wl_resource *text_input_resource;
|
||||
|
||||
text_input_resource = wl_resource_create (client,
|
||||
>k_text_input_interface,
|
||||
META_GTK_TEXT_INPUT_VERSION,
|
||||
&zwp_text_input_v3_interface,
|
||||
META_ZWP_TEXT_INPUT_V3_VERSION,
|
||||
id);
|
||||
|
||||
wl_resource_set_implementation (text_input_resource,
|
||||
&meta_text_input_interface,
|
||||
text_input, unbind_resource);
|
||||
text_input, text_input_destructor);
|
||||
|
||||
if (text_input->surface &&
|
||||
wl_resource_get_client (text_input->surface->resource) == client)
|
||||
@@ -550,9 +608,8 @@ meta_wayland_text_input_create_new_resource (MetaWaylandTextInput *text_input,
|
||||
wl_list_insert (&text_input->focus_resource_list,
|
||||
wl_resource_get_link (text_input_resource));
|
||||
|
||||
gtk_text_input_send_enter (text_input_resource,
|
||||
text_input->focus_serial,
|
||||
text_input->surface->resource);
|
||||
zwp_text_input_v3_send_enter (text_input_resource,
|
||||
text_input->surface->resource);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -580,7 +637,7 @@ text_input_manager_get_text_input (struct wl_client *client,
|
||||
seat_resource, id);
|
||||
}
|
||||
|
||||
static struct gtk_text_input_manager_interface meta_text_input_manager_interface = {
|
||||
static struct zwp_text_input_manager_v3_interface meta_text_input_manager_interface = {
|
||||
text_input_manager_destroy,
|
||||
text_input_manager_get_text_input,
|
||||
};
|
||||
@@ -594,8 +651,8 @@ bind_text_input (struct wl_client *client,
|
||||
struct wl_resource *resource;
|
||||
|
||||
resource = wl_resource_create (client,
|
||||
>k_text_input_manager_interface,
|
||||
META_GTK_TEXT_INPUT_VERSION,
|
||||
&zwp_text_input_manager_v3_interface,
|
||||
META_ZWP_TEXT_INPUT_V3_VERSION,
|
||||
id);
|
||||
wl_resource_set_implementation (resource,
|
||||
&meta_text_input_manager_interface,
|
||||
@@ -606,8 +663,8 @@ gboolean
|
||||
meta_wayland_text_input_init (MetaWaylandCompositor *compositor)
|
||||
{
|
||||
return (wl_global_create (compositor->wayland_display,
|
||||
>k_text_input_manager_interface,
|
||||
META_GTK_TEXT_INPUT_VERSION,
|
||||
&zwp_text_input_manager_v3_interface,
|
||||
META_ZWP_TEXT_INPUT_V3_VERSION,
|
||||
compositor->seat->text_input,
|
||||
bind_text_input) != NULL);
|
||||
}
|
||||
|
@@ -549,8 +549,8 @@ meta_wayland_touch_disable (MetaWaylandTouch *touch)
|
||||
|
||||
meta_wayland_touch_cancel (touch);
|
||||
|
||||
g_clear_pointer (&touch->touch_surfaces, (GDestroyNotify) g_hash_table_unref);
|
||||
g_clear_pointer (&touch->touches, (GDestroyNotify) g_hash_table_unref);
|
||||
g_clear_pointer (&touch->touch_surfaces, g_hash_table_unref);
|
||||
g_clear_pointer (&touch->touches, g_hash_table_unref);
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -53,5 +53,6 @@
|
||||
#define META_ZXDG_OUTPUT_V1_VERSION 1
|
||||
#define META_ZWP_XWAYLAND_KEYBOARD_GRAB_V1_VERSION 1
|
||||
#define META_GTK_TEXT_INPUT_VERSION 1
|
||||
#define META_ZWP_TEXT_INPUT_V3_VERSION 1
|
||||
|
||||
#endif
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user