Compare commits
229 Commits
wip/kms-co
...
3.34.5
Author | SHA1 | Date | |
---|---|---|---|
1a3dfd8110 | |||
aeb781acd6 | |||
092591b872 | |||
57992f37cc | |||
7655a63af6 | |||
a5b5e95ad9 | |||
11da42b2f8 | |||
2709a4ffb1 | |||
c65db40178 | |||
011ff15603 | |||
c3d2f3f399 | |||
053bb5901a | |||
0bce4323c7 | |||
b2bc345463 | |||
2235629d25 | |||
59da900a45 | |||
0e0dae2774 | |||
4959ae8bc4 | |||
aea5541ffa | |||
47fe7ac25b | |||
d35d7fb618 | |||
666bd25005 | |||
208fd1b083 | |||
12152c7edb | |||
de7782221a | |||
651d2a57f8 | |||
e18aa564b0 | |||
4cc5b85c5d | |||
ca5ed7369d | |||
5ae317e004 | |||
21dca32934 | |||
41c6e1375b | |||
d38c30c128 | |||
59e9b073a5 | |||
6b6e724425 | |||
156dd576f4 | |||
4d0a331cfe | |||
01d93f2819 | |||
be777dbd79 | |||
a9a0110818 | |||
fd7d0fb339 | |||
1671692590 | |||
06fc756f0f | |||
81b7196ad9 | |||
e91b12fdf9 | |||
f52c0a3bf7 | |||
78a45e1813 | |||
4947e8ae5b | |||
5724310899 | |||
9772f084bf | |||
8b087cfe56 | |||
c05328f76a | |||
868a617907 | |||
6f02d2ead0 | |||
fc77efbcd7 | |||
c0e76186da | |||
1b75d78c72 | |||
cbbffd1db7 | |||
06202c342b | |||
9c372388da | |||
7e741fe2d2 | |||
edb618b2a4 | |||
e2d6b33b61 | |||
eac37b17b0 | |||
d78585d68a | |||
c462544f78 | |||
eb78b7d0d1 | |||
cc00e55513 | |||
a14e7b441c | |||
403d8fcc66 | |||
7e5366f233 | |||
cf78598974 | |||
7c1f3498fe | |||
598be2b1d8 | |||
a8776a9634 | |||
4b238c10f4 | |||
6fa860481c | |||
4ba3c4537e | |||
1f56514e40 | |||
5e1bbb770e | |||
3df4348f23 | |||
9ed33dc72e | |||
8cb0646b62 | |||
c9a05d4581 | |||
98a1630fa2 | |||
4c48c859ea | |||
d7bdaeeb82 | |||
3564b0df4a | |||
34b5a07d58 | |||
a112d7a10e | |||
51f7e8c4dd | |||
f4574ea36f | |||
2301cde8f7 | |||
ef2f5f07f0 | |||
85f5db7e73 | |||
c0037305eb | |||
ff885fea31 | |||
bf17e04010 | |||
a22731e2b2 | |||
b6ed7d6781 | |||
5c1be2233d | |||
e1751ad9ee | |||
84cc89e19a | |||
ea4665bf51 | |||
227d272049 | |||
e53db92a7b | |||
dd2b1278a0 | |||
f2e2fcf758 | |||
dfd44ff971 | |||
943b069996 | |||
2a56de80a2 | |||
69a0c1dc80 | |||
1b4709794e | |||
1cc249fe18 | |||
446bd04b6c | |||
9234fcb624 | |||
59a697f773 | |||
d49d10b14f | |||
4c15d32b55 | |||
73eaf51770 | |||
81ee8886ce | |||
658c741420 | |||
65cc8c1ea2 | |||
d9597d2148 | |||
fc3831c797 | |||
ce86f90efb | |||
b5f50028f2 | |||
2c388e2155 | |||
fb6e2743ec | |||
6ee006c851 | |||
107e521553 | |||
7735a919d1 | |||
9f617ae43d | |||
104bdde746 | |||
2a990cc140 | |||
3e41568074 | |||
66ae09b670 | |||
7b97c7b35e | |||
ca318c1520 | |||
cbb4f6c892 | |||
092b3edb51 | |||
8d6d2d07dd | |||
fa461525ee | |||
8e510a07c4 | |||
e153524748 | |||
eb8a1f42bc | |||
89cd9d382d | |||
488991b0f6 | |||
e2330617ac | |||
5e6d98e79f | |||
5eaf655224 | |||
2c1553570f | |||
c937dd5ba3 | |||
26b76ee95d | |||
006eb6d81e | |||
0cdf13ac12 | |||
0a3f25c303 | |||
105a3f757a | |||
f376a318ba | |||
4b88c1832a | |||
fc8aa1cdb1 | |||
7049b2f274 | |||
0f51ae7cf0 | |||
437f6b3d59 | |||
05e1a6c2ca | |||
25c1a85384 | |||
bba8f6c53e | |||
dbe9daeb76 | |||
8fd55fef85 | |||
acfd03da30 | |||
f352c3d79d | |||
4bf0bd3f55 | |||
76f2579e44 | |||
0706e021f5 | |||
b5775e3d85 | |||
cd70595b50 | |||
1d2913d9b9 | |||
b8a49a682e | |||
82901f89d5 | |||
c9c53cb55f | |||
1e637bd7e1 | |||
63a0b702c9 | |||
031003a5dc | |||
b69d2aa6a0 | |||
d7d2612218 | |||
7a0340c57d | |||
0863bd2408 | |||
594cc7c7d6 | |||
0b19078b2b | |||
7811865e84 | |||
0e69fe0781 | |||
26b08d87a8 | |||
321ab3b367 | |||
4d0869e206 | |||
d13cea6ccb | |||
6922f0e16a | |||
31df06d94e | |||
ecec9a7eaa | |||
ab7af2d0c5 | |||
f92e0bec0b | |||
7a22f6fd3f | |||
850ef51879 | |||
ef2e04a613 | |||
e16b75a0b7 | |||
8cdcf529e9 | |||
280167f217 | |||
a72f3fdabb | |||
dd6227e3bf | |||
1271ce1cab | |||
998114791f | |||
8a73324a0f | |||
9065edfc95 | |||
5111e33948 | |||
4cf828323d | |||
35776c5d29 | |||
2f27b8d5fa | |||
be4131b3c4 | |||
854feafa83 | |||
f423736a70 | |||
fdbac25e0d | |||
bcfac0d6dc | |||
682d43b5ab | |||
cd273e82ad | |||
3c0067dc69 | |||
a957c2f0c2 | |||
908203c735 | |||
2f072af02b | |||
de98fb29da | |||
82c92177ff |
@ -28,10 +28,10 @@ build-mutter:
|
||||
- merge_requests
|
||||
- /^.*$/
|
||||
|
||||
build-without-native-backend:
|
||||
build-without-native-backend-and-wayland:
|
||||
stage: build
|
||||
script:
|
||||
- meson . build -Dbuildtype=debugoptimized -Dnative_backend=false -Dudev=false --werror --prefix /usr
|
||||
- meson . build -Dbuildtype=debugoptimized -Dnative_backend=false -Dudev=false -Dwayland=false -Dcore_tests=false --werror --prefix /usr
|
||||
- ninja -C build
|
||||
- ninja -C build install
|
||||
artifacts:
|
||||
|
@ -1,6 +1,5 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
mutter_branch=$(git describe --contains --all HEAD)
|
||||
gnome_shell_target=
|
||||
|
||||
git clone https://gitlab.gnome.org/GNOME/gnome-shell.git
|
||||
@ -26,8 +25,7 @@ if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
|
||||
fi
|
||||
|
||||
if [ -z "$gnome_shell_target" ]; then
|
||||
gnome_shell_target=$(git branch -r -l origin/$mutter_branch)
|
||||
gnome_shell_target=${gnome_shell_target:-$(git branch -r -l ${mutter_branch#remotes/})}
|
||||
gnome_shell_target=$(git branch -r -l origin/$CI_COMMIT_REF_NAME)
|
||||
gnome_shell_target=${gnome_shell_target:-origin/master}
|
||||
echo Using $gnome_shell_target instead
|
||||
fi
|
||||
|
145
NEWS
145
NEWS
@ -1,3 +1,148 @@
|
||||
3.34.5
|
||||
======
|
||||
* Fix visibility of initially hidden windows [Jonas; !1066]
|
||||
* Fix hardware cursor on GPU hotplug [Pekka; !1097]
|
||||
* Fix pasting images from wayland [Robert, Carlos; !1141, #1065]
|
||||
* Fixed crashes [Florian, Olivier, Jonas; #1029, !1073, !1121, !1120]
|
||||
|
||||
Contributors:
|
||||
Olivier Fourdan, Carlos Garnacho, Robert Mader, Florian Müllner,
|
||||
Pekka Paalanen, Jonas Ådahl
|
||||
|
||||
Translators:
|
||||
Yi-Jyun Pan [zh_TW]
|
||||
3.34.4
|
||||
======
|
||||
* Handle mode set race conditions more gracefully [Jonas; !1007]
|
||||
* Fix fallback to GLES2 [Adam; #635]
|
||||
* Fix interoperation with wl_data_device_manager v1 [Carlos; #965]
|
||||
* Fix visual glitches with offscreen effects applied [Georges; !992]
|
||||
* Favor text over images in clipboard manager [Carlos; #919]
|
||||
* Fixes crashes [Jonas, Carlos; !961, !869]
|
||||
* Plugged memory leaks [Sebastian, Adam; !1002, !1011]
|
||||
* Misc. bug fixes [Carlos, Robert, Olivier; !1005, #878, !1031, !1034, !1040]
|
||||
|
||||
Contributors:
|
||||
Olivier Fourdan, Carlos Garnacho, Adam Jackson, Sebastian Keller,
|
||||
Robert Mader, Georges Basile Stavracas Neto, Jonas Ådahl
|
||||
|
||||
Translators:
|
||||
Umarzuki Bin Mochlis Moktar [ms]
|
||||
|
||||
3.34.3
|
||||
======
|
||||
* Fix window recording on HiDPI [Pascal; !976]
|
||||
* Fix top-left pixel being insensitive to clicks [Sebastian; #893]
|
||||
|
||||
Contributors:
|
||||
Sebastian Keller, Pascal Nowack
|
||||
|
||||
3.34.2
|
||||
======
|
||||
* Fix immediate screen blank after releasing inhibitor [Tim; #573]
|
||||
* Respond to frame callbacks regardless of damage [Jonas Å.; !839]
|
||||
* Translate well-known selection atoms to mimetypes [Carlos; !842]
|
||||
* Fix Night Light on wayland [Jonas Å.; !840]
|
||||
* Fix various copy+paste/DND regressions [Carlos; !848, #789, #842,
|
||||
#793, #845, #854]
|
||||
* Don't emit focus event after desctruction [Marco; gnome-shell#1704, !860]
|
||||
* Fix hang when opening not-responding dialog on Xorg [Carlos; !876]
|
||||
* Fix frozen grabs on Xorg after weeks of inactivity [Jonas Å.; !886]
|
||||
* Fix triggering popups from stylus devices on wayland [Carlos; #886]
|
||||
* Support shadow framebuffers for offscreen rendering [Olivier; !917]
|
||||
* Fix hang after interacting with desktop icons on X11 [Marco; !909]
|
||||
* Don't double scale when getting absolute surface coordinates [Xiang; !915]
|
||||
* Kill window effects on destroy [Robert; !924]
|
||||
* Use partial damage for dma-buf and EGLImage buffers on wayland [Robert; #947]
|
||||
* Do not stack transients underneath their always-on-top parent [Florian; #587]
|
||||
* Fix KMS freeze after pageflip [Pekka; !953]
|
||||
* Fixed crashes [Robert, Jonas Å., Marco, Hans, Carlos, Tim; !856, !912, !895,
|
||||
!928, #591, !823, !960]
|
||||
* Plugged memory leaks [Niels, Robert, Carlos; !847, !868, !873]
|
||||
* Misc. bug fixes and cleanups [Daniel, Marco, Jonas Å., Georges, Cosimo,
|
||||
Florian, Hans, Robert, Jonas D.; !841, !764, !837, !846, !673, !811, !893,
|
||||
!925, !927, !940, !832]
|
||||
|
||||
Contributors:
|
||||
Marco Trevisan (Treviño), Cosimo Cecchi, Tim Crawford, Jonas Dreßler,
|
||||
Xiang Fan, Olivier Fourdan, Carlos Garnacho, Hans de Goede, Niels De Graef,
|
||||
Tim Klocke, Robert Mader, Florian Müllner, Georges Basile Stavracas Neto,
|
||||
Pekka Paalanen, Daniel van Vugt, Jonas Ådahl
|
||||
|
||||
Translators:
|
||||
Bruce Cowan [en_GB]
|
||||
3.34.1
|
||||
======
|
||||
* Fix startup of X11 session services on wayland [Carlos; #771]
|
||||
* Fix _NET_ACTIVE_WINDOW emission [Carlos; #751]
|
||||
* Fix initial view perspective [Marco; !803]
|
||||
* Fix screenshots and window animations when scaled [Robert; !758]
|
||||
* Re-enable coredumps when capabilities are set [Jonas; !811]
|
||||
* Fix scaling of DND surface actors [Robert; !780]
|
||||
* Optimize blitting of untransformed offscreen stage views [Olivier; !809, !820]
|
||||
* Fix freeze of pointer event delivery on X11 [Olivier; !821]
|
||||
* Fix scaling of stylus input coordinates with HiDPI [Dorian; !830]
|
||||
* Fix memory leak when using implicit animations [Jonas; !828]
|
||||
* Fix numlock state for native backend [Carlos; #769]
|
||||
* Fixed crashes [Marco, Olivier, Jonas Å.; !805, #823, !808, !825,
|
||||
#844, !826, #779]
|
||||
* Misc. bug fixes and cleanups [Jonas Å., Georges, Jonas D., Michal, Daniel,
|
||||
Iain, Adam, Marco, Carlos, Ting-Wei, Hans, Robert; !787, !795, !791, !797,
|
||||
!772, !775, !799, !778, !785, !782, !796, #819, !814, !769, !817, !783, !786,
|
||||
!829, !774, #822]
|
||||
|
||||
Contributors:
|
||||
Marco Trevisan (Treviño), Jonas Dreßler, Olivier Fourdan, Carlos Garnacho,
|
||||
Hans de Goede, Adam Jackson, Ting-Wei Lan, Iain Lane, Michal Lazo,
|
||||
Robert Mader, Georges Basile Stavracas Neto, Dorian Stoll, Daniel van Vugt,
|
||||
Jonas Ådahl
|
||||
|
||||
Translators:
|
||||
Milo Casagrande [it], Nathan Follens [nl], Matej Urbančič [sl],
|
||||
Ask Hjorth Larsen [da], Alan Mortensen [da], Jordi Mas [ca]
|
||||
|
||||
3.34.0
|
||||
======
|
||||
* Fix xdg-output v3 support [Olivier; !771]
|
||||
* Fix crash when changing decoration state [Jonas; !773]
|
||||
* Add and remove connectors on hot-plug [Jonas; !743]
|
||||
|
||||
Contributors:
|
||||
Olivier Fourdan, Jonas Ådahl
|
||||
|
||||
Translators:
|
||||
Rafael Fontenelle [pt_BR], Gwan-gyeong Mun [ko], Christian Kirbach [de],
|
||||
Claude Paroz [fr], Milo Casagrande [it], Emin Tufan Çetin [tr],
|
||||
Ryuta Fujii [ja]
|
||||
|
||||
3.33.92
|
||||
=======
|
||||
* Turn MetaShapedTexture into a ClutterContent implementation [Georges; !409]
|
||||
* Restore inhibit shortcut for overlay key [Olivier; #734]
|
||||
* Misc. pointer a11y improvements [Jonas D., Olivier; !746, !747, !745, !761]
|
||||
* Fix position of drag surfaces [Robert; !684]
|
||||
* Implement subsurface.place_below() for parents [Robert; !664]
|
||||
* Add meta_window_actor_get_image() [Jonas Å.; !752]
|
||||
* Revert faulty optimization from !719 [Jonas Å.; #735]
|
||||
* Add additional sysprof trace points [Jonas Å.; !757, !765]
|
||||
* Remove GLX "threaded swap wait" used on Nvidia [Daniel; !602]
|
||||
* Implement geometric picking [Daniel; !189]
|
||||
* Fix lost keyboard focus after DND [Olivier; #747]
|
||||
* Misc. bug fixes and cleanups [Florian, Carlos, Piotr, Hans, Georges, Robert,
|
||||
Ray, Mart, Rémi; !740, !672, !749, !751, !753, !730, !755, !756, !750, !715,
|
||||
#738944, !657, !768]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Rémi Bernon, Piotr Drąg, Jonas Dreßler, Olivier Fourdan,
|
||||
Carlos Garnacho, Hans de Goede, Robert Mader, Florian Müllner,
|
||||
Georges Basile Stavracas Neto, Mart Raudsepp, Ray Strode, Daniel van Vugt
|
||||
|
||||
Translators:
|
||||
Piotr Drąg [pl], Марко Костић [sr], Rūdolfs Mazurs [lv], Matej Urbančič [sl],
|
||||
Balázs Úr [hu], Fran Dieguez [gl], Jordi Mas [ca], Anders Jonsson [sv],
|
||||
Trần Ngọc Quân [vi], Tim Sabsch [de], Fabio Tomat [fur], Goran Vidović [hr],
|
||||
Marek Černocký [cs]
|
||||
|
||||
3.33.91
|
||||
=======
|
||||
* Fix primary selection copy and paste between X11 and wayland [Hans; #702]
|
||||
|
@ -75,8 +75,8 @@ struct _CallyRootPrivate
|
||||
GSList *stage_list;
|
||||
|
||||
/* signals id */
|
||||
guint stage_added_id;
|
||||
guint stage_removed_id;
|
||||
gulong stage_added_id;
|
||||
gulong stage_removed_id;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (CallyRoot, cally_root, ATK_TYPE_GOBJECT_ACCESSIBLE)
|
||||
@ -149,11 +149,9 @@ cally_root_finalize (GObject *object)
|
||||
|
||||
stage_manager = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (root));
|
||||
|
||||
g_signal_handler_disconnect (stage_manager,
|
||||
root->priv->stage_added_id);
|
||||
g_clear_signal_handler (&root->priv->stage_added_id, stage_manager);
|
||||
|
||||
g_signal_handler_disconnect (stage_manager,
|
||||
root->priv->stage_added_id);
|
||||
g_clear_signal_handler (&root->priv->stage_removed_id, stage_manager);
|
||||
|
||||
G_OBJECT_CLASS (cally_root_parent_class)->finalize (object);
|
||||
}
|
||||
|
@ -242,9 +242,6 @@ ClutterAnimationInfo * _clutter_actor_get_animation_info
|
||||
ClutterTransition * _clutter_actor_create_transition (ClutterActor *self,
|
||||
GParamSpec *pspec,
|
||||
...);
|
||||
ClutterTransition * _clutter_actor_get_transition (ClutterActor *self,
|
||||
GParamSpec *pspec);
|
||||
|
||||
gboolean _clutter_actor_foreach_child (ClutterActor *self,
|
||||
ClutterForeachCallback callback,
|
||||
gpointer user_data);
|
||||
@ -277,6 +274,9 @@ void _clutter_actor_set_enable_paint_unmapped
|
||||
void _clutter_actor_set_has_pointer (ClutterActor *self,
|
||||
gboolean has_pointer);
|
||||
|
||||
void _clutter_actor_set_has_key_focus (ClutterActor *self,
|
||||
gboolean has_key_focus);
|
||||
|
||||
void _clutter_actor_queue_redraw_with_clip (ClutterActor *self,
|
||||
ClutterRedrawFlags flags,
|
||||
const ClutterPaintVolume *clip_volume);
|
||||
|
@ -835,6 +835,7 @@ struct _ClutterActorPrivate
|
||||
guint enable_model_view_transform : 1;
|
||||
guint enable_paint_unmapped : 1;
|
||||
guint has_pointer : 1;
|
||||
guint has_key_focus : 1;
|
||||
guint propagated_one_redraw : 1;
|
||||
guint paint_volume_valid : 1;
|
||||
guint last_paint_volume_valid : 1;
|
||||
@ -1031,7 +1032,6 @@ typedef struct _TransitionClosure
|
||||
ClutterTransition *transition;
|
||||
gchar *name;
|
||||
gulong completed_id;
|
||||
guint is_implicit : 1;
|
||||
} TransitionClosure;
|
||||
|
||||
static void clutter_container_iface_init (ClutterContainerIface *iface);
|
||||
@ -1692,6 +1692,20 @@ clutter_actor_is_mapped (ClutterActor *self)
|
||||
return CLUTTER_ACTOR_IS_MAPPED (self);
|
||||
}
|
||||
|
||||
static void
|
||||
maybe_unset_key_focus (ClutterActor *self)
|
||||
{
|
||||
ClutterActor *stage;
|
||||
|
||||
if (!self->priv->has_key_focus)
|
||||
return;
|
||||
|
||||
stage = _clutter_actor_get_stage_internal (self);
|
||||
|
||||
if (stage)
|
||||
clutter_stage_set_key_focus (CLUTTER_STAGE (stage), NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_actor_real_unmap (ClutterActor *self)
|
||||
{
|
||||
@ -1725,17 +1739,7 @@ clutter_actor_real_unmap (ClutterActor *self)
|
||||
|
||||
/* relinquish keyboard focus if we were unmapped while owning it */
|
||||
if (!CLUTTER_ACTOR_IS_TOPLEVEL (self))
|
||||
{
|
||||
ClutterStage *stage;
|
||||
|
||||
stage = CLUTTER_STAGE (_clutter_actor_get_stage_internal (self));
|
||||
|
||||
if (stage != NULL &&
|
||||
clutter_stage_get_key_focus (stage) == self)
|
||||
{
|
||||
clutter_stage_set_key_focus (stage, NULL);
|
||||
}
|
||||
}
|
||||
maybe_unset_key_focus (self);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -4239,11 +4243,7 @@ _clutter_actor_stop_transitions (ClutterActor *self)
|
||||
{
|
||||
TransitionClosure *closure = value;
|
||||
|
||||
/* implicit transitions, and automatically managed explicit ones,
|
||||
* should be removed at this point
|
||||
*/
|
||||
if (closure->is_implicit ||
|
||||
clutter_transition_get_remove_on_complete (closure->transition))
|
||||
if (clutter_transition_get_remove_on_complete (closure->transition))
|
||||
{
|
||||
g_hash_table_iter_remove (&iter);
|
||||
}
|
||||
@ -4436,7 +4436,8 @@ clutter_actor_remove_child_internal (ClutterActor *self,
|
||||
}
|
||||
|
||||
/* clutter_actor_reparent() will emit ::parent-set for us */
|
||||
if (emit_parent_set && !CLUTTER_ACTOR_IN_REPARENT (child))
|
||||
if (emit_parent_set && !CLUTTER_ACTOR_IN_REPARENT (child) &&
|
||||
!CLUTTER_ACTOR_IN_DESTRUCTION (child))
|
||||
{
|
||||
child->priv->needs_compute_resource_scale = TRUE;
|
||||
g_signal_emit (child, actor_signals[PARENT_SET], 0, self);
|
||||
@ -6068,6 +6069,11 @@ clutter_actor_dispose (GObject *object)
|
||||
object->ref_count,
|
||||
g_type_name (G_OBJECT_TYPE (self)));
|
||||
|
||||
maybe_unset_key_focus (self);
|
||||
|
||||
/* Stop the emission of any property change */
|
||||
g_object_freeze_notify (object);
|
||||
|
||||
g_signal_emit (self, actor_signals[DESTROY], 0);
|
||||
|
||||
/* avoid recursing when called from clutter_actor_destroy() */
|
||||
@ -15980,6 +15986,9 @@ clutter_actor_grab_key_focus (ClutterActor *self)
|
||||
|
||||
g_return_if_fail (CLUTTER_IS_ACTOR (self));
|
||||
|
||||
if (self->priv->has_key_focus)
|
||||
return;
|
||||
|
||||
stage = _clutter_actor_get_stage_internal (self);
|
||||
if (stage != NULL)
|
||||
clutter_stage_set_key_focus (CLUTTER_STAGE (stage), self);
|
||||
@ -16769,6 +16778,23 @@ _clutter_actor_set_has_pointer (ClutterActor *self,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_clutter_actor_set_has_key_focus (ClutterActor *self,
|
||||
gboolean has_key_focus)
|
||||
{
|
||||
ClutterActorPrivate *priv = self->priv;
|
||||
|
||||
if (priv->has_key_focus != has_key_focus)
|
||||
{
|
||||
priv->has_key_focus = has_key_focus;
|
||||
|
||||
if (has_key_focus)
|
||||
g_signal_emit (self, actor_signals[KEY_FOCUS_IN], 0);
|
||||
else
|
||||
g_signal_emit (self, actor_signals[KEY_FOCUS_OUT], 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* clutter_actor_get_text_direction:
|
||||
* @self: a #ClutterActor
|
||||
@ -17617,15 +17643,9 @@ clutter_actor_clear_effects (ClutterActor *self)
|
||||
gboolean
|
||||
clutter_actor_has_key_focus (ClutterActor *self)
|
||||
{
|
||||
ClutterActor *stage;
|
||||
|
||||
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), FALSE);
|
||||
|
||||
stage = _clutter_actor_get_stage_internal (self);
|
||||
if (stage == NULL)
|
||||
return FALSE;
|
||||
|
||||
return clutter_stage_get_key_focus (CLUTTER_STAGE (stage)) == self;
|
||||
return self->priv->has_key_focus;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -19410,9 +19430,9 @@ clutter_actor_iter_destroy (ClutterActorIter *iter)
|
||||
}
|
||||
|
||||
static const ClutterAnimationInfo default_animation_info = {
|
||||
NULL, /* transitions */
|
||||
NULL, /* states */
|
||||
NULL, /* cur_state */
|
||||
NULL, /* transitions */
|
||||
};
|
||||
|
||||
static void
|
||||
@ -19466,20 +19486,6 @@ _clutter_actor_get_animation_info (ClutterActor *self)
|
||||
return res;
|
||||
}
|
||||
|
||||
ClutterTransition *
|
||||
_clutter_actor_get_transition (ClutterActor *actor,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
const ClutterAnimationInfo *info;
|
||||
|
||||
info = _clutter_actor_get_animation_info_or_defaults (actor);
|
||||
|
||||
if (info->transitions == NULL)
|
||||
return NULL;
|
||||
|
||||
return g_hash_table_lookup (info->transitions, pspec->name);
|
||||
}
|
||||
|
||||
static void
|
||||
transition_closure_free (gpointer data)
|
||||
{
|
||||
@ -19498,6 +19504,8 @@ transition_closure_free (gpointer data)
|
||||
|
||||
if (clutter_timeline_is_playing (timeline))
|
||||
clutter_timeline_stop (timeline);
|
||||
else if (clutter_timeline_get_delay (timeline) > 0)
|
||||
clutter_timeline_cancel_delay (timeline);
|
||||
|
||||
/* remove the reference added in add_transition_internal() */
|
||||
g_object_unref (clos->transition);
|
||||
@ -19532,15 +19540,8 @@ on_transition_stopped (ClutterTransition *transition,
|
||||
t_quark = g_quark_from_string (clos->name);
|
||||
t_name = g_strdup (clos->name);
|
||||
|
||||
if (clos->is_implicit ||
|
||||
clutter_transition_get_remove_on_complete (transition))
|
||||
if (clutter_transition_get_remove_on_complete (transition))
|
||||
{
|
||||
/* we take a reference here because removing the closure
|
||||
* will release the reference on the transition, and we
|
||||
* want the transition to survive the signal emission
|
||||
*/
|
||||
g_object_ref (transition);
|
||||
|
||||
/* this is safe, because the timeline has now stopped,
|
||||
* so we won't recurse; the reference on the Animatable
|
||||
* will be dropped by the ::stopped signal closure in
|
||||
@ -19576,8 +19577,7 @@ on_transition_stopped (ClutterTransition *transition,
|
||||
static void
|
||||
clutter_actor_add_transition_internal (ClutterActor *self,
|
||||
const gchar *name,
|
||||
ClutterTransition *transition,
|
||||
gboolean is_implicit)
|
||||
ClutterTransition *transition)
|
||||
{
|
||||
ClutterTimeline *timeline;
|
||||
TransitionClosure *clos;
|
||||
@ -19607,7 +19607,6 @@ clutter_actor_add_transition_internal (ClutterActor *self,
|
||||
clos->actor = self;
|
||||
clos->transition = g_object_ref (transition);
|
||||
clos->name = g_strdup (name);
|
||||
clos->is_implicit = is_implicit;
|
||||
clos->completed_id = g_signal_connect (timeline, "stopped",
|
||||
G_CALLBACK (on_transition_stopped),
|
||||
clos);
|
||||
@ -19766,6 +19765,8 @@ _clutter_actor_create_transition (ClutterActor *actor,
|
||||
{
|
||||
res = clutter_property_transition_new (pspec->name);
|
||||
|
||||
clutter_transition_set_remove_on_complete (res, TRUE);
|
||||
|
||||
interval = clutter_interval_new_with_values (ptype, &initial, &final);
|
||||
clutter_transition_set_interval (res, interval);
|
||||
|
||||
@ -19799,7 +19800,7 @@ _clutter_actor_create_transition (ClutterActor *actor,
|
||||
#endif /* CLUTTER_ENABLE_DEBUG */
|
||||
|
||||
/* this will start the transition as well */
|
||||
clutter_actor_add_transition_internal (actor, pspec->name, res, TRUE);
|
||||
clutter_actor_add_transition_internal (actor, pspec->name, res);
|
||||
|
||||
/* the actor now owns the transition */
|
||||
g_object_unref (res);
|
||||
@ -19873,7 +19874,7 @@ clutter_actor_add_transition (ClutterActor *self,
|
||||
g_return_if_fail (name != NULL);
|
||||
g_return_if_fail (CLUTTER_IS_TRANSITION (transition));
|
||||
|
||||
clutter_actor_add_transition_internal (self, name, transition, FALSE);
|
||||
clutter_actor_add_transition_internal (self, name, transition);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -592,13 +592,13 @@ clutter_point_compare_line (const ClutterPoint *p,
|
||||
/**
|
||||
* clutter_point_inside_quadrilateral:
|
||||
* @point: a #ClutterPoint to test
|
||||
* @vertices: array of vertices of the quadrilateral, in clockwise order,
|
||||
* from top-left to bottom-left
|
||||
* @vertices: array of vertices of the quadrilateral, in either clockwise or
|
||||
* anticlockwise order.
|
||||
*
|
||||
* Determines whether a point is inside the convex quadrilateral provided,
|
||||
* and not on any of its edges or vertices.
|
||||
* or on any of its edges or vertices.
|
||||
*
|
||||
* Returns: %TRUE if @point is inside the quadrilateral
|
||||
* Returns: %TRUE if @point is inside or touching the quadrilateral
|
||||
*/
|
||||
gboolean
|
||||
clutter_point_inside_quadrilateral (const ClutterPoint *point,
|
||||
|
@ -121,12 +121,12 @@ G_DEFINE_TYPE (ClutterBrightnessContrastEffect,
|
||||
static gboolean
|
||||
will_have_no_effect (ClutterBrightnessContrastEffect *self)
|
||||
{
|
||||
return (self->brightness_red == no_change &&
|
||||
self->brightness_green == no_change &&
|
||||
self->brightness_blue == no_change &&
|
||||
self->contrast_red == no_change &&
|
||||
self->contrast_green == no_change &&
|
||||
self->contrast_blue == no_change);
|
||||
return (G_APPROX_VALUE (self->brightness_red, no_change, FLT_EPSILON) &&
|
||||
G_APPROX_VALUE (self->brightness_green, no_change, FLT_EPSILON) &&
|
||||
G_APPROX_VALUE (self->brightness_blue, no_change, FLT_EPSILON) &&
|
||||
G_APPROX_VALUE (self->contrast_red, no_change, FLT_EPSILON) &&
|
||||
G_APPROX_VALUE (self->contrast_green, no_change, FLT_EPSILON) &&
|
||||
G_APPROX_VALUE (self->contrast_blue, no_change, FLT_EPSILON));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -494,9 +494,9 @@ clutter_brightness_contrast_effect_set_brightness_full (ClutterBrightnessContras
|
||||
{
|
||||
g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect));
|
||||
|
||||
if (red == effect->brightness_red &&
|
||||
green == effect->brightness_green &&
|
||||
blue == effect->brightness_blue)
|
||||
if (G_APPROX_VALUE (red, effect->brightness_red, FLT_EPSILON) &&
|
||||
G_APPROX_VALUE (green, effect->brightness_green, FLT_EPSILON) &&
|
||||
G_APPROX_VALUE (blue, effect->brightness_blue, FLT_EPSILON))
|
||||
return;
|
||||
|
||||
effect->brightness_red = red;
|
||||
@ -584,9 +584,9 @@ clutter_brightness_contrast_effect_set_contrast_full (ClutterBrightnessContrastE
|
||||
{
|
||||
g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect));
|
||||
|
||||
if (red == effect->contrast_red &&
|
||||
green == effect->contrast_green &&
|
||||
blue == effect->contrast_blue)
|
||||
if (G_APPROX_VALUE (red, effect->contrast_red, FLT_EPSILON) &&
|
||||
G_APPROX_VALUE (green, effect->contrast_green, FLT_EPSILON) &&
|
||||
G_APPROX_VALUE (blue, effect->contrast_blue, FLT_EPSILON))
|
||||
return;
|
||||
|
||||
effect->contrast_red = red;
|
||||
|
@ -210,6 +210,8 @@ ClutterBackend *_clutter_device_manager_get_backend (ClutterDeviceMa
|
||||
void _clutter_device_manager_compress_motion (ClutterDeviceManager *device_manger,
|
||||
ClutterEvent *event,
|
||||
const ClutterEvent *to_discard);
|
||||
CLUTTER_EXPORT
|
||||
void clutter_device_manager_ensure_a11y_state (ClutterDeviceManager *device_manager);
|
||||
|
||||
/* input device */
|
||||
CLUTTER_EXPORT
|
||||
|
@ -607,6 +607,20 @@ _clutter_device_manager_compress_motion (ClutterDeviceManager *device_manager,
|
||||
manager_class->compress_motion (device_manager, event, to_discard);
|
||||
}
|
||||
|
||||
void
|
||||
clutter_device_manager_ensure_a11y_state (ClutterDeviceManager *device_manager)
|
||||
{
|
||||
ClutterInputDevice *core_pointer;
|
||||
|
||||
core_pointer = clutter_device_manager_get_core_device (device_manager,
|
||||
CLUTTER_POINTER_DEVICE);
|
||||
if (core_pointer)
|
||||
{
|
||||
if (_clutter_is_input_pointer_a11y_enabled (core_pointer))
|
||||
_clutter_input_pointer_a11y_add_device (core_pointer);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
are_kbd_a11y_settings_equal (ClutterKbdA11ySettings *a,
|
||||
ClutterKbdA11ySettings *b)
|
||||
|
@ -117,11 +117,7 @@ clutter_offscreen_effect_set_actor (ClutterActorMeta *meta,
|
||||
meta_class->set_actor (meta, actor);
|
||||
|
||||
/* clear out the previous state */
|
||||
if (priv->offscreen != NULL)
|
||||
{
|
||||
cogl_handle_unref (priv->offscreen);
|
||||
priv->offscreen = NULL;
|
||||
}
|
||||
g_clear_pointer (&priv->offscreen, cogl_object_unref);
|
||||
|
||||
/* we keep a back pointer here, to avoid going through the ActorMeta */
|
||||
priv->actor = clutter_actor_meta_get_actor (meta);
|
||||
@ -197,17 +193,8 @@ update_fbo (ClutterEffect *effect,
|
||||
ensure_pipeline_filter_for_scale (self, resource_scale);
|
||||
}
|
||||
|
||||
if (priv->texture != NULL)
|
||||
{
|
||||
cogl_handle_unref (priv->texture);
|
||||
priv->texture = NULL;
|
||||
}
|
||||
|
||||
if (priv->offscreen != NULL)
|
||||
{
|
||||
cogl_handle_unref (priv->offscreen);
|
||||
priv->offscreen = NULL;
|
||||
}
|
||||
g_clear_pointer (&priv->texture, cogl_object_unref);
|
||||
g_clear_pointer (&priv->offscreen, cogl_object_unref);
|
||||
|
||||
priv->texture =
|
||||
clutter_offscreen_effect_create_texture (self, target_width, target_height);
|
||||
@ -471,29 +458,44 @@ clutter_offscreen_effect_paint (ClutterEffect *effect,
|
||||
*/
|
||||
if (priv->offscreen == NULL || (flags & CLUTTER_EFFECT_PAINT_ACTOR_DIRTY))
|
||||
{
|
||||
/* Chain up to the parent paint method which will call the pre and
|
||||
post paint functions to update the image */
|
||||
CLUTTER_EFFECT_CLASS (clutter_offscreen_effect_parent_class)->
|
||||
paint (effect, flags);
|
||||
ClutterEffectClass *effect_class = CLUTTER_EFFECT_GET_CLASS (effect);
|
||||
gboolean pre_paint_succeeded;
|
||||
|
||||
pre_paint_succeeded = effect_class->pre_paint (effect);
|
||||
|
||||
clutter_actor_continue_paint (priv->actor);
|
||||
|
||||
if (pre_paint_succeeded)
|
||||
effect_class->post_paint (effect);
|
||||
else
|
||||
g_clear_pointer (&priv->offscreen, cogl_object_unref);
|
||||
}
|
||||
else
|
||||
clutter_offscreen_effect_paint_texture (self);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_offscreen_effect_notify (GObject *gobject,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
ClutterOffscreenEffect *offscreen_effect = CLUTTER_OFFSCREEN_EFFECT (gobject);
|
||||
ClutterOffscreenEffectPrivate *priv = offscreen_effect->priv;
|
||||
|
||||
if (strcmp (pspec->name, "enabled") == 0)
|
||||
g_clear_pointer (&priv->offscreen, cogl_object_unref);
|
||||
|
||||
G_OBJECT_CLASS (clutter_offscreen_effect_parent_class)->notify (gobject, pspec);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_offscreen_effect_finalize (GObject *gobject)
|
||||
{
|
||||
ClutterOffscreenEffect *self = CLUTTER_OFFSCREEN_EFFECT (gobject);
|
||||
ClutterOffscreenEffectPrivate *priv = self->priv;
|
||||
|
||||
if (priv->offscreen)
|
||||
cogl_handle_unref (priv->offscreen);
|
||||
|
||||
if (priv->target)
|
||||
cogl_handle_unref (priv->target);
|
||||
|
||||
if (priv->texture)
|
||||
cogl_handle_unref (priv->texture);
|
||||
g_clear_pointer (&priv->offscreen, cogl_object_unref);
|
||||
g_clear_pointer (&priv->texture, cogl_object_unref);
|
||||
g_clear_pointer (&priv->target, cogl_object_unref);
|
||||
|
||||
G_OBJECT_CLASS (clutter_offscreen_effect_parent_class)->finalize (gobject);
|
||||
}
|
||||
@ -515,6 +517,7 @@ clutter_offscreen_effect_class_init (ClutterOffscreenEffectClass *klass)
|
||||
effect_class->paint = clutter_offscreen_effect_paint;
|
||||
|
||||
gobject_class->finalize = clutter_offscreen_effect_finalize;
|
||||
gobject_class->notify = clutter_offscreen_effect_notify;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1099,12 +1099,12 @@ clutter_paint_node_to_json (ClutterPaintNode *node)
|
||||
|
||||
case PAINT_OP_PATH:
|
||||
json_builder_set_member_name (builder, "path");
|
||||
json_builder_add_int_value (builder, (gint64) op->op.path);
|
||||
json_builder_add_int_value (builder, (intptr_t) op->op.path);
|
||||
break;
|
||||
|
||||
case PAINT_OP_PRIMITIVE:
|
||||
json_builder_set_member_name (builder, "primitive");
|
||||
json_builder_add_int_value (builder, (gint64) op->op.primitive);
|
||||
json_builder_add_int_value (builder, (intptr_t) op->op.primitive);
|
||||
break;
|
||||
|
||||
case PAINT_OP_INVALID:
|
||||
|
@ -315,6 +315,8 @@ gboolean _clutter_run_progress_function (GType gtype,
|
||||
gdouble progress,
|
||||
GValue *retval);
|
||||
|
||||
void clutter_timeline_cancel_delay (ClutterTimeline *timeline);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __CLUTTER_PRIVATE_H__ */
|
||||
|
@ -500,6 +500,7 @@ static void
|
||||
clutter_shader_effect_init (ClutterShaderEffect *effect)
|
||||
{
|
||||
effect->priv = clutter_shader_effect_get_instance_private (effect);
|
||||
effect->priv->shader_type = CLUTTER_FRAGMENT_SHADER;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -30,6 +30,7 @@ enum
|
||||
PROP_LAYOUT,
|
||||
PROP_FRAMEBUFFER,
|
||||
PROP_OFFSCREEN,
|
||||
PROP_SHADOWFB,
|
||||
PROP_SCALE,
|
||||
|
||||
PROP_LAST
|
||||
@ -44,7 +45,10 @@ typedef struct _ClutterStageViewPrivate
|
||||
CoglFramebuffer *framebuffer;
|
||||
|
||||
CoglOffscreen *offscreen;
|
||||
CoglPipeline *pipeline;
|
||||
CoglPipeline *offscreen_pipeline;
|
||||
|
||||
CoglOffscreen *shadowfb;
|
||||
CoglPipeline *shadowfb_pipeline;
|
||||
|
||||
guint dirty_viewport : 1;
|
||||
guint dirty_projection : 1;
|
||||
@ -78,6 +82,8 @@ clutter_stage_view_get_framebuffer (ClutterStageView *view)
|
||||
|
||||
if (priv->offscreen)
|
||||
return priv->offscreen;
|
||||
else if (priv->shadowfb)
|
||||
return priv->shadowfb;
|
||||
else
|
||||
return priv->framebuffer;
|
||||
}
|
||||
@ -99,6 +105,24 @@ clutter_stage_view_get_onscreen (ClutterStageView *view)
|
||||
return priv->framebuffer;
|
||||
}
|
||||
|
||||
static CoglPipeline *
|
||||
clutter_stage_view_create_framebuffer_pipeline (CoglFramebuffer *framebuffer)
|
||||
{
|
||||
CoglPipeline *pipeline;
|
||||
|
||||
pipeline = cogl_pipeline_new (cogl_framebuffer_get_context (framebuffer));
|
||||
|
||||
cogl_pipeline_set_layer_filters (pipeline, 0,
|
||||
COGL_PIPELINE_FILTER_NEAREST,
|
||||
COGL_PIPELINE_FILTER_NEAREST);
|
||||
cogl_pipeline_set_layer_texture (pipeline, 0,
|
||||
cogl_offscreen_get_texture (framebuffer));
|
||||
cogl_pipeline_set_layer_wrap_mode (pipeline, 0,
|
||||
COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE);
|
||||
|
||||
return pipeline;
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_stage_view_ensure_offscreen_blit_pipeline (ClutterStageView *view)
|
||||
{
|
||||
@ -109,21 +133,27 @@ clutter_stage_view_ensure_offscreen_blit_pipeline (ClutterStageView *view)
|
||||
|
||||
g_assert (priv->offscreen != NULL);
|
||||
|
||||
if (priv->pipeline)
|
||||
if (priv->offscreen_pipeline)
|
||||
return;
|
||||
|
||||
priv->pipeline =
|
||||
cogl_pipeline_new (cogl_framebuffer_get_context (priv->offscreen));
|
||||
cogl_pipeline_set_layer_filters (priv->pipeline, 0,
|
||||
COGL_PIPELINE_FILTER_NEAREST,
|
||||
COGL_PIPELINE_FILTER_NEAREST);
|
||||
cogl_pipeline_set_layer_texture (priv->pipeline, 0,
|
||||
cogl_offscreen_get_texture (priv->offscreen));
|
||||
cogl_pipeline_set_layer_wrap_mode (priv->pipeline, 0,
|
||||
COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE);
|
||||
priv->offscreen_pipeline =
|
||||
clutter_stage_view_create_framebuffer_pipeline (priv->offscreen);
|
||||
|
||||
if (view_class->setup_offscreen_blit_pipeline)
|
||||
view_class->setup_offscreen_blit_pipeline (view, priv->pipeline);
|
||||
view_class->setup_offscreen_blit_pipeline (view, priv->offscreen_pipeline);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_stage_view_ensure_shadowfb_blit_pipeline (ClutterStageView *view)
|
||||
{
|
||||
ClutterStageViewPrivate *priv =
|
||||
clutter_stage_view_get_instance_private (view);
|
||||
|
||||
if (priv->shadowfb_pipeline)
|
||||
return;
|
||||
|
||||
priv->shadowfb_pipeline =
|
||||
clutter_stage_view_create_framebuffer_pipeline (priv->shadowfb);
|
||||
}
|
||||
|
||||
void
|
||||
@ -132,7 +162,45 @@ clutter_stage_view_invalidate_offscreen_blit_pipeline (ClutterStageView *view)
|
||||
ClutterStageViewPrivate *priv =
|
||||
clutter_stage_view_get_instance_private (view);
|
||||
|
||||
g_clear_pointer (&priv->pipeline, cogl_object_unref);
|
||||
g_clear_pointer (&priv->offscreen_pipeline, cogl_object_unref);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_stage_view_copy_to_framebuffer (ClutterStageView *view,
|
||||
const cairo_rectangle_int_t *rect,
|
||||
CoglPipeline *pipeline,
|
||||
CoglFramebuffer *src_framebuffer,
|
||||
CoglFramebuffer *dst_framebuffer,
|
||||
gboolean can_blit)
|
||||
{
|
||||
CoglMatrix matrix;
|
||||
|
||||
/* First, try with blit */
|
||||
if (can_blit)
|
||||
{
|
||||
if (cogl_blit_framebuffer (src_framebuffer,
|
||||
dst_framebuffer,
|
||||
0, 0,
|
||||
0, 0,
|
||||
cogl_framebuffer_get_width (dst_framebuffer),
|
||||
cogl_framebuffer_get_height (dst_framebuffer),
|
||||
NULL))
|
||||
return;
|
||||
}
|
||||
|
||||
/* If blit fails, fallback to the slower painting method */
|
||||
cogl_framebuffer_push_matrix (dst_framebuffer);
|
||||
|
||||
cogl_matrix_init_identity (&matrix);
|
||||
cogl_matrix_translate (&matrix, -1, 1, 0);
|
||||
cogl_matrix_scale (&matrix, 2, -2, 0);
|
||||
cogl_framebuffer_set_projection_matrix (dst_framebuffer, &matrix);
|
||||
|
||||
cogl_framebuffer_draw_rectangle (dst_framebuffer,
|
||||
pipeline,
|
||||
0, 0, 1, 1);
|
||||
|
||||
cogl_framebuffer_pop_matrix (dst_framebuffer);
|
||||
}
|
||||
|
||||
void
|
||||
@ -141,24 +209,46 @@ clutter_stage_view_blit_offscreen (ClutterStageView *view,
|
||||
{
|
||||
ClutterStageViewPrivate *priv =
|
||||
clutter_stage_view_get_instance_private (view);
|
||||
CoglMatrix matrix;
|
||||
|
||||
clutter_stage_view_ensure_offscreen_blit_pipeline (view);
|
||||
cogl_framebuffer_push_matrix (priv->framebuffer);
|
||||
if (priv->offscreen)
|
||||
{
|
||||
gboolean can_blit;
|
||||
CoglMatrix matrix;
|
||||
|
||||
/* Set transform so 0,0 is on the top left corner and 1,1 on
|
||||
* the bottom right corner.
|
||||
*/
|
||||
cogl_matrix_init_identity (&matrix);
|
||||
cogl_matrix_translate (&matrix, -1, 1, 0);
|
||||
cogl_matrix_scale (&matrix, 2, -2, 0);
|
||||
cogl_framebuffer_set_projection_matrix (priv->framebuffer, &matrix);
|
||||
clutter_stage_view_ensure_offscreen_blit_pipeline (view);
|
||||
clutter_stage_view_get_offscreen_transformation_matrix (view, &matrix);
|
||||
can_blit = cogl_matrix_is_identity (&matrix);
|
||||
|
||||
cogl_framebuffer_draw_rectangle (priv->framebuffer,
|
||||
priv->pipeline,
|
||||
0, 0, 1, 1);
|
||||
if (priv->shadowfb)
|
||||
{
|
||||
clutter_stage_view_copy_to_framebuffer (view,
|
||||
rect,
|
||||
priv->offscreen_pipeline,
|
||||
priv->offscreen,
|
||||
priv->shadowfb,
|
||||
can_blit);
|
||||
}
|
||||
else
|
||||
{
|
||||
clutter_stage_view_copy_to_framebuffer (view,
|
||||
rect,
|
||||
priv->offscreen_pipeline,
|
||||
priv->offscreen,
|
||||
priv->framebuffer,
|
||||
can_blit);
|
||||
}
|
||||
}
|
||||
|
||||
cogl_framebuffer_pop_matrix (priv->framebuffer);
|
||||
if (priv->shadowfb)
|
||||
{
|
||||
clutter_stage_view_ensure_shadowfb_blit_pipeline (view);
|
||||
clutter_stage_view_copy_to_framebuffer (view,
|
||||
rect,
|
||||
priv->shadowfb_pipeline,
|
||||
priv->shadowfb,
|
||||
priv->framebuffer,
|
||||
TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
float
|
||||
@ -258,6 +348,9 @@ clutter_stage_view_get_property (GObject *object,
|
||||
case PROP_OFFSCREEN:
|
||||
g_value_set_boxed (value, priv->offscreen);
|
||||
break;
|
||||
case PROP_SHADOWFB:
|
||||
g_value_set_boxed (value, priv->shadowfb);
|
||||
break;
|
||||
case PROP_SCALE:
|
||||
g_value_set_float (value, priv->scale);
|
||||
break;
|
||||
@ -303,6 +396,9 @@ clutter_stage_view_set_property (GObject *object,
|
||||
case PROP_OFFSCREEN:
|
||||
priv->offscreen = g_value_dup_boxed (value);
|
||||
break;
|
||||
case PROP_SHADOWFB:
|
||||
priv->shadowfb = g_value_dup_boxed (value);
|
||||
break;
|
||||
case PROP_SCALE:
|
||||
priv->scale = g_value_get_float (value);
|
||||
break;
|
||||
@ -319,8 +415,10 @@ clutter_stage_view_dispose (GObject *object)
|
||||
clutter_stage_view_get_instance_private (view);
|
||||
|
||||
g_clear_pointer (&priv->framebuffer, cogl_object_unref);
|
||||
g_clear_pointer (&priv->shadowfb, cogl_object_unref);
|
||||
g_clear_pointer (&priv->offscreen, cogl_object_unref);
|
||||
g_clear_pointer (&priv->pipeline, cogl_object_unref);
|
||||
g_clear_pointer (&priv->offscreen_pipeline, cogl_object_unref);
|
||||
g_clear_pointer (&priv->shadowfb_pipeline, cogl_object_unref);
|
||||
|
||||
G_OBJECT_CLASS (clutter_stage_view_parent_class)->dispose (object);
|
||||
}
|
||||
@ -375,6 +473,15 @@ clutter_stage_view_class_init (ClutterStageViewClass *klass)
|
||||
G_PARAM_CONSTRUCT_ONLY |
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
obj_props[PROP_SHADOWFB] =
|
||||
g_param_spec_boxed ("shadowfb",
|
||||
"Shadow framebuffer",
|
||||
"Framebuffer used as intermediate shadow buffer",
|
||||
COGL_TYPE_HANDLE,
|
||||
G_PARAM_READWRITE |
|
||||
G_PARAM_CONSTRUCT_ONLY |
|
||||
G_PARAM_STATIC_STRINGS);
|
||||
|
||||
obj_props[PROP_SCALE] =
|
||||
g_param_spec_float ("scale",
|
||||
"View scale",
|
||||
|
@ -226,6 +226,7 @@ static void capture_view_into (ClutterStage *stage,
|
||||
cairo_rectangle_int_t *rect,
|
||||
uint8_t *data,
|
||||
int stride);
|
||||
static void clutter_stage_update_view_perspective (ClutterStage *stage);
|
||||
|
||||
static void clutter_container_iface_init (ClutterContainerIface *iface);
|
||||
|
||||
@ -485,9 +486,9 @@ is_inside_axis_aligned_rectangle (const ClutterPoint *point,
|
||||
const ClutterPoint *vertices)
|
||||
{
|
||||
float min_x = FLT_MAX;
|
||||
float max_x = FLT_MIN;
|
||||
float max_x = -FLT_MAX;
|
||||
float min_y = FLT_MAX;
|
||||
float max_y = FLT_MIN;
|
||||
float max_y = -FLT_MAX;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
@ -1065,10 +1066,7 @@ clutter_stage_emit_key_focus_event (ClutterStage *stage,
|
||||
if (priv->key_focused_actor == NULL)
|
||||
return;
|
||||
|
||||
if (focus_in)
|
||||
g_signal_emit_by_name (priv->key_focused_actor, "key-focus-in");
|
||||
else
|
||||
g_signal_emit_by_name (priv->key_focused_actor, "key-focus-out");
|
||||
_clutter_actor_set_has_key_focus (CLUTTER_ACTOR (stage), focus_in);
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (stage), obj_props[PROP_KEY_FOCUS]);
|
||||
}
|
||||
@ -2354,29 +2352,6 @@ clutter_stage_init (ClutterStage *self)
|
||||
clutter_actor_set_background_color (CLUTTER_ACTOR (self),
|
||||
&default_stage_color);
|
||||
|
||||
priv->perspective.fovy = 60.0; /* 60 Degrees */
|
||||
priv->perspective.aspect = (float) geom.width / (float) geom.height;
|
||||
priv->perspective.z_near = 0.1;
|
||||
priv->perspective.z_far = 100.0;
|
||||
|
||||
cogl_matrix_init_identity (&priv->projection);
|
||||
cogl_matrix_perspective (&priv->projection,
|
||||
priv->perspective.fovy,
|
||||
priv->perspective.aspect,
|
||||
priv->perspective.z_near,
|
||||
priv->perspective.z_far);
|
||||
cogl_matrix_get_inverse (&priv->projection,
|
||||
&priv->inverse_projection);
|
||||
cogl_matrix_init_identity (&priv->view);
|
||||
cogl_matrix_view_2d_in_perspective (&priv->view,
|
||||
priv->perspective.fovy,
|
||||
priv->perspective.aspect,
|
||||
priv->perspective.z_near,
|
||||
50, /* distance to 2d plane */
|
||||
geom.width,
|
||||
geom.height);
|
||||
|
||||
|
||||
/* FIXME - remove for 2.0 */
|
||||
priv->fog.z_near = 1.0;
|
||||
priv->fog.z_far = 2.0;
|
||||
@ -2544,6 +2519,7 @@ clutter_stage_set_perspective (ClutterStage *stage,
|
||||
priv->has_custom_perspective = TRUE;
|
||||
|
||||
clutter_stage_set_perspective_internal (stage, perspective);
|
||||
clutter_stage_update_view_perspective (stage);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2670,6 +2646,7 @@ _clutter_stage_set_viewport (ClutterStage *stage,
|
||||
priv->viewport[2] = width;
|
||||
priv->viewport[3] = height;
|
||||
|
||||
clutter_stage_update_view_perspective (stage);
|
||||
_clutter_stage_dirty_viewport (stage);
|
||||
|
||||
queue_full_redraw (stage);
|
||||
@ -3031,14 +3008,6 @@ clutter_stage_get_title (ClutterStage *stage)
|
||||
return stage->priv->title;
|
||||
}
|
||||
|
||||
static void
|
||||
on_key_focus_destroy (ClutterActor *actor,
|
||||
ClutterStage *stage)
|
||||
{
|
||||
/* unset the key focus */
|
||||
clutter_stage_set_key_focus (stage, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* clutter_stage_set_key_focus:
|
||||
* @stage: the #ClutterStage
|
||||
@ -3078,18 +3047,14 @@ clutter_stage_set_key_focus (ClutterStage *stage,
|
||||
old_focused_actor = priv->key_focused_actor;
|
||||
|
||||
/* set key_focused_actor to NULL before emitting the signal or someone
|
||||
* might hide the previously focused actor in the signal handler and we'd
|
||||
* get re-entrant call and get glib critical from g_object_weak_unref
|
||||
* might hide the previously focused actor in the signal handler
|
||||
*/
|
||||
g_signal_handlers_disconnect_by_func (priv->key_focused_actor,
|
||||
G_CALLBACK (on_key_focus_destroy),
|
||||
stage);
|
||||
priv->key_focused_actor = NULL;
|
||||
|
||||
g_signal_emit_by_name (old_focused_actor, "key-focus-out");
|
||||
_clutter_actor_set_has_key_focus (old_focused_actor, FALSE);
|
||||
}
|
||||
else
|
||||
g_signal_emit_by_name (stage, "key-focus-out");
|
||||
_clutter_actor_set_has_key_focus (CLUTTER_ACTOR (stage), FALSE);
|
||||
|
||||
/* Note, if someone changes key focus in focus-out signal handler we'd be
|
||||
* overriding the latter call below moving the focus where it was originally
|
||||
@ -3099,14 +3064,10 @@ clutter_stage_set_key_focus (ClutterStage *stage,
|
||||
if (actor != NULL)
|
||||
{
|
||||
priv->key_focused_actor = actor;
|
||||
|
||||
g_signal_connect (actor,
|
||||
"destroy", G_CALLBACK (on_key_focus_destroy),
|
||||
stage);
|
||||
g_signal_emit_by_name (priv->key_focused_actor, "key-focus-in");
|
||||
_clutter_actor_set_has_key_focus (actor, TRUE);
|
||||
}
|
||||
else
|
||||
g_signal_emit_by_name (stage, "key-focus-in");
|
||||
_clutter_actor_set_has_key_focus (CLUTTER_ACTOR (stage), TRUE);
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (stage), obj_props[PROP_KEY_FOCUS]);
|
||||
}
|
||||
@ -3506,6 +3467,50 @@ calculate_z_translation (float z_near)
|
||||
+ z_near;
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_stage_update_view_perspective (ClutterStage *stage)
|
||||
{
|
||||
ClutterStagePrivate *priv = stage->priv;
|
||||
ClutterPerspective perspective;
|
||||
float z_2d;
|
||||
|
||||
perspective = priv->perspective;
|
||||
|
||||
/* Ideally we want to regenerate the perspective matrix whenever
|
||||
* the size changes but if the user has provided a custom matrix
|
||||
* then we don't want to override it */
|
||||
if (!priv->has_custom_perspective)
|
||||
{
|
||||
perspective.fovy = 60.0; /* 60 Degrees */
|
||||
perspective.z_near = 0.1;
|
||||
perspective.aspect = priv->viewport[2] / priv->viewport[3];
|
||||
z_2d = calculate_z_translation (perspective.z_near);
|
||||
|
||||
/* NB: z_2d is only enough room for 85% of the stage_height between
|
||||
* the stage and the z_near plane. For behind the stage plane we
|
||||
* want a more consistent gap of 10 times the stage_height before
|
||||
* hitting the far plane so we calculate that relative to the final
|
||||
* height of the stage plane at the z_2d_distance we got... */
|
||||
perspective.z_far = z_2d +
|
||||
tanf (_DEG_TO_RAD (perspective.fovy / 2.0f)) * z_2d * 20.0f;
|
||||
|
||||
clutter_stage_set_perspective_internal (stage, &perspective);
|
||||
}
|
||||
else
|
||||
{
|
||||
z_2d = calculate_z_translation (perspective.z_near);
|
||||
}
|
||||
|
||||
cogl_matrix_init_identity (&priv->view);
|
||||
cogl_matrix_view_2d_in_perspective (&priv->view,
|
||||
perspective.fovy,
|
||||
perspective.aspect,
|
||||
perspective.z_near,
|
||||
z_2d,
|
||||
priv->viewport[2],
|
||||
priv->viewport[3]);
|
||||
}
|
||||
|
||||
void
|
||||
_clutter_stage_maybe_setup_viewport (ClutterStage *stage,
|
||||
ClutterStageView *view)
|
||||
@ -3516,7 +3521,6 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage,
|
||||
if (clutter_stage_view_is_dirty_viewport (view))
|
||||
{
|
||||
cairo_rectangle_int_t view_layout;
|
||||
ClutterPerspective perspective;
|
||||
float fb_scale;
|
||||
float viewport_offset_x;
|
||||
float viewport_offset_y;
|
||||
@ -3524,7 +3528,6 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage,
|
||||
float viewport_y;
|
||||
float viewport_width;
|
||||
float viewport_height;
|
||||
float z_2d;
|
||||
|
||||
CLUTTER_NOTE (PAINT,
|
||||
"Setting up the viewport { w:%f, h:%f }",
|
||||
@ -3544,38 +3547,6 @@ _clutter_stage_maybe_setup_viewport (ClutterStage *stage,
|
||||
viewport_x, viewport_y,
|
||||
viewport_width, viewport_height);
|
||||
|
||||
perspective = priv->perspective;
|
||||
|
||||
/* Ideally we want to regenerate the perspective matrix whenever
|
||||
* the size changes but if the user has provided a custom matrix
|
||||
* then we don't want to override it */
|
||||
if (!priv->has_custom_perspective)
|
||||
{
|
||||
perspective.aspect = priv->viewport[2] / priv->viewport[3];
|
||||
z_2d = calculate_z_translation (perspective.z_near);
|
||||
|
||||
/* NB: z_2d is only enough room for 85% of the stage_height between
|
||||
* the stage and the z_near plane. For behind the stage plane we
|
||||
* want a more consistent gap of 10 times the stage_height before
|
||||
* hitting the far plane so we calculate that relative to the final
|
||||
* height of the stage plane at the z_2d_distance we got... */
|
||||
perspective.z_far = z_2d +
|
||||
tanf (_DEG_TO_RAD (perspective.fovy / 2.0f)) * z_2d * 20.0f;
|
||||
|
||||
clutter_stage_set_perspective_internal (stage, &perspective);
|
||||
}
|
||||
else
|
||||
z_2d = calculate_z_translation (perspective.z_near);
|
||||
|
||||
cogl_matrix_init_identity (&priv->view);
|
||||
cogl_matrix_view_2d_in_perspective (&priv->view,
|
||||
perspective.fovy,
|
||||
perspective.aspect,
|
||||
perspective.z_near,
|
||||
z_2d,
|
||||
priv->viewport[2],
|
||||
priv->viewport[3]);
|
||||
|
||||
clutter_stage_view_set_dirty_viewport (view, FALSE);
|
||||
}
|
||||
|
||||
|
@ -424,6 +424,11 @@ clutter_timeline_set_custom_property (ClutterScriptable *scriptable,
|
||||
g_object_set_property (G_OBJECT (scriptable), name, value);
|
||||
}
|
||||
|
||||
void
|
||||
clutter_timeline_cancel_delay (ClutterTimeline *timeline)
|
||||
{
|
||||
g_clear_handle_id (&timeline->priv->delay_id, g_source_remove);
|
||||
}
|
||||
|
||||
static void
|
||||
clutter_scriptable_iface_init (ClutterScriptableIface *iface)
|
||||
@ -550,11 +555,7 @@ clutter_timeline_dispose (GObject *object)
|
||||
|
||||
priv = self->priv;
|
||||
|
||||
if (priv->delay_id)
|
||||
{
|
||||
g_source_remove (priv->delay_id);
|
||||
priv->delay_id = 0;
|
||||
}
|
||||
clutter_timeline_cancel_delay (self);
|
||||
|
||||
if (priv->progress_notify != NULL)
|
||||
{
|
||||
@ -1213,14 +1214,10 @@ clutter_timeline_pause (ClutterTimeline *timeline)
|
||||
|
||||
priv = timeline->priv;
|
||||
|
||||
if (priv->delay_id == 0 && !priv->is_playing)
|
||||
return;
|
||||
clutter_timeline_cancel_delay (timeline);
|
||||
|
||||
if (priv->delay_id)
|
||||
{
|
||||
g_source_remove (priv->delay_id);
|
||||
priv->delay_id = 0;
|
||||
}
|
||||
if (!priv->is_playing)
|
||||
return;
|
||||
|
||||
priv->msecs_delta = 0;
|
||||
set_is_playing (timeline, FALSE);
|
||||
|
@ -134,7 +134,6 @@ clutter_transition_stopped (ClutterTimeline *timeline,
|
||||
clutter_transition_detach (CLUTTER_TRANSITION (timeline),
|
||||
priv->animatable);
|
||||
g_clear_object (&priv->animatable);
|
||||
g_object_unref (timeline);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -204,7 +204,7 @@ clutter_stage_cogl_schedule_update (ClutterStageWindow *stage_window,
|
||||
if (max_render_time_allowed <= 0)
|
||||
{
|
||||
g_warning ("Unsupported monitor refresh rate detected. "
|
||||
"(Refresh rate: %.3f, refresh interval: %ld)",
|
||||
"(Refresh rate: %.3f, refresh interval: %" G_GINT64_FORMAT ")",
|
||||
refresh_rate,
|
||||
refresh_interval);
|
||||
stage_cogl->update_time = now;
|
||||
@ -526,11 +526,7 @@ paint_stage (ClutterStageCogl *stage_cogl,
|
||||
_clutter_stage_maybe_setup_viewport (stage, view);
|
||||
_clutter_stage_paint_view (stage, view, clip);
|
||||
|
||||
if (clutter_stage_view_get_onscreen (view) !=
|
||||
clutter_stage_view_get_framebuffer (view))
|
||||
{
|
||||
clutter_stage_view_blit_offscreen (view, clip);
|
||||
}
|
||||
clutter_stage_view_blit_offscreen (view, clip);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -62,7 +62,7 @@ if have_introspection
|
||||
],
|
||||
extra_args: introspection_args + [
|
||||
'-UCOGL_COMPILATION',
|
||||
'-DG_LOG_DOMAIN=\"CoglPango\"',
|
||||
'-DG_LOG_DOMAIN="CoglPango"',
|
||||
],
|
||||
install_dir_gir: pkglibdir,
|
||||
install_dir_typelib: pkglibdir,
|
||||
|
@ -1374,6 +1374,11 @@ cogl_blit_framebuffer (CoglFramebuffer *src,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Make sure any batched primitives get submitted to the driver
|
||||
* before blitting
|
||||
*/
|
||||
_cogl_framebuffer_flush_journal (src);
|
||||
|
||||
/* Make sure the current framebuffers are bound. We explicitly avoid
|
||||
flushing the clip state so we can bind our own empty state */
|
||||
_cogl_framebuffer_flush_state (dest,
|
||||
|
@ -45,18 +45,6 @@ struct _CoglTextureDriver
|
||||
GLenum gl_target,
|
||||
CoglPixelFormat internal_format);
|
||||
|
||||
/*
|
||||
* This sets up the glPixelStore state for an upload to a destination with
|
||||
* the same size, and with no offset.
|
||||
*/
|
||||
/* NB: GLES can't upload a sub region of pixel data from a larger source
|
||||
* buffer which is why this interface is limited. The GL driver has a more
|
||||
* flexible version of this function that is uses internally */
|
||||
void
|
||||
(* prep_gl_for_pixels_upload) (CoglContext *ctx,
|
||||
int pixels_rowstride,
|
||||
int pixels_bpp);
|
||||
|
||||
/*
|
||||
* This uploads a sub-region from source_bmp to a single GL texture
|
||||
* handle (i.e a single CoglTexture slice)
|
||||
|
@ -132,14 +132,6 @@ prep_gl_for_pixels_upload_full (CoglContext *ctx,
|
||||
_cogl_texture_gl_prep_alignment_for_pixels_upload (ctx, pixels_rowstride);
|
||||
}
|
||||
|
||||
static void
|
||||
_cogl_texture_driver_prep_gl_for_pixels_upload (CoglContext *ctx,
|
||||
int pixels_rowstride,
|
||||
int pixels_bpp)
|
||||
{
|
||||
prep_gl_for_pixels_upload_full (ctx, pixels_rowstride, 0, 0, 0, pixels_bpp);
|
||||
}
|
||||
|
||||
/* OpenGL - unlike GLES - can download pixel data into a sub region of
|
||||
* a larger destination buffer */
|
||||
static void
|
||||
@ -430,7 +422,6 @@ const CoglTextureDriver
|
||||
_cogl_texture_driver_gl =
|
||||
{
|
||||
_cogl_texture_driver_gen,
|
||||
_cogl_texture_driver_prep_gl_for_pixels_upload,
|
||||
_cogl_texture_driver_upload_subregion_to_gl,
|
||||
_cogl_texture_driver_upload_to_gl,
|
||||
_cogl_texture_driver_prep_gl_for_pixels_download,
|
||||
|
@ -453,7 +453,6 @@ const CoglTextureDriver
|
||||
_cogl_texture_driver_gles =
|
||||
{
|
||||
_cogl_texture_driver_gen,
|
||||
_cogl_texture_driver_prep_gl_for_pixels_upload,
|
||||
_cogl_texture_driver_upload_subregion_to_gl,
|
||||
_cogl_texture_driver_upload_to_gl,
|
||||
_cogl_texture_driver_prep_gl_for_pixels_download,
|
||||
|
@ -329,6 +329,8 @@ try_create_context (CoglDisplay *display,
|
||||
if (renderer->driver == COGL_DRIVER_GL ||
|
||||
renderer->driver == COGL_DRIVER_GL3)
|
||||
eglBindAPI (EGL_OPENGL_API);
|
||||
else if (renderer->driver == COGL_DRIVER_GLES2)
|
||||
eglBindAPI (EGL_OPENGL_ES_API);
|
||||
|
||||
egl_attributes_from_framebuffer_config (display,
|
||||
&display->onscreen_template->config,
|
||||
@ -406,7 +408,7 @@ try_create_context (CoglDisplay *display,
|
||||
&value);
|
||||
|
||||
if (value != EGL_CONTEXT_PRIORITY_HIGH_IMG)
|
||||
g_warning ("Failed to obtain high priority context");
|
||||
g_message ("Failed to obtain high priority context");
|
||||
}
|
||||
|
||||
if (egl_renderer->platform_vtable->context_created &&
|
||||
|
@ -61,6 +61,9 @@
|
||||
/* XKB base prefix */
|
||||
#mesondefine XKB_BASE
|
||||
|
||||
/* Whether <sys/prctl.h> exists and it defines prctl() */
|
||||
#mesondefine HAVE_SYS_PRCTL
|
||||
|
||||
/* Either <sys/random.h> or <linux/random.h> */
|
||||
#mesondefine HAVE_SYS_RANDOM
|
||||
#mesondefine HAVE_LINUX_RANDOM
|
||||
|
@ -1,5 +1,5 @@
|
||||
project('mutter', 'c',
|
||||
version: '3.33.91',
|
||||
version: '3.34.5',
|
||||
meson_version: '>= 0.50.0',
|
||||
license: 'GPLv2+'
|
||||
)
|
||||
@ -286,6 +286,9 @@ foreach function : required_functions
|
||||
endif
|
||||
endforeach
|
||||
|
||||
if host_machine.cpu_family() == 'x86'
|
||||
add_project_arguments('-ffloat-store', language: 'c')
|
||||
endif
|
||||
add_project_arguments('-D_GNU_SOURCE', language: 'c')
|
||||
|
||||
buildtype = get_option('buildtype')
|
||||
@ -363,6 +366,10 @@ cdata.set('HAVE_PROFILER', have_profiler)
|
||||
xkb_base = xkeyboard_config_dep.get_pkgconfig_variable('xkb_base')
|
||||
cdata.set_quoted('XKB_BASE', xkb_base)
|
||||
|
||||
if cc.has_header_symbol('sys/prctl.h', 'prctl')
|
||||
cdata.set('HAVE_SYS_PRCTL', 1)
|
||||
endif
|
||||
|
||||
if have_wayland
|
||||
xwayland_path = get_option('xwayland_path')
|
||||
if xwayland_path == ''
|
||||
|
6
po/ca.po
6
po/ca.po
@ -189,7 +189,7 @@ msgstr "Canvia entre el mode a pantalla completa"
|
||||
|
||||
#: data/50-mutter-windows.xml:12
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "Canvia l'estat de maximització"
|
||||
msgstr "Canvia l'estat de maximització"
|
||||
|
||||
#: data/50-mutter-windows.xml:14
|
||||
msgid "Maximize window"
|
||||
@ -218,8 +218,8 @@ msgstr "Redimensiona la finestra"
|
||||
#: data/50-mutter-windows.xml:27
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr ""
|
||||
"Canvia la funció que fa que la finestra estigui en tots els espais de "
|
||||
"treball o només en un"
|
||||
"Canvia la funció que fa que la finestra estigui en tots els espais de "
|
||||
"treball o només en un"
|
||||
|
||||
#: data/50-mutter-windows.xml:29
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
|
114
po/cs.po
114
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: 2019-02-04 17:52+0000\n"
|
||||
"PO-Revision-Date: 2019-02-12 14:21+0100\n"
|
||||
"POT-Creation-Date: 2019-08-06 00:49+0000\n"
|
||||
"PO-Revision-Date: 2019-09-03 22:19+0200\n"
|
||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||
"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
|
||||
"Language: cs\n"
|
||||
@ -396,7 +396,10 @@ 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."
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires 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é "
|
||||
@ -407,21 +410,32 @@ 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."
|
||||
"restart. • „rt-scheduler“ – zajistí, aby měly požadavky mutter nízkou "
|
||||
"prioritu v plánování reálného času. Spustitelný soubor nebo uživatel musí "
|
||||
"mít CAP_SYS_NICE. Vyžaduje restart. • „autostart-xwayland“ – inicializuje "
|
||||
"Xwayland líněji v situaci, kdy existují klienti X11. Vyžaduje restart."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "Modifikátor ke zjištění pozice ukazatele"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "Tato klávesa spustí činnost „zjisti polohu ukazatele“."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Vybrat okno z překryvné nabídky tabulátoru"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Zrušit překryvné okno tabulátoru"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Přepnout nastavení monitoru"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Postupně mění vestavěná nastavení monitoru"
|
||||
|
||||
@ -478,29 +492,39 @@ msgid "Re-enable shortcuts"
|
||||
msgstr "Znovu povolit klávesové zkratky"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "Povolit zachytávání pomocí Xwaylandu"
|
||||
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr ""
|
||||
"Povolit X11 zachytávání, aby mohl zabrat zaměření klávesnice pomocí Xwaylandu"
|
||||
|
||||
#: 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”."
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
"which map an “override redirect” window (which do not receive keyboard "
|
||||
"focus) and issue a keyboard grab to force all keyboard events to that "
|
||||
"window. This option is seldom used and has no effect on regular X11 windows "
|
||||
"which can receive keyboard focus under normal circumstances. 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 ""
|
||||
"Povolit, aby bylo bráno v úvahu zachytávání kláves, o které se stará "
|
||||
"aplikace X11 běžící v Xwaylandu. Aby bylo pod Waylandem zachytávání bráno v "
|
||||
"Umožňujs směrovat všechny události klávesnice do oken X11 typu „přebytí "
|
||||
"přesměrování“ pomocí zachytávání při běhu Xwaylandu. Tato volba je určena pro "
|
||||
"podporu klientů X11, kteří mapují okna „přebytí přesměrování“ (která "
|
||||
"nepřijímají zaměření klávesnice) a vynucuje zachytávání klávesnice zasílat "
|
||||
"všechny události klávesnice do těchto oken. Tato volba je využívána jen "
|
||||
"zřídka a nemá žádný vliv na běžná okna X11, která mohou přijímat zaměření "
|
||||
"klávesnice za normálních podmínek. Aby bylo pod Waylandem zachytávání bráno v "
|
||||
"úvahu, musí klient navíc buď poslat specifickou zprávu X11 ClientMessage do "
|
||||
"kořenového okna, nebo být mezi aplikacemi na bílé listině v klíči „xwayland-"
|
||||
"grab-access-rules“."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr ""
|
||||
"Aplikace pod Xwaylandem mají povoleno se starat o zachytávání klávesnice"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:85
|
||||
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 "
|
||||
@ -527,7 +551,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2423
|
||||
#: src/backends/meta-input-settings.c:2531
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Přepínač režimu (skupina %d)"
|
||||
@ -535,34 +559,34 @@ msgstr "Přepínač režimu (skupina %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2446
|
||||
#: src/backends/meta-input-settings.c:2554
|
||||
msgid "Switch monitor"
|
||||
msgstr "Přepnout monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2448
|
||||
#: src/backends/meta-input-settings.c:2556
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Zobrazit nápovědu na obrazovce"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:954
|
||||
#: src/backends/meta-monitor.c:223
|
||||
msgid "Built-in display"
|
||||
msgstr "Vestavěný displej"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:986
|
||||
#: src/backends/meta-monitor.c:252
|
||||
msgid "Unknown"
|
||||
msgstr "Neznámý"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:988
|
||||
#: src/backends/meta-monitor.c:254
|
||||
msgid "Unknown Display"
|
||||
msgstr "Neznámý displej"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:996
|
||||
#: src/backends/meta-monitor.c:262
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1004
|
||||
#: src/backends/meta-monitor.c:270
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name followed by product/model name where size in "
|
||||
@ -570,15 +594,20 @@ msgctxt ""
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. Translators: this string will appear in Sysprof
|
||||
#: src/backends/meta-profiler.c:82
|
||||
msgid "Compositor"
|
||||
msgstr "Kompozitor"
|
||||
|
||||
#. 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:482
|
||||
#: src/compositor/compositor.c:510
|
||||
#, c-format
|
||||
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:252
|
||||
#: src/core/bell.c:192
|
||||
msgid "Bell event"
|
||||
msgstr "Událost zvonku"
|
||||
|
||||
@ -627,16 +656,16 @@ msgid "Run with X11 backend"
|
||||
msgstr "Spustit se serverem X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
#: src/core/meta-close-dialog-default.c:151
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "„%s“ nereaguje."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:152
|
||||
#: src/core/meta-close-dialog-default.c:153
|
||||
msgid "Application is not responding."
|
||||
msgstr "Aplikace nereaguje."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:157
|
||||
#: src/core/meta-close-dialog-default.c:158
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -644,11 +673,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:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Vynutit ukončení"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Wait"
|
||||
msgstr "_Počkat"
|
||||
|
||||
@ -676,7 +705,7 @@ msgstr "Vypsat verzi"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Zásuvný modul Mutter, který se má použít"
|
||||
|
||||
#: src/core/prefs.c:1786
|
||||
#: src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Plocha %d"
|
||||
@ -690,7 +719,7 @@ 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/meta-x11-display.c:666
|
||||
#: src/x11/meta-x11-display.c:671
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -699,20 +728,25 @@ 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:1008
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Selhala inicializace GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
#: src/x11/meta-x11-display.c:1056
|
||||
#, 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:1115
|
||||
#: src/x11/meta-x11-display.c:1140
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Obrazovka %d na displeji „%s“ je neplatná\n"
|
||||
|
||||
#: src/x11/meta-x11-selection-input-stream.c:445
|
||||
#, c-format
|
||||
msgid "Format %s not supported"
|
||||
msgstr "Formát %s není podporován"
|
||||
|
||||
#: src/x11/session.c:1821
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
@ -721,7 +755,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:568
|
||||
#: src/x11/window-props.c:569
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (na %s)"
|
||||
|
166
po/da.po
166
po/da.po
@ -1,5 +1,5 @@
|
||||
# Danish translation of Mutter.
|
||||
# Copyright (C) 2002-2009, 2012-2018.
|
||||
# Copyright (C) 2002-2009, 2012-2019.
|
||||
# This file is distributed under the same license as the metacity package.
|
||||
# Kjartan Maraas <kmaraas@gnome.org>, 2002
|
||||
# Keld simonsen <keld@dkuug.dk>, 2002
|
||||
@ -8,7 +8,7 @@
|
||||
# Lasse Bang Mikkelsen <lbm@fatalerror.dk>, 2006.
|
||||
# Kenneth Nielsen <k.nielsen81@gmail.com>, 2008.
|
||||
# Joe Hansen <joedalton2@yahoo.dk>, 2011.
|
||||
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2007, 09, 10, 12, 13, 14, 15, 16, 17, 18.
|
||||
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2007, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19.
|
||||
#
|
||||
# Ordliste:
|
||||
#
|
||||
@ -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: 2019-02-04 17:52+0000\n"
|
||||
"PO-Revision-Date: 2019-02-12 19:50+0100\n"
|
||||
"POT-Creation-Date: 2019-10-02 04:01+0000\n"
|
||||
"PO-Revision-Date: 2019-10-03 19:37+0200\n"
|
||||
"Last-Translator: Alan Mortensen <alanmortensen.am@gmail.com>\n"
|
||||
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
|
||||
"Language: da\n"
|
||||
@ -404,32 +404,48 @@ 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."
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires restart."
|
||||
msgstr ""
|
||||
"For at slå eksperimentelle funktioner til, skal du tilføje "
|
||||
"funktionsnøgleordet til listen. Om funktionen kræver genstart af "
|
||||
"kompositoren afhænger af den givne funktion. Der er ingen garanti for at "
|
||||
"eksperimentelle funktion forbliver tilgængelige eller mulige at konfigurere. "
|
||||
"Forvent ikke at noget i denne indstilling nødvendigvis fungerer i fremtiden. "
|
||||
"Mulige nøgleord i øjeblikket: • “scale-monitor-framebuffer” — får mutter til "
|
||||
"som standard at arrangere logiske skærme i et logisk pixelkoordinatrum, mens "
|
||||
"skærmes framebuffere skaleres frem for vinduesindholdet for at håndtere "
|
||||
"HiDPI-skærme. Kræver ikke genstart."
|
||||
"kompositoren afhænger af den givne funktion. Der er ingen garanti for, at "
|
||||
"eksperimentelle funktioner forbliver tilgængelige eller mulige at "
|
||||
"konfigurere. Forvent ikke at noget i denne indstilling nødvendigvis fungerer "
|
||||
"i fremtiden. Mulige nøgleord i øjeblikket: • “scale-monitor-framebuffer” — "
|
||||
"får mutter til som standard at arrangere logiske skærme i et logisk "
|
||||
"pixelkoordinatrum, mens skærmes framebuffere skaleres frem for "
|
||||
"vinduesindholdet for at håndtere HiDPI-skærme. Kræver ikke genstart. • “rt-"
|
||||
"scheduler” — får mutter til at anmode om en lav prioritet til realtids-"
|
||||
"prioritetstildeling. Den eksekverbare fil eller brugeren skal have "
|
||||
"CAP_SYS_NICE. Kræver genstart. • “autostart-xwayland” — venter med at "
|
||||
"initialisere Xwayland indtil det er nødvendigt, hvis der er X11-klienter. "
|
||||
"Kræver genstart."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "Modifikationstast til at finde markøren"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "Denne tast starter handlingen “find markør”."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Vælg vindue fra tab-pop-op"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Annullér faneblads-pop-op"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Skift skærmkonfiguration"
|
||||
|
||||
# Mærkelig ting at rotere. De mener nok at skifte cyclisk mellem nogle stykker, men "built-in"?
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Roterer den indbyggede skærmkonfiguration"
|
||||
|
||||
@ -486,27 +502,37 @@ msgid "Re-enable shortcuts"
|
||||
msgstr "Genaktivér genveje"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "Tillad indfangelse med Xwayland"
|
||||
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr "Tillad X11-indfangelse at låse tastaturfokus med 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”."
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
"which map an “override redirect” window (which do not receive keyboard "
|
||||
"focus) and issue a keyboard grab to force all keyboard events to that "
|
||||
"window. This option is seldom used and has no effect on regular X11 windows "
|
||||
"which can receive keyboard focus under normal circumstances. 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 ""
|
||||
"Tillad tastaturindfangelse af X11-programmer, som kører i Xwayland. For at "
|
||||
"en X11-tastaturindfangelse behandles i Wayland, skal klienten også enten "
|
||||
"sende en specifik X11-ClientMessage til rodvinduet eller være blandt de "
|
||||
"godkendte programmer i nøglen “xwayland-grab-access-rules”."
|
||||
"Tillad at alle tastaturbegivenheder sendes til X11-vinduer med “override "
|
||||
"redirect” via indfangelse ved kørsel i Xwayland. Denne indstilling er der "
|
||||
"for at understøtte X11-klienter, som afbilder et “override redirect”-vindue "
|
||||
"(som ikke modtager tastaturfokus) og udsende en tastaturindfangelse, som "
|
||||
"tvinger alle tastaturbegivenheder til dét vindue. Denne indstilling bruges "
|
||||
"sjældent, og har ingen virkning på normale X11-vinduer, som kan modtage "
|
||||
"tastaturfokus under normale omstændigheder. For at en X11-"
|
||||
"tastaturindfangelse behandles i Wayland, skal klienten også enten sende en "
|
||||
"specifik X11-ClientMessage til rodvinduet eller være blandt de godkendte "
|
||||
"programmer i nøglen “xwayland-grab-access-rules”."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr "Xwayland-programmer, som må indfange tastatur"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:85
|
||||
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 "
|
||||
@ -533,7 +559,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2423
|
||||
#: src/backends/meta-input-settings.c:2532
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Tilstandsskift (Gruppe %d)"
|
||||
@ -541,110 +567,113 @@ msgstr "Tilstandsskift (Gruppe %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2446
|
||||
#: src/backends/meta-input-settings.c:2555
|
||||
msgid "Switch monitor"
|
||||
msgstr "Skift skærm"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2448
|
||||
#: src/backends/meta-input-settings.c:2557
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Vis integreret hjælp"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:954
|
||||
#: src/backends/meta-monitor.c:223
|
||||
msgid "Built-in display"
|
||||
msgstr "Indbygget terminal"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:986
|
||||
#: src/backends/meta-monitor.c:252
|
||||
msgid "Unknown"
|
||||
msgstr "Ukendt"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:988
|
||||
#: src/backends/meta-monitor.c:254
|
||||
msgid "Unknown Display"
|
||||
msgstr "Ukendt terminal"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:996
|
||||
#: src/backends/meta-monitor.c:262
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1004
|
||||
#: src/backends/meta-monitor.c:270
|
||||
#, c-format
|
||||
#| msgid "%s %s"
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name followed by product/model name where size in "
|
||||
"inches could not be calculated, e.g. Dell U2414H"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. Translators: this string will appear in Sysprof
|
||||
#: src/backends/meta-profiler.c:82
|
||||
msgid "Compositor"
|
||||
msgstr "Kompositor"
|
||||
|
||||
#. 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:482
|
||||
#: src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr ""
|
||||
"En anden komposithåndtering kører allerede på skærm %i på terminal “%s”."
|
||||
msgstr "Der kører allerede en anden kompositor på skærm %i på terminal “%s”."
|
||||
|
||||
#: src/core/bell.c:252
|
||||
#: src/core/bell.c:192
|
||||
msgid "Bell event"
|
||||
msgstr "Bip-hændelse"
|
||||
|
||||
#: src/core/main.c:185
|
||||
#: src/core/main.c:190
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Deaktivér forbindelse til sessionshåndtering"
|
||||
|
||||
#: src/core/main.c:191
|
||||
#: src/core/main.c:196
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Erstat den kørende vindueshåndtering"
|
||||
|
||||
#: src/core/main.c:197
|
||||
#: src/core/main.c:202
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Angiv sessionhåndterings-id"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:207
|
||||
msgid "X Display to use"
|
||||
msgstr "X-terminal som bruges"
|
||||
|
||||
#: src/core/main.c:208
|
||||
#: src/core/main.c:213
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Initialisér session fra gemt fil"
|
||||
|
||||
#: src/core/main.c:214
|
||||
#: src/core/main.c:219
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Gør kald til X synkrone"
|
||||
|
||||
#: src/core/main.c:221
|
||||
#: src/core/main.c:226
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Kør som en wayland-kompositor"
|
||||
|
||||
#: src/core/main.c:227
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Kør som en indlejret kompositor"
|
||||
|
||||
#: src/core/main.c:233
|
||||
#: src/core/main.c:238
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Kør wayland-kompositoren uden at starte Xwayland"
|
||||
|
||||
#: src/core/main.c:241
|
||||
#: src/core/main.c:246
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Kør som fuld terminalserver, frem for indlejret"
|
||||
|
||||
#: src/core/main.c:247
|
||||
#: src/core/main.c:252
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Kør med X11-motor"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
#: src/core/meta-close-dialog-default.c:151
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” svarer ikke."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:152
|
||||
#: src/core/meta-close-dialog-default.c:153
|
||||
msgid "Application is not responding."
|
||||
msgstr "Program svarer ikke."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:157
|
||||
#: src/core/meta-close-dialog-default.c:158
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -652,11 +681,11 @@ msgstr ""
|
||||
"Du kan vælge at vente et lille stykke tid på at programmet fortsætter, eller "
|
||||
"du kan tvinge programmet til at afslutte fuldstændigt."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Tving til at afslutte"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Wait"
|
||||
msgstr "_Vent"
|
||||
|
||||
@ -683,21 +712,21 @@ msgstr "Vis version"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Mutter-udvidelsesmodul der skal bruges"
|
||||
|
||||
#: src/core/prefs.c:1786
|
||||
#: src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Arbejdsområde %d"
|
||||
|
||||
#: src/core/util.c:121
|
||||
#: src/core/util.c:122
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter blev kompileret uden understøttelse for uddybende tilstand\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:568
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Tilstandsskift: Tilstand %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#: src/x11/meta-x11-display.c:679
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -706,20 +735,25 @@ msgstr ""
|
||||
"Terminalen “%s” har allerede en vindueshåndtering; prøv tilvalget --replace "
|
||||
"for at erstatte den aktuelle vindueshåndtering."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1008
|
||||
#: src/x11/meta-x11-display.c:1040
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Kunne ikke klargøre GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
#: src/x11/meta-x11-display.c:1064
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Kunne ikke åbne X Window System-terminalen “%s”\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1115
|
||||
#: src/x11/meta-x11-display.c:1147
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Skærm %d på terminal “%s” er ugyldig\n"
|
||||
|
||||
#: src/x11/meta-x11-selection-input-stream.c:445
|
||||
#, c-format
|
||||
msgid "Format %s not supported"
|
||||
msgstr "Formatet %s understøttes ikke"
|
||||
|
||||
#: src/x11/session.c:1821
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
@ -729,7 +763,7 @@ msgstr ""
|
||||
"manuelt næste gang, du logger på."
|
||||
|
||||
# Lad os håbe dette er rigtigt
|
||||
#: src/x11/window-props.c:568
|
||||
#: src/x11/window-props.c:569
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (på %s)"
|
||||
|
10
po/de.po
10
po/de.po
@ -14,8 +14,8 @@ msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2019-08-06 00:49+0000\n"
|
||||
"PO-Revision-Date: 2019-08-24 21:36+0200\n"
|
||||
"Last-Translator: Tim Sabsch <tim@sabsch.com>\n"
|
||||
"PO-Revision-Date: 2019-09-05 23:42+0200\n"
|
||||
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
|
||||
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -152,13 +152,15 @@ msgstr "Zur Arbeitsfläche 4 wechseln"
|
||||
msgid "Switch to last workspace"
|
||||
msgstr "Zur letzten Arbeitsfläche wechseln"
|
||||
|
||||
# Wechsel der Arbeitsfläche. Es wird nichts verschoben.
|
||||
#: data/50-mutter-navigation.xml:123
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Auf Arbeitsfläche darüber verschieben"
|
||||
msgstr "Zur Arbeitsfläche darüber wechseln"
|
||||
|
||||
# Wechsel der Arbeitsfläche. Es wird nichts verschoben.
|
||||
#: data/50-mutter-navigation.xml:126
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Auf Arbeitsfläche darunter verschieben"
|
||||
msgstr "Zur Arbeitsfläche darunter wechseln"
|
||||
|
||||
#: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6
|
||||
msgid "System"
|
||||
|
208
po/en_GB.po
208
po/en_GB.po
@ -6,21 +6,22 @@
|
||||
# Philip Withnall <philip@tecnocode.co.uk>, 2010.
|
||||
# Chris Leonard <cjlhomeaddress@gmail.com>, 2012.
|
||||
# Bruce Cowan <bruce@bcowan.me.uk>, 2011, 2012, 2013, 2018.
|
||||
# Zander Brown <zbrown@gnome.org>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\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"
|
||||
"POT-Creation-Date: 2019-11-22 01:35+0000\n"
|
||||
"PO-Revision-Date: 2019-08-25 15:11+0100\n"
|
||||
"Last-Translator: Zander Brown <zbrown@gnome.org>\n"
|
||||
"Language-Team: English - United Kingdom <en_GB@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: Poedit 2.0.7\n"
|
||||
"X-Generator: Gtranslator 3.32.1\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
@ -256,11 +257,6 @@ 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 "
|
||||
@ -305,10 +301,6 @@ 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 "
|
||||
"static number of workspaces (determined by the num-workspaces key in org."
|
||||
@ -347,10 +339,6 @@ 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 "
|
||||
@ -365,9 +353,6 @@ 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 "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
@ -412,7 +397,10 @@ 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."
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires restart."
|
||||
msgstr ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
"Whether the feature requires restarting the compositor depends on the given "
|
||||
@ -421,22 +409,32 @@ msgstr ""
|
||||
"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."
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initialises Xwayland lazily if there are X11 clients. Requires restart."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "Modifier to use to locate the pointer"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "This key will initiate the “locate pointer” action."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Select window from tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Cancel tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
#| msgid "Switch monitor"
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Switch monitor configurations"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Rotates the built-in monitor configuration"
|
||||
|
||||
@ -493,28 +491,36 @@ 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"
|
||||
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr "Allow X11 grabs to lock keyboard focus 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”."
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
"which map an “override redirect” window (which do not receive keyboard "
|
||||
"focus) and issue a keyboard grab to force all keyboard events to that "
|
||||
"window. This option is seldom used and has no effect on regular X11 windows "
|
||||
"which can receive keyboard focus under normal circumstances. 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”."
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
"which map an “override redirect” window (which do not receive keyboard "
|
||||
"focus) and issue a keyboard grab to force all keyboard events to that "
|
||||
"window. This option is seldom used and has no effect on regular X11 windows "
|
||||
"which can receive keyboard focus under normal circumstances. 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
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
|
||||
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
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:85
|
||||
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 "
|
||||
@ -541,114 +547,122 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#: src/backends/meta-input-settings.c:2528
|
||||
#, 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
|
||||
#: src/backends/meta-input-settings.c:2551
|
||||
msgid "Switch monitor"
|
||||
msgstr "Switch monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
#: src/backends/meta-input-settings.c:2553
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Show on-screen help"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:907
|
||||
#: src/backends/meta-monitor.c:223
|
||||
msgid "Built-in display"
|
||||
msgstr "Built-in display"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:930
|
||||
#: src/backends/meta-monitor.c:252
|
||||
msgid "Unknown"
|
||||
msgstr "Unknown"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:932
|
||||
#: src/backends/meta-monitor.c:254
|
||||
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:940
|
||||
#: src/backends/meta-monitor.c:262
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#: src/backends/meta-monitor.c:270
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name followed by product/model name where size in "
|
||||
"inches could not be calculated, e.g. Dell U2414H"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. Translators: this string will appear in Sysprof
|
||||
#: src/backends/meta-profiler.c:79
|
||||
msgid "Compositor"
|
||||
msgstr "Compositor"
|
||||
|
||||
#. 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:481
|
||||
#: src/compositor/compositor.c:533
|
||||
#, 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”."
|
||||
msgstr ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
|
||||
#: src/core/bell.c:254
|
||||
#: src/core/bell.c:192
|
||||
msgid "Bell event"
|
||||
msgstr "Bell event"
|
||||
|
||||
#: src/core/main.c:191
|
||||
#: src/core/main.c:190
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Disable connection to session manager"
|
||||
|
||||
#: src/core/main.c:197
|
||||
#: src/core/main.c:196
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Replace the running window manager"
|
||||
|
||||
#: src/core/main.c:203
|
||||
#: src/core/main.c:202
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specify session management ID"
|
||||
|
||||
#: src/core/main.c:208
|
||||
#: src/core/main.c:207
|
||||
msgid "X Display to use"
|
||||
msgstr "X Display to use"
|
||||
|
||||
#: src/core/main.c:214
|
||||
#: src/core/main.c:213
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Initialise session from savefile"
|
||||
|
||||
#: src/core/main.c:220
|
||||
#: src/core/main.c:219
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Make X calls synchronous"
|
||||
|
||||
#: src/core/main.c:227
|
||||
#: src/core/main.c:226
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Run as a wayland compositor"
|
||||
|
||||
#: src/core/main.c:233
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Run as a nested compositor"
|
||||
|
||||
#: src/core/main.c:239
|
||||
#: src/core/main.c:238
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Run wayland compositor without starting Xwayland"
|
||||
|
||||
#: src/core/main.c:247
|
||||
#: src/core/main.c:246
|
||||
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
|
||||
#: src/core/main.c:252
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Run with X11 backend"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:148
|
||||
#: src/core/meta-close-dialog-default.c:151
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” is not responding."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
#: src/core/meta-close-dialog-default.c:153
|
||||
msgid "Application is not responding."
|
||||
msgstr "Application is not responding."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:155
|
||||
#: src/core/meta-close-dialog-default.c:158
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -656,22 +670,16 @@ msgstr ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Force Quit"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:162
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Wait"
|
||||
msgstr "_Wait"
|
||||
|
||||
#: src/core/mutter.c:39
|
||||
#: src/core/mutter.c:38
|
||||
#, 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 © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
@ -685,33 +693,30 @@ msgstr ""
|
||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
|
||||
"PARTICULAR PURPOSE.\n"
|
||||
|
||||
#: src/core/mutter.c:53
|
||||
#: src/core/mutter.c:52
|
||||
msgid "Print version"
|
||||
msgstr "Print version"
|
||||
|
||||
#: src/core/mutter.c:59
|
||||
#: src/core/mutter.c:58
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Mutter plugin to use"
|
||||
|
||||
#: src/core/prefs.c:1915
|
||||
#: src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Workspace %d"
|
||||
|
||||
#: src/core/util.c:120
|
||||
#: src/core/util.c:122
|
||||
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:567
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:568
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Mode Switch: Mode %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#: src/x11/meta-x11-display.c:675
|
||||
#, c-format
|
||||
#| msgid ""
|
||||
#| "Display \"%s\" already has a window manager; try using the --replace "
|
||||
#| "option to replace the current window manager."
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
@ -719,26 +724,26 @@ msgstr ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1010
|
||||
#: src/x11/meta-x11-display.c:1036
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Failed to initialise GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1034
|
||||
#: src/x11/meta-x11-display.c:1060
|
||||
#, 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
|
||||
#: src/x11/meta-x11-display.c:1143
|
||||
#, 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."
|
||||
#: src/x11/meta-x11-selection-input-stream.c:460
|
||||
#, c-format
|
||||
msgid "Format %s not supported"
|
||||
msgstr "Format %s not supported"
|
||||
|
||||
#: src/x11/session.c:1821
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@ -746,7 +751,7 @@ 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
|
||||
#: src/x11/window-props.c:569
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (on %s)"
|
||||
@ -2033,9 +2038,6 @@ msgstr "%s (on %s)"
|
||||
#~ msgid "Commands to run in response to keybindings"
|
||||
#~ msgstr "Commands to run in response to keybindings"
|
||||
|
||||
#~ msgid "Compositing Manager"
|
||||
#~ msgstr "Compositing Manager"
|
||||
|
||||
#~ msgid "Control how new windows get focus"
|
||||
#~ msgstr "Control how new windows get focus"
|
||||
|
||||
|
157
po/fr.po
157
po/fr.po
@ -11,25 +11,24 @@
|
||||
# Cyprien Le Pannérer <cyplp@free.fr>, 2006.
|
||||
# Robert-André Mauchin <zebob.m@gmail.com>, 2007.
|
||||
# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2007.
|
||||
# Claude Paroz <claude@2xlibre.net>, 2008-2018.
|
||||
# Bruno Brouard <annoa.b@gmail.com>, 2011-12.
|
||||
# Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>, 2017.
|
||||
# Charles Monzat <charles.monzat@numericable.fr>, 2016-2018.
|
||||
# Claude Paroz <claude@2xlibre.net>, 2008-2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2019-02-09 11:19+0000\n"
|
||||
"PO-Revision-Date: 2019-02-09 12:20+0100\n"
|
||||
"Last-Translator: Charles Monzat <charles.monzat@numericable.fr>\n"
|
||||
"Language-Team: français <gnomefr@traduc.org>\n"
|
||||
"POT-Creation-Date: 2019-09-01 14:53+0000\n"
|
||||
"PO-Revision-Date: 2019-09-06 08:23+0200\n"
|
||||
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
|
||||
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
|
||||
"Language: fr\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 3.30.0\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -177,7 +176,7 @@ msgstr "Afficher la fenêtre pour lancer une commande"
|
||||
|
||||
#: data/50-mutter-system.xml:10
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Afficher l’aperçu des activités"
|
||||
msgstr "Afficher la vue d’ensemble des activités"
|
||||
|
||||
#: data/50-mutter-wayland.xml:8
|
||||
msgid "Restore the keyboard shortcuts"
|
||||
@ -410,7 +409,10 @@ 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."
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires 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 "
|
||||
@ -421,23 +423,35 @@ 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."
|
||||
"gérer les moniteurs à haute densité. Cela ne nécessite pas de redémarrage. • "
|
||||
"« rt-scheduler » — indique à mutter de demander un ordonnancement temps réel "
|
||||
"à faible priorité. L’exécutable ou l’utilisateur doit avoir CAP_SYS_NICE. "
|
||||
"Nécessite un redémarrage. • « autostart-xwayland » — initialise Xwayland de "
|
||||
"manière différée s’il y a des clients X11. Nécessite un redémarrage."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "Touche à utiliser pour situer le pointeur"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "Cette clé initie l’action « situer le pointeur »."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
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:146
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
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:151
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Changer de configuration de moniteur"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Passe à la prochaine configuration intégrée de moniteur"
|
||||
|
||||
@ -494,28 +508,39 @@ msgid "Re-enable shortcuts"
|
||||
msgstr "Réactiver les raccourcis"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "Autoriser les captures clavier avec Xwayland"
|
||||
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr ""
|
||||
"Autoriser les captures X11 à verrouiller le focus du clavier avec 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”."
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
"which map an “override redirect” window (which do not receive keyboard "
|
||||
"focus) and issue a keyboard grab to force all keyboard events to that "
|
||||
"window. This option is seldom used and has no effect on regular X11 windows "
|
||||
"which can receive keyboard focus under normal circumstances. 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 ""
|
||||
"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 »."
|
||||
"Permettre à tous les évènements clavier d’être routés vers les fenêtres X11 "
|
||||
"« override redirect » avec capture lors du fonctionnement avec Xwayland. "
|
||||
"Cette option permet de prendre en charge les clients X11 qui gèrent une "
|
||||
"fenêtre « override redirect » (qui ne reçoit pas de focus clavier) et "
|
||||
"produisent une capture clavier pour forcer tous les évènements clavier vers "
|
||||
"cette fenêtre. Cette option est rarement utilisée et n’a aucun effet sur les "
|
||||
"fenêtres X11 normales qui peuvent recevoir le focus du clavier dans des "
|
||||
"circonstances normales. Pour qu’une capture X11 soit prise en compte sous "
|
||||
"Wayland, le client doit aussi soit envoyer un ClientMessage X11 spécifique à "
|
||||
"la fenêtre racine, soit figurer parmi la liste blanche des applications dans "
|
||||
"la clé « xwayland-grab-access-rules »."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr "Applications Xwayland autorisées à émettre des captures clavier"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:85
|
||||
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 "
|
||||
@ -542,7 +567,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2423
|
||||
#: src/backends/meta-input-settings.c:2531
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Changement de mode (groupe %d)"
|
||||
@ -550,34 +575,34 @@ 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:2446
|
||||
#: src/backends/meta-input-settings.c:2554
|
||||
msgid "Switch monitor"
|
||||
msgstr "Changer de moniteur"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2448
|
||||
#: src/backends/meta-input-settings.c:2556
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Afficher l’aide à l’écran"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:954
|
||||
#: src/backends/meta-monitor.c:223
|
||||
msgid "Built-in display"
|
||||
msgstr "Affichage intégré"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:986
|
||||
#: src/backends/meta-monitor.c:252
|
||||
msgid "Unknown"
|
||||
msgstr "Inconnu"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:988
|
||||
#: src/backends/meta-monitor.c:254
|
||||
msgid "Unknown Display"
|
||||
msgstr "Affichage inconnu"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:996
|
||||
#: src/backends/meta-monitor.c:262
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1004
|
||||
#: src/backends/meta-monitor.c:270
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name followed by product/model name where size in "
|
||||
@ -585,9 +610,14 @@ msgctxt ""
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. Translators: this string will appear in Sysprof
|
||||
#: src/backends/meta-profiler.c:82
|
||||
msgid "Compositor"
|
||||
msgstr "Compositeur"
|
||||
|
||||
#. 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:482
|
||||
#: src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
@ -595,65 +625,65 @@ msgstr ""
|
||||
"Un autre gestionnaire de composition est déjà lancé sur l’écran %i de "
|
||||
"l’affichage « %s »."
|
||||
|
||||
#: src/core/bell.c:252
|
||||
#: src/core/bell.c:192
|
||||
msgid "Bell event"
|
||||
msgstr "Évènement sonore"
|
||||
|
||||
#: src/core/main.c:185
|
||||
#: src/core/main.c:186
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Désactiver la connexion au gestionnaire de sessions"
|
||||
|
||||
#: src/core/main.c:191
|
||||
#: src/core/main.c:192
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Remplacer le gestionnaire de fenêtres en cours de fonctionnement"
|
||||
|
||||
#: src/core/main.c:197
|
||||
#: src/core/main.c:198
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Indiquer l’ID de gestion de sessions"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "X Display to use"
|
||||
msgstr "Affichage X à utiliser"
|
||||
|
||||
#: src/core/main.c:208
|
||||
#: src/core/main.c:209
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Initialiser la session depuis le fichier de sauvegarde"
|
||||
|
||||
#: src/core/main.c:214
|
||||
#: src/core/main.c:215
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Rendre synchrones les appels à X"
|
||||
|
||||
#: src/core/main.c:221
|
||||
#: src/core/main.c:222
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Lancer comme un compositeur wayland"
|
||||
|
||||
#: src/core/main.c:227
|
||||
#: src/core/main.c:228
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Lancer comme un compositeur imbriqué"
|
||||
|
||||
#: src/core/main.c:233
|
||||
#: src/core/main.c:234
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Lancer le compositeur wayland sans démarrer Xwayland"
|
||||
|
||||
#: src/core/main.c:241
|
||||
#: src/core/main.c:242
|
||||
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:247
|
||||
#: src/core/main.c:248
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Lancer avec le moteur X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
#: src/core/meta-close-dialog-default.c:151
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "« %s » ne répond pas."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:152
|
||||
#: src/core/meta-close-dialog-default.c:153
|
||||
msgid "Application is not responding."
|
||||
msgstr "L’application ne répond pas."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:157
|
||||
#: src/core/meta-close-dialog-default.c:158
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -661,11 +691,11 @@ msgstr ""
|
||||
"Vous pouvez patienter un instant pour continuer ou forcer l’application à "
|
||||
"quitter définitivement."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forcer à quitter"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Wait"
|
||||
msgstr "_Attendre"
|
||||
|
||||
@ -693,21 +723,21 @@ msgstr "Afficher la version"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Greffon de Mutter à utiliser"
|
||||
|
||||
#: src/core/prefs.c:1786
|
||||
#: src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Espace de travail %d"
|
||||
|
||||
#: src/core/util.c:121
|
||||
#: src/core/util.c:122
|
||||
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
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:568
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Changement de mode : mode %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#: src/x11/meta-x11-display.c:679
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -716,20 +746,25 @@ 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/x11/meta-x11-display.c:1008
|
||||
#: src/x11/meta-x11-display.c:1040
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "L’initialisation de GDK a échoué\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
#: src/x11/meta-x11-display.c:1064
|
||||
#, 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:1115
|
||||
#: src/x11/meta-x11-display.c:1147
|
||||
#, 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/x11/meta-x11-selection-input-stream.c:445
|
||||
#, c-format
|
||||
msgid "Format %s not supported"
|
||||
msgstr "Le format %s n’est pas pris en charge"
|
||||
|
||||
#: src/x11/session.c:1821
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
@ -739,7 +774,7 @@ msgstr ""
|
||||
"configuration actuelle » et devront être redémarrées manuellement à la "
|
||||
"prochaine connexion."
|
||||
|
||||
#: src/x11/window-props.c:568
|
||||
#: src/x11/window-props.c:569
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (sur %s)"
|
||||
|
31
po/fur.po
31
po/fur.po
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2019-07-18 21:05+0000\n"
|
||||
"PO-Revision-Date: 2019-07-28 10:06+0200\n"
|
||||
"POT-Creation-Date: 2019-08-06 00:49+0000\n"
|
||||
"PO-Revision-Date: 2019-09-03 09:53+0200\n"
|
||||
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
|
||||
"Language-Team: Friulian <fur@li.org>\n"
|
||||
"Language: fur\n"
|
||||
@ -393,7 +393,8 @@ msgid ""
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart."
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires restart."
|
||||
msgstr ""
|
||||
"Par abilitâ lis funzionalitâts sperimentâls, zonte la peraule clâf de "
|
||||
"funzionalitât ae liste. Il fat che la funzionalitât e vedi bisugne di tornâ "
|
||||
@ -407,29 +408,31 @@ msgstr ""
|
||||
"dal barcon; dut chest par gjestî i visôrs HiDPI. Nol covente tornâ a inviâ. "
|
||||
"• “rt-scheduler” — al fâs in mût che mutter al domandi une programazion in "
|
||||
"timp reâl a prioritât basse. L'eseguibil o l'utent a scugnin vê "
|
||||
"CAP_SYS_NICE. Al covente tornâ a inviâ."
|
||||
"CAP_SYS_NICE. Al covente tornâ a inviâ. • “autostart-xwayland” — al "
|
||||
"inizialize Xwayland in maniere sflacjose se a son presints clients X11. Al "
|
||||
"covente tornâ a inviâ."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:132
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "Modificadôr di doprâ par localizâ il pontadôr"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:133
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "Cheste clâf e inizializerâ la azion “localize pontadôr”."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:153
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Selezione barcon dal tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:158
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Anule tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:163
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Cambie configurazions visôr"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:168
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Al volte la configurazion dal visôr integrât"
|
||||
|
||||
@ -712,7 +715,7 @@ 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/meta-x11-display.c:682
|
||||
#: src/x11/meta-x11-display.c:671
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -721,16 +724,16 @@ 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:1024
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "No si è rivâts a inizializâ GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1048
|
||||
#: src/x11/meta-x11-display.c:1056
|
||||
#, 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:1132
|
||||
#: src/x11/meta-x11-display.c:1140
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Schermi %d su display “%s” no valit\n"
|
||||
|
50
po/hr.po
50
po/hr.po
@ -5,9 +5,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity 0\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2019-06-20 08:28+0000\n"
|
||||
"PO-Revision-Date: 2019-06-22 18:00+0200\n"
|
||||
"Last-Translator: gogo <trebelnik2@gmail.com>\n"
|
||||
"POT-Creation-Date: 2019-08-06 00:49+0000\n"
|
||||
"PO-Revision-Date: 2019-09-03 18:00+0200\n"
|
||||
"Last-Translator: gogo <linux.hr@protonmail.com>\n"
|
||||
"Language-Team: Croatian <lokalizacija@linux.hr>\n"
|
||||
"Language: hr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -392,7 +392,8 @@ msgid ""
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart."
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires restart."
|
||||
msgstr ""
|
||||
"Za omogućavanje eksperimentalnih značajki, dodajte ključnu riječ značajke na "
|
||||
"popis. Zahtijeva li značajka ponovno pokretanje kompozitora ovisi o zadanoj "
|
||||
@ -405,29 +406,30 @@ msgstr ""
|
||||
"zaslonima visoke razlučivosti. Ne zahtijeva ponovno pokretanje. • “rt-"
|
||||
"scheduler” — čini zahtjeve muttera zakazanima u niskom prioritetu i "
|
||||
"stvaranom vremenu. Izvršitelj ili korisnik mora imati CAP_SYS_NICE. "
|
||||
"Zahtijeva ponovno pokretanje."
|
||||
"Zahtijeva ponovno pokretanje. • “autostart-xwayland” — pokreće Xwayland "
|
||||
"lijeno ako je dostupan X11 klijent. Zahtijeva ponovno pokretanje."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:132
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "Izmjenjivač za korištenje lociranja pokazivača"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:133
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "Ova tipka će pokrenuti “lociraj pokazivač” radnju."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:153
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Odaberi prozor iz skočnog prozora"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:158
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Prekini skočni prozor"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:163
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Prebacivanje podešavanja zaslona"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:168
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Rotiraj ugrađeno podešavanje zaslona"
|
||||
|
||||
@ -540,7 +542,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2529
|
||||
#: src/backends/meta-input-settings.c:2531
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Način prebacivanja (Grupa %d)"
|
||||
@ -548,34 +550,34 @@ msgstr "Način prebacivanja (Grupa %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2552
|
||||
#: src/backends/meta-input-settings.c:2554
|
||||
msgid "Switch monitor"
|
||||
msgstr "Prebaci zaslon"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2554
|
||||
#: src/backends/meta-input-settings.c:2556
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Prikaži zaslonsku pomoć"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:976
|
||||
#: src/backends/meta-monitor.c:223
|
||||
msgid "Built-in display"
|
||||
msgstr "Ugrađeni zaslon"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1008
|
||||
#: src/backends/meta-monitor.c:252
|
||||
msgid "Unknown"
|
||||
msgstr "Nepoznat"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1010
|
||||
#: src/backends/meta-monitor.c:254
|
||||
msgid "Unknown Display"
|
||||
msgstr "Nepoznat zaslon"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1018
|
||||
#: src/backends/meta-monitor.c:262
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1026
|
||||
#: src/backends/meta-monitor.c:270
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name followed by product/model name where size in "
|
||||
@ -694,7 +696,7 @@ msgstr "Inačica za ispis"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Mutter priključak koji se koristi"
|
||||
|
||||
#: src/core/prefs.c:1834
|
||||
#: src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Radni prostor %d"
|
||||
@ -708,7 +710,7 @@ msgstr "Mutter je kompiliran bez podrške za opširan način rada\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Način prebacivanja: Način %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:681
|
||||
#: src/x11/meta-x11-display.c:671
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -717,16 +719,16 @@ msgstr ""
|
||||
"Prikaz \"%s\" već ima upravitelja prozora; pokušajte koristiti --replace "
|
||||
"mogućnost za zamjenu trenutnog upravitelja prozora."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1023
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Neuspjelo GDK pokretanje\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1047
|
||||
#: src/x11/meta-x11-display.c:1056
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Neuspjelo otvaranje sustava prikaza X prozora \"%s\"\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1131
|
||||
#: src/x11/meta-x11-display.c:1140
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Zaslon %d na prikazu '%s' je neispravan\n"
|
||||
|
164
po/it.po
164
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: 2019-02-04 17:52+0000\n"
|
||||
"PO-Revision-Date: 2019-02-15 15:48+0100\n"
|
||||
"POT-Creation-Date: 2019-09-06 08:46+0000\n"
|
||||
"PO-Revision-Date: 2019-09-10 10:56+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.2.1\n"
|
||||
"X-Generator: Poedit 2.2.3\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -406,7 +406,10 @@ 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."
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires restart."
|
||||
msgstr ""
|
||||
"Per abilitare le funzionalità sperimentali, aggiungere la parola chiave di "
|
||||
"tale funzionalità nella lista. Se la funzionalità desiderata richiede il "
|
||||
@ -417,21 +420,32 @@ 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)."
|
||||
"riavvio). • “rt-scheduler” — Richiede uno scheduling real-time a bassa "
|
||||
"priorità. L'eseguibile o l'utente deve avere la proprietà CAP_SYS_NICE "
|
||||
"(richiede il riavvio). • “autostart-xwayland” — Avvia Xwayland passivamente "
|
||||
"se ci sono client X11 (richiede il riavvio)."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "Modificatore da usare per trovare il puntatore"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "Questa chiave avvia l'azione di localizzazione del puntatore."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Seleziona finestra dal tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Annulla tab popup"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Cambia le configurazioni del monitor"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Passa da una configurazione integrata all'altra del monitor"
|
||||
|
||||
@ -488,29 +502,40 @@ msgid "Re-enable shortcuts"
|
||||
msgstr "Riabilita scorciatoie"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "Consente la cattura con Xwayland"
|
||||
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr ""
|
||||
"Consente alle catture X11 di bloccare il focus della tastiera con 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”."
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
"which map an “override redirect” window (which do not receive keyboard "
|
||||
"focus) and issue a keyboard grab to force all keyboard events to that "
|
||||
"window. This option is seldom used and has no effect on regular X11 windows "
|
||||
"which can receive keyboard focus under normal circumstances. 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 ""
|
||||
"Consente la cattura della tastiera da applicazioni X11 in esecuzione su "
|
||||
"Xwayland. Affinché la cattura X11 venga considerata da Wayland, il client "
|
||||
"deve inviare uno specifico messaggio ClientMessage X11 alla finestra "
|
||||
"principale o essere nell'elenco di applicazioni autorizzate tramite la "
|
||||
"chiave \"xwayland-grab-access-rules\"."
|
||||
"Consente a tutti gli eventi della tastiera di essere instradati verso "
|
||||
"finestre \"override redirect\" di X11 con cattura quando in esecuzione in "
|
||||
"Xwayland. Questa opzione serve per supportare i client X11 che mappano una "
|
||||
"finestra \"override redirect\" (che non riceve il focus da tastiera) ed "
|
||||
"emette una cattura della tastiera per forzare tutti gli eventi da tastiera "
|
||||
"verso quella finestra. Questa opzione non viene usata raramente e non ha "
|
||||
"alcun effetto sulle finestra X11 normali in grado di ricevere, in "
|
||||
"circostanze normali, il focus da tastiera. Affinché la cattura X11 venga "
|
||||
"considerata da Wayland, il client deve inviare uno specifico messaggio "
|
||||
"ClientMessage X11 alla finestra principale o essere nell'elenco di "
|
||||
"applicazioni autorizzate tramite la chiave \"xwayland-grab-access-rules\"."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr ""
|
||||
"Applicazioni Xwayland autorizzare a inizializzare catture della tastiera"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:85
|
||||
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 "
|
||||
@ -537,7 +562,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2423
|
||||
#: src/backends/meta-input-settings.c:2531
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Cambio modalità (gruppo %d)"
|
||||
@ -545,34 +570,34 @@ 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:2446
|
||||
#: src/backends/meta-input-settings.c:2554
|
||||
msgid "Switch monitor"
|
||||
msgstr "Cambia monitor"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2448
|
||||
#: src/backends/meta-input-settings.c:2556
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Mostra aiuto sullo schermo"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:954
|
||||
#: src/backends/meta-monitor.c:223
|
||||
msgid "Built-in display"
|
||||
msgstr "Display integrato"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:986
|
||||
#: src/backends/meta-monitor.c:252
|
||||
msgid "Unknown"
|
||||
msgstr "Sconosciuto"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:988
|
||||
#: src/backends/meta-monitor.c:254
|
||||
msgid "Unknown Display"
|
||||
msgstr "Display sconosciuto"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:996
|
||||
#: src/backends/meta-monitor.c:262
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1004
|
||||
#: src/backends/meta-monitor.c:270
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name followed by product/model name where size in "
|
||||
@ -580,9 +605,14 @@ msgctxt ""
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. Translators: this string will appear in Sysprof
|
||||
#: src/backends/meta-profiler.c:82
|
||||
msgid "Compositor"
|
||||
msgstr "Compositor"
|
||||
|
||||
#. 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:482
|
||||
#: src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
@ -590,65 +620,65 @@ msgstr ""
|
||||
"Un altro compositing manager è già in esecuzione sullo schermo %i sul "
|
||||
"display «%s»."
|
||||
|
||||
#: src/core/bell.c:252
|
||||
#: src/core/bell.c:192
|
||||
msgid "Bell event"
|
||||
msgstr "Evento campanella"
|
||||
|
||||
#: src/core/main.c:185
|
||||
#: src/core/main.c:186
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Disabilita la connessione al gestore di sessione"
|
||||
|
||||
#: src/core/main.c:191
|
||||
#: src/core/main.c:192
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Sostituisce il window manager in esecuzione"
|
||||
|
||||
#: src/core/main.c:197
|
||||
#: src/core/main.c:198
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specifica l'ID di gestione sessione"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "X Display to use"
|
||||
msgstr "Display X da usare"
|
||||
|
||||
#: src/core/main.c:208
|
||||
#: src/core/main.c:209
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inizializza la sessione da file salvato"
|
||||
|
||||
#: src/core/main.c:214
|
||||
#: src/core/main.c:215
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Rende le chiamate X sincrone"
|
||||
|
||||
#: src/core/main.c:221
|
||||
#: src/core/main.c:222
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Esegui come compositor Wayland"
|
||||
|
||||
#: src/core/main.c:227
|
||||
#: src/core/main.c:228
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Esegui come compositor annidato"
|
||||
|
||||
#: src/core/main.c:233
|
||||
#: src/core/main.c:234
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Esegui il compositor Wayland senza avviare Xwayland"
|
||||
|
||||
#: src/core/main.c:241
|
||||
#: src/core/main.c:242
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Esegui come display server invece che annidato"
|
||||
|
||||
#: src/core/main.c:247
|
||||
#: src/core/main.c:248
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Esegui con sistema X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
#: src/core/meta-close-dialog-default.c:151
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "Nessuna risposta da %s."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:152
|
||||
#: src/core/meta-close-dialog-default.c:153
|
||||
msgid "Application is not responding."
|
||||
msgstr "L'applicazione non risponde."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:157
|
||||
#: src/core/meta-close-dialog-default.c:158
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -656,11 +686,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:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forza uscita"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Wait"
|
||||
msgstr "_Attendi"
|
||||
|
||||
@ -687,22 +717,22 @@ msgstr "Stampa la versione"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Plugin Mutter da usare"
|
||||
|
||||
#: src/core/prefs.c:1786
|
||||
#: src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Spazio di lavoro %d"
|
||||
|
||||
#: src/core/util.c:121
|
||||
#: src/core/util.c:122
|
||||
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
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:568
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Cambio modalità: modalità %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#: src/x11/meta-x11-display.c:679
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -711,20 +741,25 @@ msgstr ""
|
||||
"Il display «%s» ha già un window manager; provare a utilizzare l'opzione --"
|
||||
"replace per sostituirlo."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1008
|
||||
#: src/x11/meta-x11-display.c:1040
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Inizializzazione GDK non riuscita\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
#: src/x11/meta-x11-display.c:1064
|
||||
#, 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:1115
|
||||
#: src/x11/meta-x11-display.c:1147
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Lo schermo %d sul display «%s» non è valido\n"
|
||||
|
||||
#: src/x11/meta-x11-selection-input-stream.c:445
|
||||
#, c-format
|
||||
msgid "Format %s not supported"
|
||||
msgstr "Formato %s non supportato"
|
||||
|
||||
#: src/x11/session.c:1821
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
@ -733,22 +768,7 @@ msgstr ""
|
||||
"Queste finestre non supportano la funzione «salva impostazioni attuali» e "
|
||||
"dovranno essere riavviate manualmente al prossimo accesso."
|
||||
|
||||
#: src/x11/window-props.c:568
|
||||
#: src/x11/window-props.c:569
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (su %s)"
|
||||
|
||||
#~ msgid "Move window one workspace to the left"
|
||||
#~ msgstr "Sposta la finestra sullo spazio di lavoro a sinistra"
|
||||
|
||||
#~ msgid "Move window one workspace to the right"
|
||||
#~ msgstr "Sposta la finestra sullo spazio di lavoro a destra"
|
||||
|
||||
#~ msgid "Move to workspace left"
|
||||
#~ msgstr "Sposta su spazio di lavoro a sinistra"
|
||||
|
||||
#~ msgid "Move to workspace right"
|
||||
#~ msgstr "Sposta su spazio di lavoro a destra"
|
||||
|
||||
#~ msgid "Toggle shaded state"
|
||||
#~ msgstr "Attiva/Disattiva lo stato arrotolato"
|
||||
|
145
po/ko.po
145
po/ko.po
@ -7,7 +7,7 @@
|
||||
#
|
||||
# Updated in mutter:
|
||||
# Changwoo Ryu <cwryu@debian.org>, 2011-2017.
|
||||
# Gwan-gyeong Mun <elongbug@gmail.com>, 2018.
|
||||
# Gwan-gyeong Mun <elongbug@gmail.com>, 2018-2019.
|
||||
#
|
||||
#
|
||||
# 주의:
|
||||
@ -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: 2019-02-04 17:52+0000\n"
|
||||
"PO-Revision-Date: 2019-02-27 13:38+0200\n"
|
||||
"POT-Creation-Date: 2019-08-31 12:39+0000\n"
|
||||
"PO-Revision-Date: 2019-09-03 17:49+0300\n"
|
||||
"Last-Translator: Gwan-gyeong Mun <elongbug@gmail.com>\n"
|
||||
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
|
||||
"Language: ko\n"
|
||||
@ -395,29 +395,43 @@ 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."
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires restart."
|
||||
msgstr ""
|
||||
"실험적인 기능을 사용하려면, 해당 기능 키워드를 목록에 추가하십시오. 기능에 따"
|
||||
"라 컴포지터를 다시 시작해야 할 수도 있습니다. 실험적인 기능은 사용할 수 없을 "
|
||||
"수도 있고, 설정할 수 없을 수도 있습니다. 이 설정에 추가한 사항이 앞으로 버전"
|
||||
"에서도 동작할 거라고 기대하지 마십시오. 현재 가능한 값은: • “scale-monitor-"
|
||||
"framebuffer” — 머터는 기본적으로 논리 픽셀 좌표 공간에서 논리 모니터를 배치하"
|
||||
"고, HiDPI 모니터를 관리하기 위해 윈도우 내용 대신 모니터 프레임버퍼를 스케일"
|
||||
"링합니다. 재시작은 필요하지 않습니다."
|
||||
"고, HiDPI 모니터를 관리하기 위해 창 내용 대신 모니터 프레임 버퍼를 스케일링합"
|
||||
"니다. 재시작은 필요하지 않습니다. • “rt-scheduler” — 머터 요청을 우선순위가 "
|
||||
"낮은 실시간 스케줄링으로 만듭니다. 실행 파일 또는 사용자는 CAP_SYS_NICE가 있"
|
||||
"어야 합니다. 재시작이 필요합니다. • “autostart-xwayland” — X11 클라이언트가 "
|
||||
"있는 경우 X웨일랜드 초기화를 늦게 합니다. 재시작이 필요합니다."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "포인터 위치 찾기에 사용할 키"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "이 키는 “포인터 위치 찾기” 동작을 합니다."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "탭 팝업에서 창 선택"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "탭 팝업 취소"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "모니터 설정 전환"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "내장된 모니터 설정을 돌아가면서 전환합니다"
|
||||
|
||||
@ -474,27 +488,34 @@ msgid "Re-enable shortcuts"
|
||||
msgstr "바로 가기 다시 사용하기"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "X웨일랜드에서 잡기 허용"
|
||||
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr "키보드 포커스를 고정하는 X11 잡기를 X웨일랜드에서 허용"
|
||||
|
||||
#: 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”."
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
"which map an “override redirect” window (which do not receive keyboard "
|
||||
"focus) and issue a keyboard grab to force all keyboard events to that "
|
||||
"window. This option is seldom used and has no effect on regular X11 windows "
|
||||
"which can receive keyboard focus under normal circumstances. 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 ""
|
||||
"X웨일랜드 환경에서 실행하는 X11 프로그램의 키보드 잡기 허용을 고려합니다. 웨"
|
||||
"일랜드에서 X11 잡기를 고려하려면, 클라이언트는 특정 X11 클라이언트메시지를 루"
|
||||
"트 창에 보내거나 \"xwayland-grab-access-rules\"의 허용 목록에 있는 프로그램 "
|
||||
"중 하나여야 합니다."
|
||||
"X웨일랜드 환경에서 X11 “override redirect” 창이 잡기를 할 때 모든 키보드 이벤"
|
||||
"트가 전달되도록 허용합니다. 이 옵션은 X11 클라이언트의 “override redirect”(키"
|
||||
"보드 포커스를 받지 않는) 창에 모든 키보드 이벤트를 강제로 적용하는 키보드 잡"
|
||||
"기를 지원합니다. 이 옵션은 거의 사용되지 않으며 일반적인 상황에서 키보드 포커"
|
||||
"스를 받을 수 있는 일반 X11 창에는 영향을 미치지 않습니다. 웨일랜드에서 X11 잡"
|
||||
"기를 고려하려면, 클라이언트는 특정 X11 클라이언트메시지를 루트 창에 보내거나 "
|
||||
"“xwayland-grab-access-rules”의 허용 목록에 있는 프로그램 중 하나여야 합니다."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr "X웨일랜드 프로그램에서 키보드 잡기 허용"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:85
|
||||
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 "
|
||||
@ -519,7 +540,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2423
|
||||
#: src/backends/meta-input-settings.c:2531
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "모드 전환 (그룹 %d)"
|
||||
@ -527,34 +548,34 @@ msgstr "모드 전환 (그룹 %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2446
|
||||
#: src/backends/meta-input-settings.c:2554
|
||||
msgid "Switch monitor"
|
||||
msgstr "모니터 전환"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2448
|
||||
#: src/backends/meta-input-settings.c:2556
|
||||
msgid "Show on-screen help"
|
||||
msgstr "화면 도움말 표시"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:954
|
||||
#: src/backends/meta-monitor.c:223
|
||||
msgid "Built-in display"
|
||||
msgstr "내장 디스플레이"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:986
|
||||
#: src/backends/meta-monitor.c:252
|
||||
msgid "Unknown"
|
||||
msgstr "알 수 없음"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:988
|
||||
#: src/backends/meta-monitor.c:254
|
||||
msgid "Unknown Display"
|
||||
msgstr "알 수 없는 디스플레이"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:996
|
||||
#: src/backends/meta-monitor.c:262
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1004
|
||||
#: src/backends/meta-monitor.c:270
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name followed by product/model name where size in "
|
||||
@ -562,9 +583,14 @@ msgctxt ""
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. Translators: this string will appear in Sysprof
|
||||
#: src/backends/meta-profiler.c:82
|
||||
msgid "Compositor"
|
||||
msgstr "컴포지터"
|
||||
|
||||
#. 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:482
|
||||
#: src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
@ -572,75 +598,75 @@ msgstr ""
|
||||
"다른 창 구성 관리 프로그램이 이미 디스플레이 “%2$s” 화면 %1$i번에서 실행 중입"
|
||||
"니다."
|
||||
|
||||
#: src/core/bell.c:252
|
||||
#: src/core/bell.c:192
|
||||
msgid "Bell event"
|
||||
msgstr "삑소리 이벤트"
|
||||
|
||||
#: src/core/main.c:185
|
||||
#: src/core/main.c:186
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "세션 관리자와 연결 하지 않습니다"
|
||||
|
||||
#: src/core/main.c:191
|
||||
#: src/core/main.c:192
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "실행 중인 창 관리자를 바꿉니다"
|
||||
|
||||
#: src/core/main.c:197
|
||||
#: src/core/main.c:198
|
||||
msgid "Specify session management ID"
|
||||
msgstr "세션 관리 ID를 지정합니다"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "X Display to use"
|
||||
msgstr "사용할 X 디스플레이"
|
||||
|
||||
#: src/core/main.c:208
|
||||
#: src/core/main.c:209
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "저장 파일에서 세션을 초기화 합니다"
|
||||
|
||||
#: src/core/main.c:214
|
||||
#: src/core/main.c:215
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "동기 X 호출을 합니다"
|
||||
|
||||
#: src/core/main.c:221
|
||||
#: src/core/main.c:222
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "웨일랜드 컴포지터로 실행합니다"
|
||||
|
||||
#: src/core/main.c:227
|
||||
#: src/core/main.c:228
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "중첩 컴포지터로 실행합니다"
|
||||
|
||||
#: src/core/main.c:233
|
||||
#: src/core/main.c:234
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "웨일랜드 컴포지터를 X웨일랜드 시작없이 실행합니다"
|
||||
|
||||
#: src/core/main.c:241
|
||||
#: src/core/main.c:242
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "전체 디스플레이 서버로 실행, 중첩 컴포지터가 아님"
|
||||
|
||||
#: src/core/main.c:247
|
||||
#: src/core/main.c:248
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "X11 백 엔드로 실행 합니다"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
#: src/core/meta-close-dialog-default.c:151
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” 창이 반응하지 않습니다."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:152
|
||||
#: src/core/meta-close-dialog-default.c:153
|
||||
msgid "Application is not responding."
|
||||
msgstr "프로그램이 반응하지 않습니다."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:157
|
||||
#: src/core/meta-close-dialog-default.c:158
|
||||
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:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Force Quit"
|
||||
msgstr "강제로 끝내기(_F)"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Wait"
|
||||
msgstr "기다리기(_W)"
|
||||
|
||||
@ -667,21 +693,21 @@ msgstr "버전을 출력합니다"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "사용할 머터 플러그인"
|
||||
|
||||
#: src/core/prefs.c:1786
|
||||
#: src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "작업 공간 %d"
|
||||
|
||||
#: src/core/util.c:121
|
||||
#: src/core/util.c:122
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "머터가 자세한 모드 지원 없이 컴파일 되었습니다\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:568
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "모드 전환: 모드 %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#: src/x11/meta-x11-display.c:679
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -690,20 +716,25 @@ msgstr ""
|
||||
"디스플레이 “%s”에 이미 창 관리자가 있습니다. 현재 창 관리자를 바꾸려면 --"
|
||||
"replace 옵션을 써보십시오."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1008
|
||||
#: src/x11/meta-x11-display.c:1040
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "GDK 초기화에 실패했습니다\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
#: src/x11/meta-x11-display.c:1064
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "X 윈도 시스템 디스플레이 “%s”을(를) 여는데 실패하였습니다\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1115
|
||||
#: src/x11/meta-x11-display.c:1147
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "디스플레이 “%2$s”의 화면 %1$d은(는) 잘못되었습니다\n"
|
||||
|
||||
#: src/x11/meta-x11-selection-input-stream.c:445
|
||||
#, c-format
|
||||
msgid "Format %s not supported"
|
||||
msgstr "%s 형식은 지원하지 않습니다"
|
||||
|
||||
#: src/x11/session.c:1821
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
@ -713,7 +744,7 @@ msgstr ""
|
||||
"로 다시 시작해야 합니다."
|
||||
|
||||
# <창제목> (on <기계>)
|
||||
#: src/x11/window-props.c:568
|
||||
#: src/x11/window-props.c:569
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (%s에서)"
|
||||
|
100
po/nl.po
100
po/nl.po
@ -10,8 +10,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2019-06-13 16:48+0000\n"
|
||||
"PO-Revision-Date: 2019-06-18 10:21+0200\n"
|
||||
"POT-Creation-Date: 2019-09-20 12:33+0000\n"
|
||||
"PO-Revision-Date: 2019-09-25 12:47+0200\n"
|
||||
"Last-Translator: Nathan Follens <nthn@unseen.is>\n"
|
||||
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
|
||||
"Language: nl\n"
|
||||
@ -399,7 +399,8 @@ msgid ""
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart."
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires restart."
|
||||
msgstr ""
|
||||
"Voeg het sleutelwoord van een experimentele functie toe aan de lijst om deze "
|
||||
"in te schakelen. Of de compositor herstart moet worden vooraleer de functie "
|
||||
@ -412,29 +413,31 @@ msgstr ""
|
||||
"plaats van vensterinhoud, om HiDPI-beeldschermen te beheren. Hiervoor is "
|
||||
"opnieuw opstarten niet vereist. • “rt-scheduler” — zorgt ervoor dat mutter "
|
||||
"real-time plannen met lage prioriteit aanvraagt. Het uitvoerbaar bestand of "
|
||||
"de gebruiker moet CAP_SYS_NICE hebben. Hiervoor is opnieuw opstarten vereist."
|
||||
"de gebruiker moet CAP_SYS_NICE hebben. Hiervoor is opnieuw opstarten "
|
||||
"vereist. • “autostart-xwayland” — initialiseert Xwayland op een luie manier "
|
||||
"als er X11-cliënten zijn. Hiervoor is opnieuw opstarten vereist."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:132
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "Controletoets om de muispijl te lokaliseren"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:133
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "Deze sleutel activeert de actie ‘muispijl lokaliseren’."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:153
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Venster selecteren uit tab-pop-up"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:158
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Tab-pop-up annuleren"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:163
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Tussen beeldschermconfiguraties schakelen"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:168
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Roteert de ingebouwde beeldschermconfiguratie"
|
||||
|
||||
@ -495,13 +498,6 @@ msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr "X11-grabs toestaan om toetsenbordfocus met Xwayland te vergrendelen"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:65
|
||||
#, fuzzy
|
||||
#| 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”."
|
||||
msgid ""
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
@ -513,11 +509,17 @@ msgid ""
|
||||
"specific X11 ClientMessage to the root window or be among the applications "
|
||||
"white-listed in key “xwayland-grab-access-rules”."
|
||||
msgstr ""
|
||||
"Toestaan dat rekening wordt gehouden met toetsenbord-grabs door X11-"
|
||||
"toepassingen die in Xwayland draaien. Om rekening te houden met een X11-grab "
|
||||
"onder Wayland, moet de client ook: óf een specifieke X11-ClientMessage naar "
|
||||
"het root-venster sturen, óf vermeld staan in de witte lijst van toepassingen "
|
||||
"in de sleutel ‘xwayland-grab-access-rules’."
|
||||
"Toestaan dat alle toetsgebeurtenissen met een grab doorverwezen worden naar "
|
||||
"X11 ‘doorverwijzingsoverschrijfvensters’ wanneer ze in Xwayland draaien. "
|
||||
"Deze optie dient ter ondersteuning van X11-cliënten (die geen "
|
||||
"toetsenbordfocus verkrijgen) die een venster om doorverwijzingen te "
|
||||
"overschrijven gebruiken en een toetsenbord-grab gebruiken om alle "
|
||||
"toetsgebeurtenissen naar dat venster dwingen. Deze optie wordt zelden "
|
||||
"gebruikt en heeft geen effect op gewone X11-vensters, die in normale "
|
||||
"omstandigheden toetsenbordfocus kunnen verkrijgen. Om rekening te houden met "
|
||||
"een X11-grab onder Wayland, moet de client ook: óf een specifieke X11-"
|
||||
"ClientMessage naar het root-venster sturen, óf vermeld staan in de witte "
|
||||
"lijst van toepassingen in de sleutel ‘xwayland-grab-access-rules’."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
@ -550,7 +552,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2529
|
||||
#: src/backends/meta-input-settings.c:2532
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Moduswisselaar (groep %d)"
|
||||
@ -558,34 +560,34 @@ msgstr "Moduswisselaar (groep %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2552
|
||||
#: src/backends/meta-input-settings.c:2555
|
||||
msgid "Switch monitor"
|
||||
msgstr "Van beeldscherm wisselen"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2554
|
||||
#: src/backends/meta-input-settings.c:2557
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Hulptekst op scherm tonen"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:976
|
||||
#: src/backends/meta-monitor.c:223
|
||||
msgid "Built-in display"
|
||||
msgstr "Ingebouwd beeldscherm"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1008
|
||||
#: src/backends/meta-monitor.c:252
|
||||
msgid "Unknown"
|
||||
msgstr "Onbekend"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1010
|
||||
#: src/backends/meta-monitor.c:254
|
||||
msgid "Unknown Display"
|
||||
msgstr "Onbekend beeldscherm"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1018
|
||||
#: src/backends/meta-monitor.c:262
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1026
|
||||
#: src/backends/meta-monitor.c:270
|
||||
#, c-format
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name followed by product/model name where size in "
|
||||
@ -600,7 +602,7 @@ msgstr "Compositor"
|
||||
|
||||
#. 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:510
|
||||
#: src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
@ -612,47 +614,47 @@ msgstr ""
|
||||
msgid "Bell event"
|
||||
msgstr "Bel-gebeurtenis"
|
||||
|
||||
#: src/core/main.c:185
|
||||
#: src/core/main.c:186
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Schakel de verbinding met het sessiebeheer uit"
|
||||
|
||||
#: src/core/main.c:191
|
||||
#: src/core/main.c:192
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "De huidige toepassing voor vensterbeheer vervangen"
|
||||
|
||||
#: src/core/main.c:197
|
||||
#: src/core/main.c:198
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specificeer de ID van het sessiebeheer"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "X Display to use"
|
||||
msgstr "De te gebruiken X-weergave"
|
||||
|
||||
#: src/core/main.c:208
|
||||
#: src/core/main.c:209
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Initialiseer de sessie middels een opslagbestand"
|
||||
|
||||
#: src/core/main.c:214
|
||||
#: src/core/main.c:215
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "X-aanroepen synchroon maken"
|
||||
|
||||
#: src/core/main.c:221
|
||||
#: src/core/main.c:222
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Uitvoeren als een wayland compositor"
|
||||
|
||||
#: src/core/main.c:227
|
||||
#: src/core/main.c:228
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Uitvoeren als een geneste compositor"
|
||||
|
||||
#: src/core/main.c:233
|
||||
#: src/core/main.c:234
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Wayland-compositor uitvoeren zonder Xwayland te starten"
|
||||
|
||||
#: src/core/main.c:241
|
||||
#: src/core/main.c:242
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Uitvoeren als een volledige displayserver, in plaats van genest"
|
||||
|
||||
#: src/core/main.c:247
|
||||
#: src/core/main.c:248
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Uitvoeren met X11-backend"
|
||||
|
||||
@ -705,21 +707,21 @@ msgstr "Versie-informatie tonen"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Te gebruiken Mutter-plug-in"
|
||||
|
||||
#: src/core/prefs.c:1834
|
||||
#: src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Werkblad %d"
|
||||
|
||||
#: src/core/util.c:121
|
||||
#: src/core/util.c:122
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter is gecompileerd zonder ondersteuning voor verbose-mode\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:568
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Moduswisselaar: modus %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:681
|
||||
#: src/x11/meta-x11-display.c:679
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -728,16 +730,16 @@ msgstr ""
|
||||
"Beeldscherm ‘%s’ heeft al een vensterbeheerder; probeer de optie: --replace "
|
||||
"te gebruiken om de huidige vensterbeheerder te vervangen."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1023
|
||||
#: src/x11/meta-x11-display.c:1040
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Initialiseren van GDK mislukt\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1047
|
||||
#: src/x11/meta-x11-display.c:1064
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Openen van X Window System display ‘%s’ mislukt\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1131
|
||||
#: src/x11/meta-x11-display.c:1147
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Scherm %d op beeldscherm ‘%s’ is ongeldig\n"
|
||||
|
45
po/pt_BR.po
45
po/pt_BR.po
@ -21,8 +21,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2019-07-18 13:55+0000\n"
|
||||
"PO-Revision-Date: 2019-07-22 01:40-0300\n"
|
||||
"POT-Creation-Date: 2019-08-06 00:49+0000\n"
|
||||
"PO-Revision-Date: 2019-09-05 02:32-0300\n"
|
||||
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
|
||||
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
|
||||
"Language: pt_BR\n"
|
||||
@ -415,6 +415,8 @@ msgstr "Habilitar recursos experimentais"
|
||||
#| "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. • “rt-scheduler” — makes mutter request a low priority real-time "
|
||||
#| "scheduling. The executable or user must have CAP_SYS_NICE. Requires a "
|
||||
#| "restart."
|
||||
msgid ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
@ -426,7 +428,8 @@ msgid ""
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart."
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires 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 "
|
||||
@ -438,29 +441,31 @@ msgstr ""
|
||||
"de monitor em vez de conteúdo de janela, para gerenciar monitores HiDPI. Não "
|
||||
"exige uma reinicialização. • “rt-scheduler” — faz o mutter solicitar um "
|
||||
"agendamento de tempo real de baixa prioridade. O executável ou usuário deve "
|
||||
"ter CAP_SYS_NICE. Exige uma reinicialização."
|
||||
"ter CAP_SYS_NICE. Exige uma reinicialização. • “autostart-xwayland” — "
|
||||
"inicializa o Xwayland de forma relaxada, caso haja clientes X11. Exige uma "
|
||||
"reinicialização."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:132
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "Modificador para usar ao localizar o ponteiro"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:133
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "Essa chave vai iniciar a ação de “localizar ponteiro”."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:153
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Selecione a janela a partir da aba instantânea"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:158
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Cancelar aba instantânea"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:163
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Trocar configurações de monitor"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:168
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Gira a configuração de monitor embutido"
|
||||
|
||||
@ -517,17 +522,10 @@ msgid "Re-enable shortcuts"
|
||||
msgstr "Reabilita atalhos"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
#| msgid "Allow grabs with Xwayland"
|
||||
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr "Permitir as capturas do X11 travar o foco do teclado com 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”."
|
||||
msgid ""
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
@ -626,7 +624,6 @@ msgstr "%s %s"
|
||||
|
||||
#. Translators: this string will appear in Sysprof
|
||||
#: src/backends/meta-profiler.c:82
|
||||
#| msgid "Compositing Manager"
|
||||
msgid "Compositor"
|
||||
msgstr "Compositor"
|
||||
|
||||
@ -636,7 +633,9 @@ msgstr "Compositor"
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr "Outro gerenciador de composição de janelas está em execução na tela %i na área “%s”."
|
||||
msgstr ""
|
||||
"Outro gerenciador de composição de janelas está em execução na tela %i na "
|
||||
"área “%s”."
|
||||
|
||||
#: src/core/bell.c:192
|
||||
msgid "Bell event"
|
||||
@ -750,7 +749,7 @@ msgstr "O Mutter foi compilado sem suporte para modo detalhado\n"
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Alternador de modo: Modo %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:682
|
||||
#: src/x11/meta-x11-display.c:671
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -759,16 +758,16 @@ 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/x11/meta-x11-display.c:1024
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "Falha ao inicializar GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1048
|
||||
#: src/x11/meta-x11-display.c:1056
|
||||
#, 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:1132
|
||||
#: src/x11/meta-x11-display.c:1140
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "A tela %d na exibição “%s” é inválida\n"
|
||||
|
79
po/sl.po
79
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: 2019-08-24 16:57+0000\n"
|
||||
"PO-Revision-Date: 2019-08-24 19:44+0200\n"
|
||||
"POT-Creation-Date: 2019-09-26 09:57+0000\n"
|
||||
"PO-Revision-Date: 2019-09-26 21:20+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"
|
||||
@ -387,17 +387,6 @@ msgid "Enable experimental features"
|
||||
msgstr "Omogoči preizkusne možnosti"
|
||||
|
||||
#: 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."
|
||||
msgid ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
"Whether the feature requires restarting the compositor depends on the given "
|
||||
@ -413,11 +402,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"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."
|
||||
"odvisno od posamezne možnosti. Te možnosti niso zahtevane niti nastavljive, "
|
||||
"najverjetneje niti ne bodo. 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.• “rt-scheduler” — postavi zahteve mutter na nižjo "
|
||||
"prednostno raven. Izvršljivi program oziroma uporabnik mora imeti omogočeno "
|
||||
"možnost CAP_SYS_NICE. Ta možnost zahteva ponovni zagon. • »autostart-"
|
||||
"xwayland« - lenobno zažne okolje Xwayland, če ima odjemalce X11. Prav tako "
|
||||
"zahteva ponoven zagon."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
@ -500,13 +494,6 @@ msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr "Dovoli zajemanje za zaklep žariščenja tipkovnice z XWayland"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:65
|
||||
#, fuzzy
|
||||
#| 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”."
|
||||
msgid ""
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
@ -519,9 +506,13 @@ msgid ""
|
||||
"white-listed in key “xwayland-grab-access-rules”."
|
||||
msgstr ""
|
||||
"Upošteva zajeme s tipkovnico, ki jih sprožijo programi X11, zagnani v okolju "
|
||||
"Xwayland. Če naj se programski zajem upošteva, mora odjemalec ali poslati "
|
||||
"specifično sporočilo X11 na korensko okno ali pa mora biti zaveden na "
|
||||
"seznamu programov v ključu »xwayland-garb-access-rules«."
|
||||
"Xwayland. možnost je namenjena podpori odjemalcem X11, ki preslikajo okno s "
|
||||
"\"preglasitvijo preusmeritve\" (ne dobi žarišča tipkovnice) in vsili dogodke "
|
||||
"tipkovnice v to okno. Možnost se uporablja redko ne vpliva na običajna okna "
|
||||
"X11, ki lahko v običajnih okoliščinah pridobijo žarišča. Da bo zajem X11 "
|
||||
"upoštevan v okolju Waylandu, mora odjemalec poslati tudi določeno sporočilo "
|
||||
"odjemalcu X11 v korensko okno ali pa mora biti med mrogrami na belem seznamu "
|
||||
"v ključu \"xwayland-grab-access-rules\"."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
@ -553,7 +544,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2531
|
||||
#: src/backends/meta-input-settings.c:2532
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Preklop načina (skupina %d)"
|
||||
@ -561,11 +552,11 @@ msgstr "Preklop načina (skupina %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2554
|
||||
#: src/backends/meta-input-settings.c:2555
|
||||
msgid "Switch monitor"
|
||||
msgstr "Nadzornik preklopa"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2556
|
||||
#: src/backends/meta-input-settings.c:2557
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Pokaži zaslonsko pomoč"
|
||||
|
||||
@ -603,7 +594,7 @@ msgstr "Sestavljalnik"
|
||||
|
||||
#. 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:508
|
||||
#: src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
@ -614,47 +605,47 @@ msgstr ""
|
||||
msgid "Bell event"
|
||||
msgstr "Dogodek zvonjenja"
|
||||
|
||||
#: src/core/main.c:185
|
||||
#: src/core/main.c:186
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Onemogoči povezavo z upravljalnikom sej"
|
||||
|
||||
#: src/core/main.c:191
|
||||
#: src/core/main.c:192
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Zamenjaj trenutni upravljalnik oken"
|
||||
|
||||
#: src/core/main.c:197
|
||||
#: src/core/main.c:198
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Navedite ID upravljanja seje"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "X Display to use"
|
||||
msgstr "Zaslon X za uporabo"
|
||||
|
||||
#: src/core/main.c:208
|
||||
#: src/core/main.c:209
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Začni sejo iz shranjene datoteke"
|
||||
|
||||
#: src/core/main.c:214
|
||||
#: src/core/main.c:215
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Uskladi klice X"
|
||||
|
||||
#: src/core/main.c:221
|
||||
#: src/core/main.c:222
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Zaženi izbirnik wayland"
|
||||
|
||||
#: src/core/main.c:227
|
||||
#: src/core/main.c:228
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Zaženi kot gnezden vpisovalnik"
|
||||
|
||||
#: src/core/main.c:233
|
||||
#: src/core/main.c:234
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Zaženi sestavljalnik wayland brez zagona okolja Xwayland"
|
||||
|
||||
#: src/core/main.c:241
|
||||
#: src/core/main.c:242
|
||||
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:247
|
||||
#: src/core/main.c:248
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Zaženi z zaledjem X11"
|
||||
|
||||
@ -712,7 +703,7 @@ msgstr "Vstavek Mutter za uporabo"
|
||||
msgid "Workspace %d"
|
||||
msgstr "Delovna površina %d"
|
||||
|
||||
#: src/core/util.c:121
|
||||
#: src/core/util.c:122
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr ""
|
||||
"Program Mutter je kodno preveden brez podpore za podrobni način izpisovanja\n"
|
||||
|
152
po/tr.po
152
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: 2019-02-04 17:52+0000\n"
|
||||
"PO-Revision-Date: 2019-02-09 23:14+0300\n"
|
||||
"POT-Creation-Date: 2019-09-06 06:32+0000\n"
|
||||
"PO-Revision-Date: 2019-09-07 23:07+0300\n"
|
||||
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>\n"
|
||||
"Language-Team: Türkçe <gnome-turk@gnome.org>\n"
|
||||
"Language: tr\n"
|
||||
@ -24,7 +24,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-DamnedLies-Scope: partial\n"
|
||||
"X-Generator: Gtranslator 3.30.1\n"
|
||||
"X-Generator: Poedit 2.2.3\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -404,7 +404,10 @@ 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."
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires 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 "
|
||||
@ -415,21 +418,33 @@ msgstr ""
|
||||
"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."
|
||||
"gerektirmez. • “rt-scheduler” — mutter isteğini bir düşük öncelikli gerçek "
|
||||
"zamanlı sıralandırma yapar. Çalıştırılabilir (executable) veya kullanıcı "
|
||||
"CAP_SYS_NICE’ye sahip olmalıdır. Yeniden başlatma gerektirir. • “autostart-"
|
||||
"xwayland” — eğer X11 istemcileri varsa Xwayland’i miskin miskin başlatır. "
|
||||
"Yeniden başlatma gerektirir."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "İşaretçiyi konumlamada kullanılacak değiştirici"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "Bu anahtar “işaretçiyi konumla” eylemini başlatacak."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Pencereyi, sekme açılır penceresinden seç"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Sekmeyi yeni pencerede açmayı iptal et"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Monitör yapılandırmaları arasında geçiş yap"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Yerleşik monitör yapılandırmaları arasında geçiş yapar"
|
||||
|
||||
@ -486,28 +501,36 @@ msgid "Re-enable shortcuts"
|
||||
msgstr "Kısayolları yeniden etkinleştir"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "Xwayland ile yakalamalara izin ver"
|
||||
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr "X11 yakalamalarının Xwayland ile klavye odağı kilitlemesine izin ver"
|
||||
|
||||
#: 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”."
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
"which map an “override redirect” window (which do not receive keyboard "
|
||||
"focus) and issue a keyboard grab to force all keyboard events to that "
|
||||
"window. This option is seldom used and has no effect on regular X11 windows "
|
||||
"which can receive keyboard focus under normal circumstances. 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 ""
|
||||
"XWayland’de çalışan X11 uygulamaları tarafından yapılacak klavye "
|
||||
"yakalamalarına izin ver. X11 yakalamasının Wayland altında hesaba katılması "
|
||||
"için istemci ya kök pencereye özel X11 ClientMessage’ı göndermeli ya da "
|
||||
"“xwayland-grab-access-rules” anahtarında beyaz listeye alınmış uygulamalar "
|
||||
"içinde yer almalıdır."
|
||||
"Xwayland içinde çalışırken tüm klavye etkinlikleri yakalamalı X11 “override "
|
||||
"redirect” pencerelerine yönlendirilecek. Bu seçenek, “override redirect” "
|
||||
"penceresi çizen (klavye odağı almayan) X11 istemcilerini desteklemek ve bu "
|
||||
"istemcilerin tüm klavye etkinliklerini bu pencereye zorlayan klavye "
|
||||
"yakalaması yayımlamasını sağlar. Bu seçenek nadiren kullanılır ve sıradan "
|
||||
"koşullar altında klavye odağı alan sıradan X11 pencerelerinde etkisi yoktur. "
|
||||
"Bir X11 yakalamasının Wayland altında hesaba katılması için istemci ya kök "
|
||||
"pencereye belirli X11 ClientMessage’ı göndermeli ya da “xwayland-grab-access-"
|
||||
"rules” anahtarındaki beyaz listeli uygulamalar arasında olmalıdır."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr "Klavye yakalamaları yapabilen Xwayland uygulamaları"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:85
|
||||
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 "
|
||||
@ -534,7 +557,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2423
|
||||
#: src/backends/meta-input-settings.c:2531
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Kip anahtarı (Küme %d)"
|
||||
@ -542,46 +565,49 @@ msgstr "Kip anahtarı (Küme %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2446
|
||||
#: src/backends/meta-input-settings.c:2554
|
||||
msgid "Switch monitor"
|
||||
msgstr "Monitör değiştir"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2448
|
||||
#: src/backends/meta-input-settings.c:2556
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Ekranda yardımı göster"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:954
|
||||
#: src/backends/meta-monitor.c:223
|
||||
msgid "Built-in display"
|
||||
msgstr "Yerleşik ekran"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:986
|
||||
#: src/backends/meta-monitor.c:252
|
||||
msgid "Unknown"
|
||||
msgstr "Bilinmiyor"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:988
|
||||
#: src/backends/meta-monitor.c:254
|
||||
msgid "Unknown Display"
|
||||
msgstr "Bilinmeyen Ekran"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:996
|
||||
#: src/backends/meta-monitor.c:262
|
||||
#, c-format
|
||||
#| msgid "%s %s"
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1004
|
||||
#: src/backends/meta-monitor.c:270
|
||||
#, c-format
|
||||
#| msgid "%s %s"
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name followed by product/model name where size in "
|
||||
"inches could not be calculated, e.g. Dell U2414H"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. Translators: this string will appear in Sysprof
|
||||
#: src/backends/meta-profiler.c:82
|
||||
msgid "Compositor"
|
||||
msgstr "Dizgici"
|
||||
|
||||
#. 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:482
|
||||
#: src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
@ -589,65 +615,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:252
|
||||
#: src/core/bell.c:192
|
||||
msgid "Bell event"
|
||||
msgstr "Etkinlik zili"
|
||||
|
||||
#: src/core/main.c:185
|
||||
#: src/core/main.c:186
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Ortam yöneticisine olan bağlantıyı kapat"
|
||||
|
||||
#: src/core/main.c:191
|
||||
#: src/core/main.c:192
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Çalışan pencere yöneticisinin yerini al"
|
||||
|
||||
#: src/core/main.c:197
|
||||
#: src/core/main.c:198
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Ortam yönetim ID’sini belirt"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:203
|
||||
msgid "X Display to use"
|
||||
msgstr "Kullanılacak X Ekranı"
|
||||
|
||||
#: src/core/main.c:208
|
||||
#: src/core/main.c:209
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Ortamı kayıtlı dosyadan başlat"
|
||||
|
||||
#: src/core/main.c:214
|
||||
#: src/core/main.c:215
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "X çağrılarını eşzamanlı yap"
|
||||
|
||||
#: src/core/main.c:221
|
||||
#: src/core/main.c:222
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Wayland dizgici olarak çalıştır"
|
||||
|
||||
#: src/core/main.c:227
|
||||
#: src/core/main.c:228
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Yuvalanmış dizgici olarak çalıştır"
|
||||
|
||||
#: src/core/main.c:233
|
||||
#: src/core/main.c:234
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "Xwayland’i çalıştırmadan Wayland dizgici çalıştır"
|
||||
|
||||
#: src/core/main.c:241
|
||||
#: src/core/main.c:242
|
||||
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:247
|
||||
#: src/core/main.c:248
|
||||
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:150
|
||||
#: src/core/meta-close-dialog-default.c:151
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” yanıt vermiyor."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:152
|
||||
#: src/core/meta-close-dialog-default.c:153
|
||||
msgid "Application is not responding."
|
||||
msgstr "Uygulama yanıt vermiyor."
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:157
|
||||
#: src/core/meta-close-dialog-default.c:158
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -655,11 +681,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:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Zorla Çık"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Wait"
|
||||
msgstr "_Bekle"
|
||||
|
||||
@ -686,21 +712,21 @@ msgstr "Sürümü yazdır"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Kullanılacak Mutter eklentisi"
|
||||
|
||||
#: src/core/prefs.c:1786
|
||||
#: src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Çalışma Alanı %d"
|
||||
|
||||
#: src/core/util.c:121
|
||||
#: src/core/util.c:122
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter, ayrıntılı kip desteği olmadan derlenmiş\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:568
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Kip Anahtarı: Kip %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#: src/x11/meta-x11-display.c:679
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -710,20 +736,25 @@ msgstr ""
|
||||
"yöneticisinin yerine bir başkasını koymak için --replace seçeneğini "
|
||||
"kullanmayı deneyin."
|
||||
|
||||
#: src/x11/meta-x11-display.c:1008
|
||||
#: src/x11/meta-x11-display.c:1040
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "GDK ilklendirilemedi\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
#: src/x11/meta-x11-display.c:1064
|
||||
#, 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:1115
|
||||
#: src/x11/meta-x11-display.c:1147
|
||||
#, 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/meta-x11-selection-input-stream.c:445
|
||||
#, c-format
|
||||
msgid "Format %s not supported"
|
||||
msgstr "%s biçimi desteklenmiyor"
|
||||
|
||||
#: src/x11/session.c:1821
|
||||
msgid ""
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
@ -732,7 +763,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:568
|
||||
#: src/x11/window-props.c:569
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (%s üzerinde)"
|
||||
@ -1982,9 +2013,6 @@ msgstr "%s (%s üzerinde)"
|
||||
#~ msgid "Commands to run in response to keybindings"
|
||||
#~ msgstr "Tuş bağlarına yanıt olarak çalıştırılacak komutlar"
|
||||
|
||||
#~ msgid "Compositing Manager"
|
||||
#~ msgstr "Kompozisyon Yöneticisi"
|
||||
|
||||
#~ msgid "Control how new windows get focus"
|
||||
#~ msgstr "Yeni pencerelerin nasıl odaklanacağının kontrolü"
|
||||
|
||||
|
158
po/zh_TW.po
158
po/zh_TW.po
@ -10,8 +10,8 @@ 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: 2019-02-04 17:52+0000\n"
|
||||
"PO-Revision-Date: 2019-02-17 23:15+0800\n"
|
||||
"POT-Creation-Date: 2019-11-21 15:22+0000\n"
|
||||
"PO-Revision-Date: 2019-11-23 13:58+0800\n"
|
||||
"Last-Translator: pan93412 <pan93412@gmail.com>\n"
|
||||
"Language-Team: Chinese <zh-l10n@linux.org.tw>\n"
|
||||
"Language: zh_TW\n"
|
||||
@ -19,7 +19,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Lokalize 18.12.2\n"
|
||||
"X-Generator: Lokalize 19.11.80\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -371,6 +371,16 @@ msgid "Enable experimental features"
|
||||
msgstr "啟用試驗性功能"
|
||||
|
||||
#: 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."
|
||||
msgid ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
"Whether the feature requires restarting the compositor depends on the given "
|
||||
@ -379,27 +389,41 @@ 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."
|
||||
"manage HiDPI monitors. Does not require a restart. • “rt-scheduler” — makes "
|
||||
"mutter request a low priority real-time scheduling. The executable or user "
|
||||
"must have CAP_SYS_NICE. Requires a restart. • “autostart-xwayland” — "
|
||||
"initializes Xwayland lazily if there are X11 clients. Requires restart."
|
||||
msgstr ""
|
||||
"若要啟用實驗性功能,請將功能關鍵字加入列表中。置於該功能是否須要重新啟動混成"
|
||||
"器則視給予的功能而定。任何實驗性功能不一定能用、或是可以調整設定。請不要預期"
|
||||
"在此設定中加入的任何東西未來都能存在。目前可用的關鍵字有: • “scale-monitor-"
|
||||
"framebuffer” — 讓 mutter 預設採用邏輯像素座標空間的配置邏輯螢幕,而縮放螢幕 "
|
||||
"framebuffer 則取代視窗內容以管理 HiDPI 螢幕。不須要重新啟動。"
|
||||
"在此設定中加入的任何東西未來都能存在。目前可用的關鍵字有:"
|
||||
"• 「scale-monitor-framebuffer」— 讓 mutter 預設採用邏輯像素座標空間的"
|
||||
"配置邏輯螢幕,而縮放螢幕 framebuffer 則取代視窗內容以管理 HiDPI 螢幕。不需要重新啟動。"
|
||||
"• 「rt-scheduler」— 讓 mutter 請求低優先級的即時排程。可執行檔或使用者必須要有"
|
||||
"CAP_SYS_NICE。需要重新啟動。"
|
||||
"• 「autostart-xwayland」— 如果有 X11 用戶端就延遲初始化 Xwayland。需要重新啟動。"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
#: data/org.gnome.mutter.gschema.xml.in:134
|
||||
msgid "Modifier to use to locate the pointer"
|
||||
msgstr "要用來定位指標的輔助鍵"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:135
|
||||
msgid "This key will initiate the “locate pointer” action."
|
||||
msgstr "這個按鍵將會「定位指標」。"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "從分頁彈出項選擇視窗"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "取消分頁彈出項"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
#: data/org.gnome.mutter.gschema.xml.in:165
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "切換螢幕組態"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
#: data/org.gnome.mutter.gschema.xml.in:170
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "旋轉切換內建螢幕組態"
|
||||
|
||||
@ -456,26 +480,38 @@ msgid "Re-enable shortcuts"
|
||||
msgstr "重新啟用快捷鍵"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "在 Xwayland 允許抓取"
|
||||
#| msgid "Allow grabs with Xwayland"
|
||||
msgid "Allow X11 grabs to lock keyboard focus with Xwayland"
|
||||
msgstr "允許 X11 抓取以使用 Xwayland 鎖定鍵盤焦點"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:65
|
||||
#, fuzzy
|
||||
#| 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”."
|
||||
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”."
|
||||
"Allow all keyboard events to be routed to X11 “override redirect” windows "
|
||||
"with a grab when running in Xwayland. This option is to support X11 clients "
|
||||
"which map an “override redirect” window (which do not receive keyboard "
|
||||
"focus) and issue a keyboard grab to force all keyboard events to that "
|
||||
"window. This option is seldom used and has no effect on regular X11 windows "
|
||||
"which can receive keyboard focus under normal circumstances. 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 ""
|
||||
"考慮到在 Xwayland 中執行的 X11 應用程序發出的鍵盤抓取。對於在 Wayland 下考慮"
|
||||
"的 X11 抓取,客戶端也必須送出一個特定的 X11 ClientMessage 到 root 視窗或者在 "
|
||||
"xwayland-grab-access-rules 鍵白名單其中的應用程式。"
|
||||
"xwayland-grab-access-rules 鍵白名單其中的應用程式"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:84
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr "Xwayland 應用程式允許發出鍵盤抓取"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:85
|
||||
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 "
|
||||
@ -499,7 +535,7 @@ msgstr ""
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2423
|
||||
#: src/backends/meta-input-settings.c:2532
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "模式切換( 群組 %d)"
|
||||
@ -507,121 +543,124 @@ msgstr "模式切換( 群組 %d)"
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2446
|
||||
#: src/backends/meta-input-settings.c:2555
|
||||
msgid "Switch monitor"
|
||||
msgstr "切換螢幕"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2448
|
||||
#: src/backends/meta-input-settings.c:2557
|
||||
msgid "Show on-screen help"
|
||||
msgstr "顯示螢幕求助"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:954
|
||||
#: src/backends/meta-monitor.c:223
|
||||
msgid "Built-in display"
|
||||
msgstr "內建顯示"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:986
|
||||
#: src/backends/meta-monitor.c:252
|
||||
msgid "Unknown"
|
||||
msgstr "不明"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:988
|
||||
#: src/backends/meta-monitor.c:254
|
||||
msgid "Unknown Display"
|
||||
msgstr "不明的顯示器"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:996
|
||||
#: src/backends/meta-monitor.c:262
|
||||
#, c-format
|
||||
#| msgid "%s %s"
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name, followed by a size in inches, like 'Dell 15\"'"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:1004
|
||||
#: src/backends/meta-monitor.c:270
|
||||
#, c-format
|
||||
#| msgid "%s %s"
|
||||
msgctxt ""
|
||||
"This is a monitor vendor name followed by product/model name where size in "
|
||||
"inches could not be calculated, e.g. Dell U2414H"
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. Translators: this string will appear in Sysprof
|
||||
#: src/backends/meta-profiler.c:82
|
||||
msgid "Compositor"
|
||||
msgstr "合成器"
|
||||
|
||||
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
|
||||
#. 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:482
|
||||
#: src/compositor/compositor.c:509
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr "在畫面「%2$s」中的第 %1$i 個螢幕中已啟動另一個組合視窗管理員。"
|
||||
|
||||
#: src/core/bell.c:252
|
||||
#: src/core/bell.c:192
|
||||
msgid "Bell event"
|
||||
msgstr "響鈴事件"
|
||||
|
||||
#: src/core/main.c:185
|
||||
#: src/core/main.c:190
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "停用到作業階段管理員的連線"
|
||||
|
||||
#: src/core/main.c:191
|
||||
#: src/core/main.c:196
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "取代執行中的視窗管理員"
|
||||
|
||||
#: src/core/main.c:197
|
||||
#: src/core/main.c:202
|
||||
msgid "Specify session management ID"
|
||||
msgstr "指定作業階段管理 ID"
|
||||
|
||||
#: src/core/main.c:202
|
||||
#: src/core/main.c:207
|
||||
msgid "X Display to use"
|
||||
msgstr "使用的 X 畫面"
|
||||
|
||||
#: src/core/main.c:208
|
||||
#: src/core/main.c:213
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "以 savefile 初始化作業階段"
|
||||
|
||||
#: src/core/main.c:214
|
||||
#: src/core/main.c:219
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "使用同步方式調用 X 函式"
|
||||
|
||||
#: src/core/main.c:221
|
||||
#: src/core/main.c:226
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "以 wayland 組合器執行"
|
||||
|
||||
#: src/core/main.c:227
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "以巢狀組合器執行"
|
||||
|
||||
#: src/core/main.c:233
|
||||
#: src/core/main.c:238
|
||||
msgid "Run wayland compositor without starting Xwayland"
|
||||
msgstr "在不啟動 Xwayland 的情況下開啟 Wayland 合成器"
|
||||
|
||||
#: src/core/main.c:241
|
||||
#: src/core/main.c:246
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "以完全顯示伺服器執行,而非巢狀"
|
||||
|
||||
#: src/core/main.c:247
|
||||
#: src/core/main.c:252
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "透過 X11 後端執行"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:150
|
||||
#: src/core/meta-close-dialog-default.c:151
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "「%s」沒有回應。"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:152
|
||||
#: src/core/meta-close-dialog-default.c:153
|
||||
msgid "Application is not responding."
|
||||
msgstr "應用程式沒有回應。"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:157
|
||||
#: src/core/meta-close-dialog-default.c:158
|
||||
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:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Force Quit"
|
||||
msgstr "強制退出(_F)"
|
||||
|
||||
#: src/core/meta-close-dialog-default.c:164
|
||||
#: src/core/meta-close-dialog-default.c:165
|
||||
msgid "_Wait"
|
||||
msgstr "等待(_W)"
|
||||
|
||||
@ -648,21 +687,21 @@ msgid "Mutter plugin to use"
|
||||
msgstr "要使用的 Mutter 外掛程式"
|
||||
|
||||
# (Abel) take care of the same string in libwnck
|
||||
#: src/core/prefs.c:1786
|
||||
#: src/core/prefs.c:1849
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "工作區 %d"
|
||||
|
||||
#: src/core/util.c:121
|
||||
#: src/core/util.c:122
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "編譯 Mutter 時並沒有加入詳細偵錯模式的支援\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:568
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "模式切換:模式 %d"
|
||||
|
||||
#: src/x11/meta-x11-display.c:666
|
||||
#: src/x11/meta-x11-display.c:679
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
@ -671,27 +710,32 @@ msgstr ""
|
||||
"畫面「%s」已經有了視窗管理員;請嘗試使用 --replace 選項來替換目前的視窗管理"
|
||||
"員。"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1008
|
||||
#: src/x11/meta-x11-display.c:1040
|
||||
msgid "Failed to initialize GDK\n"
|
||||
msgstr "無法初始化 GDK\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1032
|
||||
#: src/x11/meta-x11-display.c:1064
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "無法開啟 X Window 系統畫面「%s」\n"
|
||||
|
||||
#: src/x11/meta-x11-display.c:1115
|
||||
#: src/x11/meta-x11-display.c:1147
|
||||
#, c-format
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "畫面「%2$s」中的第 %1$d 個螢幕無效\n"
|
||||
|
||||
#: src/x11/meta-x11-selection-input-stream.c:445
|
||||
#, c-format
|
||||
msgid "Format %s not supported"
|
||||
msgstr "不支援 %s 格式"
|
||||
|
||||
#: src/x11/session.c:1821
|
||||
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:568
|
||||
#: src/x11/window-props.c:569
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s(在 %s)"
|
||||
|
@ -49,6 +49,14 @@
|
||||
#define DEFAULT_XKB_RULES_FILE "evdev"
|
||||
#define DEFAULT_XKB_MODEL "pc105+inet"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_SEQUENCE_NONE,
|
||||
META_SEQUENCE_ACCEPTED,
|
||||
META_SEQUENCE_REJECTED,
|
||||
META_SEQUENCE_PENDING_END
|
||||
} MetaSequenceState;
|
||||
|
||||
struct _MetaBackendClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
@ -71,6 +79,10 @@ struct _MetaBackendClass
|
||||
int device_id,
|
||||
uint32_t timestamp);
|
||||
|
||||
void (* finish_touch_sequence) (MetaBackend *backend,
|
||||
ClutterEventSequence *sequence,
|
||||
MetaSequenceState state);
|
||||
|
||||
void (* warp_pointer) (MetaBackend *backend,
|
||||
int x,
|
||||
int y);
|
||||
@ -135,6 +147,10 @@ gboolean meta_backend_ungrab_device (MetaBackend *backend,
|
||||
int device_id,
|
||||
uint32_t timestamp);
|
||||
|
||||
void meta_backend_finish_touch_sequence (MetaBackend *backend,
|
||||
ClutterEventSequence *sequence,
|
||||
MetaSequenceState state);
|
||||
|
||||
void meta_backend_warp_pointer (MetaBackend *backend,
|
||||
int x,
|
||||
int y);
|
||||
|
@ -1059,6 +1059,20 @@ meta_backend_ungrab_device (MetaBackend *backend,
|
||||
return META_BACKEND_GET_CLASS (backend)->ungrab_device (backend, device_id, timestamp);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_backend_finish_touch_sequence: (skip)
|
||||
*/
|
||||
void
|
||||
meta_backend_finish_touch_sequence (MetaBackend *backend,
|
||||
ClutterEventSequence *sequence,
|
||||
MetaSequenceState state)
|
||||
{
|
||||
if (META_BACKEND_GET_CLASS (backend)->finish_touch_sequence)
|
||||
META_BACKEND_GET_CLASS (backend)->finish_touch_sequence (backend,
|
||||
sequence,
|
||||
state);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_backend_warp_pointer: (skip)
|
||||
*/
|
||||
|
@ -31,6 +31,7 @@ struct _MetaCursorTracker {
|
||||
GObject parent_instance;
|
||||
|
||||
gboolean is_showing;
|
||||
gboolean keep_focus_while_hidden;
|
||||
|
||||
MetaCursorSprite *effective_cursor; /* May be NULL when hidden */
|
||||
MetaCursorSprite *displayed_cursor;
|
||||
|
@ -136,6 +136,7 @@ static void
|
||||
meta_cursor_tracker_init (MetaCursorTracker *self)
|
||||
{
|
||||
self->is_showing = TRUE;
|
||||
self->keep_focus_while_hidden = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -457,6 +458,44 @@ meta_cursor_tracker_set_pointer_visible (MetaCursorTracker *tracker,
|
||||
g_signal_emit (tracker, signals[VISIBILITY_CHANGED], 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_cursor_tracker_get_keep_focus_while_hidden:
|
||||
* @tracker: a #MetaCursorTracker object.
|
||||
*
|
||||
* Returns: %FALSE if the Wayland focus surface of the pointer will
|
||||
* be forced to NULL while the pointer is hidden, %TRUE otherwise.
|
||||
* This function is only meant to be used by the magnifier of the shell
|
||||
* and will be removed in a future release.
|
||||
*/
|
||||
gboolean
|
||||
meta_cursor_tracker_get_keep_focus_while_hidden (MetaCursorTracker *tracker)
|
||||
{
|
||||
return tracker->keep_focus_while_hidden;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_cursor_tracker_set_keep_focus_while_hidden:
|
||||
* @tracker: a #MetaCursorTracker object.
|
||||
* @keep_focus: whether to keep the cursor focus while hidden
|
||||
*
|
||||
* If this is set to %TRUE, the Wayland focus surface of the pointer will
|
||||
* not be forced to NULL while the pointer is hidden.
|
||||
* This function is only meant to be used by the magnifier of the shell
|
||||
* and will be removed in a future release.
|
||||
*/
|
||||
void
|
||||
meta_cursor_tracker_set_keep_focus_while_hidden (MetaCursorTracker *tracker,
|
||||
gboolean keep_focus)
|
||||
{
|
||||
if (keep_focus == tracker->keep_focus_while_hidden)
|
||||
return;
|
||||
tracker->keep_focus_while_hidden = keep_focus;
|
||||
|
||||
sync_cursor (tracker);
|
||||
|
||||
g_signal_emit (tracker, signals[VISIBILITY_CHANGED], 0);
|
||||
}
|
||||
|
||||
MetaCursorSprite *
|
||||
meta_cursor_tracker_get_displayed_cursor (MetaCursorTracker *tracker)
|
||||
{
|
||||
|
@ -214,6 +214,8 @@ meta_dbus_session_watcher_finalize (GObject *object)
|
||||
MetaDbusSessionWatcher *session_watcher = META_DBUS_SESSION_WATCHER (object);
|
||||
|
||||
g_hash_table_destroy (session_watcher->clients);
|
||||
|
||||
G_OBJECT_CLASS (meta_dbus_session_watcher_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -54,7 +54,6 @@ struct _MetaIdleMonitorClass
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
void _meta_idle_monitor_watch_fire (MetaIdleMonitorWatch *watch);
|
||||
void meta_idle_monitor_reset_idletime (MetaIdleMonitor *monitor);
|
||||
|
||||
#endif /* META_IDLE_MONITOR_PRIVATE_H */
|
||||
|
@ -54,8 +54,8 @@ static GParamSpec *obj_props[PROP_LAST];
|
||||
|
||||
G_DEFINE_TYPE (MetaIdleMonitor, meta_idle_monitor, G_TYPE_OBJECT)
|
||||
|
||||
void
|
||||
_meta_idle_monitor_watch_fire (MetaIdleMonitorWatch *watch)
|
||||
static void
|
||||
meta_idle_monitor_watch_fire (MetaIdleMonitorWatch *watch)
|
||||
{
|
||||
MetaIdleMonitor *monitor;
|
||||
guint id;
|
||||
@ -207,6 +207,8 @@ update_inhibited (MetaIdleMonitor *monitor,
|
||||
if (inhibited == monitor->inhibited)
|
||||
return;
|
||||
|
||||
monitor->inhibited = inhibited;
|
||||
|
||||
g_hash_table_foreach (monitor->watches,
|
||||
update_inhibited_watch,
|
||||
monitor);
|
||||
@ -324,9 +326,10 @@ idle_monitor_dispatch_timeout (GSource *source,
|
||||
if (ready_time > now)
|
||||
return G_SOURCE_CONTINUE;
|
||||
|
||||
_meta_idle_monitor_watch_fire (watch);
|
||||
g_source_set_ready_time (watch->timeout_source, -1);
|
||||
|
||||
meta_idle_monitor_watch_fire (watch);
|
||||
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
@ -511,13 +514,20 @@ meta_idle_monitor_reset_idletime (MetaIdleMonitor *monitor)
|
||||
|
||||
if (watch->timeout_msec == 0)
|
||||
{
|
||||
_meta_idle_monitor_watch_fire ((MetaIdleMonitorWatch *) watch);
|
||||
meta_idle_monitor_watch_fire (watch);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_source_set_ready_time (watch->timeout_source,
|
||||
monitor->last_event_time +
|
||||
watch->timeout_msec * 1000);
|
||||
if (monitor->inhibited)
|
||||
{
|
||||
g_source_set_ready_time (watch->timeout_source, -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_source_set_ready_time (watch->timeout_source,
|
||||
monitor->last_event_time +
|
||||
watch->timeout_msec * 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1437,7 +1437,8 @@ lookup_tool_settings (ClutterInputDeviceTool *tool,
|
||||
}
|
||||
else
|
||||
{
|
||||
path = g_strdup_printf ("/org/gnome/desktop/peripherals/stylus/%lx/", serial);
|
||||
path = g_strdup_printf ("/org/gnome/desktop/peripherals/stylus/%" G_GINT64_MODIFIER "x/",
|
||||
serial);
|
||||
}
|
||||
|
||||
tool_settings =
|
||||
|
@ -1648,6 +1648,7 @@ create_monitor_config_from_variant (MetaMonitorManager *manager,
|
||||
MetaMonitorModeSpec *monitor_mode_spec;
|
||||
g_autoptr (GVariant) properties_variant = NULL;
|
||||
gboolean enable_underscanning = FALSE;
|
||||
gboolean set_underscanning = FALSE;
|
||||
|
||||
g_variant_get (monitor_config_variant, "(ss@a{sv})",
|
||||
&connector,
|
||||
@ -1670,7 +1671,18 @@ create_monitor_config_from_variant (MetaMonitorManager *manager,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
g_variant_lookup (properties_variant, "underscanning", "b", &enable_underscanning);
|
||||
set_underscanning =
|
||||
g_variant_lookup (properties_variant, "underscanning", "b",
|
||||
&enable_underscanning);
|
||||
if (set_underscanning)
|
||||
{
|
||||
if (enable_underscanning && !meta_monitor_supports_underscanning (monitor))
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Underscanning requested but unsupported");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
monitor_spec = meta_monitor_spec_clone (meta_monitor_get_spec (monitor));
|
||||
|
||||
|
@ -226,11 +226,15 @@ meta_screen_cast_window_stream_initable_init (GInitable *initable,
|
||||
G_CALLBACK (on_window_unmanaged),
|
||||
window_stream);
|
||||
|
||||
if (meta_is_stage_views_scaled ())
|
||||
scale = (int) ceilf (meta_logical_monitor_get_scale (logical_monitor));
|
||||
else
|
||||
scale = 1;
|
||||
|
||||
/* We cannot set the stream size to the exact size of the window, because
|
||||
* windows can be resized, whereas streams cannot.
|
||||
* So we set a size equals to the size of the logical monitor for the window.
|
||||
*/
|
||||
scale = (int) ceil (meta_logical_monitor_get_scale (logical_monitor));
|
||||
window_stream->logical_width = logical_monitor->rect.width;
|
||||
window_stream->logical_height = logical_monitor->rect.height;
|
||||
window_stream->stream_width = logical_monitor->rect.width * scale;
|
||||
|
@ -583,7 +583,6 @@ on_udev_device_added (MetaUdev *udev,
|
||||
{
|
||||
g_warning ("Failed to hotplug secondary gpu '%s': %s",
|
||||
device_path, error->message);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -821,6 +820,7 @@ void meta_backend_native_resume (MetaBackendNative *native)
|
||||
META_MONITOR_MANAGER_KMS (monitor_manager);
|
||||
MetaInputSettings *input_settings;
|
||||
MetaIdleMonitor *idle_monitor;
|
||||
ClutterDeviceManager *device_manager;
|
||||
|
||||
COGL_TRACE_BEGIN_SCOPED (MetaBackendNativeResume,
|
||||
"Backend (resume)");
|
||||
@ -839,4 +839,7 @@ void meta_backend_native_resume (MetaBackendNative *native)
|
||||
|
||||
input_settings = meta_backend_get_input_settings (backend);
|
||||
meta_input_settings_maybe_restore_numlock_state (input_settings);
|
||||
|
||||
device_manager = clutter_device_manager_get_default ();
|
||||
clutter_device_manager_ensure_a11y_state (device_manager);
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2014 Red Hat
|
||||
* Copyright 2020 DisplayLink (UK) Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@ -322,6 +323,7 @@ update_monitor_crtc_cursor (MetaMonitor *monitor,
|
||||
&crtc_x, &crtc_y);
|
||||
|
||||
transform = meta_logical_monitor_get_transform (data->in_logical_monitor);
|
||||
transform = meta_monitor_logical_to_crtc_transform (monitor, transform);
|
||||
if (meta_monitor_transform_is_rotated (transform))
|
||||
{
|
||||
crtc_width = monitor_crtc_mode->crtc_mode->height;
|
||||
@ -1175,6 +1177,42 @@ on_monitors_changed (MetaMonitorManager *monitors,
|
||||
force_update_hw_cursor (native);
|
||||
}
|
||||
|
||||
static void
|
||||
init_hw_cursor_support_for_gpu (MetaGpuKms *gpu_kms)
|
||||
{
|
||||
MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||
int kms_fd;
|
||||
struct gbm_device *gbm_device;
|
||||
uint64_t width, height;
|
||||
|
||||
gbm_device = meta_gbm_device_from_gpu (gpu_kms);
|
||||
if (!gbm_device)
|
||||
return;
|
||||
|
||||
cursor_renderer_gpu_data =
|
||||
meta_create_cursor_renderer_native_gpu_data (gpu_kms);
|
||||
|
||||
kms_fd = meta_gpu_kms_get_fd (gpu_kms);
|
||||
if (drmGetCap (kms_fd, DRM_CAP_CURSOR_WIDTH, &width) == 0 &&
|
||||
drmGetCap (kms_fd, DRM_CAP_CURSOR_HEIGHT, &height) == 0)
|
||||
{
|
||||
cursor_renderer_gpu_data->cursor_width = width;
|
||||
cursor_renderer_gpu_data->cursor_height = height;
|
||||
}
|
||||
else
|
||||
{
|
||||
cursor_renderer_gpu_data->cursor_width = 64;
|
||||
cursor_renderer_gpu_data->cursor_height = 64;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_gpu_added_for_cursor (MetaBackend *backend,
|
||||
MetaGpuKms *gpu_kms)
|
||||
{
|
||||
init_hw_cursor_support_for_gpu (gpu_kms);
|
||||
}
|
||||
|
||||
static void
|
||||
init_hw_cursor_support (MetaCursorRendererNative *cursor_renderer_native)
|
||||
{
|
||||
@ -1187,30 +1225,8 @@ init_hw_cursor_support (MetaCursorRendererNative *cursor_renderer_native)
|
||||
for (l = gpus; l; l = l->next)
|
||||
{
|
||||
MetaGpuKms *gpu_kms = l->data;
|
||||
MetaCursorRendererNativeGpuData *cursor_renderer_gpu_data;
|
||||
int kms_fd;
|
||||
struct gbm_device *gbm_device;
|
||||
uint64_t width, height;
|
||||
|
||||
gbm_device = meta_gbm_device_from_gpu (gpu_kms);
|
||||
if (!gbm_device)
|
||||
continue;
|
||||
|
||||
cursor_renderer_gpu_data =
|
||||
meta_create_cursor_renderer_native_gpu_data (gpu_kms);
|
||||
|
||||
kms_fd = meta_gpu_kms_get_fd (gpu_kms);
|
||||
if (drmGetCap (kms_fd, DRM_CAP_CURSOR_WIDTH, &width) == 0 &&
|
||||
drmGetCap (kms_fd, DRM_CAP_CURSOR_HEIGHT, &height) == 0)
|
||||
{
|
||||
cursor_renderer_gpu_data->cursor_width = width;
|
||||
cursor_renderer_gpu_data->cursor_height = height;
|
||||
}
|
||||
else
|
||||
{
|
||||
cursor_renderer_gpu_data->cursor_width = 64;
|
||||
cursor_renderer_gpu_data->cursor_height = 64;
|
||||
}
|
||||
init_hw_cursor_support_for_gpu (gpu_kms);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1230,6 +1246,8 @@ meta_cursor_renderer_native_new (MetaBackend *backend)
|
||||
g_signal_connect_object (monitor_manager, "monitors-changed-internal",
|
||||
G_CALLBACK (on_monitors_changed),
|
||||
cursor_renderer_native, 0);
|
||||
g_signal_connect (backend, "gpu-added",
|
||||
G_CALLBACK (on_gpu_added_for_cursor), NULL);
|
||||
|
||||
priv->backend = backend;
|
||||
priv->hw_state_invalidated = TRUE;
|
||||
|
@ -62,7 +62,7 @@ meta_keymap_native_get_num_lock_state (ClutterKeymap *keymap)
|
||||
|
||||
return xkb_state_mod_name_is_active (xkb_state,
|
||||
XKB_MOD_NAME_NUM,
|
||||
XKB_STATE_MODS_LATCHED ||
|
||||
XKB_STATE_MODS_LATCHED |
|
||||
XKB_STATE_MODS_LOCKED);
|
||||
}
|
||||
|
||||
@ -78,7 +78,7 @@ meta_keymap_native_get_caps_lock_state (ClutterKeymap *keymap)
|
||||
|
||||
return xkb_state_mod_name_is_active (xkb_state,
|
||||
XKB_MOD_NAME_CAPS,
|
||||
XKB_STATE_MODS_LATCHED ||
|
||||
XKB_STATE_MODS_LATCHED |
|
||||
XKB_STATE_MODS_LOCKED);
|
||||
}
|
||||
|
||||
|
@ -25,8 +25,14 @@
|
||||
void meta_kms_connector_update_state (MetaKmsConnector *connector,
|
||||
drmModeRes *drm_resources);
|
||||
|
||||
void meta_kms_connector_predict_state (MetaKmsConnector *connector,
|
||||
MetaKmsUpdate *update);
|
||||
|
||||
MetaKmsConnector * meta_kms_connector_new (MetaKmsImplDevice *impl_device,
|
||||
drmModeConnector *drm_connector,
|
||||
drmModeRes *drm_resources);
|
||||
|
||||
gboolean meta_kms_connector_is_same_as (MetaKmsConnector *connector,
|
||||
drmModeConnector *drm_connector);
|
||||
|
||||
#endif /* META_KMS_CONNECTOR_PRIVATE_H */
|
||||
|
@ -24,6 +24,7 @@
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include "backends/native/meta-kms-crtc.h"
|
||||
#include "backends/native/meta-kms-device-private.h"
|
||||
#include "backends/native/meta-kms-impl-device.h"
|
||||
#include "backends/native/meta-kms-update-private.h"
|
||||
@ -36,6 +37,7 @@ struct _MetaKmsConnector
|
||||
|
||||
uint32_t id;
|
||||
MetaConnectorType type;
|
||||
uint32_t type_id;
|
||||
char *name;
|
||||
|
||||
MetaKmsConnectorState *current_state;
|
||||
@ -494,6 +496,35 @@ meta_kms_connector_update_state (MetaKmsConnector *connector,
|
||||
drmModeFreeConnector (drm_connector);
|
||||
}
|
||||
|
||||
void
|
||||
meta_kms_connector_predict_state (MetaKmsConnector *connector,
|
||||
MetaKmsUpdate *update)
|
||||
{
|
||||
GList *mode_sets;
|
||||
GList *l;
|
||||
|
||||
if (!connector->current_state)
|
||||
return;
|
||||
|
||||
mode_sets = meta_kms_update_get_mode_sets (update);
|
||||
for (l = mode_sets; l; l = l->next)
|
||||
{
|
||||
MetaKmsModeSet *mode_set = l->data;
|
||||
MetaKmsCrtc *crtc;
|
||||
|
||||
if (!g_list_find (mode_set->connectors, connector))
|
||||
continue;
|
||||
|
||||
crtc = mode_set->crtc;
|
||||
if (crtc)
|
||||
connector->current_state->current_crtc_id = meta_kms_crtc_get_id (crtc);
|
||||
else
|
||||
connector->current_state->current_crtc_id = 0;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
find_property_ids (MetaKmsConnector *connector,
|
||||
MetaKmsImplDevice *impl_device,
|
||||
@ -562,6 +593,15 @@ make_connector_name (drmModeConnector *drm_connector)
|
||||
drm_connector->connector_type_id);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_kms_connector_is_same_as (MetaKmsConnector *connector,
|
||||
drmModeConnector *drm_connector)
|
||||
{
|
||||
return (connector->id == drm_connector->connector_id &&
|
||||
connector->type == drm_connector->connector_type &&
|
||||
connector->type_id == drm_connector->connector_type_id);
|
||||
}
|
||||
|
||||
MetaKmsConnector *
|
||||
meta_kms_connector_new (MetaKmsImplDevice *impl_device,
|
||||
drmModeConnector *drm_connector,
|
||||
@ -573,6 +613,7 @@ meta_kms_connector_new (MetaKmsImplDevice *impl_device,
|
||||
connector->device = meta_kms_impl_device_get_device (impl_device);
|
||||
connector->id = drm_connector->connector_id;
|
||||
connector->type = (MetaConnectorType) drm_connector->connector_type;
|
||||
connector->type_id = drm_connector->connector_type_id;
|
||||
connector->name = make_connector_name (drm_connector);
|
||||
|
||||
find_property_ids (connector, impl_device, drm_connector);
|
||||
|
@ -30,4 +30,7 @@ MetaKmsCrtc * meta_kms_crtc_new (MetaKmsImplDevice *impl_device,
|
||||
|
||||
void meta_kms_crtc_update_state (MetaKmsCrtc *crtc);
|
||||
|
||||
void meta_kms_crtc_predict_state (MetaKmsCrtc *crtc,
|
||||
MetaKmsUpdate *update);
|
||||
|
||||
#endif /* META_KMS_CRTC_PRIVATE_H */
|
||||
|
@ -143,6 +143,105 @@ meta_kms_crtc_update_state (MetaKmsCrtc *crtc)
|
||||
drmModeFreeCrtc (drm_crtc);
|
||||
}
|
||||
|
||||
static void
|
||||
clear_gamma_state (MetaKmsCrtc *crtc)
|
||||
{
|
||||
crtc->current_state.gamma.size = 0;
|
||||
g_clear_pointer (&crtc->current_state.gamma.red, g_free);
|
||||
g_clear_pointer (&crtc->current_state.gamma.green, g_free);
|
||||
g_clear_pointer (&crtc->current_state.gamma.blue, g_free);
|
||||
}
|
||||
|
||||
void
|
||||
meta_kms_crtc_predict_state (MetaKmsCrtc *crtc,
|
||||
MetaKmsUpdate *update)
|
||||
{
|
||||
gboolean is_gamma_valid;
|
||||
GList *mode_sets;
|
||||
GList *crtc_gammas;
|
||||
GList *l;
|
||||
|
||||
is_gamma_valid = TRUE;
|
||||
|
||||
mode_sets = meta_kms_update_get_mode_sets (update);
|
||||
for (l = mode_sets; l; l = l->next)
|
||||
{
|
||||
MetaKmsModeSet *mode_set = l->data;
|
||||
|
||||
if (mode_set->crtc != crtc)
|
||||
continue;
|
||||
|
||||
if (mode_set->drm_mode)
|
||||
{
|
||||
MetaKmsPlaneAssignment *plane_assignment;
|
||||
|
||||
plane_assignment =
|
||||
meta_kms_update_get_primary_plane_assignment (update, crtc);
|
||||
|
||||
crtc->current_state.rect =
|
||||
meta_fixed_16_rectangle_to_rectangle (plane_assignment->src_rect);
|
||||
crtc->current_state.is_drm_mode_valid = TRUE;
|
||||
crtc->current_state.drm_mode = *mode_set->drm_mode;
|
||||
}
|
||||
else
|
||||
{
|
||||
crtc->current_state.rect = (MetaRectangle) { 0 };
|
||||
crtc->current_state.is_drm_mode_valid = FALSE;
|
||||
crtc->current_state.drm_mode = (drmModeModeInfo) { 0 };
|
||||
}
|
||||
|
||||
is_gamma_valid = FALSE;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
crtc_gammas = meta_kms_update_get_crtc_gammas (update);
|
||||
for (l = crtc_gammas; l; l = l->next)
|
||||
{
|
||||
MetaKmsCrtcGamma *gamma = l->data;
|
||||
|
||||
if (gamma->crtc != crtc)
|
||||
continue;
|
||||
|
||||
crtc->current_state.gamma.size = gamma->size;
|
||||
crtc->current_state.gamma.red =
|
||||
g_memdup (gamma->red, gamma->size * sizeof (uint16_t));
|
||||
crtc->current_state.gamma.green =
|
||||
g_memdup (gamma->green, gamma->size * sizeof (uint16_t));
|
||||
crtc->current_state.gamma.blue =
|
||||
g_memdup (gamma->blue, gamma->size * sizeof (uint16_t));
|
||||
|
||||
is_gamma_valid = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!is_gamma_valid)
|
||||
{
|
||||
if (crtc->current_state.is_drm_mode_valid)
|
||||
{
|
||||
MetaKmsImplDevice *impl_device;
|
||||
drmModeCrtc *drm_crtc;
|
||||
|
||||
impl_device = meta_kms_device_get_impl_device (crtc->device);
|
||||
drm_crtc = drmModeGetCrtc (meta_kms_impl_device_get_fd (impl_device),
|
||||
crtc->id);
|
||||
if (drm_crtc)
|
||||
{
|
||||
read_gamma_state (crtc, impl_device, drm_crtc);
|
||||
drmModeFreeCrtc (drm_crtc);
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_gamma_state (crtc);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_gamma_state (crtc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MetaKmsCrtc *
|
||||
meta_kms_crtc_new (MetaKmsImplDevice *impl_device,
|
||||
drmModeCrtc *drm_crtc,
|
||||
@ -163,9 +262,7 @@ meta_kms_crtc_finalize (GObject *object)
|
||||
{
|
||||
MetaKmsCrtc *crtc = META_KMS_CRTC (object);
|
||||
|
||||
g_clear_pointer (&crtc->current_state.gamma.red, g_free);
|
||||
g_clear_pointer (&crtc->current_state.gamma.green, g_free);
|
||||
g_clear_pointer (&crtc->current_state.gamma.blue, g_free);
|
||||
clear_gamma_state (crtc);
|
||||
|
||||
G_OBJECT_CLASS (meta_kms_crtc_parent_class)->finalize (object);
|
||||
}
|
||||
|
@ -24,4 +24,9 @@
|
||||
|
||||
MetaKmsImplDevice * meta_kms_device_get_impl_device (MetaKmsDevice *device);
|
||||
|
||||
void meta_kms_device_update_states_in_impl (MetaKmsDevice *device);
|
||||
|
||||
void meta_kms_device_predict_states_in_impl (MetaKmsDevice *device,
|
||||
MetaKmsUpdate *update);
|
||||
|
||||
#endif /* META_KMS_DEVICE_PRIVATE_H */
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Red Hat
|
||||
* Copyright (C) 2019 DisplayLink (UK) Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@ -108,6 +109,37 @@ meta_kms_device_get_primary_plane_for (MetaKmsDevice *device,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
meta_kms_device_update_states_in_impl (MetaKmsDevice *device)
|
||||
{
|
||||
MetaKmsImplDevice *impl_device = meta_kms_device_get_impl_device (device);
|
||||
|
||||
meta_assert_in_kms_impl (device->kms);
|
||||
meta_assert_is_waiting_for_kms_impl_task (device->kms);
|
||||
|
||||
meta_kms_impl_device_update_states (impl_device);
|
||||
|
||||
g_list_free (device->crtcs);
|
||||
device->crtcs = meta_kms_impl_device_copy_crtcs (impl_device);
|
||||
|
||||
g_list_free (device->connectors);
|
||||
device->connectors = meta_kms_impl_device_copy_connectors (impl_device);
|
||||
|
||||
g_list_free (device->planes);
|
||||
device->planes = meta_kms_impl_device_copy_planes (impl_device);
|
||||
}
|
||||
|
||||
void
|
||||
meta_kms_device_predict_states_in_impl (MetaKmsDevice *device,
|
||||
MetaKmsUpdate *update)
|
||||
{
|
||||
MetaKmsImplDevice *impl_device = meta_kms_device_get_impl_device (device);
|
||||
|
||||
meta_assert_in_kms_impl (device->kms);
|
||||
|
||||
meta_kms_impl_device_predict_states (impl_device, update);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
dispatch_in_impl (MetaKmsImpl *impl,
|
||||
gpointer user_data,
|
||||
@ -118,12 +150,28 @@ dispatch_in_impl (MetaKmsImpl *impl,
|
||||
return meta_kms_impl_device_dispatch (impl_device, error);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
dispatch_idle_in_impl (MetaKmsImpl *impl,
|
||||
gpointer user_data,
|
||||
GError **error)
|
||||
{
|
||||
meta_kms_impl_dispatch_idle (impl);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int
|
||||
meta_kms_device_dispatch_sync (MetaKmsDevice *device,
|
||||
GError **error)
|
||||
{
|
||||
int callback_count;
|
||||
|
||||
if (!meta_kms_run_impl_task_sync (device->kms,
|
||||
dispatch_idle_in_impl,
|
||||
device->impl_device,
|
||||
error))
|
||||
return -1;
|
||||
|
||||
callback_count = meta_kms_flush_callbacks (device->kms);
|
||||
if (callback_count > 0)
|
||||
return TRUE;
|
||||
@ -186,6 +234,7 @@ meta_kms_device_new (MetaKms *kms,
|
||||
return NULL;
|
||||
|
||||
device = g_object_new (META_TYPE_KMS_DEVICE, NULL);
|
||||
device->kms = kms;
|
||||
|
||||
data = (CreateImplDeviceData) {
|
||||
.device = device,
|
||||
@ -199,7 +248,6 @@ meta_kms_device_new (MetaKms *kms,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
device->kms = kms;
|
||||
device->impl_device = data.out_impl_device;
|
||||
device->flags = flags;
|
||||
device->path = g_strdup (path);
|
||||
@ -241,27 +289,31 @@ meta_kms_device_finalize (GObject *object)
|
||||
MetaBackend *backend = meta_kms_get_backend (device->kms);
|
||||
MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
|
||||
MetaLauncher *launcher = meta_backend_native_get_launcher (backend_native);
|
||||
FreeImplDeviceData data;
|
||||
GError *error = NULL;
|
||||
|
||||
g_free (device->path);
|
||||
g_list_free (device->crtcs);
|
||||
g_list_free (device->connectors);
|
||||
g_list_free (device->planes);
|
||||
|
||||
data = (FreeImplDeviceData) {
|
||||
.impl_device = device->impl_device,
|
||||
};
|
||||
if (!meta_kms_run_impl_task_sync (device->kms, free_impl_device_in_impl, &data,
|
||||
&error))
|
||||
if (device->impl_device)
|
||||
{
|
||||
g_warning ("Failed to close KMS impl device: %s", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_launcher_close_restricted (launcher, data.out_fd);
|
||||
}
|
||||
FreeImplDeviceData data;
|
||||
GError *error = NULL;
|
||||
|
||||
data = (FreeImplDeviceData) {
|
||||
.impl_device = device->impl_device,
|
||||
};
|
||||
if (!meta_kms_run_impl_task_sync (device->kms, free_impl_device_in_impl, &data,
|
||||
&error))
|
||||
{
|
||||
g_warning ("Failed to close KMS impl device: %s", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_launcher_close_restricted (launcher, data.out_fd);
|
||||
}
|
||||
}
|
||||
G_OBJECT_CLASS (meta_kms_device_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
|
@ -196,10 +196,28 @@ init_crtcs (MetaKmsImplDevice *impl_device,
|
||||
impl_device->crtcs = g_list_reverse (impl_device->crtcs);
|
||||
}
|
||||
|
||||
static void
|
||||
init_connectors (MetaKmsImplDevice *impl_device,
|
||||
drmModeRes *drm_resources)
|
||||
static MetaKmsConnector *
|
||||
find_existing_connector (MetaKmsImplDevice *impl_device,
|
||||
drmModeConnector *drm_connector)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
for (l = impl_device->connectors; l; l = l->next)
|
||||
{
|
||||
MetaKmsConnector *connector = l->data;
|
||||
|
||||
if (meta_kms_connector_is_same_as (connector, drm_connector))
|
||||
return connector;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
update_connectors (MetaKmsImplDevice *impl_device,
|
||||
drmModeRes *drm_resources)
|
||||
{
|
||||
GList *connectors = NULL;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < drm_resources->count_connectors; i++)
|
||||
@ -212,14 +230,19 @@ init_connectors (MetaKmsImplDevice *impl_device,
|
||||
if (!drm_connector)
|
||||
continue;
|
||||
|
||||
connector = meta_kms_connector_new (impl_device, drm_connector,
|
||||
drm_resources);
|
||||
connector = find_existing_connector (impl_device, drm_connector);
|
||||
if (connector)
|
||||
connector = g_object_ref (connector);
|
||||
else
|
||||
connector = meta_kms_connector_new (impl_device, drm_connector,
|
||||
drm_resources);
|
||||
drmModeFreeConnector (drm_connector);
|
||||
|
||||
impl_device->connectors = g_list_prepend (impl_device->connectors,
|
||||
connector);
|
||||
connectors = g_list_prepend (connectors, connector);
|
||||
}
|
||||
impl_device->connectors = g_list_reverse (impl_device->connectors);
|
||||
|
||||
g_list_free_full (impl_device->connectors, g_object_unref);
|
||||
impl_device->connectors = g_list_reverse (connectors);
|
||||
}
|
||||
|
||||
static MetaKmsPlaneType
|
||||
@ -243,7 +266,8 @@ get_plane_type (MetaKmsImplDevice *impl_device,
|
||||
case DRM_PLANE_TYPE_OVERLAY:
|
||||
return META_KMS_PLANE_TYPE_OVERLAY;
|
||||
default:
|
||||
g_warning ("Unhandled plane type %lu", props->prop_values[idx]);
|
||||
g_warning ("Unhandled plane type %" G_GUINT64_FORMAT,
|
||||
props->prop_values[idx]);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -302,6 +326,19 @@ meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device)
|
||||
meta_assert_in_kms_impl (meta_kms_impl_get_kms (impl_device->impl));
|
||||
|
||||
drm_resources = drmModeGetResources (impl_device->fd);
|
||||
if (!drm_resources)
|
||||
{
|
||||
g_list_free_full (impl_device->planes, g_object_unref);
|
||||
g_list_free_full (impl_device->crtcs, g_object_unref);
|
||||
g_list_free_full (impl_device->connectors, g_object_unref);
|
||||
impl_device->planes = NULL;
|
||||
impl_device->crtcs = NULL;
|
||||
impl_device->connectors = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
update_connectors (impl_device, drm_resources);
|
||||
|
||||
g_list_foreach (impl_device->crtcs, (GFunc) meta_kms_crtc_update_state,
|
||||
NULL);
|
||||
g_list_foreach (impl_device->connectors, (GFunc) meta_kms_connector_update_state,
|
||||
@ -309,6 +346,16 @@ meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device)
|
||||
drmModeFreeResources (drm_resources);
|
||||
}
|
||||
|
||||
void
|
||||
meta_kms_impl_device_predict_states (MetaKmsImplDevice *impl_device,
|
||||
MetaKmsUpdate *update)
|
||||
{
|
||||
g_list_foreach (impl_device->crtcs, (GFunc) meta_kms_crtc_predict_state,
|
||||
update);
|
||||
g_list_foreach (impl_device->connectors, (GFunc) meta_kms_connector_predict_state,
|
||||
update);
|
||||
}
|
||||
|
||||
MetaKmsImplDevice *
|
||||
meta_kms_impl_device_new (MetaKmsDevice *device,
|
||||
MetaKmsImpl *impl,
|
||||
@ -346,9 +393,10 @@ meta_kms_impl_device_new (MetaKmsDevice *device,
|
||||
impl_device->fd = fd;
|
||||
|
||||
init_crtcs (impl_device, drm_resources);
|
||||
init_connectors (impl_device, drm_resources);
|
||||
init_planes (impl_device);
|
||||
|
||||
update_connectors (impl_device, drm_resources);
|
||||
|
||||
drmModeFreeResources (drm_resources);
|
||||
|
||||
impl_device->fd_source =
|
||||
|
@ -55,6 +55,9 @@ int meta_kms_impl_device_leak_fd (MetaKmsImplDevice *impl_device);
|
||||
|
||||
void meta_kms_impl_device_update_states (MetaKmsImplDevice *impl_device);
|
||||
|
||||
void meta_kms_impl_device_predict_states (MetaKmsImplDevice *impl_device,
|
||||
MetaKmsUpdate *update);
|
||||
|
||||
int meta_kms_impl_device_close (MetaKmsImplDevice *impl_device);
|
||||
|
||||
MetaKmsImplDevice * meta_kms_impl_device_new (MetaKmsDevice *device,
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2018-2019 Red Hat
|
||||
* Copyright (C) 2019 DisplayLink (UK) Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@ -134,24 +135,6 @@ process_plane_property (MetaKmsImpl *impl,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static MetaKmsPlaneAssignment *
|
||||
get_primary_plane_assignment (MetaKmsImpl *impl,
|
||||
MetaKmsUpdate *update,
|
||||
MetaKmsCrtc *crtc)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
for (l = meta_kms_update_get_plane_assignments (update); l; l = l->next)
|
||||
{
|
||||
MetaKmsPlaneAssignment *plane_assignment = l->data;
|
||||
|
||||
if (plane_assignment->crtc == crtc)
|
||||
return plane_assignment;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static CachedModeSet *
|
||||
cached_mode_set_new (GList *connectors,
|
||||
const drmModeModeInfo *drm_mode)
|
||||
@ -222,7 +205,8 @@ process_mode_set (MetaKmsImpl *impl,
|
||||
&connectors,
|
||||
&n_connectors);
|
||||
|
||||
plane_assignment = get_primary_plane_assignment (impl, update, crtc);
|
||||
plane_assignment = meta_kms_update_get_primary_plane_assignment (update,
|
||||
crtc);
|
||||
if (!plane_assignment)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
@ -263,7 +247,8 @@ process_mode_set (MetaKmsImpl *impl,
|
||||
if (ret != 0)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, g_io_error_from_errno (-ret),
|
||||
"Failed to set mode on CRTC %u: %s",
|
||||
"Failed to set mode %s on CRTC %u: %s",
|
||||
mode_set->drm_mode ? mode_set->drm_mode->name : "off",
|
||||
meta_kms_crtc_get_id (crtc),
|
||||
g_strerror (-ret));
|
||||
return FALSE;
|
||||
@ -339,6 +324,13 @@ retry_page_flip_data_free (RetryPageFlipData *retry_page_flip_data)
|
||||
g_free (retry_page_flip_data);
|
||||
}
|
||||
|
||||
static CachedModeSet *
|
||||
get_cached_mode_set (MetaKmsImplSimple *impl_simple,
|
||||
MetaKmsCrtc *crtc)
|
||||
{
|
||||
return g_hash_table_lookup (impl_simple->cached_mode_sets, crtc);
|
||||
}
|
||||
|
||||
static float
|
||||
get_cached_crtc_refresh_rate (MetaKmsImplSimple *impl_simple,
|
||||
MetaKmsCrtc *crtc)
|
||||
@ -535,7 +527,7 @@ mode_set_fallback_feedback_idle (gpointer user_data)
|
||||
g_clear_pointer (&impl_simple->mode_set_fallback_feedback_source,
|
||||
g_source_unref);
|
||||
|
||||
if (!impl_simple->pending_page_flip_retries)
|
||||
if (impl_simple->pending_page_flip_retries)
|
||||
{
|
||||
impl_simple->postponed_mode_set_fallback_datas =
|
||||
g_steal_pointer (&impl_simple->mode_set_fallback_page_flip_datas);
|
||||
@ -632,7 +624,8 @@ process_page_flip (MetaKmsImpl *impl,
|
||||
int ret;
|
||||
|
||||
crtc = page_flip->crtc;
|
||||
plane_assignment = get_primary_plane_assignment (impl, update, crtc);
|
||||
plane_assignment = meta_kms_update_get_primary_plane_assignment (update,
|
||||
crtc);
|
||||
|
||||
page_flip_data = meta_kms_page_flip_data_new (impl,
|
||||
crtc,
|
||||
@ -659,14 +652,30 @@ process_page_flip (MetaKmsImpl *impl,
|
||||
|
||||
if (ret == -EBUSY)
|
||||
{
|
||||
float refresh_rate;
|
||||
CachedModeSet *cached_mode_set;
|
||||
|
||||
refresh_rate = get_cached_crtc_refresh_rate (impl_simple, crtc);
|
||||
schedule_retry_page_flip (impl_simple,
|
||||
crtc,
|
||||
plane_assignment->fb_id,
|
||||
refresh_rate,
|
||||
page_flip_data);
|
||||
cached_mode_set = get_cached_mode_set (impl_simple, crtc);
|
||||
if (cached_mode_set)
|
||||
{
|
||||
drmModeModeInfo *drm_mode;
|
||||
float refresh_rate;
|
||||
|
||||
drm_mode = cached_mode_set->drm_mode;
|
||||
refresh_rate = meta_calculate_drm_mode_refresh_rate (drm_mode);
|
||||
schedule_retry_page_flip (impl_simple,
|
||||
crtc,
|
||||
plane_assignment->fb_id,
|
||||
refresh_rate,
|
||||
page_flip_data);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Page flip of %u failed, and no mode set available",
|
||||
meta_kms_crtc_get_id (crtc));
|
||||
meta_kms_page_flip_data_unref (page_flip_data);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else if (ret == -EINVAL)
|
||||
{
|
||||
@ -788,12 +797,14 @@ meta_kms_impl_simple_handle_page_flip_callback (MetaKmsImpl *impl,
|
||||
{
|
||||
impl_simple->postponed_page_flip_datas =
|
||||
g_list_append (impl_simple->postponed_page_flip_datas,
|
||||
page_flip_data);
|
||||
meta_kms_page_flip_data_ref (page_flip_data));
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_kms_page_flip_data_flipped_in_impl (page_flip_data);
|
||||
}
|
||||
|
||||
meta_kms_page_flip_data_unref (page_flip_data);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -820,6 +831,15 @@ meta_kms_impl_simple_discard_pending_page_flips (MetaKmsImpl *impl)
|
||||
g_source_destroy);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_kms_impl_simple_dispatch_idle (MetaKmsImpl *impl)
|
||||
{
|
||||
MetaKmsImplSimple *impl_simple = META_KMS_IMPL_SIMPLE (impl);
|
||||
|
||||
if (impl_simple->mode_set_fallback_feedback_source)
|
||||
mode_set_fallback_feedback_idle (impl_simple);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_kms_impl_simple_finalize (GObject *object)
|
||||
{
|
||||
@ -859,4 +879,5 @@ meta_kms_impl_simple_class_init (MetaKmsImplSimpleClass *klass)
|
||||
impl_class->process_update = meta_kms_impl_simple_process_update;
|
||||
impl_class->handle_page_flip_callback = meta_kms_impl_simple_handle_page_flip_callback;
|
||||
impl_class->discard_pending_page_flips = meta_kms_impl_simple_discard_pending_page_flips;
|
||||
impl_class->dispatch_idle = meta_kms_impl_simple_dispatch_idle;
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Red Hat
|
||||
* Copyright (C) 2019 DisplayLink (UK) Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@ -65,6 +66,12 @@ meta_kms_impl_discard_pending_page_flips (MetaKmsImpl *impl)
|
||||
META_KMS_IMPL_GET_CLASS (impl)->discard_pending_page_flips (impl);
|
||||
}
|
||||
|
||||
void
|
||||
meta_kms_impl_dispatch_idle (MetaKmsImpl *impl)
|
||||
{
|
||||
META_KMS_IMPL_GET_CLASS (impl)->dispatch_idle (impl);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_kms_impl_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2018 Red Hat
|
||||
* Copyright (C) 2019 DisplayLink (UK) Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@ -38,6 +39,7 @@ struct _MetaKmsImplClass
|
||||
void (* handle_page_flip_callback) (MetaKmsImpl *impl,
|
||||
MetaKmsPageFlipData *page_flip_data);
|
||||
void (* discard_pending_page_flips) (MetaKmsImpl *impl);
|
||||
void (* dispatch_idle) (MetaKmsImpl *impl);
|
||||
};
|
||||
|
||||
MetaKms * meta_kms_impl_get_kms (MetaKmsImpl *impl);
|
||||
@ -51,4 +53,6 @@ void meta_kms_impl_handle_page_flip_callback (MetaKmsImpl *impl,
|
||||
|
||||
void meta_kms_impl_discard_pending_page_flips (MetaKmsImpl *impl);
|
||||
|
||||
void meta_kms_impl_dispatch_idle (MetaKmsImpl *impl);
|
||||
|
||||
#endif /* META_KMS_IMPL_H */
|
||||
|
@ -55,9 +55,13 @@ GSource * meta_kms_register_fd_in_impl (MetaKms *kms,
|
||||
|
||||
gboolean meta_kms_in_impl_task (MetaKms *kms);
|
||||
|
||||
gboolean meta_kms_is_waiting_for_impl_task (MetaKms *kms);
|
||||
|
||||
#define meta_assert_in_kms_impl(kms) \
|
||||
g_assert (meta_kms_in_impl_task (kms))
|
||||
#define meta_assert_not_in_kms_impl(kms) \
|
||||
g_assert (!meta_kms_in_impl_task (kms))
|
||||
#define meta_assert_is_waiting_for_kms_impl_task(kms) \
|
||||
g_assert (meta_kms_is_waiting_for_impl_task (kms))
|
||||
|
||||
#endif /* META_KMS_PRIVATE_H */
|
||||
|
@ -97,6 +97,9 @@ void meta_kms_plane_assignment_set_plane_property (MetaKmsPlaneAssignment *plane
|
||||
uint32_t prop_id,
|
||||
uint64_t value);
|
||||
|
||||
MetaKmsPlaneAssignment * meta_kms_update_get_primary_plane_assignment (MetaKmsUpdate *update,
|
||||
MetaKmsCrtc *crtc);
|
||||
|
||||
GList * meta_kms_update_get_plane_assignments (MetaKmsUpdate *update);
|
||||
|
||||
GList * meta_kms_update_get_mode_sets (MetaKmsUpdate *update);
|
||||
@ -107,6 +110,4 @@ GList * meta_kms_update_get_connector_properties (MetaKmsUpdate *update);
|
||||
|
||||
GList * meta_kms_update_get_crtc_gammas (MetaKmsUpdate *update);
|
||||
|
||||
gboolean meta_kms_update_has_mode_set (MetaKmsUpdate *update);
|
||||
|
||||
#endif /* META_KMS_UPDATE_PRIVATE_H */
|
||||
|
@ -235,6 +235,23 @@ meta_kms_plane_assignment_set_plane_property (MetaKmsPlaneAssignment *plane_assi
|
||||
g_list_prepend (plane_assignment->plane_properties, plane_prop);
|
||||
}
|
||||
|
||||
MetaKmsPlaneAssignment *
|
||||
meta_kms_update_get_primary_plane_assignment (MetaKmsUpdate *update,
|
||||
MetaKmsCrtc *crtc)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
for (l = meta_kms_update_get_plane_assignments (update); l; l = l->next)
|
||||
{
|
||||
MetaKmsPlaneAssignment *plane_assignment = l->data;
|
||||
|
||||
if (plane_assignment->crtc == crtc)
|
||||
return plane_assignment;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GList *
|
||||
meta_kms_update_get_plane_assignments (MetaKmsUpdate *update)
|
||||
{
|
||||
@ -265,12 +282,6 @@ meta_kms_update_get_crtc_gammas (MetaKmsUpdate *update)
|
||||
return update->crtc_gammas;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_kms_update_has_mode_set (MetaKmsUpdate *update)
|
||||
{
|
||||
return !!update->mode_sets;
|
||||
}
|
||||
|
||||
void
|
||||
meta_kms_update_seal (MetaKmsUpdate *update)
|
||||
{
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
#include "backends/meta-monitor-transform.h"
|
||||
#include "backends/native/meta-kms-types.h"
|
||||
#include "meta/boxes.h"
|
||||
|
||||
struct _MetaKmsPageFlipFeedback
|
||||
{
|
||||
@ -89,4 +90,15 @@ meta_fixed_16_to_int (MetaFixed16 fixed)
|
||||
return fixed / 65536;
|
||||
}
|
||||
|
||||
static inline MetaRectangle
|
||||
meta_fixed_16_rectangle_to_rectangle (MetaFixed16Rectangle fixed_rect)
|
||||
{
|
||||
return (MetaRectangle) {
|
||||
.x = meta_fixed_16_to_int (fixed_rect.x),
|
||||
.y = meta_fixed_16_to_int (fixed_rect.y),
|
||||
.width = meta_fixed_16_to_int (fixed_rect.width),
|
||||
.height = meta_fixed_16_to_int (fixed_rect.height),
|
||||
};
|
||||
}
|
||||
|
||||
#endif /* META_KMS_UPDATE_H */
|
||||
|
@ -119,6 +119,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
RESOURCES_CHANGED,
|
||||
|
||||
N_SIGNALS
|
||||
};
|
||||
|
||||
static int signals[N_SIGNALS];
|
||||
|
||||
typedef struct _MetaKmsCallbackData
|
||||
{
|
||||
MetaKmsCallback callback;
|
||||
@ -154,6 +163,7 @@ struct _MetaKms
|
||||
|
||||
MetaKmsImpl *impl;
|
||||
gboolean in_impl_task;
|
||||
gboolean waiting_for_impl_task;
|
||||
|
||||
GList *devices;
|
||||
|
||||
@ -165,9 +175,6 @@ struct _MetaKms
|
||||
|
||||
G_DEFINE_TYPE (MetaKms, meta_kms, G_TYPE_OBJECT)
|
||||
|
||||
static void
|
||||
meta_kms_update_states_in_impl (MetaKms *kms);
|
||||
|
||||
MetaKmsUpdate *
|
||||
meta_kms_ensure_pending_update (MetaKms *kms)
|
||||
{
|
||||
@ -183,6 +190,17 @@ meta_kms_get_pending_update (MetaKms *kms)
|
||||
return kms->pending_update;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_kms_predict_states_in_impl (MetaKms *kms,
|
||||
MetaKmsUpdate *update)
|
||||
{
|
||||
meta_assert_in_kms_impl (kms);
|
||||
|
||||
g_list_foreach (kms->devices,
|
||||
(GFunc) meta_kms_device_predict_states_in_impl,
|
||||
update);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_kms_update_process_in_impl (MetaKmsImpl *impl,
|
||||
gpointer user_data,
|
||||
@ -193,8 +211,7 @@ meta_kms_update_process_in_impl (MetaKmsImpl *impl,
|
||||
|
||||
ret = meta_kms_impl_process_update (impl, update, error);
|
||||
|
||||
if (meta_kms_update_has_mode_set (update))
|
||||
meta_kms_update_states_in_impl (meta_kms_impl_get_kms (impl));
|
||||
meta_kms_predict_states_in_impl (meta_kms_impl_get_kms (impl), update);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -322,7 +339,9 @@ meta_kms_run_impl_task_sync (MetaKms *kms,
|
||||
gboolean ret;
|
||||
|
||||
kms->in_impl_task = TRUE;
|
||||
kms->waiting_for_impl_task = TRUE;
|
||||
ret = func (kms->impl, user_data, error);
|
||||
kms->waiting_for_impl_task = FALSE;
|
||||
kms->in_impl_task = FALSE;
|
||||
|
||||
return ret;
|
||||
@ -440,23 +459,23 @@ meta_kms_in_impl_task (MetaKms *kms)
|
||||
return kms->in_impl_task;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_kms_is_waiting_for_impl_task (MetaKms *kms)
|
||||
{
|
||||
return kms->waiting_for_impl_task;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_kms_update_states_in_impl (MetaKms *kms)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
COGL_TRACE_BEGIN_SCOPED (MetaKmsUpdateStates,
|
||||
"KMS (update states)");
|
||||
|
||||
meta_assert_in_kms_impl (kms);
|
||||
|
||||
for (l = kms->devices; l; l = l->next)
|
||||
{
|
||||
MetaKmsDevice *device = l->data;
|
||||
MetaKmsImplDevice *impl_device = meta_kms_device_get_impl_device (device);
|
||||
|
||||
meta_kms_impl_device_update_states (impl_device);
|
||||
}
|
||||
g_list_foreach (kms->devices,
|
||||
(GFunc) meta_kms_device_update_states_in_impl,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -464,7 +483,7 @@ update_states_in_impl (MetaKmsImpl *impl,
|
||||
gpointer user_data,
|
||||
GError **error)
|
||||
{
|
||||
MetaKms *kms = user_data;
|
||||
MetaKms *kms = meta_kms_impl_get_kms (impl);;
|
||||
|
||||
meta_kms_update_states_in_impl (kms);
|
||||
|
||||
@ -475,10 +494,7 @@ static gboolean
|
||||
meta_kms_update_states_sync (MetaKms *kms,
|
||||
GError **error)
|
||||
{
|
||||
return meta_kms_run_impl_task_sync (kms,
|
||||
update_states_in_impl,
|
||||
kms,
|
||||
error);
|
||||
return meta_kms_run_impl_task_sync (kms, update_states_in_impl, NULL, error);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -488,6 +504,8 @@ handle_hotplug_event (MetaKms *kms)
|
||||
|
||||
if (!meta_kms_update_states_sync (kms, &error))
|
||||
g_warning ("Updating KMS state failed: %s", error->message);
|
||||
|
||||
g_signal_emit (kms, signals[RESOURCES_CHANGED], 0);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -590,4 +608,12 @@ meta_kms_class_init (MetaKmsClass *klass)
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->finalize = meta_kms_finalize;
|
||||
|
||||
signals[RESOURCES_CHANGED] =
|
||||
g_signal_new ("resources-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
@ -75,8 +75,7 @@ struct _MetaMonitorManagerKms
|
||||
{
|
||||
MetaMonitorManager parent_instance;
|
||||
|
||||
guint hotplug_handler_id;
|
||||
guint removed_handler_id;
|
||||
gulong kms_resources_changed_handler_id;
|
||||
};
|
||||
|
||||
struct _MetaMonitorManagerKmsClass
|
||||
@ -479,16 +478,8 @@ handle_hotplug_event (MetaMonitorManager *manager)
|
||||
}
|
||||
|
||||
static void
|
||||
on_udev_hotplug (MetaUdev *udev,
|
||||
MetaMonitorManager *manager)
|
||||
{
|
||||
handle_hotplug_event (manager);
|
||||
}
|
||||
|
||||
static void
|
||||
on_udev_device_removed (MetaUdev *udev,
|
||||
GUdevDevice *device,
|
||||
MetaMonitorManager *manager)
|
||||
on_kms_resources_changed (MetaKms *kms,
|
||||
MetaMonitorManager *manager)
|
||||
{
|
||||
handle_hotplug_event (manager);
|
||||
}
|
||||
@ -498,14 +489,12 @@ meta_monitor_manager_kms_connect_hotplug_handler (MetaMonitorManagerKms *manager
|
||||
{
|
||||
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_kms);
|
||||
MetaBackend *backend = meta_monitor_manager_get_backend (manager);
|
||||
MetaUdev *udev = meta_backend_native_get_udev (META_BACKEND_NATIVE (backend));
|
||||
MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
|
||||
MetaKms *kms = meta_backend_native_get_kms (backend_native);
|
||||
|
||||
manager_kms->hotplug_handler_id =
|
||||
g_signal_connect_after (udev, "hotplug",
|
||||
G_CALLBACK (on_udev_hotplug), manager);
|
||||
manager_kms->removed_handler_id =
|
||||
g_signal_connect_after (udev, "device-removed",
|
||||
G_CALLBACK (on_udev_device_removed), manager);
|
||||
manager_kms->kms_resources_changed_handler_id =
|
||||
g_signal_connect (kms, "resources-changed",
|
||||
G_CALLBACK (on_kms_resources_changed), manager);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -513,12 +502,10 @@ meta_monitor_manager_kms_disconnect_hotplug_handler (MetaMonitorManagerKms *mana
|
||||
{
|
||||
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_kms);
|
||||
MetaBackend *backend = meta_monitor_manager_get_backend (manager);
|
||||
MetaUdev *udev = meta_backend_native_get_udev (META_BACKEND_NATIVE (backend));
|
||||
MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
|
||||
MetaKms *kms = meta_backend_native_get_kms (backend_native);
|
||||
|
||||
g_signal_handler_disconnect (udev, manager_kms->hotplug_handler_id);
|
||||
manager_kms->hotplug_handler_id = 0;
|
||||
g_signal_handler_disconnect (udev, manager_kms->removed_handler_id);
|
||||
manager_kms->removed_handler_id = 0;
|
||||
g_clear_signal_handler (&manager_kms->kms_resources_changed_handler_id, kms);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -70,7 +70,7 @@ meta_output_kms_set_underscan (MetaOutput *output,
|
||||
hborder = MIN (128, (uint64_t) round (crtc->current_mode->width * 0.05));
|
||||
vborder = MIN (128, (uint64_t) round (crtc->current_mode->height * 0.05));
|
||||
|
||||
g_debug ("Setting underscan of connector %s to %lu x %lu",
|
||||
g_debug ("Setting underscan of connector %s to %" G_GUINT64_FORMAT " x %" G_GUINT64_FORMAT,
|
||||
meta_kms_connector_get_name (output_kms->kms_connector),
|
||||
hborder, vborder);
|
||||
|
||||
@ -104,7 +104,7 @@ meta_output_kms_set_power_save_mode (MetaOutput *output,
|
||||
{
|
||||
MetaOutputKms *output_kms = output->driver_private;
|
||||
|
||||
g_debug ("Setting DPMS state of connector %s to %lu",
|
||||
g_debug ("Setting DPMS state of connector %s to %" G_GUINT64_FORMAT,
|
||||
meta_kms_connector_get_name (output_kms->kms_connector),
|
||||
dpms_state);
|
||||
|
||||
@ -295,7 +295,6 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
|
||||
MetaOutput *output;
|
||||
MetaOutputKms *output_kms;
|
||||
const MetaKmsConnectorState *connector_state;
|
||||
MetaMonitorTransform panel_orientation_transform;
|
||||
uint32_t connector_id;
|
||||
GArray *crtcs;
|
||||
GList *l;
|
||||
@ -318,8 +317,9 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
|
||||
|
||||
connector_state = meta_kms_connector_get_current_state (kms_connector);
|
||||
|
||||
panel_orientation_transform = connector_state->panel_orientation_transform;
|
||||
if (meta_monitor_transform_is_rotated (panel_orientation_transform))
|
||||
output->panel_orientation_transform =
|
||||
connector_state->panel_orientation_transform;
|
||||
if (meta_monitor_transform_is_rotated (output->panel_orientation_transform))
|
||||
{
|
||||
output->width_mm = connector_state->height_mm;
|
||||
output->height_mm = connector_state->width_mm;
|
||||
|
@ -82,6 +82,9 @@ paint_egl_image (MetaGles3 *gles3,
|
||||
0, 0, width, height,
|
||||
GL_COLOR_BUFFER_BIT,
|
||||
GL_NEAREST));
|
||||
|
||||
GLBAS (gles3, glDeleteTextures, (1, &texture));
|
||||
GLBAS (gles3, glDeleteFramebuffers, (1, &framebuffer));
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -2208,7 +2208,7 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
||||
* animation earlier due to the animation being driven by some other monitor.
|
||||
*/
|
||||
COGL_TRACE_BEGIN (MetaRendererNativeSwapBuffersWait,
|
||||
"Onscreen (waiting for page flips");
|
||||
"Onscreen (waiting for page flips)");
|
||||
wait_for_pending_flips (onscreen);
|
||||
COGL_TRACE_END (MetaRendererNativeSwapBuffersWait);
|
||||
|
||||
@ -2276,7 +2276,7 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
||||
_cogl_winsys_egl_ensure_current (cogl_display);
|
||||
|
||||
COGL_TRACE_BEGIN (MetaRendererNativePostKmsUpdate,
|
||||
"Onscreen (post pending update");
|
||||
"Onscreen (post pending update)");
|
||||
if (!meta_kms_post_pending_update_sync (kms, &error))
|
||||
{
|
||||
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED))
|
||||
@ -3053,7 +3053,6 @@ meta_renderer_native_create_onscreen (MetaRendererNative *renderer_native,
|
||||
static CoglOffscreen *
|
||||
meta_renderer_native_create_offscreen (MetaRendererNative *renderer,
|
||||
CoglContext *context,
|
||||
MetaMonitorTransform transform,
|
||||
gint view_width,
|
||||
gint view_height,
|
||||
GError **error)
|
||||
@ -3256,6 +3255,7 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
|
||||
MetaMonitorTransform view_transform;
|
||||
CoglOnscreen *onscreen = NULL;
|
||||
CoglOffscreen *offscreen = NULL;
|
||||
CoglOffscreen *shadowfb = NULL;
|
||||
float scale;
|
||||
int width, height;
|
||||
MetaRendererView *view;
|
||||
@ -3282,18 +3282,35 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
|
||||
if (!onscreen)
|
||||
g_error ("Failed to allocate onscreen framebuffer: %s", error->message);
|
||||
|
||||
if (view_transform != META_MONITOR_TRANSFORM_NORMAL ||
|
||||
should_force_shadow_fb (renderer_native,
|
||||
renderer_native->primary_gpu_kms))
|
||||
if (view_transform != META_MONITOR_TRANSFORM_NORMAL)
|
||||
{
|
||||
offscreen = meta_renderer_native_create_offscreen (renderer_native,
|
||||
cogl_context,
|
||||
view_transform,
|
||||
width,
|
||||
height,
|
||||
&error);
|
||||
if (!offscreen)
|
||||
g_error ("Failed to allocate back buffer texture: %s", error->message);
|
||||
|
||||
}
|
||||
|
||||
if (should_force_shadow_fb (renderer_native,
|
||||
renderer_native->primary_gpu_kms))
|
||||
{
|
||||
int shadow_width;
|
||||
int shadow_height;
|
||||
|
||||
/* The shadowfb must be the same size as the on-screen framebuffer */
|
||||
shadow_width = cogl_framebuffer_get_width (COGL_FRAMEBUFFER (onscreen));
|
||||
shadow_height = cogl_framebuffer_get_height (COGL_FRAMEBUFFER (onscreen));
|
||||
|
||||
shadowfb = meta_renderer_native_create_offscreen (renderer_native,
|
||||
cogl_context,
|
||||
shadow_width,
|
||||
shadow_height,
|
||||
&error);
|
||||
if (!shadowfb)
|
||||
g_error ("Failed to allocate shadow buffer texture: %s", error->message);
|
||||
}
|
||||
|
||||
view = g_object_new (META_TYPE_RENDERER_VIEW,
|
||||
@ -3301,10 +3318,12 @@ meta_renderer_native_create_view (MetaRenderer *renderer,
|
||||
"scale", scale,
|
||||
"framebuffer", onscreen,
|
||||
"offscreen", offscreen,
|
||||
"shadowfb", shadowfb,
|
||||
"logical-monitor", logical_monitor,
|
||||
"transform", view_transform,
|
||||
NULL);
|
||||
g_clear_pointer (&offscreen, cogl_object_unref);
|
||||
g_clear_pointer (&shadowfb, cogl_object_unref);
|
||||
|
||||
meta_onscreen_native_set_view (onscreen, view);
|
||||
|
||||
|
@ -67,6 +67,10 @@ struct _MetaBackendX11Private
|
||||
XSyncAlarm user_active_alarm;
|
||||
XSyncCounter counter;
|
||||
|
||||
int current_touch_replay_sync_serial;
|
||||
int pending_touch_replay_sync_serial;
|
||||
Atom touch_replay_sync_atom;
|
||||
|
||||
int xinput_opcode;
|
||||
int xinput_event_base;
|
||||
int xinput_error_base;
|
||||
@ -175,6 +179,26 @@ meta_backend_x11_translate_device_event (MetaBackendX11 *x11,
|
||||
backend_x11_class->translate_device_event (x11, device_event);
|
||||
}
|
||||
|
||||
static void
|
||||
maybe_translate_touch_replay_pointer_event (MetaBackendX11 *x11,
|
||||
XIDeviceEvent *device_event)
|
||||
{
|
||||
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
||||
|
||||
if (!device_event->send_event &&
|
||||
device_event->time != META_CURRENT_TIME &&
|
||||
priv->current_touch_replay_sync_serial !=
|
||||
priv->pending_touch_replay_sync_serial &&
|
||||
XSERVER_TIME_IS_BEFORE (device_event->time, priv->latest_evtime))
|
||||
{
|
||||
/* Emulated pointer events received after XIRejectTouch is received
|
||||
* on a passive touch grab will contain older timestamps, update those
|
||||
* so we dont get InvalidTime at grabs.
|
||||
*/
|
||||
device_event->time = priv->latest_evtime;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
translate_device_event (MetaBackendX11 *x11,
|
||||
XIDeviceEvent *device_event)
|
||||
@ -184,19 +208,7 @@ translate_device_event (MetaBackendX11 *x11,
|
||||
meta_backend_x11_translate_device_event (x11, device_event);
|
||||
|
||||
if (!device_event->send_event && device_event->time != META_CURRENT_TIME)
|
||||
{
|
||||
if (XSERVER_TIME_IS_BEFORE (device_event->time, priv->latest_evtime))
|
||||
{
|
||||
/* Emulated pointer events received after XIRejectTouch is received
|
||||
* on a passive touch grab will contain older timestamps, update those
|
||||
* so we dont get InvalidTime at grabs.
|
||||
*/
|
||||
device_event->time = priv->latest_evtime;
|
||||
}
|
||||
|
||||
/* Update the internal latest evtime, for any possible later use */
|
||||
priv->latest_evtime = device_event->time;
|
||||
}
|
||||
priv->latest_evtime = device_event->time;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -261,6 +273,9 @@ maybe_spoof_event_as_stage_event (MetaBackendX11 *x11,
|
||||
case XI_Motion:
|
||||
case XI_ButtonPress:
|
||||
case XI_ButtonRelease:
|
||||
maybe_translate_touch_replay_pointer_event (x11,
|
||||
(XIDeviceEvent *) input_event);
|
||||
/* Intentional fall-through */
|
||||
case XI_KeyPress:
|
||||
case XI_KeyRelease:
|
||||
case XI_TouchBegin:
|
||||
@ -329,6 +344,17 @@ handle_host_xevent (MetaBackend *backend,
|
||||
gboolean bypass_clutter = FALSE;
|
||||
MetaDisplay *display;
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case ClientMessage:
|
||||
if (event->xclient.window == meta_backend_x11_get_xwindow (x11) &&
|
||||
event->xclient.message_type == priv->touch_replay_sync_atom)
|
||||
priv->current_touch_replay_sync_serial = event->xclient.data.l[0];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
XGetEventData (priv->xdisplay, &event->xcookie);
|
||||
|
||||
display = meta_get_display ();
|
||||
@ -356,6 +382,7 @@ handle_host_xevent (MetaBackend *backend,
|
||||
{
|
||||
switch (xkb_ev->any.xkb_type)
|
||||
{
|
||||
case XkbNewKeyboardNotify:
|
||||
case XkbMapNotify:
|
||||
keymap_changed (backend);
|
||||
break;
|
||||
@ -532,6 +559,10 @@ meta_backend_x11_post_init (MetaBackend *backend)
|
||||
monitor_manager = meta_backend_get_monitor_manager (backend);
|
||||
g_signal_connect (monitor_manager, "monitors-changed-internal",
|
||||
G_CALLBACK (on_monitors_changed), backend);
|
||||
|
||||
priv->touch_replay_sync_atom = XInternAtom (priv->xdisplay,
|
||||
"_MUTTER_TOUCH_SEQUENCE_SYNC",
|
||||
False);
|
||||
}
|
||||
|
||||
static ClutterBackend *
|
||||
@ -589,6 +620,43 @@ meta_backend_x11_ungrab_device (MetaBackend *backend,
|
||||
return (ret == Success);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_backend_x11_finish_touch_sequence (MetaBackend *backend,
|
||||
ClutterEventSequence *sequence,
|
||||
MetaSequenceState state)
|
||||
{
|
||||
MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
|
||||
MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
|
||||
int event_mode;
|
||||
|
||||
if (state == META_SEQUENCE_ACCEPTED)
|
||||
event_mode = XIAcceptTouch;
|
||||
else if (state == META_SEQUENCE_REJECTED)
|
||||
event_mode = XIRejectTouch;
|
||||
else
|
||||
g_return_if_reached ();
|
||||
|
||||
XIAllowTouchEvents (priv->xdisplay,
|
||||
META_VIRTUAL_CORE_POINTER_ID,
|
||||
meta_x11_event_sequence_get_touch_detail (sequence),
|
||||
DefaultRootWindow (priv->xdisplay), event_mode);
|
||||
|
||||
if (state == META_SEQUENCE_REJECTED)
|
||||
{
|
||||
XClientMessageEvent ev;
|
||||
|
||||
ev = (XClientMessageEvent) {
|
||||
.type = ClientMessage,
|
||||
.window = meta_backend_x11_get_xwindow (x11),
|
||||
.message_type = priv->touch_replay_sync_atom,
|
||||
.format = 32,
|
||||
.data.l[0] = ++priv->pending_touch_replay_sync_serial,
|
||||
};
|
||||
XSendEvent (priv->xdisplay, meta_backend_x11_get_xwindow (x11),
|
||||
False, 0, (XEvent *) &ev);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_backend_x11_warp_pointer (MetaBackend *backend,
|
||||
int x,
|
||||
@ -780,6 +848,7 @@ meta_backend_x11_class_init (MetaBackendX11Class *klass)
|
||||
backend_class->post_init = meta_backend_x11_post_init;
|
||||
backend_class->grab_device = meta_backend_x11_grab_device;
|
||||
backend_class->ungrab_device = meta_backend_x11_ungrab_device;
|
||||
backend_class->finish_touch_sequence = meta_backend_x11_finish_touch_sequence;
|
||||
backend_class->warp_pointer = meta_backend_x11_warp_pointer;
|
||||
backend_class->get_current_logical_monitor = meta_backend_x11_get_current_logical_monitor;
|
||||
backend_class->get_keymap = meta_backend_x11_get_keymap;
|
||||
|
@ -129,7 +129,7 @@ meta_clutter_backend_x11_translate_event (ClutterBackend *backend,
|
||||
return TRUE;
|
||||
|
||||
if (meta_keymap_x11_handle_event (backend_x11->keymap, native))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
|
||||
stage_x11 = META_STAGE_X11 (clutter_backend_get_stage_window (backend));
|
||||
if (meta_stage_x11_translate_event (stage_x11, native, event))
|
||||
|
@ -1291,6 +1291,22 @@ handle_raw_event (MetaDeviceManagerX11 *manager_xi2,
|
||||
}
|
||||
}
|
||||
|
||||
static ClutterInputDevice *
|
||||
get_source_device_checked (MetaDeviceManagerX11 *manager_xi2,
|
||||
XIDeviceEvent *xev)
|
||||
{
|
||||
ClutterInputDevice *source_device;
|
||||
|
||||
source_device = g_hash_table_lookup (manager_xi2->devices_by_id,
|
||||
GINT_TO_POINTER (xev->sourceid));
|
||||
|
||||
if (!source_device)
|
||||
g_warning ("Impossible to get the source device with id %d for event of "
|
||||
"type %d", xev->sourceid, xev->evtype);
|
||||
|
||||
return source_device;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_device_manager_x11_translate_event (MetaDeviceManagerX11 *manager_xi2,
|
||||
XEvent *xevent,
|
||||
@ -1379,6 +1395,10 @@ meta_device_manager_x11_translate_event (MetaDeviceManagerX11 *manager_xi2,
|
||||
char buffer[7] = { 0, };
|
||||
gunichar n;
|
||||
|
||||
source_device = get_source_device_checked (manager_xi2, xev);
|
||||
if (!source_device)
|
||||
return FALSE;
|
||||
|
||||
event->key.type = event->type = (xev->evtype == XI_KeyPress)
|
||||
? CLUTTER_KEY_PRESS
|
||||
: CLUTTER_KEY_RELEASE;
|
||||
@ -1413,8 +1433,6 @@ meta_device_manager_x11_translate_event (MetaDeviceManagerX11 *manager_xi2,
|
||||
event_x11->caps_lock_set =
|
||||
clutter_keymap_get_caps_lock_state (CLUTTER_KEYMAP (keymap_x11));
|
||||
|
||||
source_device = g_hash_table_lookup (manager_xi2->devices_by_id,
|
||||
GINT_TO_POINTER (xev->sourceid));
|
||||
clutter_event_set_source_device (event, source_device);
|
||||
|
||||
device = g_hash_table_lookup (manager_xi2->devices_by_id,
|
||||
@ -1458,8 +1476,10 @@ meta_device_manager_x11_translate_event (MetaDeviceManagerX11 *manager_xi2,
|
||||
{
|
||||
XIDeviceEvent *xev = (XIDeviceEvent *) xi_event;
|
||||
|
||||
source_device = g_hash_table_lookup (manager_xi2->devices_by_id,
|
||||
GINT_TO_POINTER (xev->sourceid));
|
||||
source_device = get_source_device_checked (manager_xi2, xev);
|
||||
if (!source_device)
|
||||
return FALSE;
|
||||
|
||||
device = g_hash_table_lookup (manager_xi2->devices_by_id,
|
||||
GINT_TO_POINTER (xev->deviceid));
|
||||
|
||||
@ -1626,7 +1646,7 @@ meta_device_manager_x11_translate_event (MetaDeviceManagerX11 *manager_xi2,
|
||||
break;
|
||||
}
|
||||
|
||||
if (source_device != NULL && device->stage != NULL)
|
||||
if (device->stage != NULL)
|
||||
_clutter_input_device_set_stage (source_device, device->stage);
|
||||
|
||||
if (xev->flags & XIPointerEmulated)
|
||||
@ -1644,8 +1664,10 @@ meta_device_manager_x11_translate_event (MetaDeviceManagerX11 *manager_xi2,
|
||||
XIDeviceEvent *xev = (XIDeviceEvent *) xi_event;
|
||||
double delta_x, delta_y;
|
||||
|
||||
source_device = g_hash_table_lookup (manager_xi2->devices_by_id,
|
||||
GINT_TO_POINTER (xev->sourceid));
|
||||
source_device = get_source_device_checked (manager_xi2, xev);
|
||||
if (!source_device)
|
||||
return FALSE;
|
||||
|
||||
device = g_hash_table_lookup (manager_xi2->devices_by_id,
|
||||
GINT_TO_POINTER (xev->deviceid));
|
||||
|
||||
@ -1716,7 +1738,7 @@ meta_device_manager_x11_translate_event (MetaDeviceManagerX11 *manager_xi2,
|
||||
event->motion.y,
|
||||
&xev->valuators);
|
||||
|
||||
if (source_device != NULL && device->stage != NULL)
|
||||
if (device->stage != NULL)
|
||||
_clutter_input_device_set_stage (source_device, device->stage);
|
||||
|
||||
if (xev->flags & XIPointerEmulated)
|
||||
|
@ -82,12 +82,12 @@ meta_x11_handle_event (XEvent *xevent)
|
||||
gboolean allocated_event;
|
||||
|
||||
/* The return values here are someone approximate; we return
|
||||
* META_X11_FILTER_REMOVE if a clutter event is
|
||||
* CLUTTER_X11_FILTER_REMOVE if a clutter event is
|
||||
* generated for the event. This mostly, but not entirely,
|
||||
* corresponds to whether other event processing should be
|
||||
* excluded. As long as the stage window is not shared with another
|
||||
* toolkit it should be safe, and never return
|
||||
* %META_X11_FILTER_REMOVE when more processing is needed.
|
||||
* %CLUTTER_X11_FILTER_REMOVE when more processing is needed.
|
||||
*/
|
||||
|
||||
result = CLUTTER_X11_FILTER_CONTINUE;
|
||||
|
@ -118,9 +118,12 @@ get_property (ClutterInputDevice *device,
|
||||
|
||||
device_id = clutter_input_device_get_device_id (device);
|
||||
|
||||
clutter_x11_trap_x_errors ();
|
||||
rc = XIGetProperty (xdisplay, device_id, property_atom,
|
||||
0, 10, False, type, &type_ret, &format_ret,
|
||||
&nitems_ret, &bytes_after_ret, &data_ret);
|
||||
clutter_x11_untrap_x_errors ();
|
||||
|
||||
if (rc == Success && type_ret == type && format_ret == format && nitems_ret >= nitems)
|
||||
{
|
||||
if (nitems_ret > nitems)
|
||||
|
@ -595,13 +595,19 @@ meta_compositor_add_window (MetaCompositor *compositor,
|
||||
window_actor_type = META_TYPE_WINDOW_ACTOR_X11;
|
||||
break;
|
||||
|
||||
#ifdef HAVE_WAYLAND
|
||||
case META_WINDOW_CLIENT_TYPE_WAYLAND:
|
||||
window_actor_type = META_TYPE_WINDOW_ACTOR_WAYLAND;
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
g_return_if_reached ();
|
||||
}
|
||||
|
||||
window_actor = g_object_new (window_actor_type,
|
||||
"meta-window", window,
|
||||
"show-on-set-parent", FALSE,
|
||||
NULL);
|
||||
|
||||
if (window->layer == META_LAYER_OVERRIDE_REDIRECT)
|
||||
@ -1285,9 +1291,14 @@ meta_compositor_class_init (MetaCompositorClass *klass)
|
||||
void
|
||||
meta_disable_unredirect_for_display (MetaDisplay *display)
|
||||
{
|
||||
MetaCompositor *compositor = get_compositor_for_display (display);
|
||||
MetaCompositorPrivate *priv =
|
||||
meta_compositor_get_instance_private (compositor);
|
||||
MetaCompositor *compositor;
|
||||
MetaCompositorPrivate *priv;
|
||||
|
||||
if (display->closing)
|
||||
return;
|
||||
|
||||
compositor = get_compositor_for_display (display);
|
||||
priv = meta_compositor_get_instance_private (compositor);
|
||||
|
||||
priv->disable_unredirect_count++;
|
||||
}
|
||||
@ -1302,9 +1313,14 @@ meta_disable_unredirect_for_display (MetaDisplay *display)
|
||||
void
|
||||
meta_enable_unredirect_for_display (MetaDisplay *display)
|
||||
{
|
||||
MetaCompositor *compositor = get_compositor_for_display (display);
|
||||
MetaCompositorPrivate *priv =
|
||||
meta_compositor_get_instance_private (compositor);
|
||||
MetaCompositor *compositor;
|
||||
MetaCompositorPrivate *priv;
|
||||
|
||||
if (display->closing)
|
||||
return;
|
||||
|
||||
compositor = get_compositor_for_display (display);
|
||||
priv = meta_compositor_get_instance_private (compositor);
|
||||
|
||||
if (priv->disable_unredirect_count == 0)
|
||||
g_warning ("Called enable_unredirect_for_display while unredirection is enabled.");
|
||||
|
@ -573,6 +573,8 @@ meta_background_actor_paint (ClutterActor *actor)
|
||||
paint_clipped_rectangle (fb, self->pipeline, &rect,
|
||||
&self->texture_area);
|
||||
}
|
||||
|
||||
cairo_region_destroy (region);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -195,6 +195,8 @@ meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr,
|
||||
if (klass->destroy)
|
||||
{
|
||||
retval = TRUE;
|
||||
meta_plugin_manager_kill_window_effects (plugin_mgr,
|
||||
actor);
|
||||
klass->destroy (plugin, actor);
|
||||
}
|
||||
break;
|
||||
|
@ -243,6 +243,8 @@ meta_shaped_texture_dispose (GObject *object)
|
||||
meta_shaped_texture_set_mask_texture (stex, NULL);
|
||||
meta_shaped_texture_reset_pipelines (stex);
|
||||
|
||||
g_clear_pointer (&stex->opaque_region, cairo_region_destroy);
|
||||
|
||||
g_clear_pointer (&stex->snippet, cogl_object_unref);
|
||||
|
||||
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object);
|
||||
@ -458,16 +460,11 @@ set_cogl_texture (MetaShapedTexture *stex,
|
||||
{
|
||||
int width, height;
|
||||
|
||||
g_return_if_fail (META_IS_SHAPED_TEXTURE (stex));
|
||||
|
||||
if (stex->texture)
|
||||
cogl_object_unref (stex->texture);
|
||||
|
||||
stex->texture = cogl_tex;
|
||||
cogl_clear_object (&stex->texture);
|
||||
|
||||
if (cogl_tex != NULL)
|
||||
{
|
||||
cogl_object_ref (cogl_tex);
|
||||
stex->texture = cogl_object_ref (cogl_tex);
|
||||
width = cogl_texture_get_width (COGL_TEXTURE (cogl_tex));
|
||||
height = cogl_texture_get_height (COGL_TEXTURE (cogl_tex));
|
||||
}
|
||||
@ -492,8 +489,6 @@ set_cogl_texture (MetaShapedTexture *stex,
|
||||
|
||||
if (stex->create_mipmaps)
|
||||
meta_texture_tower_set_base_texture (stex->paint_tower, cogl_tex);
|
||||
|
||||
clutter_content_invalidate (CLUTTER_CONTENT (stex));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -939,6 +934,9 @@ meta_shaped_texture_set_texture (MetaShapedTexture *stex,
|
||||
{
|
||||
g_return_if_fail (META_IS_SHAPED_TEXTURE (stex));
|
||||
|
||||
if (stex->texture == texture)
|
||||
return;
|
||||
|
||||
set_cogl_texture (stex, texture);
|
||||
}
|
||||
|
||||
@ -1114,7 +1112,9 @@ should_get_via_offscreen (MetaShapedTexture *stex)
|
||||
|
||||
static cairo_surface_t *
|
||||
get_image_via_offscreen (MetaShapedTexture *stex,
|
||||
cairo_rectangle_int_t *clip)
|
||||
cairo_rectangle_int_t *clip,
|
||||
int image_width,
|
||||
int image_height)
|
||||
{
|
||||
g_autoptr (ClutterPaintNode) root_node = NULL;
|
||||
ClutterBackend *clutter_backend = clutter_get_default_backend ();
|
||||
@ -1132,16 +1132,16 @@ get_image_via_offscreen (MetaShapedTexture *stex,
|
||||
if (!clip)
|
||||
{
|
||||
fallback_clip = (cairo_rectangle_int_t) {
|
||||
.width = stex->dst_width,
|
||||
.height = stex->dst_height,
|
||||
.width = image_width,
|
||||
.height = image_height,
|
||||
};
|
||||
clip = &fallback_clip;
|
||||
}
|
||||
|
||||
image_texture =
|
||||
COGL_TEXTURE (cogl_texture_2d_new_with_size (cogl_context,
|
||||
stex->dst_width,
|
||||
stex->dst_height));
|
||||
image_width,
|
||||
image_height));
|
||||
cogl_primitive_texture_set_auto_mipmap (COGL_PRIMITIVE_TEXTURE (image_texture),
|
||||
FALSE);
|
||||
if (!cogl_texture_allocate (COGL_TEXTURE (image_texture), &error))
|
||||
@ -1164,11 +1164,11 @@ get_image_via_offscreen (MetaShapedTexture *stex,
|
||||
cogl_framebuffer_push_matrix (fb);
|
||||
cogl_matrix_init_identity (&projection_matrix);
|
||||
cogl_matrix_scale (&projection_matrix,
|
||||
1.0 / (stex->dst_width / 2.0),
|
||||
-1.0 / (stex->dst_height / 2.0), 0);
|
||||
1.0 / (image_width / 2.0),
|
||||
-1.0 / (image_height / 2.0), 0);
|
||||
cogl_matrix_translate (&projection_matrix,
|
||||
-(stex->dst_width / 2.0),
|
||||
-(stex->dst_height / 2.0), 0);
|
||||
-(image_width / 2.0),
|
||||
-(image_height / 2.0), 0);
|
||||
|
||||
cogl_framebuffer_set_projection_matrix (fb, &projection_matrix);
|
||||
|
||||
@ -1180,8 +1180,9 @@ get_image_via_offscreen (MetaShapedTexture *stex,
|
||||
do_paint_content (stex, root_node,
|
||||
stex->texture,
|
||||
&(ClutterActorBox) {
|
||||
clip->x, clip->y,
|
||||
clip->width, clip->height,
|
||||
0, 0,
|
||||
image_width,
|
||||
image_height,
|
||||
},
|
||||
255);
|
||||
|
||||
@ -1204,7 +1205,7 @@ get_image_via_offscreen (MetaShapedTexture *stex,
|
||||
/**
|
||||
* meta_shaped_texture_get_image:
|
||||
* @stex: A #MetaShapedTexture
|
||||
* @clip: A clipping rectangle, to help prevent extra processing.
|
||||
* @clip: (nullable): A clipping rectangle, to help prevent extra processing.
|
||||
* In the case that the clipping rectangle is partially or fully
|
||||
* outside the bounds of the texture, the rectangle will be clipped.
|
||||
*
|
||||
@ -1212,14 +1213,14 @@ get_image_via_offscreen (MetaShapedTexture *stex,
|
||||
* image by alpha blending the two images, and returns the flattened
|
||||
* image.
|
||||
*
|
||||
* Returns: (transfer full): a new cairo surface to be freed with
|
||||
* Returns: (nullable) (transfer full): a new cairo surface to be freed with
|
||||
* cairo_surface_destroy().
|
||||
*/
|
||||
cairo_surface_t *
|
||||
meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
||||
cairo_rectangle_int_t *clip)
|
||||
{
|
||||
cairo_rectangle_int_t *transformed_clip = NULL;
|
||||
cairo_rectangle_int_t *image_clip = NULL;
|
||||
CoglTexture *texture, *mask_texture;
|
||||
cairo_surface_t *surface;
|
||||
|
||||
@ -1239,31 +1240,43 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
||||
{
|
||||
cairo_rectangle_int_t dst_rect;
|
||||
|
||||
transformed_clip = alloca (sizeof (cairo_rectangle_int_t));
|
||||
|
||||
meta_rectangle_scale_double (clip, stex->buffer_scale,
|
||||
META_ROUNDING_STRATEGY_GROW,
|
||||
transformed_clip);
|
||||
|
||||
image_clip = alloca (sizeof (cairo_rectangle_int_t));
|
||||
dst_rect = (cairo_rectangle_int_t) {
|
||||
.width = stex->dst_width,
|
||||
.height = stex->dst_height,
|
||||
};
|
||||
|
||||
if (!meta_rectangle_intersect (&dst_rect, transformed_clip,
|
||||
transformed_clip))
|
||||
if (!meta_rectangle_intersect (&dst_rect, clip,
|
||||
image_clip))
|
||||
return NULL;
|
||||
|
||||
*image_clip = (MetaRectangle) {
|
||||
.x = image_clip->x * stex->buffer_scale,
|
||||
.y = image_clip->y * stex->buffer_scale,
|
||||
.width = image_clip->width * stex->buffer_scale,
|
||||
.height = image_clip->height * stex->buffer_scale,
|
||||
};
|
||||
}
|
||||
|
||||
if (should_get_via_offscreen (stex))
|
||||
return get_image_via_offscreen (stex, transformed_clip);
|
||||
{
|
||||
int image_width;
|
||||
int image_height;
|
||||
|
||||
if (transformed_clip)
|
||||
image_width = stex->dst_width * stex->buffer_scale;
|
||||
image_height = stex->dst_height * stex->buffer_scale;
|
||||
return get_image_via_offscreen (stex,
|
||||
image_clip,
|
||||
image_width,
|
||||
image_height);
|
||||
}
|
||||
|
||||
if (image_clip)
|
||||
texture = cogl_texture_new_from_sub_texture (texture,
|
||||
transformed_clip->x,
|
||||
transformed_clip->y,
|
||||
transformed_clip->width,
|
||||
transformed_clip->height);
|
||||
image_clip->x,
|
||||
image_clip->y,
|
||||
image_clip->width,
|
||||
image_clip->height);
|
||||
|
||||
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
|
||||
cogl_texture_get_width (texture),
|
||||
@ -1275,7 +1288,7 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
||||
|
||||
cairo_surface_mark_dirty (surface);
|
||||
|
||||
if (transformed_clip)
|
||||
if (image_clip)
|
||||
cogl_object_unref (texture);
|
||||
|
||||
mask_texture = stex->mask_texture;
|
||||
@ -1284,13 +1297,13 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
||||
cairo_t *cr;
|
||||
cairo_surface_t *mask_surface;
|
||||
|
||||
if (transformed_clip)
|
||||
if (image_clip)
|
||||
mask_texture =
|
||||
cogl_texture_new_from_sub_texture (mask_texture,
|
||||
transformed_clip->x,
|
||||
transformed_clip->y,
|
||||
transformed_clip->width,
|
||||
transformed_clip->height);
|
||||
image_clip->x,
|
||||
image_clip->y,
|
||||
image_clip->width,
|
||||
image_clip->height);
|
||||
|
||||
mask_surface = cairo_image_surface_create (CAIRO_FORMAT_A8,
|
||||
cogl_texture_get_width (mask_texture),
|
||||
@ -1310,7 +1323,7 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
||||
|
||||
cairo_surface_destroy (mask_surface);
|
||||
|
||||
if (transformed_clip)
|
||||
if (image_clip)
|
||||
cogl_object_unref (mask_texture);
|
||||
}
|
||||
|
||||
|
@ -300,6 +300,21 @@ meta_surface_actor_init (MetaSurfaceActor *self)
|
||||
CLUTTER_REQUEST_CONTENT_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_surface_actor_get_image:
|
||||
* @self: A #MetaSurfaceActor
|
||||
* @clip: (nullable): A clipping rectangle. The clip region is in
|
||||
* the same coordinate space as the contents preferred size.
|
||||
* For a shaped texture of a wl_surface, this means surface
|
||||
* coordinate space. If NULL, the whole content will be used.
|
||||
*
|
||||
* Get the image from the texture content. The resulting size of
|
||||
* the returned image may be different from the preferred size of
|
||||
* the shaped texture content.
|
||||
*
|
||||
* Returns: (nullable) (transfer full): a new cairo surface to be freed
|
||||
* with cairo_surface_destroy().
|
||||
*/
|
||||
cairo_surface_t *
|
||||
meta_surface_actor_get_image (MetaSurfaceActor *self,
|
||||
cairo_rectangle_int_t *clip)
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "core/frame.h"
|
||||
#include "compositor/compositor-private.h"
|
||||
#include "compositor/meta-cullable.h"
|
||||
#include "compositor/meta-shaped-texture-private.h"
|
||||
#include "compositor/meta-surface-actor-x11.h"
|
||||
#include "compositor/meta-surface-actor.h"
|
||||
#include "compositor/meta-window-actor-private.h"
|
||||
@ -83,7 +84,7 @@ typedef struct _MetaWindowActorPrivate
|
||||
|
||||
int geometry_scale;
|
||||
|
||||
guint size_changed_id;
|
||||
gulong size_changed_id;
|
||||
|
||||
/*
|
||||
* These need to be counters rather than flags, since more plugins
|
||||
@ -386,7 +387,16 @@ meta_window_actor_real_assign_surface_actor (MetaWindowActor *self,
|
||||
MetaWindowActorPrivate *priv =
|
||||
meta_window_actor_get_instance_private (self);
|
||||
|
||||
g_assert (!priv->surface);
|
||||
if (priv->surface)
|
||||
{
|
||||
g_warn_if_fail (priv->window->client_type == META_WINDOW_CLIENT_TYPE_X11 &&
|
||||
meta_is_wayland_compositor ());
|
||||
|
||||
g_clear_signal_handler (&priv->size_changed_id, priv->surface);
|
||||
clutter_actor_remove_child (CLUTTER_ACTOR (self),
|
||||
CLUTTER_ACTOR (priv->surface));
|
||||
g_clear_object (&priv->surface);
|
||||
}
|
||||
|
||||
priv->surface = g_object_ref_sink (surface_actor);
|
||||
priv->size_changed_id = g_signal_connect (priv->surface, "size-changed",
|
||||
@ -491,7 +501,7 @@ meta_window_actor_dispose (GObject *object)
|
||||
|
||||
if (priv->surface)
|
||||
{
|
||||
g_signal_handler_disconnect (priv->surface, priv->size_changed_id);
|
||||
g_clear_signal_handler (&priv->size_changed_id, priv->surface);
|
||||
clutter_actor_remove_child (CLUTTER_ACTOR (self),
|
||||
CLUTTER_ACTOR (priv->surface));
|
||||
g_clear_object (&priv->surface);
|
||||
@ -2133,6 +2143,19 @@ meta_window_actor_notify_damaged (MetaWindowActor *window_actor)
|
||||
g_signal_emit (window_actor, signals[DAMAGED], 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_actor_get_image:
|
||||
* @self: A #MetaWindowActor
|
||||
* @clip: (nullable): A clipping rectangle, to help prevent extra processing.
|
||||
* In the case that the clipping rectangle is partially or fully
|
||||
* outside the bounds of the actor, the rectangle will be clipped.
|
||||
*
|
||||
* Flattens the layers of @self into one ARGB32 image by alpha blending
|
||||
* the images, and returns the flattened image.
|
||||
*
|
||||
* Returns: (nullable) (transfer full): a new cairo surface to be freed with
|
||||
* cairo_surface_destroy().
|
||||
*/
|
||||
cairo_surface_t *
|
||||
meta_window_actor_get_image (MetaWindowActor *self,
|
||||
MetaRectangle *clip)
|
||||
@ -2160,9 +2183,25 @@ meta_window_actor_get_image (MetaWindowActor *self,
|
||||
if (clutter_actor_get_n_children (actor) == 1)
|
||||
{
|
||||
MetaShapedTexture *stex;
|
||||
MetaRectangle *surface_clip = NULL;
|
||||
|
||||
if (clip)
|
||||
{
|
||||
|
||||
int geometry_scale;
|
||||
|
||||
geometry_scale =
|
||||
meta_window_actor_get_geometry_scale (self);
|
||||
|
||||
surface_clip = g_alloca (sizeof (MetaRectangle));
|
||||
surface_clip->x = clip->x / geometry_scale,
|
||||
surface_clip->y = clip->y / geometry_scale;
|
||||
surface_clip->width = clip->width / geometry_scale;
|
||||
surface_clip->height = clip->height / geometry_scale;
|
||||
}
|
||||
|
||||
stex = meta_surface_actor_get_texture (priv->surface);
|
||||
return meta_shaped_texture_get_image (stex, clip);
|
||||
return meta_shaped_texture_get_image (stex, surface_clip);
|
||||
}
|
||||
|
||||
clutter_actor_get_size (actor, &width, &height);
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "clutter/clutter.h"
|
||||
#include "meta/meta-backend.h"
|
||||
#include "meta/meta-background-actor.h"
|
||||
#include "meta/meta-background-group.h"
|
||||
#include "meta/meta-monitor-manager.h"
|
||||
@ -369,6 +370,67 @@ on_monitors_changed (MetaMonitorManager *monitor_manager,
|
||||
g_rand_free (rand);
|
||||
}
|
||||
|
||||
static void
|
||||
init_keymap (MetaDefaultPlugin *self)
|
||||
{
|
||||
g_autoptr (GError) error = NULL;
|
||||
g_autoptr (GDBusProxy) proxy = NULL;
|
||||
g_autoptr (GVariant) result = NULL;
|
||||
g_autoptr (GVariant) props = NULL;
|
||||
g_autofree char *x11_layout = NULL;
|
||||
g_autofree char *x11_options = NULL;
|
||||
g_autofree char *x11_variant = NULL;
|
||||
|
||||
proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
|
||||
G_DBUS_PROXY_FLAGS_NONE,
|
||||
NULL,
|
||||
"org.freedesktop.locale1",
|
||||
"/org/freedesktop/locale1",
|
||||
"org.freedesktop.DBus.Properties",
|
||||
NULL,
|
||||
&error);
|
||||
if (!proxy)
|
||||
{
|
||||
g_message ("Failed to acquire org.freedesktop.locale1 proxy: %s, "
|
||||
"probably running in CI",
|
||||
error->message);
|
||||
return;
|
||||
}
|
||||
|
||||
result = g_dbus_proxy_call_sync (proxy,
|
||||
"GetAll",
|
||||
g_variant_new ("(s)",
|
||||
"org.freedesktop.locale1"),
|
||||
G_DBUS_CALL_FLAGS_NONE,
|
||||
100,
|
||||
NULL,
|
||||
&error);
|
||||
if (!result)
|
||||
{
|
||||
g_warning ("Failed to retrieve locale properties: %s", error->message);
|
||||
return;
|
||||
}
|
||||
|
||||
props = g_variant_get_child_value (result, 0);
|
||||
if (!props)
|
||||
{
|
||||
g_warning ("No locale properties found");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!g_variant_lookup (props, "X11Layout", "s", &x11_layout))
|
||||
x11_layout = g_strdup ("us");
|
||||
|
||||
if (!g_variant_lookup (props, "X11Options", "s", &x11_options))
|
||||
x11_options = g_strdup ("");
|
||||
|
||||
if (!g_variant_lookup (props, "X11Variant", "s", &x11_variant))
|
||||
x11_variant = g_strdup ("");
|
||||
|
||||
meta_backend_set_keymap (meta_get_backend (),
|
||||
x11_layout, x11_variant, x11_options);
|
||||
}
|
||||
|
||||
static void
|
||||
start (MetaPlugin *plugin)
|
||||
{
|
||||
@ -385,6 +447,9 @@ start (MetaPlugin *plugin)
|
||||
|
||||
on_monitors_changed (monitor_manager, plugin);
|
||||
|
||||
if (meta_is_wayland_compositor ())
|
||||
init_keymap (self);
|
||||
|
||||
clutter_actor_show (meta_get_stage_for_display (display));
|
||||
}
|
||||
|
||||
@ -525,6 +590,7 @@ minimize (MetaPlugin *plugin, MetaWindowActor *window_actor)
|
||||
MetaWindowType type;
|
||||
MetaRectangle icon_geometry;
|
||||
MetaWindow *meta_window = meta_window_actor_get_meta_window (window_actor);
|
||||
ClutterTimeline *timeline = NULL;
|
||||
ClutterActor *actor = CLUTTER_ACTOR (window_actor);
|
||||
|
||||
|
||||
@ -537,24 +603,28 @@ minimize (MetaPlugin *plugin, MetaWindowActor *window_actor)
|
||||
}
|
||||
|
||||
if (type == META_WINDOW_NORMAL)
|
||||
{
|
||||
timeline = actor_animate (actor,
|
||||
CLUTTER_EASE_IN_SINE,
|
||||
MINIMIZE_TIMEOUT,
|
||||
"scale-x", 0.0,
|
||||
"scale-y", 0.0,
|
||||
"x", (double)icon_geometry.x,
|
||||
"y", (double)icon_geometry.y,
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (timeline)
|
||||
{
|
||||
EffectCompleteData *data = g_new0 (EffectCompleteData, 1);
|
||||
ActorPrivate *apriv = get_actor_private (window_actor);
|
||||
|
||||
apriv->tml_minimize = actor_animate (actor,
|
||||
CLUTTER_EASE_IN_SINE,
|
||||
MINIMIZE_TIMEOUT,
|
||||
"scale-x", 0.0,
|
||||
"scale-y", 0.0,
|
||||
"x", (double)icon_geometry.x,
|
||||
"y", (double)icon_geometry.y,
|
||||
NULL);
|
||||
apriv->tml_minimize = timeline;
|
||||
data->plugin = plugin;
|
||||
data->actor = actor;
|
||||
g_signal_connect (apriv->tml_minimize, "completed",
|
||||
G_CALLBACK (on_minimize_effect_complete),
|
||||
data);
|
||||
|
||||
}
|
||||
else
|
||||
meta_plugin_minimize_completed (plugin, window_actor);
|
||||
@ -643,21 +713,27 @@ destroy (MetaPlugin *plugin, MetaWindowActor *window_actor)
|
||||
MetaWindowType type;
|
||||
ClutterActor *actor = CLUTTER_ACTOR (window_actor);
|
||||
MetaWindow *meta_window = meta_window_actor_get_meta_window (window_actor);
|
||||
ClutterTimeline *timeline = NULL;
|
||||
|
||||
type = meta_window_get_window_type (meta_window);
|
||||
|
||||
if (type == META_WINDOW_NORMAL)
|
||||
{
|
||||
timeline = actor_animate (actor,
|
||||
CLUTTER_EASE_OUT_QUAD,
|
||||
DESTROY_TIMEOUT,
|
||||
"opacity", 0,
|
||||
"scale-x", 0.8,
|
||||
"scale-y", 0.8,
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (timeline)
|
||||
{
|
||||
EffectCompleteData *data = g_new0 (EffectCompleteData, 1);
|
||||
ActorPrivate *apriv = get_actor_private (window_actor);
|
||||
|
||||
apriv->tml_destroy = actor_animate (actor,
|
||||
CLUTTER_EASE_OUT_QUAD,
|
||||
DESTROY_TIMEOUT,
|
||||
"opacity", 0,
|
||||
"scale-x", 0.8,
|
||||
"scale-y", 0.8,
|
||||
NULL);
|
||||
apriv->tml_destroy = timeline;
|
||||
data->plugin = plugin;
|
||||
data->actor = actor;
|
||||
g_signal_connect (apriv->tml_destroy, "completed",
|
||||
@ -672,9 +748,8 @@ destroy (MetaPlugin *plugin, MetaWindowActor *window_actor)
|
||||
* Tile preview private data accessor
|
||||
*/
|
||||
static void
|
||||
free_display_tile_preview (gpointer data)
|
||||
free_display_tile_preview (DisplayTilePreview *preview)
|
||||
{
|
||||
DisplayTilePreview *preview = data;
|
||||
|
||||
if (G_LIKELY (preview != NULL)) {
|
||||
clutter_actor_destroy (preview->actor);
|
||||
@ -682,15 +757,27 @@ free_display_tile_preview (gpointer data)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_display_closing (MetaDisplay *display,
|
||||
DisplayTilePreview *preview)
|
||||
{
|
||||
free_display_tile_preview (preview);
|
||||
}
|
||||
|
||||
static DisplayTilePreview *
|
||||
get_display_tile_preview (MetaDisplay *display)
|
||||
{
|
||||
DisplayTilePreview *preview = g_object_get_qdata (G_OBJECT (display), display_tile_preview_data_quark);
|
||||
DisplayTilePreview *preview;
|
||||
|
||||
if (G_UNLIKELY (display_tile_preview_data_quark == 0))
|
||||
display_tile_preview_data_quark = g_quark_from_static_string (DISPLAY_TILE_PREVIEW_DATA_KEY);
|
||||
if (!display_tile_preview_data_quark)
|
||||
{
|
||||
display_tile_preview_data_quark =
|
||||
g_quark_from_static_string (DISPLAY_TILE_PREVIEW_DATA_KEY);
|
||||
}
|
||||
|
||||
if (G_UNLIKELY (!preview))
|
||||
preview = g_object_get_qdata (G_OBJECT (display),
|
||||
display_tile_preview_data_quark);
|
||||
if (!preview)
|
||||
{
|
||||
preview = g_slice_new0 (DisplayTilePreview);
|
||||
|
||||
@ -699,9 +786,13 @@ get_display_tile_preview (MetaDisplay *display)
|
||||
clutter_actor_set_opacity (preview->actor, 100);
|
||||
|
||||
clutter_actor_add_child (meta_get_window_group_for_display (display), preview->actor);
|
||||
g_object_set_qdata_full (G_OBJECT (display),
|
||||
display_tile_preview_data_quark, preview,
|
||||
free_display_tile_preview);
|
||||
g_signal_connect (display,
|
||||
"closing",
|
||||
G_CALLBACK (on_display_closing),
|
||||
preview);
|
||||
g_object_set_qdata (G_OBJECT (display),
|
||||
display_tile_preview_data_quark,
|
||||
preview);
|
||||
}
|
||||
|
||||
return preview;
|
||||
@ -746,6 +837,15 @@ hide_tile_preview (MetaPlugin *plugin)
|
||||
clutter_actor_hide (preview->actor);
|
||||
}
|
||||
|
||||
static void
|
||||
finish_timeline (ClutterTimeline *timeline)
|
||||
{
|
||||
g_object_ref (timeline);
|
||||
clutter_timeline_stop (timeline);
|
||||
g_signal_emit_by_name (timeline, "completed", NULL);
|
||||
g_object_unref (timeline);
|
||||
}
|
||||
|
||||
static void
|
||||
kill_switch_workspace (MetaPlugin *plugin)
|
||||
{
|
||||
@ -753,9 +853,11 @@ kill_switch_workspace (MetaPlugin *plugin)
|
||||
|
||||
if (priv->tml_switch_workspace1)
|
||||
{
|
||||
g_object_ref (priv->tml_switch_workspace1);
|
||||
clutter_timeline_stop (priv->tml_switch_workspace1);
|
||||
clutter_timeline_stop (priv->tml_switch_workspace2);
|
||||
g_signal_emit_by_name (priv->tml_switch_workspace1, "completed", NULL);
|
||||
g_object_unref (priv->tml_switch_workspace1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -768,22 +870,13 @@ kill_window_effects (MetaPlugin *plugin,
|
||||
apriv = get_actor_private (window_actor);
|
||||
|
||||
if (apriv->tml_minimize)
|
||||
{
|
||||
clutter_timeline_stop (apriv->tml_minimize);
|
||||
g_signal_emit_by_name (apriv->tml_minimize, "completed", NULL);
|
||||
}
|
||||
finish_timeline (apriv->tml_minimize);
|
||||
|
||||
if (apriv->tml_map)
|
||||
{
|
||||
clutter_timeline_stop (apriv->tml_map);
|
||||
g_signal_emit_by_name (apriv->tml_map, "completed", NULL);
|
||||
}
|
||||
finish_timeline (apriv->tml_map);
|
||||
|
||||
if (apriv->tml_destroy)
|
||||
{
|
||||
clutter_timeline_stop (apriv->tml_destroy);
|
||||
g_signal_emit_by_name (apriv->tml_destroy, "completed", NULL);
|
||||
}
|
||||
finish_timeline (apriv->tml_destroy);
|
||||
}
|
||||
|
||||
static const MetaPluginInfo *
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include <X11/extensions/Xdamage.h>
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "backends/meta-cursor-sprite-xcursor.h"
|
||||
#include "backends/meta-cursor-tracker-private.h"
|
||||
#include "backends/meta-idle-monitor-dbus.h"
|
||||
@ -52,6 +53,7 @@
|
||||
#include "clutter/x11/clutter-x11.h"
|
||||
#include "compositor/compositor-private.h"
|
||||
#include "compositor/meta-compositor-x11.h"
|
||||
#include "cogl/cogl-trace.h"
|
||||
#include "core/bell.h"
|
||||
#include "core/boxes-private.h"
|
||||
#include "core/display-private.h"
|
||||
@ -125,6 +127,7 @@ G_DEFINE_TYPE(MetaDisplay, meta_display, G_TYPE_OBJECT);
|
||||
enum
|
||||
{
|
||||
CURSOR_UPDATED,
|
||||
X11_DISPLAY_SETUP,
|
||||
X11_DISPLAY_OPENED,
|
||||
X11_DISPLAY_CLOSING,
|
||||
OVERLAY_KEY,
|
||||
@ -153,6 +156,7 @@ enum
|
||||
SHOWING_DESKTOP_CHANGED,
|
||||
RESTACKED,
|
||||
WORKAREAS_CHANGED,
|
||||
CLOSING,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
@ -231,6 +235,14 @@ meta_display_class_init (MetaDisplayClass *klass)
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
display_signals[X11_DISPLAY_SETUP] =
|
||||
g_signal_new ("x11-display-setup",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
display_signals[X11_DISPLAY_OPENED] =
|
||||
g_signal_new ("x11-display-opened",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
@ -482,6 +494,12 @@ meta_display_class_init (MetaDisplayClass *klass)
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
display_signals[CLOSING] =
|
||||
g_signal_new ("closing",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_FOCUS_WINDOW,
|
||||
@ -612,27 +630,23 @@ gesture_tracker_state_changed (MetaGestureTracker *tracker,
|
||||
MetaSequenceState state,
|
||||
MetaDisplay *display)
|
||||
{
|
||||
if (meta_is_wayland_compositor ())
|
||||
switch (state)
|
||||
{
|
||||
if (state == META_SEQUENCE_ACCEPTED)
|
||||
meta_display_cancel_touch (display);
|
||||
}
|
||||
else
|
||||
{
|
||||
MetaBackendX11 *backend = META_BACKEND_X11 (meta_get_backend ());
|
||||
int event_mode;
|
||||
case META_SEQUENCE_NONE:
|
||||
case META_SEQUENCE_PENDING_END:
|
||||
return;
|
||||
case META_SEQUENCE_ACCEPTED:
|
||||
meta_display_cancel_touch (display);
|
||||
|
||||
if (state == META_SEQUENCE_ACCEPTED)
|
||||
event_mode = XIAcceptTouch;
|
||||
else if (state == META_SEQUENCE_REJECTED)
|
||||
event_mode = XIRejectTouch;
|
||||
else
|
||||
return;
|
||||
/* Intentional fall-through */
|
||||
case META_SEQUENCE_REJECTED:
|
||||
{
|
||||
MetaBackend *backend;
|
||||
|
||||
XIAllowTouchEvents (meta_backend_x11_get_xdisplay (backend),
|
||||
META_VIRTUAL_CORE_POINTER_ID,
|
||||
meta_x11_event_sequence_get_touch_detail (sequence),
|
||||
DefaultRootWindow (display->x11_display->xdisplay), event_mode);
|
||||
backend = meta_get_backend ();
|
||||
meta_backend_finish_touch_sequence (backend, sequence, state);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -656,12 +670,13 @@ meta_display_init_x11 (MetaDisplay *display,
|
||||
return FALSE;
|
||||
|
||||
display->x11_display = x11_display;
|
||||
g_signal_emit (display, display_signals[X11_DISPLAY_OPENED], 0);
|
||||
g_signal_emit (display, display_signals[X11_DISPLAY_SETUP], 0);
|
||||
|
||||
meta_x11_display_create_guard_window (x11_display);
|
||||
|
||||
if (!display->display_opening)
|
||||
{
|
||||
g_signal_emit (display, display_signals[X11_DISPLAY_OPENED], 0);
|
||||
meta_display_manage_all_xwindows (display);
|
||||
meta_compositor_redirect_x11_windows (display->compositor);
|
||||
}
|
||||
@ -802,6 +817,7 @@ meta_display_open (void)
|
||||
|
||||
if (display->x11_display)
|
||||
{
|
||||
g_signal_emit (display, display_signals[X11_DISPLAY_OPENED], 0);
|
||||
meta_x11_display_restore_active_workspace (display->x11_display);
|
||||
meta_x11_display_create_guard_window (display->x11_display);
|
||||
}
|
||||
@ -962,6 +978,8 @@ meta_display_close (MetaDisplay *display,
|
||||
|
||||
display->closing += 1;
|
||||
|
||||
g_signal_emit (display, display_signals[CLOSING], 0);
|
||||
|
||||
meta_compositor_unmanage (display->compositor);
|
||||
|
||||
meta_display_unmanage_windows (display, timestamp);
|
||||
@ -1360,23 +1378,8 @@ meta_display_set_input_focus (MetaDisplay *display,
|
||||
|
||||
if (display->x11_display)
|
||||
{
|
||||
MetaX11Display *x11_display = display->x11_display;
|
||||
Window xwindow;
|
||||
gulong serial;
|
||||
|
||||
meta_x11_error_trap_push (x11_display);
|
||||
|
||||
if (window)
|
||||
xwindow = focus_frame ? window->frame->xwindow : window->xwindow;
|
||||
else
|
||||
xwindow = x11_display->no_focus_window;
|
||||
|
||||
meta_x11_display_set_input_focus (x11_display, xwindow, timestamp);
|
||||
serial = XNextRequest (x11_display->xdisplay);
|
||||
|
||||
meta_x11_display_update_focus_window (x11_display, xwindow, serial, TRUE);
|
||||
|
||||
meta_x11_error_trap_pop (display->x11_display);
|
||||
meta_x11_display_set_input_focus (display->x11_display, window,
|
||||
focus_frame, timestamp);
|
||||
}
|
||||
|
||||
meta_display_update_focus_window (display, window);
|
||||
@ -1481,6 +1484,8 @@ void
|
||||
meta_display_notify_window_created (MetaDisplay *display,
|
||||
MetaWindow *window)
|
||||
{
|
||||
COGL_TRACE_BEGIN_SCOPED (MetaDisplayNotifyWindowCreated,
|
||||
"Display (notify window created)");
|
||||
g_signal_emit (display, display_signals[WINDOW_CREATED], 0, window);
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,12 @@
|
||||
#define IS_KEY_EVENT(e) ((e)->type == CLUTTER_KEY_PRESS || \
|
||||
(e)->type == CLUTTER_KEY_RELEASE)
|
||||
|
||||
typedef enum
|
||||
{
|
||||
EVENTS_UNFREEZE_SYNC,
|
||||
EVENTS_UNFREEZE_REPLAY,
|
||||
} EventsUnfreezeMethod;
|
||||
|
||||
static gboolean
|
||||
stage_has_key_focus (void)
|
||||
{
|
||||
@ -169,6 +175,43 @@ sequence_is_pointer_emulated (MetaDisplay *display,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
maybe_unfreeze_pointer_events (MetaBackend *backend,
|
||||
const ClutterEvent *event,
|
||||
EventsUnfreezeMethod unfreeze_method)
|
||||
{
|
||||
Display *xdisplay;
|
||||
int event_mode;
|
||||
int device_id;
|
||||
|
||||
if (event->type != CLUTTER_BUTTON_PRESS)
|
||||
return;
|
||||
|
||||
if (!META_IS_BACKEND_X11 (backend))
|
||||
return;
|
||||
|
||||
device_id = clutter_event_get_device_id (event);
|
||||
switch (unfreeze_method)
|
||||
{
|
||||
case EVENTS_UNFREEZE_SYNC:
|
||||
event_mode = XISyncDevice;
|
||||
meta_verbose ("Syncing events time %u device %i\n",
|
||||
(unsigned int) event->button.time, device_id);
|
||||
break;
|
||||
case EVENTS_UNFREEZE_REPLAY:
|
||||
event_mode = XIReplayDevice;
|
||||
meta_verbose ("Replaying events time %u device %i\n",
|
||||
(unsigned int) event->button.time, device_id);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
return;
|
||||
}
|
||||
|
||||
xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||
XIAllowEvents (xdisplay, device_id, event_mode, event->button.time);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_display_handle_event (MetaDisplay *display,
|
||||
const ClutterEvent *event)
|
||||
@ -382,17 +425,7 @@ meta_display_handle_event (MetaDisplay *display,
|
||||
{
|
||||
/* Only replay button press events, since that's where we
|
||||
* have the synchronous grab. */
|
||||
if (event->type == CLUTTER_BUTTON_PRESS)
|
||||
{
|
||||
if (META_IS_BACKEND_X11 (backend))
|
||||
{
|
||||
Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
|
||||
meta_verbose ("Allowing events time %u\n",
|
||||
(unsigned int)event->button.time);
|
||||
XIAllowEvents (xdisplay, clutter_event_get_device_id (event),
|
||||
XIReplayDevice, event->button.time);
|
||||
}
|
||||
}
|
||||
maybe_unfreeze_pointer_events (backend, event, EVENTS_UNFREEZE_REPLAY);
|
||||
|
||||
/* If the focus window has an active close dialog let clutter
|
||||
* events go through, so fancy clutter dialogs can get to handle
|
||||
@ -408,6 +441,13 @@ meta_display_handle_event (MetaDisplay *display,
|
||||
|
||||
goto out;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We could not match the event with a window, make sure we sync
|
||||
* the pointer to discard the sequence and don't keep events frozen.
|
||||
*/
|
||||
maybe_unfreeze_pointer_events (backend, event, EVENTS_UNFREEZE_SYNC);
|
||||
}
|
||||
|
||||
out:
|
||||
/* If the compositor has a grab, don't pass that through to Wayland */
|
||||
|
@ -1933,6 +1933,12 @@ invoke_handler (MetaDisplay *display,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_key_binding_has_handler_func (MetaKeyBinding *binding)
|
||||
{
|
||||
return (!!binding->handler->func || !!binding->handler->default_func);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
process_event (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
@ -1955,6 +1961,12 @@ process_event (MetaDisplay *display,
|
||||
(!window && binding->flags & META_KEY_BINDING_PER_WINDOW))
|
||||
goto not_found;
|
||||
|
||||
if (binding->handler == NULL)
|
||||
meta_bug ("Binding %s has no handler\n", binding->name);
|
||||
|
||||
if (!meta_key_binding_has_handler_func (binding))
|
||||
goto not_found;
|
||||
|
||||
if (display->focus_window &&
|
||||
!(binding->handler->flags & META_KEY_BINDING_NON_MASKABLE))
|
||||
{
|
||||
@ -1980,12 +1992,9 @@ process_event (MetaDisplay *display,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (binding->handler == NULL)
|
||||
meta_bug ("Binding %s has no handler\n", binding->name);
|
||||
else
|
||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||
"Running handler for %s\n",
|
||||
binding->name);
|
||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||
"Running handler for %s\n",
|
||||
binding->name);
|
||||
|
||||
/* Global keybindings count as a let-the-terminal-lose-focus
|
||||
* due to new window mapping until the user starts
|
||||
|
@ -70,6 +70,10 @@
|
||||
#include <systemd/sd-login.h>
|
||||
#endif /* HAVE_WAYLAND && HAVE_NATIVE_BACKEND */
|
||||
|
||||
#ifdef HAVE_SYS_PRCTL
|
||||
#include <sys/prctl.h>
|
||||
#endif
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "backends/x11/cm/meta-backend-x11-cm.h"
|
||||
#include "backends/x11/meta-backend-x11.h"
|
||||
@ -532,6 +536,10 @@ meta_init (void)
|
||||
MetaCompositorType compositor_type;
|
||||
GType backend_gtype;
|
||||
|
||||
#ifdef HAVE_SYS_PRCTL
|
||||
prctl (PR_SET_DUMPABLE, 1);
|
||||
#endif
|
||||
|
||||
sigemptyset (&empty_mask);
|
||||
act.sa_handler = SIG_IGN;
|
||||
act.sa_mask = empty_mask;
|
||||
@ -758,6 +766,6 @@ meta_test_init (void)
|
||||
|
||||
close (fd);
|
||||
#else
|
||||
g_error ("Tests require wayland support");
|
||||
g_warning ("Tests require wayland support");
|
||||
#endif
|
||||
}
|
||||
|
@ -32,9 +32,15 @@ static struct {
|
||||
const char *mimetype_glob;
|
||||
ssize_t max_transfer_size;
|
||||
} supported_mimetypes[] = {
|
||||
{ "image/tiff", MAX_IMAGE_SIZE },
|
||||
{ "image/bmp", MAX_IMAGE_SIZE },
|
||||
{ "image/gif", MAX_IMAGE_SIZE },
|
||||
{ "image/jpeg", MAX_IMAGE_SIZE },
|
||||
{ "image/webp", MAX_IMAGE_SIZE },
|
||||
{ "image/png", MAX_IMAGE_SIZE },
|
||||
{ "image/svg+xml", MAX_IMAGE_SIZE },
|
||||
{ "text/plain", MAX_TEXT_SIZE },
|
||||
{ "text/plain;charset=utf-8", MAX_TEXT_SIZE },
|
||||
{ "image/*", MAX_IMAGE_SIZE },
|
||||
};
|
||||
|
||||
static gboolean
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "clutter/clutter.h"
|
||||
#include "meta/window.h"
|
||||
|
||||
@ -39,14 +40,6 @@
|
||||
typedef struct _MetaGestureTracker MetaGestureTracker;
|
||||
typedef struct _MetaGestureTrackerClass MetaGestureTrackerClass;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_SEQUENCE_NONE,
|
||||
META_SEQUENCE_ACCEPTED,
|
||||
META_SEQUENCE_REJECTED,
|
||||
META_SEQUENCE_PENDING_END
|
||||
} MetaSequenceState;
|
||||
|
||||
struct _MetaGestureTracker
|
||||
{
|
||||
GObject parent_instance;
|
||||
|
@ -76,6 +76,9 @@ meta_selection_source_memory_get_mimetypes (MetaSelectionSource *source)
|
||||
{
|
||||
MetaSelectionSourceMemory *source_mem = META_SELECTION_SOURCE_MEMORY (source);
|
||||
|
||||
if (!source_mem->mimetype)
|
||||
return NULL;
|
||||
|
||||
return g_list_prepend (NULL, g_strdup (source_mem->mimetype));
|
||||
}
|
||||
|
||||
@ -84,7 +87,7 @@ meta_selection_source_memory_finalize (GObject *object)
|
||||
{
|
||||
MetaSelectionSourceMemory *source_mem = META_SELECTION_SOURCE_MEMORY (object);
|
||||
|
||||
g_bytes_unref (source_mem->content);
|
||||
g_clear_pointer (&source_mem->content, g_bytes_unref);
|
||||
g_free (source_mem->mimetype);
|
||||
|
||||
G_OBJECT_CLASS (meta_selection_source_memory_parent_class)->finalize (object);
|
||||
|
@ -556,7 +556,7 @@ meta_stack_tracker_new (MetaDisplay *display)
|
||||
tracker->unverified_predictions = g_queue_new ();
|
||||
|
||||
g_signal_connect (display,
|
||||
"x11-display-opened",
|
||||
"x11-display-setup",
|
||||
G_CALLBACK (query_xserver_stack),
|
||||
tracker);
|
||||
g_signal_connect (display,
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "core/stack.h"
|
||||
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
#include "cogl/cogl-trace.h"
|
||||
#include "core/frame.h"
|
||||
#include "core/meta-workspace-manager-private.h"
|
||||
#include "core/window-private.h"
|
||||
@ -275,6 +276,9 @@ meta_stack_add (MetaStack *stack,
|
||||
{
|
||||
MetaWorkspaceManager *workspace_manager = window->display->workspace_manager;
|
||||
|
||||
COGL_TRACE_BEGIN_SCOPED (MetaStackAdd,
|
||||
"Stack (add window)");
|
||||
|
||||
g_return_if_fail (meta_window_is_stackable (window));
|
||||
|
||||
meta_topic (META_DEBUG_STACK, "Adding window %s to the stack\n", window->desc);
|
||||
@ -305,6 +309,9 @@ meta_stack_remove (MetaStack *stack,
|
||||
{
|
||||
MetaWorkspaceManager *workspace_manager = window->display->workspace_manager;
|
||||
|
||||
COGL_TRACE_BEGIN_SCOPED (MetaStackRemove,
|
||||
"Stack (remove window)");
|
||||
|
||||
meta_topic (META_DEBUG_STACK, "Removing window %s from the stack\n", window->desc);
|
||||
|
||||
/* Set window to top position, so removing it will not leave gaps
|
||||
@ -851,8 +858,11 @@ static void
|
||||
ensure_above (MetaWindow *above,
|
||||
MetaWindow *below)
|
||||
{
|
||||
if (WINDOW_HAS_TRANSIENT_TYPE(above) &&
|
||||
above->layer < below->layer)
|
||||
gboolean is_transient;
|
||||
|
||||
is_transient = WINDOW_HAS_TRANSIENT_TYPE (above) ||
|
||||
above->transient_for == below;
|
||||
if (is_transient && above->layer < below->layer)
|
||||
{
|
||||
meta_topic (META_DEBUG_STACK,
|
||||
"Promoting window %s from layer %u to %u due to contraint\n",
|
||||
|
@ -629,6 +629,7 @@ void meta_window_unmanage (MetaWindow *window,
|
||||
void meta_window_unmanage_on_idle (MetaWindow *window);
|
||||
void meta_window_queue (MetaWindow *window,
|
||||
guint queuebits);
|
||||
META_EXPORT_TEST
|
||||
void meta_window_tile (MetaWindow *window,
|
||||
MetaTileMode mode);
|
||||
MetaTileMode meta_window_get_tile_mode (MetaWindow *window);
|
||||
|
@ -67,6 +67,7 @@
|
||||
|
||||
#include "backends/meta-backend-private.h"
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
#include "cogl/cogl-trace.h"
|
||||
#include "core/boxes-private.h"
|
||||
#include "core/constraints.h"
|
||||
#include "core/core.h"
|
||||
@ -947,6 +948,15 @@ meta_window_calculate_main_logical_monitor (MetaWindow *window)
|
||||
&window_rect);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_manage (MetaWindow *window)
|
||||
{
|
||||
COGL_TRACE_BEGIN_SCOPED (MetaWindowManage,
|
||||
"Window (manage)");
|
||||
|
||||
META_WINDOW_GET_CLASS (window)->manage (window);
|
||||
}
|
||||
|
||||
MetaWindow *
|
||||
_meta_window_shared_new (MetaDisplay *display,
|
||||
MetaWindowClientType client_type,
|
||||
@ -959,6 +969,9 @@ _meta_window_shared_new (MetaDisplay *display,
|
||||
MetaWorkspaceManager *workspace_manager = display->workspace_manager;
|
||||
MetaWindow *window;
|
||||
|
||||
COGL_TRACE_BEGIN_SCOPED (MetaWindowSharedNew,
|
||||
"Window (new)");
|
||||
|
||||
g_assert (attrs != NULL);
|
||||
|
||||
meta_verbose ("attrs->map_state = %d (%s)\n",
|
||||
@ -1171,7 +1184,7 @@ _meta_window_shared_new (MetaDisplay *display,
|
||||
|
||||
window->id = meta_display_generate_window_id (display);
|
||||
|
||||
META_WINDOW_GET_CLASS (window)->manage (window);
|
||||
meta_window_manage (window);
|
||||
|
||||
if (!window->override_redirect)
|
||||
meta_window_update_icon_now (window, TRUE);
|
||||
@ -1276,7 +1289,10 @@ _meta_window_shared_new (MetaDisplay *display,
|
||||
window->initial_workspace);
|
||||
}
|
||||
|
||||
set_workspace_state (window, on_all_workspaces, workspace);
|
||||
/* Ignore when a window requests to be placed on a non-existent workspace
|
||||
*/
|
||||
if (on_all_workspaces || workspace != NULL)
|
||||
set_workspace_state (window, on_all_workspaces, workspace);
|
||||
}
|
||||
|
||||
/* override-redirect windows are subtly different from other windows
|
||||
@ -1293,6 +1309,7 @@ _meta_window_shared_new (MetaDisplay *display,
|
||||
"Putting window %s on same workspace as parent %s\n",
|
||||
window->desc, window->transient_for->desc);
|
||||
|
||||
g_warn_if_fail (!window->transient_for->override_redirect);
|
||||
set_workspace_state (window,
|
||||
should_be_on_all_workspaces (window->transient_for),
|
||||
window->transient_for->workspace);
|
||||
@ -3179,7 +3196,10 @@ meta_window_tile (MetaWindow *window,
|
||||
|
||||
/* Don't do anything if no tiling is requested */
|
||||
if (window->tile_mode == META_TILE_NONE)
|
||||
return;
|
||||
{
|
||||
window->tile_monitor_number = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (window->tile_mode == META_TILE_MAXIMIZED)
|
||||
directions = META_MAXIMIZE_BOTH;
|
||||
@ -3910,11 +3930,16 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
|
||||
if (!new)
|
||||
new = meta_monitor_manager_get_primary_logical_monitor (monitor_manager);
|
||||
|
||||
if (window->tile_mode != META_TILE_NONE)
|
||||
{
|
||||
if (new)
|
||||
window->tile_monitor_number = new->number;
|
||||
else
|
||||
window->tile_monitor_number = -1;
|
||||
}
|
||||
|
||||
if (new && old)
|
||||
{
|
||||
if (window->tile_mode != META_TILE_NONE)
|
||||
window->tile_monitor_number = new->number;
|
||||
|
||||
/* This will eventually reach meta_window_update_monitor that
|
||||
* will send leave/enter-monitor events. The old != new monitor
|
||||
* check will always fail (due to the new logical_monitors set) so
|
||||
@ -4804,9 +4829,12 @@ set_workspace_state (MetaWindow *window,
|
||||
{
|
||||
MetaWorkspaceManager *workspace_manager = window->display->workspace_manager;
|
||||
|
||||
/* If we're on all workspaces, then our new workspace must be NULL. */
|
||||
/* If we're on all workspaces, then our new workspace must be NULL,
|
||||
* otherwise it must be set, unless we're unmanaging. */
|
||||
if (on_all_workspaces)
|
||||
g_assert (workspace == NULL);
|
||||
g_assert_null (workspace);
|
||||
else
|
||||
g_assert_true (window->unmanaging || workspace != NULL);
|
||||
|
||||
/* If this is an override-redirect window, ensure that the only
|
||||
* times we're setting the workspace state is either during construction
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user