Compare commits
40 Commits
3.29.1
...
wip/carlos
Author | SHA1 | Date | |
---|---|---|---|
255a7afe73 | |||
3649795108 | |||
36b9551f92 | |||
6abe4703c7 | |||
69ca584168 | |||
8ee14a7cb7 | |||
909dbafd67 | |||
d5203f170e | |||
2a45b7de7c | |||
62c67be4c8 | |||
0332b7394e | |||
15f41c9f68 | |||
2a38601b42 | |||
d7bdc1591f | |||
bd36764b4d | |||
473bf38753 | |||
f7747e4d4f | |||
e8dc2acfca | |||
cf734999fb | |||
c9c3283540 | |||
d2a8cdfd7c | |||
3e85ac8131 | |||
5f83d9a5c8 | |||
ac20bf2000 | |||
3561082aba | |||
e34c330f66 | |||
7655e09d00 | |||
be069fb8ae | |||
a30166a547 | |||
0f9c6aef99 | |||
332d55f7f6 | |||
98d7024288 | |||
82564772dc | |||
33c2a38ff7 | |||
52fdd24467 | |||
2319cd9c40 | |||
3b4319a87c | |||
20176d0395 | |||
762a3f89a9 | |||
822c2666f5 |
14
NEWS
14
NEWS
@ -1,3 +1,17 @@
|
||||
3.29.2
|
||||
======
|
||||
* Fix size change animations on wayland [Georges; #780292]
|
||||
* Handle touch events on server-side titlebars [Carlos; #770185]
|
||||
* Misc. bug fixes [Florian, Olivier, Jonas, Georges; #134, #124, !96, #138,
|
||||
!102, #781471, #150]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Florian Müllner,
|
||||
Georges Basile Stavracas Neto, Marco Trevisan (Treviño), Daniel van Vugt
|
||||
|
||||
Translators:
|
||||
Daniel Șerbănescu [ro], Marcos Lans [gl], Dz Chen [zh_CN]
|
||||
|
||||
3.29.1
|
||||
======
|
||||
* Fix various input-method regressions [Carlos, Olivier; #65, #74, #66, #112]
|
||||
|
@ -692,7 +692,7 @@ Cally_@LIBMUTTER_API_VERSION@_gir_CFLAGS = $(AM_CPPFLAGS) $(CLUTTER_CFLAGS)
|
||||
Cally_@LIBMUTTER_API_VERSION@_gir_SCANNERFLAGS = \
|
||||
--warn-all \
|
||||
--c-include='cally/cally.h' \
|
||||
--pkg-export=mutter-cally-@LIBMUTTER_API_VERSION@ \
|
||||
--pkg-export=mutter-clutter-@LIBMUTTER_API_VERSION@ \
|
||||
--include-uninstalled=$(top_builddir)/clutter/Clutter-@LIBMUTTER_API_VERSION@.gir
|
||||
|
||||
INTROSPECTION_GIRS += Cally-@LIBMUTTER_API_VERSION@.gir
|
||||
|
@ -2821,7 +2821,7 @@ _clutter_actor_fully_transform_vertices (ClutterActor *self,
|
||||
/* Note: we pass NULL as the ancestor because we don't just want the modelview
|
||||
* that gets us to stage coordinates, we want to go all the way to eye
|
||||
* coordinates */
|
||||
_clutter_actor_apply_relative_transformation_matrix (self, NULL, &modelview);
|
||||
_clutter_actor_get_relative_transformation_matrix (self, NULL, &modelview);
|
||||
|
||||
/* Fetch the projection and viewport */
|
||||
_clutter_stage_get_projection_matrix (CLUTTER_STAGE (stage), &projection);
|
||||
|
@ -793,10 +793,12 @@ evdev_add_device (ClutterDeviceManagerEvdev *manager_evdev,
|
||||
if (priv->main_seat->libinput_seat == NULL)
|
||||
seat = priv->main_seat;
|
||||
else
|
||||
seat = clutter_seat_evdev_new (manager_evdev);
|
||||
{
|
||||
seat = clutter_seat_evdev_new (manager_evdev);
|
||||
priv->seats = g_slist_append (priv->seats, seat);
|
||||
}
|
||||
|
||||
clutter_seat_evdev_set_libinput_seat (seat, libinput_seat);
|
||||
priv->seats = g_slist_append (priv->seats, seat);
|
||||
}
|
||||
|
||||
device = _clutter_input_device_evdev_new (manager, seat, libinput_device);
|
||||
@ -919,7 +921,6 @@ clutter_device_manager_evdev_get_device (ClutterDeviceManager *manager,
|
||||
ClutterDeviceManagerEvdev *manager_evdev;
|
||||
ClutterDeviceManagerEvdevPrivate *priv;
|
||||
GSList *l;
|
||||
GSList *device_it;
|
||||
|
||||
manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (manager);
|
||||
priv = manager_evdev->priv;
|
||||
@ -927,14 +928,10 @@ clutter_device_manager_evdev_get_device (ClutterDeviceManager *manager,
|
||||
for (l = priv->seats; l; l = l->next)
|
||||
{
|
||||
ClutterSeatEvdev *seat = l->data;
|
||||
ClutterInputDevice *device = clutter_seat_evdev_get_device (seat, id);
|
||||
|
||||
for (device_it = seat->devices; device_it; device_it = device_it->next)
|
||||
{
|
||||
ClutterInputDevice *device = device_it->data;
|
||||
|
||||
if (clutter_input_device_get_device_id (device) == id)
|
||||
return device;
|
||||
}
|
||||
if (device)
|
||||
return device;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@ -1967,6 +1964,7 @@ clutter_device_manager_evdev_constructed (GObject *gobject)
|
||||
xkb_context_unref (ctx);
|
||||
|
||||
priv->main_seat = clutter_seat_evdev_new (manager_evdev);
|
||||
priv->seats = g_slist_append (priv->seats, priv->main_seat);
|
||||
|
||||
dispatch_libinput (manager_evdev);
|
||||
|
||||
|
@ -858,6 +858,24 @@ clutter_seat_evdev_free (ClutterSeatEvdev *seat)
|
||||
g_free (seat);
|
||||
}
|
||||
|
||||
ClutterInputDevice *
|
||||
clutter_seat_evdev_get_device (ClutterSeatEvdev *seat,
|
||||
gint id)
|
||||
{
|
||||
ClutterInputDevice *device;
|
||||
GSList *l;
|
||||
|
||||
for (l = seat->devices; l; l = l->next)
|
||||
{
|
||||
device = l->data;
|
||||
|
||||
if (clutter_input_device_get_device_id (device) == id)
|
||||
return device;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
clutter_seat_evdev_set_stage (ClutterSeatEvdev *seat,
|
||||
ClutterStage *stage)
|
||||
|
@ -139,6 +139,9 @@ void clutter_seat_evdev_set_libinput_seat (ClutterSeatEvdev *seat,
|
||||
|
||||
void clutter_seat_evdev_sync_leds (ClutterSeatEvdev *seat);
|
||||
|
||||
ClutterInputDevice * clutter_seat_evdev_get_device (ClutterSeatEvdev *seat,
|
||||
gint id);
|
||||
|
||||
ClutterTouchState * clutter_seat_evdev_acquire_touch_state (ClutterSeatEvdev *seat,
|
||||
int device_slot);
|
||||
|
||||
|
@ -110,7 +110,8 @@ clutter_input_device_xi2_finalize (GObject *object)
|
||||
if (device_xi2->wacom_device)
|
||||
libwacom_destroy (device_xi2->wacom_device);
|
||||
|
||||
g_array_unref (device_xi2->group_modes);
|
||||
if (device_xi2->group_modes)
|
||||
g_array_unref (device_xi2->group_modes);
|
||||
#endif
|
||||
|
||||
G_OBJECT_CLASS (clutter_input_device_xi2_parent_class)->finalize (object);
|
||||
|
@ -2,7 +2,7 @@ AC_PREREQ(2.62)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [29])
|
||||
m4_define([mutter_micro_version], [1])
|
||||
m4_define([mutter_micro_version], [2])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
@ -270,13 +270,10 @@ fi
|
||||
|
||||
PKG_CHECK_MODULES(SYSTEMD, [libsystemd], [have_systemd=yes], [have_systemd=no])
|
||||
|
||||
if test x$have_systemd = xyes; then
|
||||
if test x$have_systemd = xyes -o -z "$logind_provider"; then
|
||||
logind_provider="libsystemd"
|
||||
fi
|
||||
|
||||
AS_IF([test -z "$logind_provider"],
|
||||
AC_MSG_ERROR([Could not find either systemd or elogind as logind provider])])
|
||||
|
||||
MUTTER_NATIVE_BACKEND_MODULES="libdrm $logind_provider libinput >= 1.4 gudev-1.0 gbm >= 10.3"
|
||||
|
||||
AC_ARG_ENABLE(native-backend,
|
||||
|
@ -120,10 +120,6 @@
|
||||
framebuffers instead of window content,
|
||||
to manage HiDPI monitors. Does not
|
||||
require a restart.
|
||||
• “remote-desktop” — enables remote desktop support. To support
|
||||
remote desktop with screen sharing,
|
||||
“screen-cast” must also be enabled.
|
||||
• “screen-cast” — enables screen cast support.
|
||||
</description>
|
||||
</key>
|
||||
|
||||
|
12
po/gl.po
12
po/gl.po
@ -14,16 +14,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gl\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-03-01 10:47+0000\n"
|
||||
"PO-Revision-Date: 2018-03-03 14:18+0200\n"
|
||||
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
|
||||
"POT-Creation-Date: 2018-03-03 13:19+0000\n"
|
||||
"PO-Revision-Date: 2018-05-07 19:37+0200\n"
|
||||
"Last-Translator: marcos <marcoslansgarza@gmail.com>\n"
|
||||
"Language-Team: Galician\n"
|
||||
"Language: gl\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: Virtaal 0.7.1\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
@ -100,7 +100,7 @@ msgstr "Cambia á xanela anterior dun aplicativo"
|
||||
|
||||
#: data/50-mutter-navigation.xml:70
|
||||
msgid "Switch system controls"
|
||||
msgstr "Cambiar entre os controles do sistema"
|
||||
msgstr "Cambiar entre os controis do sistema"
|
||||
|
||||
#: data/50-mutter-navigation.xml:75
|
||||
msgid "Switch to previous system control"
|
||||
@ -124,7 +124,7 @@ msgstr "Cambia directamente á xanela anterior do aplicativo"
|
||||
|
||||
#: data/50-mutter-navigation.xml:97
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Cambiar entre os controles do sistema directamente"
|
||||
msgstr "Cambiar entre os controis do sistema directamente"
|
||||
|
||||
#: data/50-mutter-navigation.xml:102
|
||||
msgid "Switch directly to previous system control"
|
||||
|
554
po/ro.po
554
po/ro.po
@ -4,14 +4,13 @@
|
||||
# Mugurel Tudor <mugurelu@gnome.ro>, 2002-2004, 2005, 2006, 2007.
|
||||
# Adi Roiban https://launchpad.net/~adiroiban, 2008, 2009
|
||||
# Lucian Adrian Grijincu <lucian.grijincu@gmail.com>, 2011.
|
||||
# Daniel Șerbănescu <daniel [at] serbanescu [dot] dk>, 2015.
|
||||
# Daniel Șerbănescu <daniel [at] serbanescu [dot] dk>, 2015, 2018.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.HEAD.ro\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&"
|
||||
"keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2015-10-21 11:43+0000\n"
|
||||
"PO-Revision-Date: 2015-10-22 19:10+0200\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-04-26 07:32+0000\n"
|
||||
"PO-Revision-Date: 2018-04-30 07:54+0200\n"
|
||||
"Last-Translator: Daniel Șerbănescu <daniel [at] serbanescu [dot] dk>\n"
|
||||
"Language-Team: Gnome Romanian Translation Team\n"
|
||||
"Language: ro\n"
|
||||
@ -23,272 +22,256 @@ msgstr ""
|
||||
"X-Generator: Virtaal 0.7.1\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:1
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
msgstr "Navigare"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:2
|
||||
#: data/50-mutter-navigation.xml:9
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "Mută fereastra pe spațiul de lucru 1"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:3
|
||||
#: data/50-mutter-navigation.xml:12
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "Mută fereastra pe spațiul de lucru 2"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:4
|
||||
#: data/50-mutter-navigation.xml:15
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "Mută fereastra pe spațiul de lucru 3"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:5
|
||||
#: data/50-mutter-navigation.xml:18
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "Mută fereastra pe spațiul de lucru 4"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:6
|
||||
#: data/50-mutter-navigation.xml:21
|
||||
msgid "Move window to last workspace"
|
||||
msgstr "Mută fereastra pe spațiul de lucru anterior"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Mută fereastra pe spațiul de lucru de la stânga"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Mută fereastra pe spațiul de lucru de la dreapta"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:9
|
||||
#: data/50-mutter-navigation.xml:24
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Mută fereastra pe spațiul de lucru de mai sus"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:10
|
||||
#: data/50-mutter-navigation.xml:27
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Mută fereastra pe spațiul de lucru de mai jos"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:11
|
||||
#: data/50-mutter-navigation.xml:30
|
||||
msgid "Move window one monitor to the left"
|
||||
msgstr "Mută fereastra cu un monitor la stânga"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:12
|
||||
#: data/50-mutter-navigation.xml:33
|
||||
msgid "Move window one monitor to the right"
|
||||
msgstr "Mută fereastra un monitor la dreapta"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:13
|
||||
#: data/50-mutter-navigation.xml:36
|
||||
msgid "Move window one monitor up"
|
||||
msgstr "Mută fereastra cu un monitor mai sus"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:14
|
||||
#: data/50-mutter-navigation.xml:39
|
||||
msgid "Move window one monitor down"
|
||||
msgstr "Mută fereastra cu un monitor mai jos"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:15
|
||||
#: data/50-mutter-navigation.xml:43
|
||||
msgid "Switch applications"
|
||||
msgstr "Comută aplicațiile"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:16
|
||||
#: data/50-mutter-navigation.xml:48
|
||||
msgid "Switch to previous application"
|
||||
msgstr "Schimbă la aplicația anterioară"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:17
|
||||
#: data/50-mutter-navigation.xml:52
|
||||
msgid "Switch windows"
|
||||
msgstr "Schimbă ferestre"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:18
|
||||
#: data/50-mutter-navigation.xml:57
|
||||
msgid "Switch to previous window"
|
||||
msgstr "Schimbă la fereastra anterioară"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:19
|
||||
#: data/50-mutter-navigation.xml:61
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Schimbă ferestrele unei aplicații"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:20
|
||||
#: data/50-mutter-navigation.xml:66
|
||||
msgid "Switch to previous window of an application"
|
||||
msgstr "Schimbă la fereastra anterioară a unei aplicații"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:21
|
||||
#: data/50-mutter-navigation.xml:70
|
||||
msgid "Switch system controls"
|
||||
msgstr "Schimbă comenzile de sistem"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:22
|
||||
#: data/50-mutter-navigation.xml:75
|
||||
msgid "Switch to previous system control"
|
||||
msgstr "Schimbă la comanda de control anterioară"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:23
|
||||
#: data/50-mutter-navigation.xml:79
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Schimbă ferestrele în mod direct"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:24
|
||||
#: data/50-mutter-navigation.xml:84
|
||||
msgid "Switch directly to previous window"
|
||||
msgstr "Schimbă la fereastra anterioară în mod direct"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:25
|
||||
#: data/50-mutter-navigation.xml:88
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Schimbă în mod direct ferestrele uneui aplicații "
|
||||
msgstr "Comută direct ferestrele unei aplicații"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:26
|
||||
#: data/50-mutter-navigation.xml:93
|
||||
msgid "Switch directly to previous window of an app"
|
||||
msgstr "Schimbă în mod direct la fereastra anterioară a unei aplicații"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:27
|
||||
#: data/50-mutter-navigation.xml:97
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Schimbă comenzile de sistem în mod direct"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:28
|
||||
#: data/50-mutter-navigation.xml:102
|
||||
msgid "Switch directly to previous system control"
|
||||
msgstr "Schimbă în mod direct la o comandă de sistem anterioară"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:29
|
||||
#: data/50-mutter-navigation.xml:105
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Ascunde toate ferestrele normale "
|
||||
msgstr "Ascunde toate ferestrele normale"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:30
|
||||
#: data/50-mutter-navigation.xml:108
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Comută la spațiul de lucru 1"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:31
|
||||
#: data/50-mutter-navigation.xml:111
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Comută la spațiul de lucru 2"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:32
|
||||
#: data/50-mutter-navigation.xml:114
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Comută la spațiul de lucru 3"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:33
|
||||
#: data/50-mutter-navigation.xml:117
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Comută la spațiul de lucru 4"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:34
|
||||
#: data/50-mutter-navigation.xml:120
|
||||
msgid "Switch to last workspace"
|
||||
msgstr "Comută la ultimul spațiu de lucru "
|
||||
msgstr "Comută la ultimul spațiu de lucru"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:35
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Mută pe spațiul de lucru din stânga"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:36
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Mută pe spațiul de lucru din dreapta"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:37
|
||||
#: data/50-mutter-navigation.xml:123
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Mută pe spațiul de lucru deasupra"
|
||||
|
||||
#: ../data/50-mutter-navigation.xml.in.h:38
|
||||
#: data/50-mutter-navigation.xml:126
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Mută pe spațiul de lucru de jos"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:1
|
||||
#: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6
|
||||
msgid "System"
|
||||
msgstr "Sistem"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:2
|
||||
#: data/50-mutter-system.xml:8
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "Arată prompterul de comandă al comenzii run (rulează)"
|
||||
|
||||
#: ../data/50-mutter-system.xml.in.h:3
|
||||
#: data/50-mutter-system.xml:10
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Arată prezentarea generală a activităților"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:1
|
||||
#: data/50-mutter-wayland.xml:8
|
||||
msgid "Restore the keyboard shortcuts"
|
||||
msgstr "Restaurează scurtăturile de tastatură"
|
||||
|
||||
#: data/50-mutter-windows.xml:6
|
||||
msgid "Windows"
|
||||
msgstr "Ferestre"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:2
|
||||
#: data/50-mutter-windows.xml:8
|
||||
msgid "Activate the window menu"
|
||||
msgstr "Activează meniul ferestrei"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:3
|
||||
#: data/50-mutter-windows.xml:10
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "Comută modul pe tot ecranul"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:4
|
||||
#: data/50-mutter-windows.xml:12
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "Comută starea de maximizare"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:5
|
||||
#: data/50-mutter-windows.xml:14
|
||||
msgid "Maximize window"
|
||||
msgstr "Maximizează fereastra"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:6
|
||||
#: data/50-mutter-windows.xml:16
|
||||
msgid "Restore window"
|
||||
msgstr "Restabilește fereastra"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:7
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Comută starea de umbrire"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:8
|
||||
#: data/50-mutter-windows.xml:18
|
||||
msgid "Close window"
|
||||
msgstr "Închide fereastra"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:9
|
||||
#: data/50-mutter-windows.xml:20
|
||||
msgid "Hide window"
|
||||
msgstr "Ascunde fereastra"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:10
|
||||
#: data/50-mutter-windows.xml:22
|
||||
msgid "Move window"
|
||||
msgstr "Mută fereastra"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:11
|
||||
#: data/50-mutter-windows.xml:24
|
||||
msgid "Resize window"
|
||||
msgstr "Redimensionează fereastra"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:12
|
||||
#: data/50-mutter-windows.xml:27
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "Comută fereastra pe toate spațiile de lucru sau doar pe unul"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:13
|
||||
#: data/50-mutter-windows.xml:29
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Ridică fereastra dacă este acoperită, altfel, coboar-o"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:14
|
||||
#: data/50-mutter-windows.xml:31
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Ridică fereastra deasupra celorlalte ferestre"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:15
|
||||
#: data/50-mutter-windows.xml:33
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Coboară fereastra sub alte ferestre"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:16
|
||||
#: data/50-mutter-windows.xml:35
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Maximizează fereastra pe verticală"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:17
|
||||
#: data/50-mutter-windows.xml:37
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Maximizează fereastra pe orizontală"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:18
|
||||
#: data/50-mutter-windows.xml:41
|
||||
msgid "View split on left"
|
||||
msgstr "Împarte în stânga"
|
||||
|
||||
#: ../data/50-mutter-windows.xml.in.h:19
|
||||
#: data/50-mutter-windows.xml:45
|
||||
msgid "View split on right"
|
||||
msgstr "Împarte în dreapta"
|
||||
|
||||
#: ../data/mutter.desktop.in.h:1
|
||||
#: data/mutter.desktop.in:4
|
||||
msgid "Mutter"
|
||||
msgstr "Mutter"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:1
|
||||
#: data/org.gnome.mutter.gschema.xml.in:7
|
||||
msgid "Modifier to use for extended window management operations"
|
||||
msgstr ""
|
||||
"Modificatorul folosit pentru operațiile extinse de management al ferestrelor"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
|
||||
#: data/org.gnome.mutter.gschema.xml.in:8
|
||||
msgid ""
|
||||
"This key will initiate the \"overlay\", which is a combination window "
|
||||
"overview and application launching system. The default is intended to be the "
|
||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
|
||||
"default or set to the empty string."
|
||||
"This key will initiate the “overlay”, which is a combination window overview "
|
||||
"and application launching system. The default is intended to be the “Windows "
|
||||
"key” on PC hardware. It’s expected that this binding either the default or "
|
||||
"set to the empty string."
|
||||
msgstr ""
|
||||
"Această cheie va iniția „overlay”-ul, care este o combinație între o privire "
|
||||
"de ansamblu a ferestrelor și un sistemul de lansare de aplicații. Implicit "
|
||||
"este testa „Windows” pe hardware PC. Este de așteptat ca această cheie să "
|
||||
"fie sau implicit sau setat la șirul vid."
|
||||
"Această cheie va iniția „suprapunerea”, care este o combinație între o "
|
||||
"privire de ansamblu a ferestrelor și un sistem de lansare de aplicații. "
|
||||
"Implicit este tasta „Windows” pe hardware PC. Este de așteptat ca această "
|
||||
"legătură să fie ori stabilită la implicit sau la șirul vid."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
|
||||
#: data/org.gnome.mutter.gschema.xml.in:20
|
||||
msgid "Attach modal dialogs"
|
||||
msgstr "Atașează dialogurile modale"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
|
||||
#: data/org.gnome.mutter.gschema.xml.in:21
|
||||
msgid ""
|
||||
"When true, instead of having independent titlebars, modal dialogs appear "
|
||||
"attached to the titlebar of the parent window and are moved together with "
|
||||
@ -298,13 +281,12 @@ msgstr ""
|
||||
"modale apar atașate la bara de titlu a ferestrei părinte și sunt mutate "
|
||||
"împreună cu fereastra părinte."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
|
||||
#, fuzzy
|
||||
#: data/org.gnome.mutter.gschema.xml.in:30
|
||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||
msgstr ""
|
||||
"Activează mozaicul lateral la plasarea ferestrelor pe marginile ecranului"
|
||||
"Activează mozaicul de margine la plasarea ferestrelor pe marginile ecranului"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
|
||||
#: data/org.gnome.mutter.gschema.xml.in:31
|
||||
msgid ""
|
||||
"If enabled, dropping windows on vertical screen edges maximizes them "
|
||||
"vertically and resizes them horizontally to cover half of the available "
|
||||
@ -315,25 +297,25 @@ msgstr ""
|
||||
"pentru a acoperi jumătate din suprafața disponibilă. Plasarea ferestrelor pe "
|
||||
"marginea de sus a ecranului le maximizează complet."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
|
||||
#: data/org.gnome.mutter.gschema.xml.in:40
|
||||
msgid "Workspaces are managed dynamically"
|
||||
msgstr "Spațiile de lucru sunt gestionate în mod dinamic"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
|
||||
#: data/org.gnome.mutter.gschema.xml.in:41
|
||||
msgid ""
|
||||
"Determines whether workspaces are managed dynamically or whether there's a "
|
||||
"Determines whether workspaces are managed dynamically or whether there’s a "
|
||||
"static number of workspaces (determined by the num-workspaces key in org."
|
||||
"gnome.desktop.wm.preferences)."
|
||||
msgstr ""
|
||||
"Determină dacă spațiile de lucru sunt gestionate în mod dinamic sau dacă "
|
||||
"există un număr static de spații de lucru (determinată de cheia „num-"
|
||||
"workspaces” din ”org.gnome.desktop.wm.preferences”)"
|
||||
"Determină dacă spațiile de lucru sunt administrate dinamic sau dacă există "
|
||||
"un număr static de spații de lucru (determinat de cheia num-workspaces din "
|
||||
"org.gnome.desktop.wm.preferences)"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
|
||||
#: data/org.gnome.mutter.gschema.xml.in:50
|
||||
msgid "Workspaces only on primary"
|
||||
msgstr "Spații de lucru doar pe ecranul principal"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
|
||||
#: data/org.gnome.mutter.gschema.xml.in:51
|
||||
msgid ""
|
||||
"Determines whether workspace switching should happen for windows on all "
|
||||
"monitors or only for windows on the primary monitor."
|
||||
@ -342,11 +324,11 @@ msgstr ""
|
||||
"ferestrele de pe toate monitoarele sau doar pentru ferestrele de pe "
|
||||
"monitorul principal."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
|
||||
#: data/org.gnome.mutter.gschema.xml.in:59
|
||||
msgid "No tab popup"
|
||||
msgstr "Fără popup pentru tab"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
|
||||
#: data/org.gnome.mutter.gschema.xml.in:60
|
||||
msgid ""
|
||||
"Determines whether the use of popup and highlight frame should be disabled "
|
||||
"for window cycling."
|
||||
@ -354,42 +336,40 @@ msgstr ""
|
||||
"Determină dacă utilizarea unui popup sau a unui cadrul evidențiat ar trebui "
|
||||
"să fie dezactivată pentru rotirea ferestrelor."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
|
||||
#: data/org.gnome.mutter.gschema.xml.in:68
|
||||
msgid "Delay focus changes until the pointer stops moving"
|
||||
msgstr ""
|
||||
"Întârzie schimbările de focalizare până când cursorul încetează să se miște"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: data/org.gnome.mutter.gschema.xml.in:69
|
||||
msgid ""
|
||||
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
|
||||
"the focus will not be changed immediately when entering a window, but only "
|
||||
"after the pointer stops moving."
|
||||
"If set to true, and the focus mode is either “sloppy” or “mouse” then the "
|
||||
"focus will not be changed immediately when entering a window, but only after "
|
||||
"the pointer stops moving."
|
||||
msgstr ""
|
||||
"Dacă este activat iar modul de focalizare este „alunecos” sau „maus”, "
|
||||
"focalizarea nu va fi schimbată imediat după intrarea în câmpul unei "
|
||||
"ferestre, ci doar după ce pointerul încetează să se miște."
|
||||
"Dacă este stabilit ca adevărat, iar modul de focalizare este ori „neglijent” "
|
||||
"ori „maus”, atunci focalizarea nu va fi schimbată imediat la intrarea într-o "
|
||||
"fereastră, ci doar după ce indicatorul nu se mai mișcă."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#, fuzzy
|
||||
#: data/org.gnome.mutter.gschema.xml.in:79
|
||||
msgid "Draggable border width"
|
||||
msgstr "Lățimea margini ce poate fi acționată"
|
||||
msgstr "Lățimea marginii ce poate fi plasată"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#, fuzzy
|
||||
#: data/org.gnome.mutter.gschema.xml.in:80
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"The amount of total draggable borders. If the theme’s visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr ""
|
||||
"Numărul marginilor ce pot fi acționate. Dacă marginile vizibile ale temei "
|
||||
"sunt insuficiente vor fi adăugate margini invizibile pentru a completa "
|
||||
"aceast număr."
|
||||
"Numărul total de margini ce pot fi plasate. Dacă marginile vizibile ale "
|
||||
"temei nu sunt suficiente, vor fi adăugate margini invizibile pentru a "
|
||||
"respecta această valoare."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:17
|
||||
#: data/org.gnome.mutter.gschema.xml.in:89
|
||||
msgid "Auto maximize nearly monitor sized windows"
|
||||
msgstr ""
|
||||
"Maximizează automat ferestrele de dimensiune apropiată de cea a monitorului"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
|
||||
#: data/org.gnome.mutter.gschema.xml.in:90
|
||||
msgid ""
|
||||
"If enabled, new windows that are initially the size of the monitor "
|
||||
"automatically get maximized."
|
||||
@ -397,11 +377,11 @@ msgstr ""
|
||||
"Dacă este activată, ferestrele noi care sunt inițial de mărimea monitorului "
|
||||
"sunt maximizate în mod automat."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:19
|
||||
#: data/org.gnome.mutter.gschema.xml.in:98
|
||||
msgid "Place new windows in the center"
|
||||
msgstr "Plasează ferestre noi în centru"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
|
||||
#: data/org.gnome.mutter.gschema.xml.in:99
|
||||
msgid ""
|
||||
"When true, the new windows will always be put in the center of the active "
|
||||
"screen of the monitor."
|
||||
@ -409,107 +389,262 @@ msgstr ""
|
||||
"Când este adevărat, ferestrele noi vor fi plasate în centrul ecranului activ "
|
||||
"al monitorului."
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
|
||||
#: data/org.gnome.mutter.gschema.xml.in:107
|
||||
msgid "Enable experimental features"
|
||||
msgstr "Activează funcționalitățile experimentale"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:108
|
||||
msgid ""
|
||||
"To enable experimental features, add the feature keyword to the list. "
|
||||
"Whether the feature requires restarting the compositor depends on the given "
|
||||
"feature. Any experimental feature is not required to still be available, or "
|
||||
"configurable. Don’t expect adding anything in this setting to be future "
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
msgstr ""
|
||||
"Pentru a activa funcționalitățile experimentale, adăugați cuvântul cheie al "
|
||||
"funcționalității la listă. Dacă funcționalitatea necesită sau nu repornirea "
|
||||
"compunătorului depinde de funcționalitatea dată. Nu este necesar ca "
|
||||
"funcționalitatea experimentală să fie încă disponibilă, sau configurabilă. "
|
||||
"Nu vă așteptați să adăugați ceva la această configurare care va rezista "
|
||||
"timpului. Cuvintele cheie posibile în mod curent: • “scale-monitor-"
|
||||
"framebuffer” — face ca mutter să treacă implicit la aranjarea monitoarelor "
|
||||
"logice într-un spațiu logic de coordonate pixel, în timpul scalării de "
|
||||
"framebuffer-uri de monitor în locul conținutului ferestrei, pentru a "
|
||||
"gestiona monitoare HiDPI. Nu necesită o repornire. • “remote-desktop” — "
|
||||
"activează suportul pentru desktop la distanță. Pentru a suporta desktop la "
|
||||
"distanță cu partajarea ecranului, trebuie să fie activat și „screen-cast”. • "
|
||||
"“screen-cast” — activează suportul pentru înregistrarea ecranului."
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Selectează fereastra din popup-ul tabului"
|
||||
|
||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:22
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Elimină popup-ul pentru tab"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "Comută configurațiile de monitor"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "Rotește configurarea de monitor integrat"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
|
||||
msgid "Switch to VT 1"
|
||||
msgstr "Comută la terminalul virtual 1"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:10
|
||||
msgid "Switch to VT 2"
|
||||
msgstr "Comută la terminalul virtual 2"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:14
|
||||
msgid "Switch to VT 3"
|
||||
msgstr "Comută la terminalul virtual 3"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:18
|
||||
msgid "Switch to VT 4"
|
||||
msgstr "Comută la terminalul virtual 4"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:22
|
||||
msgid "Switch to VT 5"
|
||||
msgstr "Comută la terminalul virtual 5"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:26
|
||||
msgid "Switch to VT 6"
|
||||
msgstr "Comută la terminalul virtual 6"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:30
|
||||
msgid "Switch to VT 7"
|
||||
msgstr "Comută la terminalul virtual 7"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:34
|
||||
msgid "Switch to VT 8"
|
||||
msgstr "Comută la terminalul virtual 8"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:38
|
||||
msgid "Switch to VT 9"
|
||||
msgstr "Comută la terminalul virtual 9"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:42
|
||||
msgid "Switch to VT 10"
|
||||
msgstr "Comută la terminalul virtual 10"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:46
|
||||
msgid "Switch to VT 11"
|
||||
msgstr "Comută la terminalul virtual 11"
|
||||
|
||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:50
|
||||
msgid "Switch to VT 12"
|
||||
msgstr "Comută la terminalul virtual 12"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:500
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
|
||||
msgid "Re-enable shortcuts"
|
||||
msgstr "Reactivează scurtăturile"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "Permite capturi de tastatură cu Xwayland"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:65
|
||||
msgid ""
|
||||
"Allow keyboard grabs issued by X11 applications running in Xwayland to be "
|
||||
"taken into account. For a X11 grab to be taken into account under Wayland, "
|
||||
"the client must also either send a specific X11 ClientMessage to the root "
|
||||
"window or be among the applications white-listed in key “xwayland-grab-"
|
||||
"access-rules”."
|
||||
msgstr ""
|
||||
"Permite capturile de tastatură emise de aplicațiile X11 care rulează în "
|
||||
"Xwayland să fie luate în considerare. Pentru ca o captură X11 să fie luată "
|
||||
"în considerare în Wayland, clientul trebuie ori să trimită un mesaj specific "
|
||||
"ClientMessage X11 la fereastra root ori să se numere printre aplicațiile "
|
||||
"permise în cheia „xwayland-grab-access-rules”."
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr "Aplicațiile Xwayland sunt permise de a emite capturi de tastatură"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
msgid ""
|
||||
"List the resource names or resource class of X11 windows either allowed or "
|
||||
"not allowed to issue X11 keyboard grabs under Xwayland. The resource name or "
|
||||
"resource class of a given X11 window can be obtained using the command "
|
||||
"“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. "
|
||||
"Values starting with “!” are blacklisted, which has precedence over the "
|
||||
"whitelist, to revoke applications from the default system list. The default "
|
||||
"system list includes the following applications: "
|
||||
"“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by "
|
||||
"using the specific keyboard shortcut defined by the keybinding key “restore-"
|
||||
"shortcuts”."
|
||||
msgstr ""
|
||||
"Listează numele resurselor sau clasa resurselor ale ferestrelor X11 permise "
|
||||
"sau nepermise să emită capturi de tastatură X11 în Xwayland. Numele resursei "
|
||||
"sau clasa resursei a unei ferestre X11 date pot fi obținute utilizând "
|
||||
"comanda „xprop WM_CLASS*. Metacaracterele „*” și jokerii „?” în valori sunt "
|
||||
"suportați. Valorile care încep cu „!” sunt adăugate în lista de interziceri, "
|
||||
"care are prioritate peste lista de permisiuni, pentru a revoca aplicații din "
|
||||
"lista de sistem implicită. Lista de sistem implicită include următoarele "
|
||||
"aplicații: „@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Utilizatorii pot să "
|
||||
"întrerupă o captură existentă prin utilizarea scurtăturii de tastatură "
|
||||
"specifice definite de tasta de stabilire a combinațiilor de taste „restore-"
|
||||
"shortcuts”."
|
||||
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2325
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "Comutator de mod (grupul %d)"
|
||||
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2348
|
||||
msgid "Switch monitor"
|
||||
msgstr "Comută monitorul"
|
||||
|
||||
#: src/backends/meta-input-settings.c:2350
|
||||
msgid "Show on-screen help"
|
||||
msgstr "Arată ajutorul virtual"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:903
|
||||
msgid "Built-in display"
|
||||
msgstr "Afișaj integrat"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:526
|
||||
#: src/backends/meta-monitor-manager.c:926
|
||||
msgid "Unknown"
|
||||
msgstr "Necunoscut"
|
||||
|
||||
#: ../src/backends/meta-monitor-manager.c:528
|
||||
#: src/backends/meta-monitor-manager.c:928
|
||||
msgid "Unknown Display"
|
||||
msgstr "Afișaj necunoscut"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: ../src/backends/meta-monitor-manager.c:536
|
||||
#: src/backends/meta-monitor-manager.c:936
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:456
|
||||
#: src/compositor/compositor.c:481
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr ""
|
||||
"Un alt administrator de ferestre compozit rulează deja pe ecranul %i pe "
|
||||
"Un alt administrator de ferestre de compunere rulează deja pe ecranul %i pe "
|
||||
"afișajul „%s”."
|
||||
|
||||
#: ../src/core/bell.c:185
|
||||
#: src/core/bell.c:194
|
||||
msgid "Bell event"
|
||||
msgstr "Eveniment sonor"
|
||||
|
||||
#: ../src/core/delete.c:127
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "Nu s-a putut deschide afișajul sistemului de ferestre X „%s”\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Dezactivează conexiunea la administratorul de sesiune"
|
||||
|
||||
#: src/core/main.c:196
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Înlocuiește administratorul de ferestre curent"
|
||||
|
||||
#: src/core/main.c:202
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specifică ID-ul administrării de sesiune"
|
||||
|
||||
#: src/core/main.c:207
|
||||
msgid "X Display to use"
|
||||
msgstr "Ecranul X ce va fi folosit"
|
||||
|
||||
#: src/core/main.c:213
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inițializează sesiunea din fișierul salvat"
|
||||
|
||||
#: src/core/main.c:219
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Realizează apelurile X sincron"
|
||||
|
||||
#: src/core/main.c:226
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Rulează ca un compunător wayland"
|
||||
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "Rulează ca un compunător imbricat"
|
||||
|
||||
#: src/core/main.c:240
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Rulează ca server de afișare și nu ca server imbricat"
|
||||
|
||||
#: src/core/main.c:246
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "Rulează cu backend X11"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "„%s” nu răspunde."
|
||||
|
||||
#: ../src/core/delete.c:129
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
msgid "Application is not responding."
|
||||
msgstr "Aplicația nu răspunde."
|
||||
|
||||
#: ../src/core/delete.c:134
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
@ -517,112 +652,95 @@ msgstr ""
|
||||
"Puteți alege între a aștepta pentru câteva secunde ca aplicația să continue "
|
||||
"sau a forța terminarea aplicației."
|
||||
|
||||
#: ../src/core/delete.c:141
|
||||
msgid "_Wait"
|
||||
msgstr "_Așteaptă"
|
||||
|
||||
#: ../src/core/delete.c:141
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forțează închiderea"
|
||||
|
||||
#: ../src/core/display.c:563
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Nu s-a putut deschide afișajul X Window System „%s”\n"
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
msgid "_Wait"
|
||||
msgstr "_Așteaptă"
|
||||
|
||||
#: ../src/core/main.c:176
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Dezactivează conexiunea la administratorul de sesiune"
|
||||
|
||||
#: ../src/core/main.c:182
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "Înlocuiește administratorul de ferestre curent"
|
||||
|
||||
#: ../src/core/main.c:188
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specifică ID-ul administrării de sesiune"
|
||||
|
||||
#: ../src/core/main.c:193
|
||||
msgid "X Display to use"
|
||||
msgstr "Ecranul X ce va fi folosit"
|
||||
|
||||
#: ../src/core/main.c:199
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Inițializează sesiunea din fișierul salvat"
|
||||
|
||||
#: ../src/core/main.c:205
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Realizează apelurile X sincron"
|
||||
|
||||
#: ../src/core/main.c:212
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "Rulează ca compozitor wayland"
|
||||
|
||||
#: ../src/core/main.c:220
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "Rulează ca server de afișare și nu ca server imbricat"
|
||||
|
||||
#: ../src/core/mutter.c:39
|
||||
#: src/core/mutter.c:39
|
||||
#, c-format
|
||||
msgid ""
|
||||
"mutter %s\n"
|
||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"This is free software; see the source for copying conditions.\n"
|
||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
|
||||
"PARTICULAR PURPOSE.\n"
|
||||
msgstr ""
|
||||
"mutter %s\n"
|
||||
"Drepturi de autor (C) 2001--%d Havoc Pennington, Red Hat, Inc., și alții\n"
|
||||
"Drepturi de autor (C) 2001-%d Havoc Pennington, Red Hat, Inc., și alții\n"
|
||||
"Acesta este software liber; consultați codul sursă pentru condițiile de "
|
||||
"copiere.\n"
|
||||
"Nu există NICI O garanție; nici pentru COMERCIALIZARE sau UTILIZAREA ÎNTR-UN "
|
||||
"Nu există NICIO garanție; nici pentru COMERCIALIZARE sau UTILIZAREA ÎNTR-UN "
|
||||
"SCOP ANUME.\n"
|
||||
|
||||
#: ../src/core/mutter.c:53
|
||||
#: src/core/mutter.c:53
|
||||
msgid "Print version"
|
||||
msgstr "Afișează versiunea"
|
||||
|
||||
#: ../src/core/mutter.c:59
|
||||
#: src/core/mutter.c:59
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Modul Mutter de utilizat"
|
||||
|
||||
#: ../src/core/prefs.c:2050
|
||||
#: src/core/prefs.c:1997
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Spațiu de lucru %d"
|
||||
|
||||
#: ../src/core/screen.c:526
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display \"%s\" already has a window manager; try using the --replace option "
|
||||
"to replace the current window manager."
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Afișajul „%s” are deja un administrator de ferestre; încercați să folosiți "
|
||||
"Afișajul „%s” are deja un administrator de ferestre; încercați să utilizați "
|
||||
"opțiunea --replace (înlocuiește) pentru a înlocui administratorul de "
|
||||
"ferestre actual."
|
||||
"ferestre curent."
|
||||
|
||||
#: ../src/core/screen.c:608
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Ecranul %d pe afișajul „%s” este invalid\n"
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "Ecranul %d de pe afișajul „%s” nu este valid\n"
|
||||
|
||||
#: ../src/core/util.c:118
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter a fost compilat fără suport pentru modul detaliat\n"
|
||||
|
||||
#: ../src/x11/session.c:1815
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "Comutator de mod: modul %d"
|
||||
|
||||
#: src/x11/session.c:1818
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
"These windows do not support “save current setup” and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
msgstr ""
|
||||
"Aceste ferestre nu suportă „salvează configurarea curentă” și vor trebui "
|
||||
"repornite manual următoarea dată când vă veți autentifica."
|
||||
|
||||
#: ../src/x11/window-props.c:549
|
||||
#: src/x11/window-props.c:559
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (pe %s)"
|
||||
|
||||
#~ msgid "Move window one workspace to the left"
|
||||
#~ msgstr "Mută fereastra pe spațiul de lucru de la stânga"
|
||||
|
||||
#~ msgid "Move window one workspace to the right"
|
||||
#~ msgstr "Mută fereastra pe spațiul de lucru de la dreapta"
|
||||
|
||||
#~ msgid "Move to workspace left"
|
||||
#~ msgstr "Mută pe spațiul de lucru din stânga"
|
||||
|
||||
#~ msgid "Move to workspace right"
|
||||
#~ msgstr "Mută pe spațiul de lucru din dreapta"
|
||||
|
||||
#~ msgid "Toggle shaded state"
|
||||
#~ msgstr "Comută starea de umbrire"
|
||||
|
||||
#~ msgid "Switch to workspace on the left of the current workspace"
|
||||
#~ msgstr "Schimbă cu spațiul de lucru din stânga celui actual"
|
||||
|
||||
|
405
po/zh_CN.po
405
po/zh_CN.po
@ -1,6 +1,6 @@
|
||||
# translation of mutter.po to zh_CN
|
||||
# Simplified Chinese translation of mutter.
|
||||
# Copyright (C) 2002, 2003, 2004, 2009, 2010 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2012-2018 mutter's COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the mutter package.
|
||||
# Sun G11n <gnome_int_l10n@ireland.sun.com>, 2002.
|
||||
# He Qiangqiang <carton@linux.net.cn>, 2002
|
||||
# Xiong Jiang <jxiong@offtopic.org>, 2003
|
||||
@ -11,22 +11,24 @@
|
||||
# Lele Long <schemacs@gmail.com>, 2011.
|
||||
# YunQiang Su <wzssyqa@gmail.com>, 2011, 2012.
|
||||
# Tong Hui <tonghuix@gmail.com>, 2014.
|
||||
# Mandy Wang <wangmychn@gmail.com>, 2017.
|
||||
# Mingcong Bai <jeffbai@aosc.xyz>, 2017.
|
||||
# Dingzhong Chen <wsxy162@gmail.com>, 2017, 2018.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2017-02-03 10:06+0000\n"
|
||||
"PO-Revision-Date: 2017-01-04 21:52+0800\n"
|
||||
"Last-Translator: Mandy Wang <wangmychn@gmail.com>\n"
|
||||
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/mutter/issues\n"
|
||||
"POT-Creation-Date: 2018-02-09 13:01+0000\n"
|
||||
"PO-Revision-Date: 2018-02-16 22:22+0800\n"
|
||||
"Last-Translator: Dingzhong Chen <wsxy162@gmail.com>\n"
|
||||
"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
|
||||
"Language: zh_CN\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 1.8.7.1\n"
|
||||
"X-Generator: Gtranslator 2.91.7\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -53,134 +55,118 @@ msgid "Move window to last workspace"
|
||||
msgstr "将窗口移到最后一个工作区"
|
||||
|
||||
#: data/50-mutter-navigation.xml:24
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "将窗口左移一个工作区"
|
||||
|
||||
#: data/50-mutter-navigation.xml:27
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "将窗口右移一个工作区"
|
||||
|
||||
#: data/50-mutter-navigation.xml:30
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "将窗口上移一个工作区"
|
||||
|
||||
#: data/50-mutter-navigation.xml:33
|
||||
#: data/50-mutter-navigation.xml:27
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "将窗口下移一个工作区"
|
||||
|
||||
#: data/50-mutter-navigation.xml:36
|
||||
#: data/50-mutter-navigation.xml:30
|
||||
msgid "Move window one monitor to the left"
|
||||
msgstr "将窗口左移一个显示器"
|
||||
|
||||
#: data/50-mutter-navigation.xml:39
|
||||
#: data/50-mutter-navigation.xml:33
|
||||
msgid "Move window one monitor to the right"
|
||||
msgstr "将窗口右移一个显示器"
|
||||
|
||||
#: data/50-mutter-navigation.xml:42
|
||||
#: data/50-mutter-navigation.xml:36
|
||||
msgid "Move window one monitor up"
|
||||
msgstr "将窗口上移一个显示器"
|
||||
|
||||
#: data/50-mutter-navigation.xml:45
|
||||
#: data/50-mutter-navigation.xml:39
|
||||
msgid "Move window one monitor down"
|
||||
msgstr "将窗口下移一个显示器"
|
||||
|
||||
#: data/50-mutter-navigation.xml:49
|
||||
#: data/50-mutter-navigation.xml:43
|
||||
msgid "Switch applications"
|
||||
msgstr "切换应用程序"
|
||||
|
||||
#: data/50-mutter-navigation.xml:54
|
||||
#: data/50-mutter-navigation.xml:48
|
||||
msgid "Switch to previous application"
|
||||
msgstr "切换到前一个应用程序"
|
||||
|
||||
#: data/50-mutter-navigation.xml:58
|
||||
#: data/50-mutter-navigation.xml:52
|
||||
msgid "Switch windows"
|
||||
msgstr "切换窗口"
|
||||
|
||||
#: data/50-mutter-navigation.xml:63
|
||||
#: data/50-mutter-navigation.xml:57
|
||||
msgid "Switch to previous window"
|
||||
msgstr "切换到前一个窗口"
|
||||
|
||||
#: data/50-mutter-navigation.xml:67
|
||||
#: data/50-mutter-navigation.xml:61
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "在应用程序的窗口之间切换窗口"
|
||||
|
||||
#: data/50-mutter-navigation.xml:72
|
||||
#: data/50-mutter-navigation.xml:66
|
||||
msgid "Switch to previous window of an application"
|
||||
msgstr "切换到一个应用程序的前一个窗口"
|
||||
|
||||
#: data/50-mutter-navigation.xml:76
|
||||
#: data/50-mutter-navigation.xml:70
|
||||
msgid "Switch system controls"
|
||||
msgstr "切换系统控制"
|
||||
|
||||
#: data/50-mutter-navigation.xml:81
|
||||
#: data/50-mutter-navigation.xml:75
|
||||
msgid "Switch to previous system control"
|
||||
msgstr "切换到前一个系统控制"
|
||||
|
||||
#: data/50-mutter-navigation.xml:85
|
||||
#: data/50-mutter-navigation.xml:79
|
||||
msgid "Switch windows directly"
|
||||
msgstr "直接切换窗口"
|
||||
|
||||
#: data/50-mutter-navigation.xml:90
|
||||
#: data/50-mutter-navigation.xml:84
|
||||
msgid "Switch directly to previous window"
|
||||
msgstr "直接切换到前一个窗口"
|
||||
|
||||
#: data/50-mutter-navigation.xml:94
|
||||
#: data/50-mutter-navigation.xml:88
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "在应用程序窗口间直接移动焦点"
|
||||
|
||||
#: data/50-mutter-navigation.xml:99
|
||||
#: data/50-mutter-navigation.xml:93
|
||||
msgid "Switch directly to previous window of an app"
|
||||
msgstr "直接切换到一个应用程序的前一个窗口"
|
||||
|
||||
#: data/50-mutter-navigation.xml:103
|
||||
#: data/50-mutter-navigation.xml:97
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "直接切换系统控制"
|
||||
|
||||
#: data/50-mutter-navigation.xml:108
|
||||
#: data/50-mutter-navigation.xml:102
|
||||
msgid "Switch directly to previous system control"
|
||||
msgstr "直接切换到前一个系统控制"
|
||||
|
||||
#: data/50-mutter-navigation.xml:111
|
||||
#: data/50-mutter-navigation.xml:105
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "隐藏所有正常窗口"
|
||||
|
||||
#: data/50-mutter-navigation.xml:114
|
||||
#: data/50-mutter-navigation.xml:108
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "切换到工作区 1"
|
||||
|
||||
#: data/50-mutter-navigation.xml:117
|
||||
#: data/50-mutter-navigation.xml:111
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "切换到工作区 2"
|
||||
|
||||
#: data/50-mutter-navigation.xml:120
|
||||
#: data/50-mutter-navigation.xml:114
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "切换到工作区 3"
|
||||
|
||||
#: data/50-mutter-navigation.xml:123
|
||||
#: data/50-mutter-navigation.xml:117
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "切换到工作区 4"
|
||||
|
||||
#: data/50-mutter-navigation.xml:126
|
||||
#: data/50-mutter-navigation.xml:120
|
||||
msgid "Switch to last workspace"
|
||||
msgstr "切换到最后一个工作区"
|
||||
|
||||
#: data/50-mutter-navigation.xml:129
|
||||
msgid "Move to workspace left"
|
||||
msgstr "移动到左侧工作区"
|
||||
|
||||
#: data/50-mutter-navigation.xml:132
|
||||
msgid "Move to workspace right"
|
||||
msgstr "移动到右侧工作区"
|
||||
|
||||
#: data/50-mutter-navigation.xml:135
|
||||
#: data/50-mutter-navigation.xml:123
|
||||
msgid "Move to workspace above"
|
||||
msgstr "移动到上层工作区"
|
||||
|
||||
#: data/50-mutter-navigation.xml:138
|
||||
#: data/50-mutter-navigation.xml:126
|
||||
msgid "Move to workspace below"
|
||||
msgstr "移动到下层工作区"
|
||||
|
||||
#: data/50-mutter-system.xml:6
|
||||
#: data/50-mutter-system.xml:6 data/50-mutter-wayland.xml:6
|
||||
msgid "System"
|
||||
msgstr "系统"
|
||||
|
||||
@ -190,7 +176,11 @@ msgstr "显示运行命令提示符"
|
||||
|
||||
#: data/50-mutter-system.xml:10
|
||||
msgid "Show the activities overview"
|
||||
msgstr "显示活动大纲"
|
||||
msgstr "显示活动视图"
|
||||
|
||||
#: data/50-mutter-wayland.xml:8
|
||||
msgid "Restore the keyboard shortcuts"
|
||||
msgstr "还原键盘快捷键"
|
||||
|
||||
#: data/50-mutter-windows.xml:6
|
||||
msgid "Windows"
|
||||
@ -217,54 +207,50 @@ msgid "Restore window"
|
||||
msgstr "恢复窗口"
|
||||
|
||||
#: data/50-mutter-windows.xml:18
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "切换卷起状态"
|
||||
|
||||
#: data/50-mutter-windows.xml:20
|
||||
msgid "Close window"
|
||||
msgstr "关闭窗口"
|
||||
|
||||
#: data/50-mutter-windows.xml:22
|
||||
#: data/50-mutter-windows.xml:20
|
||||
msgid "Hide window"
|
||||
msgstr "隐藏窗口"
|
||||
|
||||
#: data/50-mutter-windows.xml:24
|
||||
#: data/50-mutter-windows.xml:22
|
||||
msgid "Move window"
|
||||
msgstr "移动窗口"
|
||||
|
||||
#: data/50-mutter-windows.xml:26
|
||||
#: data/50-mutter-windows.xml:24
|
||||
msgid "Resize window"
|
||||
msgstr "改变窗口大小"
|
||||
|
||||
#: data/50-mutter-windows.xml:29
|
||||
#: data/50-mutter-windows.xml:27
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "在位于所有或仅一个工作区的窗口间切换"
|
||||
|
||||
#: data/50-mutter-windows.xml:31
|
||||
#: data/50-mutter-windows.xml:29
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "如果窗口被其他窗口遮盖,则提升它,否则降低它"
|
||||
|
||||
#: data/50-mutter-windows.xml:33
|
||||
#: data/50-mutter-windows.xml:31
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "将窗口提升到其它窗口之上"
|
||||
|
||||
#: data/50-mutter-windows.xml:35
|
||||
#: data/50-mutter-windows.xml:33
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "将窗口降低到其它窗口之下"
|
||||
|
||||
#: data/50-mutter-windows.xml:37
|
||||
#: data/50-mutter-windows.xml:35
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "垂直最大化窗口"
|
||||
|
||||
#: data/50-mutter-windows.xml:39
|
||||
#: data/50-mutter-windows.xml:37
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "水平最大化窗口"
|
||||
|
||||
#: data/50-mutter-windows.xml:43
|
||||
#: data/50-mutter-windows.xml:41
|
||||
msgid "View split on left"
|
||||
msgstr "在左侧查看分割"
|
||||
|
||||
#: data/50-mutter-windows.xml:47
|
||||
#: data/50-mutter-windows.xml:45
|
||||
msgid "View split on right"
|
||||
msgstr "在右侧查看分割"
|
||||
|
||||
@ -278,10 +264,10 @@ msgstr "用于修改窗口点击动作的修饰键 met"
|
||||
|
||||
#: 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."
|
||||
"This key will initiate the “overlay”, which is a combination window overview "
|
||||
"and application launching system. The default is intended to be the “Windows "
|
||||
"key” on PC hardware. It’s expected that this binding either the default or "
|
||||
"set to the empty string."
|
||||
msgstr ""
|
||||
"这个键指出的“覆盖”是一种混合窗口概述和应用程序运行的系统。默认要求使用 "
|
||||
"“Super 键”。可能使用默认或者空白。"
|
||||
@ -318,12 +304,12 @@ msgstr "动态管理工作区"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:41
|
||||
msgid ""
|
||||
"Determines whether workspaces are managed dynamically or whether there's a "
|
||||
"Determines whether workspaces are managed dynamically or whether there’s a "
|
||||
"static number of workspaces (determined by the num-workspaces key in org."
|
||||
"gnome.desktop.wm.preferences)."
|
||||
msgstr ""
|
||||
"决定工作区动态管理还是静态数量的工作区(由 org.gnome.desktop.wm.preferences 中"
|
||||
"的 num-workspaces 键确定)。"
|
||||
"决定工作区动态管理还是静态数量的工作区(由 org.gnome.desktop.wm.preferences "
|
||||
"中的 num-workspaces 键确定)。"
|
||||
|
||||
# 或者 只在主显示器上显示工作区
|
||||
#: data/org.gnome.mutter.gschema.xml.in:50
|
||||
@ -353,9 +339,9 @@ msgstr "将焦点改变推迟到光标停止移动之后"
|
||||
|
||||
#: 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."
|
||||
"If set to true, and the focus mode is either “sloppy” or “mouse” then the "
|
||||
"focus will not be changed immediately when entering a window, but only after "
|
||||
"the pointer stops moving."
|
||||
msgstr ""
|
||||
"如果为 true,而聚焦模式为“sloppy”或“mouse”,那么进入某个窗口时焦点将不会立即"
|
||||
"改变,而是等到光标停止移动之后。"
|
||||
@ -366,7 +352,7 @@ msgstr "可拖拽的边界宽度"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:80
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"The amount of total draggable borders. If the theme’s visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr ""
|
||||
"可拖拽的边界总数。如果主题的可见边界不足,将添加不可见的边界来满足此值。"
|
||||
@ -391,14 +377,50 @@ msgid ""
|
||||
"screen of the monitor."
|
||||
msgstr "为 true 时,新窗口将总是置于此显示器已激活屏幕的中央。"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:120
|
||||
#: data/org.gnome.mutter.gschema.xml.in:107
|
||||
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. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
msgstr ""
|
||||
"要启用实验性特性,请将如下特性关键字添加到列表中。特性是否要求重启合成器取决"
|
||||
"于特性本身。实验性特性不需启用即可配置和使用。请不要将实验性特性作为未来保障"
|
||||
"的基础。当前可用的关键字:• “monitor-config-manager” — 使用新的监视器配置系"
|
||||
"统,用于替代老的系统。启用此特性将打开一个上级配置 API 以用于配置应用程序,并"
|
||||
"可提供基于每屏幕的逻辑缩放功能。• “scale-monitor-framebuffer” — 让 Mutter 默"
|
||||
"认基于像素座标排布多屏幕,并同时缩放监视器帧缓冲器而不是窗口内容,以便管理 "
|
||||
"HiDPI 监视器。该特性不需要重启来生效。• “remote-desktop” — 启用远程桌面支持。"
|
||||
"要支持远程桌面共享,还需要设置“screen-cast”。 • “screen-cast” — 启用屏幕广播"
|
||||
"支持。"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "从 Tab 轮换弹出界面选择窗口"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:125
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "取消 Tab 轮换弹出"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "切换显示器配置"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "旋转内置显示器配置"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:6
|
||||
msgid "Switch to VT 1"
|
||||
msgstr "切换到 VT 1"
|
||||
@ -447,127 +469,183 @@ msgstr "切换到 VT 11"
|
||||
msgid "Switch to VT 12"
|
||||
msgstr "切换到 VT 12"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:54
|
||||
msgid "Re-enable shortcuts"
|
||||
msgstr "重新启用快捷键"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:64
|
||||
msgid "Allow grabs with Xwayland"
|
||||
msgstr "允许用 Xwayland 捕获"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:65
|
||||
msgid ""
|
||||
"Allow keyboard grabs issued by X11 applications running in Xwayland to be "
|
||||
"taken into account. For a X11 grab to be taken into account under Wayland, "
|
||||
"the client must also either send a specific X11 ClientMessage to the root "
|
||||
"window or be among the applications white-listed in key “xwayland-grab-"
|
||||
"access-rules”."
|
||||
msgstr ""
|
||||
"允许考虑运行在 Xwayland 中的 X11 应用程序发起的键盘捕获。在 Wayland 下,为了"
|
||||
"将 X11 捕获考虑在内,客户端也必须发送一个指定的 X11 ClientMessage 到根窗口,"
|
||||
"或是包含进“xwayland-grab-access-rules”键成为其中一个白名单应用程序。"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:77
|
||||
msgid "Xwayland applications allowed to issue keyboard grabs"
|
||||
msgstr "允许发起键盘捕获的 Xwayland 应用程序"
|
||||
|
||||
#: data/org.gnome.mutter.wayland.gschema.xml.in:78
|
||||
msgid ""
|
||||
"List the resource names or resource class of X11 windows either allowed or "
|
||||
"not allowed to issue X11 keyboard grabs under Xwayland. The resource name or "
|
||||
"resource class of a given X11 window can be obtained using the command "
|
||||
"“xprop WM_CLASS”. Wildcards “*” and jokers “?” in the values are supported. "
|
||||
"Values starting with “!” are blacklisted, which has precedence over the "
|
||||
"whitelist, to revoke applications from the default system list. The default "
|
||||
"system list includes the following applications: "
|
||||
"“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” Users can break an existing grab by "
|
||||
"using the specific keyboard shortcut defined by the keybinding key “restore-"
|
||||
"shortcuts”."
|
||||
msgstr ""
|
||||
"Xwayland 下允许或不允许发起 X11 键盘捕获的 X11 窗口,其资源名或资源类的列表。"
|
||||
"给定 X11 窗口的资源名或资源类可以使用“xprop WM_CLASS”命令获取。支持在键值中使"
|
||||
"用通配符“*”和“?”。以“!”开头的键值会列入黑名单,它们的优先级高于白名单,用来撤"
|
||||
"销默认系统列表中的应用程序。默认系统列表包含了下列应用程"
|
||||
"序:“@XWAYLAND_GRAB_DEFAULT_ACCESS_RULES@” 用户可以使用键绑定键“restore-"
|
||||
"shortcuts”定义的键盘快捷键来中断进行中的捕获。"
|
||||
|
||||
#. TRANSLATORS: This string refers to a button that switches between
|
||||
#. * different modes.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:2260
|
||||
#, c-format
|
||||
msgid "Mode Switch (Group %d)"
|
||||
msgstr "模式切换(组别 %d)"
|
||||
|
||||
#. TRANSLATORS: This string refers to an action, cycles drawing tablets'
|
||||
#. * mapping through the available outputs.
|
||||
#.
|
||||
#: src/backends/meta-input-settings.c:1861
|
||||
#: src/backends/meta-input-settings.c:2283
|
||||
msgid "Switch monitor"
|
||||
msgstr "切换显示器"
|
||||
|
||||
#: src/backends/meta-input-settings.c:1863
|
||||
#: src/backends/meta-input-settings.c:2285
|
||||
msgid "Show on-screen help"
|
||||
msgstr "显示在屏帮助"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:515
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
msgid "Built-in display"
|
||||
msgstr "内置显示器"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:538
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
msgid "Unknown"
|
||||
msgstr "未知"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:540
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
msgid "Unknown Display"
|
||||
msgstr "未知的 Display"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:548
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: src/compositor/compositor.c:471
|
||||
#: src/compositor/compositor.c:481
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
"\"."
|
||||
"Another compositing manager is already running on screen %i on display “%s”."
|
||||
msgstr "显示器 %2$s 的屏幕 %1$i 上已有另外一个混成窗口管理器正在运行。"
|
||||
|
||||
#: src/core/bell.c:194
|
||||
msgid "Bell event"
|
||||
msgstr "响铃事件"
|
||||
|
||||
#: src/core/delete.c:127
|
||||
#: src/core/display.c:608
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display “%s”\n"
|
||||
msgstr "无法打开 X Window System 显示器“%s”\n"
|
||||
|
||||
#: src/core/main.c:190
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "禁止连接到会话管理器"
|
||||
|
||||
#: src/core/main.c:196
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "替换正在运行的窗口管理器"
|
||||
|
||||
#: src/core/main.c:202
|
||||
msgid "Specify session management ID"
|
||||
msgstr "指定会话管理 ID"
|
||||
|
||||
#: src/core/main.c:207
|
||||
msgid "X Display to use"
|
||||
msgstr "要使用的 X Display"
|
||||
|
||||
#: src/core/main.c:213
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "从保存文件中初始化会话"
|
||||
|
||||
#: src/core/main.c:219
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "使 X 调用同步"
|
||||
|
||||
#: src/core/main.c:226
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "作为 wayland 混成管理器运行"
|
||||
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "作为嵌套混成器运行"
|
||||
|
||||
#: src/core/main.c:240
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "以完整显示服务器方式运行,而不是以嵌套方式"
|
||||
|
||||
#: src/core/main.c:246
|
||||
msgid "Run with X11 backend"
|
||||
msgstr "以 X11 后端运行"
|
||||
|
||||
#. Translators: %s is a window title
|
||||
#: src/core/meta-close-dialog-default.c:147
|
||||
#, c-format
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” 未响应。"
|
||||
|
||||
#: src/core/delete.c:129
|
||||
#: src/core/meta-close-dialog-default.c:149
|
||||
msgid "Application is not responding."
|
||||
msgstr "应用程序未响应。"
|
||||
|
||||
#: src/core/delete.c:134
|
||||
#: src/core/meta-close-dialog-default.c:154
|
||||
msgid ""
|
||||
"You may choose to wait a short while for it to continue or force the "
|
||||
"application to quit entirely."
|
||||
msgstr "您可以选择稍等一会儿,或者强制退出该应用程序。"
|
||||
|
||||
#: src/core/delete.c:141
|
||||
msgid "_Wait"
|
||||
msgstr "等待(_W)"
|
||||
|
||||
#: src/core/delete.c:141
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
msgid "_Force Quit"
|
||||
msgstr "强制退出(_F)"
|
||||
|
||||
#: src/core/display.c:590
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "无法打开 X Window System 显示器“%s”\n"
|
||||
|
||||
#: src/core/main.c:182
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "禁止连接到会话管理器"
|
||||
|
||||
#: src/core/main.c:188
|
||||
msgid "Replace the running window manager"
|
||||
msgstr "替换正在运行的窗口管理器"
|
||||
|
||||
#: src/core/main.c:194
|
||||
msgid "Specify session management ID"
|
||||
msgstr "指定会话管理 ID"
|
||||
|
||||
#: src/core/main.c:199
|
||||
msgid "X Display to use"
|
||||
msgstr "要使用的 X Display"
|
||||
|
||||
#: src/core/main.c:205
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "从保存文件中初始化会话"
|
||||
|
||||
#: src/core/main.c:211
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "使 X 调用同步"
|
||||
|
||||
#: src/core/main.c:218
|
||||
msgid "Run as a wayland compositor"
|
||||
msgstr "作为 wayland 混成管理器运行"
|
||||
|
||||
#: src/core/main.c:224
|
||||
msgid "Run as a nested compositor"
|
||||
msgstr "作为嵌套混成器运行"
|
||||
|
||||
#: src/core/main.c:232
|
||||
msgid "Run as a full display server, rather than nested"
|
||||
msgstr "以完整显示服务器方式运行,而不是以嵌套方式"
|
||||
#: src/core/meta-close-dialog-default.c:161
|
||||
msgid "_Wait"
|
||||
msgstr "等待(_W)"
|
||||
|
||||
#: src/core/mutter.c:39
|
||||
#, c-format
|
||||
msgid ""
|
||||
"mutter %s\n"
|
||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
|
||||
"This is free software; see the source for copying conditions.\n"
|
||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
|
||||
"PARTICULAR PURPOSE.\n"
|
||||
msgstr ""
|
||||
"mutter %s\n"
|
||||
"版权所有 (C) 2001-%d Havoc Pennington, Red Hat, Inc., 以及其他\n"
|
||||
"本软件为自由软件:版权条款请参见源码\n"
|
||||
"不存在任何保证:即便是对商业性或者特定目的的适应性也不作保证。\n"
|
||||
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc., 以及其他\n"
|
||||
"本软件为自由软件;版权条款请参见源码\n"
|
||||
"不存在任何保证;即便是对商业性或者特定目的的适应性也不作保证。\n"
|
||||
|
||||
#: src/core/mutter.c:53
|
||||
msgid "Print version"
|
||||
@ -582,41 +660,54 @@ msgstr "要使用的 Mutter 插件"
|
||||
msgid "Workspace %d"
|
||||
msgstr "工作区 %d"
|
||||
|
||||
#: src/core/screen.c:521
|
||||
#: src/core/screen.c:583
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Display \"%s\" already has a window manager; try using the --replace option "
|
||||
"to replace the current window manager."
|
||||
"Display “%s” already has a window manager; try using the --replace option to "
|
||||
"replace the current window manager."
|
||||
msgstr ""
|
||||
"Display“%s”已经有一个窗口管理器;请尝试使用 --replace 选项替换当前的窗口管理"
|
||||
"器。"
|
||||
|
||||
#: src/core/screen.c:606
|
||||
#: src/core/screen.c:668
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgid "Screen %d on display “%s” is invalid\n"
|
||||
msgstr "显示“%2$s”上的屏幕 %1$d 无效\n"
|
||||
|
||||
#: src/core/util.c:120
|
||||
msgid "Mutter was compiled without support for verbose mode\n"
|
||||
msgstr "Mutter 编译的时候没有加入详细模式的支持\n"
|
||||
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:595
|
||||
#: src/wayland/meta-wayland-tablet-pad.c:567
|
||||
#, c-format
|
||||
msgid "Mode Switch: Mode %d"
|
||||
msgstr "模式切换:%d 模式"
|
||||
|
||||
#: src/x11/session.c:1815
|
||||
#: src/x11/session.c:1818
|
||||
msgid ""
|
||||
"These windows do not support "save current setup" and will have to "
|
||||
"be restarted manually next time you log in."
|
||||
msgstr ""
|
||||
"这些窗口不支持 "保存当前设置 " 您在下次登录时,必须手动重启动它"
|
||||
"们。"
|
||||
"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:548
|
||||
#: src/x11/window-props.c:559
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (于 %s)"
|
||||
msgstr "%s(于 %s)"
|
||||
|
||||
#~ msgid "Move window one workspace to the left"
|
||||
#~ msgstr "将窗口左移一个工作区"
|
||||
|
||||
#~ msgid "Move window one workspace to the right"
|
||||
#~ msgstr "将窗口右移一个工作区"
|
||||
|
||||
#~ msgid "Move to workspace left"
|
||||
#~ msgstr "移动到左侧工作区"
|
||||
|
||||
#~ msgid "Move to workspace right"
|
||||
#~ msgstr "移动到右侧工作区"
|
||||
|
||||
#~ msgid "Toggle shaded state"
|
||||
#~ msgstr "切换卷起状态"
|
||||
|
||||
#~ msgid "Failed to scan themes directory: %s\n"
|
||||
#~ msgstr "扫描主题目录失败:%s\n"
|
||||
|
31
po/zh_TW.po
31
po/zh_TW.po
@ -9,8 +9,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: 2018-03-01 18:57+0000\n"
|
||||
"PO-Revision-Date: 2018-03-03 15:20+0800\n"
|
||||
"POT-Creation-Date: 2018-06-07 13:00+0000\n"
|
||||
"PO-Revision-Date: 2018-06-09 11:26+0800\n"
|
||||
"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
|
||||
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
|
||||
"Language: zh_TW\n"
|
||||
@ -18,7 +18,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"X-Generator: Poedit 2.0.8\n"
|
||||
|
||||
#: data/50-mutter-navigation.xml:6
|
||||
msgid "Navigation"
|
||||
@ -379,32 +379,27 @@ msgid ""
|
||||
"proof. Currently possible keywords: • “scale-monitor-framebuffer” — makes "
|
||||
"mutter default to layout logical monitors in a logical pixel coordinate "
|
||||
"space, while scaling monitor framebuffers instead of window content, to "
|
||||
"manage HiDPI monitors. Does not require a restart. • “remote-desktop” — "
|
||||
"enables remote desktop support. To support remote desktop with screen "
|
||||
"sharing, “screen-cast” must also be enabled. • “screen-cast” — enables "
|
||||
"screen cast support."
|
||||
"manage HiDPI monitors. Does not require a restart."
|
||||
msgstr ""
|
||||
"若要啟用實驗性功能,請將功能關鍵字加入列表中。置於該功能是否須要重新啟動混成"
|
||||
"器則視給予的功能而定。任何實驗性功能不一定能用、或是可以調整設定。請不要預期"
|
||||
"在此設定中加入的任何東西未來都能存在。目前可用的關鍵字有: • “scale-monitor-"
|
||||
"framebuffer” — 讓 mutter 預設採用邏輯像素座標空間的配置邏輯螢幕,而縮放螢幕 "
|
||||
"framebuffer 則取代視窗內容以管理 HiDPI 螢幕。不須要重新啟動。 • “remote-"
|
||||
"desktop” — 啟用遠端桌面支援。若要支援遠端桌面的螢幕分享,則必須也啟用“screen-"
|
||||
"cast”。• “screen-cast” — 啟用螢幕投放支援。"
|
||||
"framebuffer 則取代視窗內容以管理 HiDPI 螢幕。不須要重新啟動。"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:145
|
||||
#: data/org.gnome.mutter.gschema.xml.in:141
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "從分頁彈出項選擇視窗"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:150
|
||||
#: data/org.gnome.mutter.gschema.xml.in:146
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "取消分頁彈出項"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:155
|
||||
#: data/org.gnome.mutter.gschema.xml.in:151
|
||||
msgid "Switch monitor configurations"
|
||||
msgstr "切換螢幕組態"
|
||||
|
||||
#: data/org.gnome.mutter.gschema.xml.in:160
|
||||
#: data/org.gnome.mutter.gschema.xml.in:156
|
||||
msgid "Rotates the built-in monitor configuration"
|
||||
msgstr "旋轉切換內建螢幕組態"
|
||||
|
||||
@ -520,22 +515,22 @@ msgstr "切換螢幕"
|
||||
msgid "Show on-screen help"
|
||||
msgstr "顯示螢幕求助"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:900
|
||||
#: src/backends/meta-monitor-manager.c:903
|
||||
msgid "Built-in display"
|
||||
msgstr "內建顯示"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:923
|
||||
#: src/backends/meta-monitor-manager.c:926
|
||||
msgid "Unknown"
|
||||
msgstr "不明"
|
||||
|
||||
#: src/backends/meta-monitor-manager.c:925
|
||||
#: src/backends/meta-monitor-manager.c:928
|
||||
msgid "Unknown Display"
|
||||
msgstr "不明的顯示器"
|
||||
|
||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
|
||||
#. * size in inches, like 'Dell 15"'
|
||||
#.
|
||||
#: src/backends/meta-monitor-manager.c:933
|
||||
#: src/backends/meta-monitor-manager.c:936
|
||||
#, c-format
|
||||
msgid "%s %s"
|
||||
msgstr "%s %s"
|
||||
|
@ -153,7 +153,7 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
|
||||
backends/meta-pointer-constraint.h \
|
||||
backends/meta-settings.c \
|
||||
backends/meta-settings-private.h \
|
||||
backends/meta-stage.h \
|
||||
backends/meta-stage-private.h \
|
||||
backends/meta-stage.c \
|
||||
backends/meta-renderer.c \
|
||||
backends/meta-renderer.h \
|
||||
@ -246,7 +246,7 @@ libmutter_@LIBMUTTER_API_VERSION@_la_SOURCES = \
|
||||
compositor/meta-window-actor.c \
|
||||
compositor/meta-window-actor-private.h \
|
||||
compositor/meta-window-group.c \
|
||||
compositor/meta-window-group.h \
|
||||
compositor/meta-window-group-private.h \
|
||||
compositor/meta-window-shape.c \
|
||||
compositor/region-utils.c \
|
||||
compositor/region-utils.h \
|
||||
@ -543,7 +543,9 @@ libmutterinclude_headers = \
|
||||
meta/meta-settings.h \
|
||||
meta/meta-shaped-texture.h \
|
||||
meta/meta-shadow-factory.h \
|
||||
meta/meta-stage.h \
|
||||
meta/meta-window-actor.h \
|
||||
meta/meta-window-group.h \
|
||||
meta/meta-window-shape.h \
|
||||
meta/prefs.h \
|
||||
meta/screen.h \
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include "meta-input-settings-private.h"
|
||||
#include "backends/x11/meta-backend-x11.h"
|
||||
#include "meta-cursor-tracker-private.h"
|
||||
#include "meta-stage.h"
|
||||
#include "meta-stage-private.h"
|
||||
|
||||
#ifdef HAVE_REMOTE_DESKTOP
|
||||
#include "backends/meta-dbus-session-watcher.h"
|
||||
@ -418,28 +418,6 @@ meta_backend_create_input_settings (MetaBackend *backend)
|
||||
return META_BACKEND_GET_CLASS (backend)->create_input_settings (backend);
|
||||
}
|
||||
|
||||
#ifdef HAVE_REMOTE_DESKTOP
|
||||
static gboolean
|
||||
is_screen_cast_enabled (MetaBackend *backend)
|
||||
{
|
||||
MetaSettings *settings = meta_backend_get_settings (backend);
|
||||
|
||||
return meta_settings_is_experimental_feature_enabled (
|
||||
settings,
|
||||
META_EXPERIMENTAL_FEATURE_SCREEN_CAST);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_remote_desktop_enabled (MetaBackend *backend)
|
||||
{
|
||||
MetaSettings *settings = meta_backend_get_settings (backend);
|
||||
|
||||
return meta_settings_is_experimental_feature_enabled (
|
||||
settings,
|
||||
META_EXPERIMENTAL_FEATURE_REMOTE_DESKTOP);
|
||||
}
|
||||
#endif /* HAVE_REMOTE_DESKTOP */
|
||||
|
||||
static void
|
||||
meta_backend_real_post_init (MetaBackend *backend)
|
||||
{
|
||||
@ -473,10 +451,8 @@ meta_backend_real_post_init (MetaBackend *backend)
|
||||
|
||||
#ifdef HAVE_REMOTE_DESKTOP
|
||||
priv->dbus_session_watcher = g_object_new (META_TYPE_DBUS_SESSION_WATCHER, NULL);
|
||||
if (is_screen_cast_enabled (backend))
|
||||
priv->screen_cast = meta_screen_cast_new (priv->dbus_session_watcher);
|
||||
if (is_remote_desktop_enabled (backend))
|
||||
priv->remote_desktop = meta_remote_desktop_new (priv->dbus_session_watcher);
|
||||
priv->screen_cast = meta_screen_cast_new (priv->dbus_session_watcher);
|
||||
priv->remote_desktop = meta_remote_desktop_new (priv->dbus_session_watcher);
|
||||
#endif /* HAVE_REMOTE_DESKTOP */
|
||||
|
||||
if (!meta_monitor_manager_is_headless (priv->monitor_manager))
|
||||
@ -568,26 +544,6 @@ meta_backend_class_init (MetaBackendClass *klass)
|
||||
stage_views_disabled = g_strcmp0 (mutter_stage_views, "0") == 0;
|
||||
}
|
||||
|
||||
static void
|
||||
experimental_features_changed (MetaSettings *settings,
|
||||
MetaExperimentalFeature old_experimental_features,
|
||||
MetaBackend *backend)
|
||||
{
|
||||
#ifdef HAVE_REMOTE_DESKTOP
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
if (is_screen_cast_enabled (backend) && !priv->screen_cast)
|
||||
priv->screen_cast = meta_screen_cast_new (priv->dbus_session_watcher);
|
||||
else if (!is_screen_cast_enabled (backend))
|
||||
g_clear_object (&priv->screen_cast);
|
||||
|
||||
if (is_remote_desktop_enabled (backend) && !priv->remote_desktop)
|
||||
priv->remote_desktop = meta_remote_desktop_new (priv->dbus_session_watcher);
|
||||
else if (!is_remote_desktop_enabled (backend))
|
||||
g_clear_object (&priv->remote_desktop);
|
||||
#endif /* HAVE_REMOTE_DESKTOP */
|
||||
}
|
||||
|
||||
static MetaMonitorManager *
|
||||
meta_backend_create_monitor_manager (MetaBackend *backend,
|
||||
GError **error)
|
||||
@ -670,9 +626,6 @@ meta_backend_initable_init (GInitable *initable,
|
||||
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
|
||||
|
||||
priv->settings = meta_settings_new (backend);
|
||||
g_signal_connect (priv->settings, "experimental-features-changed",
|
||||
G_CALLBACK (experimental_features_changed),
|
||||
backend);
|
||||
|
||||
priv->egl = g_object_new (META_TYPE_EGL, NULL);
|
||||
|
||||
|
@ -33,7 +33,7 @@
|
||||
#include <cogl/cogl.h>
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
#include "meta-stage.h"
|
||||
#include "meta-stage-private.h"
|
||||
|
||||
struct _MetaCursorRendererPrivate
|
||||
{
|
||||
|
@ -246,7 +246,8 @@ meta_idle_monitor_init (MetaIdleMonitor *monitor)
|
||||
/* Monitor inhibitors */
|
||||
monitor->session_proxy =
|
||||
g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
|
||||
G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
|
||||
G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS |
|
||||
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
||||
NULL,
|
||||
"org.gnome.SessionManager",
|
||||
"/org/gnome/SessionManager",
|
||||
|
@ -153,6 +153,11 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src)
|
||||
return;
|
||||
|
||||
buffer = pw_stream_peek_buffer (priv->pipewire_stream, buffer_id);
|
||||
if (!buffer)
|
||||
{
|
||||
g_warning ("Failed to peek at PipeWire buffer");
|
||||
return;
|
||||
}
|
||||
|
||||
if (buffer->datas[0].type == priv->pipewire_type->data.MemFd)
|
||||
{
|
||||
@ -327,10 +332,18 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src,
|
||||
struct spa_fraction max_framerate;
|
||||
struct spa_fraction min_framerate;
|
||||
const struct spa_pod *params[1];
|
||||
int result;
|
||||
|
||||
pipewire_stream = pw_stream_new (priv->pipewire_remote,
|
||||
"meta-screen-cast-src",
|
||||
NULL);
|
||||
if (!pipewire_stream)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Failed to create PipeWire stream: %s",
|
||||
strerror (errno));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
meta_screen_cast_stream_src_get_specs (src, &width, &height, &frame_rate);
|
||||
frame_rate_fraction = meta_fraction_from_double (frame_rate);
|
||||
@ -356,14 +369,15 @@ create_pipewire_stream (MetaScreenCastStreamSrc *src,
|
||||
&stream_events,
|
||||
src);
|
||||
|
||||
if (pw_stream_connect (pipewire_stream,
|
||||
PW_DIRECTION_OUTPUT,
|
||||
NULL,
|
||||
PW_STREAM_FLAG_NONE,
|
||||
params, G_N_ELEMENTS (params)) != 0)
|
||||
result = pw_stream_connect (pipewire_stream,
|
||||
PW_DIRECTION_OUTPUT,
|
||||
NULL,
|
||||
PW_STREAM_FLAG_NONE,
|
||||
params, G_N_ELEMENTS (params));
|
||||
if (result != 0)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Could not connect");
|
||||
"Could not connect: %s", spa_strerror (result));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -466,6 +480,12 @@ create_pipewire_source (void)
|
||||
(MetaPipeWireSource *) g_source_new (&pipewire_source_funcs,
|
||||
sizeof (MetaPipeWireSource));
|
||||
pipewire_source->pipewire_loop = pw_loop_new (NULL);
|
||||
if (!pipewire_source->pipewire_loop)
|
||||
{
|
||||
g_source_destroy ((GSource *) pipewire_source);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
g_source_add_unix_fd (&pipewire_source->base,
|
||||
pw_loop_get_fd (pipewire_source->pipewire_loop),
|
||||
G_IO_IN | G_IO_ERR);
|
||||
@ -491,6 +511,13 @@ meta_screen_cast_stream_src_initable_init (GInitable *initable,
|
||||
meta_screen_cast_stream_src_get_instance_private (src);
|
||||
|
||||
priv->pipewire_source = create_pipewire_source ();
|
||||
if (!priv->pipewire_source)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Failed to create PipeWire source");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
priv->pipewire_core = pw_core_new (priv->pipewire_source->pipewire_loop,
|
||||
NULL);
|
||||
if (!priv->pipewire_core)
|
||||
|
@ -31,9 +31,7 @@ typedef enum _MetaExperimentalFeature
|
||||
{
|
||||
META_EXPERIMENTAL_FEATURE_NONE = 0,
|
||||
META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER = (1 << 0),
|
||||
META_EXPERIMENTAL_FEATURE_SCREEN_CAST = (1 << 1),
|
||||
META_EXPERIMENTAL_FEATURE_REMOTE_DESKTOP = (1 << 2),
|
||||
META_EXPERIMENTAL_FEATURE_KMS_MODIFIERS = (1 << 3),
|
||||
META_EXPERIMENTAL_FEATURE_KMS_MODIFIERS = (1 << 1),
|
||||
} MetaExperimentalFeature;
|
||||
|
||||
#define META_TYPE_SETTINGS (meta_settings_get_type ())
|
||||
|
@ -260,13 +260,8 @@ experimental_features_handler (GVariant *features_variant,
|
||||
g_variant_iter_init (&features_iter, features_variant);
|
||||
while (g_variant_iter_loop (&features_iter, "s", &feature))
|
||||
{
|
||||
/* So far no experimental features defined. */
|
||||
if (g_str_equal (feature, "scale-monitor-framebuffer"))
|
||||
features |= META_EXPERIMENTAL_FEATURE_SCALE_MONITOR_FRAMEBUFFER;
|
||||
else if (g_str_equal (feature, "screen-cast"))
|
||||
features |= META_EXPERIMENTAL_FEATURE_SCREEN_CAST;
|
||||
else if (g_str_equal (feature, "remote-desktop"))
|
||||
features |= META_EXPERIMENTAL_FEATURE_REMOTE_DESKTOP;
|
||||
else if (g_str_equal (feature, "kms-modifiers"))
|
||||
features |= META_EXPERIMENTAL_FEATURE_KMS_MODIFIERS;
|
||||
else
|
||||
|
@ -17,39 +17,23 @@
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_STAGE_H
|
||||
#define META_STAGE_H
|
||||
#ifndef META_STAGE_PRIVATE_H
|
||||
#define META_STAGE_PRIVATE_H
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
#include <meta/meta-stage.h>
|
||||
|
||||
#include "meta-cursor.h"
|
||||
#include <meta/boxes.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define META_TYPE_STAGE (meta_stage_get_type ())
|
||||
#define META_STAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_STAGE, MetaStage))
|
||||
#define META_STAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_STAGE, MetaStageClass))
|
||||
#define META_IS_STAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_STAGE))
|
||||
#define META_IS_STAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_STAGE))
|
||||
#define META_STAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_STAGE, MetaStageClass))
|
||||
|
||||
typedef struct _MetaStage MetaStage;
|
||||
typedef struct _MetaStageClass MetaStageClass;
|
||||
typedef struct _MetaOverlay MetaOverlay;
|
||||
|
||||
struct _MetaStageClass
|
||||
{
|
||||
ClutterStageClass parent_class;
|
||||
};
|
||||
|
||||
struct _MetaStage
|
||||
{
|
||||
ClutterStage parent;
|
||||
};
|
||||
|
||||
GType meta_stage_get_type (void) G_GNUC_CONST;
|
||||
|
||||
ClutterActor *meta_stage_new (void);
|
||||
|
||||
MetaOverlay *meta_stage_create_cursor_overlay (MetaStage *stage);
|
||||
@ -68,4 +52,4 @@ void meta_stage_update_view_layout (MetaStage *stage);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* META_STAGE_H */
|
||||
#endif /* META_STAGE_PRIVATE_H */
|
@ -22,7 +22,7 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "meta-stage.h"
|
||||
#include "meta-stage-private.h"
|
||||
|
||||
#include <meta/meta-backend.h>
|
||||
#include <meta/meta-monitor-manager.h>
|
||||
|
@ -43,7 +43,7 @@
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
#include "backends/meta-monitor-manager-private.h"
|
||||
#include "backends/meta-pointer-constraint.h"
|
||||
#include "backends/meta-stage.h"
|
||||
#include "backends/meta-stage-private.h"
|
||||
#include "backends/native/meta-clutter-backend-native.h"
|
||||
#include "backends/native/meta-input-settings-native.h"
|
||||
#include "backends/native/meta-renderer-native.h"
|
||||
|
@ -47,6 +47,12 @@ typedef struct _MetaKmsSource
|
||||
MetaGpuKms *gpu_kms;
|
||||
} MetaKmsSource;
|
||||
|
||||
typedef struct _MetaGpuKmsFlipClosureContainer
|
||||
{
|
||||
GClosure *flip_closure;
|
||||
MetaGpuKms *gpu_kms;
|
||||
} MetaGpuKmsFlipClosureContainer;
|
||||
|
||||
struct _MetaGpuKms
|
||||
{
|
||||
MetaGpu parent;
|
||||
@ -199,11 +205,26 @@ meta_gpu_kms_is_crtc_active (MetaGpuKms *gpu_kms,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
typedef struct _GpuClosureContainer
|
||||
MetaGpuKmsFlipClosureContainer *
|
||||
meta_gpu_kms_wrap_flip_closure (MetaGpuKms *gpu_kms,
|
||||
GClosure *flip_closure)
|
||||
{
|
||||
GClosure *flip_closure;
|
||||
MetaGpuKms *gpu_kms;
|
||||
} GpuClosureContainer;
|
||||
MetaGpuKmsFlipClosureContainer *closure_container;
|
||||
|
||||
closure_container = g_new0 (MetaGpuKmsFlipClosureContainer, 1);
|
||||
*closure_container = (MetaGpuKmsFlipClosureContainer) {
|
||||
.flip_closure = flip_closure,
|
||||
.gpu_kms = gpu_kms
|
||||
};
|
||||
|
||||
return closure_container;
|
||||
}
|
||||
|
||||
void
|
||||
meta_gpu_kms_flip_closure_container_free (MetaGpuKmsFlipClosureContainer *closure_container)
|
||||
{
|
||||
g_free (closure_container);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_gpu_kms_flip_crtc (MetaGpuKms *gpu_kms,
|
||||
@ -229,14 +250,11 @@ meta_gpu_kms_flip_crtc (MetaGpuKms *gpu_kms,
|
||||
|
||||
if (!gpu_kms->page_flips_not_supported)
|
||||
{
|
||||
GpuClosureContainer *closure_container;
|
||||
MetaGpuKmsFlipClosureContainer *closure_container;
|
||||
int kms_fd = meta_gpu_kms_get_fd (gpu_kms);
|
||||
|
||||
closure_container = g_new0 (GpuClosureContainer, 1);
|
||||
*closure_container = (GpuClosureContainer) {
|
||||
.flip_closure = flip_closure,
|
||||
.gpu_kms = gpu_kms
|
||||
};
|
||||
closure_container = meta_gpu_kms_wrap_flip_closure (gpu_kms,
|
||||
flip_closure);
|
||||
|
||||
ret = drmModePageFlip (kms_fd,
|
||||
crtc->crtc_id,
|
||||
@ -245,7 +263,7 @@ meta_gpu_kms_flip_crtc (MetaGpuKms *gpu_kms,
|
||||
closure_container);
|
||||
if (ret != 0 && ret != -EACCES)
|
||||
{
|
||||
g_free (closure_container);
|
||||
meta_gpu_kms_flip_closure_container_free (closure_container);
|
||||
g_warning ("Failed to flip: %s", strerror (-ret));
|
||||
gpu_kms->page_flips_not_supported = TRUE;
|
||||
}
|
||||
@ -276,12 +294,12 @@ page_flip_handler (int fd,
|
||||
unsigned int usec,
|
||||
void *user_data)
|
||||
{
|
||||
GpuClosureContainer *closure_container = user_data;
|
||||
MetaGpuKmsFlipClosureContainer *closure_container = user_data;
|
||||
GClosure *flip_closure = closure_container->flip_closure;
|
||||
MetaGpuKms *gpu_kms = closure_container->gpu_kms;
|
||||
|
||||
invoke_flip_closure (flip_closure, gpu_kms);
|
||||
g_free (closure_container);
|
||||
meta_gpu_kms_flip_closure_container_free (closure_container);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -32,6 +32,8 @@
|
||||
#define META_TYPE_GPU_KMS (meta_gpu_kms_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaGpuKms, meta_gpu_kms, META, GPU_KMS, MetaGpu)
|
||||
|
||||
typedef struct _MetaGpuKmsFlipClosureContainer MetaGpuKmsFlipClosureContainer;
|
||||
|
||||
typedef struct _MetaKmsResources
|
||||
{
|
||||
drmModeRes *resources;
|
||||
@ -84,4 +86,9 @@ gboolean meta_drm_mode_equal (const drmModeModeInfo *one,
|
||||
|
||||
float meta_calculate_drm_mode_refresh_rate (const drmModeModeInfo *mode);
|
||||
|
||||
MetaGpuKmsFlipClosureContainer * meta_gpu_kms_wrap_flip_closure (MetaGpuKms *gpu_kms,
|
||||
GClosure *flip_closure);
|
||||
|
||||
void meta_gpu_kms_flip_closure_container_free (MetaGpuKmsFlipClosureContainer *closure_container);
|
||||
|
||||
#endif /* META_GPU_KMS_H */
|
||||
|
@ -1271,6 +1271,7 @@ flip_egl_stream (MetaOnscreenNative *onscreen_native,
|
||||
MetaRendererNativeGpuData *renderer_gpu_data;
|
||||
EGLDisplay *egl_display;
|
||||
MetaEgl *egl = meta_onscreen_native_get_egl (onscreen_native);
|
||||
MetaGpuKmsFlipClosureContainer *closure_container;
|
||||
EGLAttrib *acquire_attribs;
|
||||
GError *error = NULL;
|
||||
|
||||
@ -1280,9 +1281,12 @@ flip_egl_stream (MetaOnscreenNative *onscreen_native,
|
||||
if (renderer_gpu_data->egl.no_egl_output_drm_flip_event)
|
||||
return FALSE;
|
||||
|
||||
closure_container =
|
||||
meta_gpu_kms_wrap_flip_closure (onscreen_native->render_gpu, flip_closure);
|
||||
|
||||
acquire_attribs = (EGLAttrib[]) {
|
||||
EGL_DRM_FLIP_EVENT_DATA_NV,
|
||||
(EGLAttrib) flip_closure,
|
||||
(EGLAttrib) closure_container,
|
||||
EGL_NONE
|
||||
};
|
||||
|
||||
@ -1301,6 +1305,7 @@ flip_egl_stream (MetaOnscreenNative *onscreen_native,
|
||||
renderer_gpu_data->egl.no_egl_output_drm_flip_event = TRUE;
|
||||
}
|
||||
g_error_free (error);
|
||||
meta_gpu_kms_flip_closure_container_free (closure_container);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -1601,6 +1606,12 @@ gbm_get_next_fb_id (MetaGpuKms *gpu_kms,
|
||||
/* Now we need to set the CRTC to whatever is the front buffer */
|
||||
next_bo = gbm_surface_lock_front_buffer (gbm_surface);
|
||||
|
||||
if (!next_bo)
|
||||
{
|
||||
g_error ("Impossible to lock surface front buffer: %m");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < gbm_bo_get_plane_count (next_bo); i++)
|
||||
{
|
||||
strides[i] = gbm_bo_get_stride_for_plane (next_bo, i);
|
||||
|
@ -37,7 +37,7 @@
|
||||
#include <X11/Xlib-xcb.h>
|
||||
#include <xkbcommon/xkbcommon-x11.h>
|
||||
|
||||
#include "backends/meta-stage.h"
|
||||
#include "backends/meta-stage-private.h"
|
||||
#include "backends/x11/meta-clutter-backend-x11.h"
|
||||
#include "backends/x11/meta-renderer-x11.h"
|
||||
#include "meta/meta-cursor-tracker.h"
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
|
||||
#include "meta-backend-x11.h"
|
||||
#include "meta-stage.h"
|
||||
#include "meta-stage-private.h"
|
||||
|
||||
struct _MetaCursorRendererX11Private
|
||||
{
|
||||
|
@ -67,7 +67,7 @@
|
||||
#include <meta/meta-background-group.h>
|
||||
#include <meta/meta-shadow-factory.h>
|
||||
#include "meta-window-actor-private.h"
|
||||
#include "meta-window-group.h"
|
||||
#include "meta-window-group-private.h"
|
||||
#include "window-private.h" /* to check window->hidden */
|
||||
#include "display-private.h" /* for meta_display_lookup_x_window() and meta_display_cancel_touch() */
|
||||
#include "util-private.h"
|
||||
|
@ -38,6 +38,20 @@
|
||||
|
||||
#include "meta-cullable.h"
|
||||
|
||||
/* MAX_MIPMAPPING_FPS needs to be as small as possible for the best GPU
|
||||
* performance, but higher than the refresh rate of commonly slow updating
|
||||
* windows like top or a blinking cursor, so that such windows do get
|
||||
* mipmapped.
|
||||
*/
|
||||
#define MAX_MIPMAPPING_FPS 5
|
||||
#define MIN_MIPMAP_AGE_USEC (G_USEC_PER_SEC / MAX_MIPMAPPING_FPS)
|
||||
|
||||
/* MIN_FAST_UPDATES_BEFORE_UNMIPMAP allows windows to update themselves
|
||||
* occasionally without causing mipmapping to be disabled, so long as such
|
||||
* an update takes fewer update_area calls than:
|
||||
*/
|
||||
#define MIN_FAST_UPDATES_BEFORE_UNMIPMAP 20
|
||||
|
||||
static void meta_shaped_texture_dispose (GObject *object);
|
||||
|
||||
static void meta_shaped_texture_paint (ClutterActor *actor);
|
||||
@ -95,6 +109,11 @@ struct _MetaShapedTexturePrivate
|
||||
guint tex_width, tex_height;
|
||||
guint fallback_width, fallback_height;
|
||||
|
||||
gint64 prev_invalidation, last_invalidation;
|
||||
guint fast_updates;
|
||||
guint remipmap_timeout_id;
|
||||
gint64 earliest_remipmap;
|
||||
|
||||
guint create_mipmaps : 1;
|
||||
};
|
||||
|
||||
@ -191,6 +210,12 @@ meta_shaped_texture_dispose (GObject *object)
|
||||
MetaShapedTexture *self = (MetaShapedTexture *) object;
|
||||
MetaShapedTexturePrivate *priv = self->priv;
|
||||
|
||||
if (priv->remipmap_timeout_id)
|
||||
{
|
||||
g_source_remove (priv->remipmap_timeout_id);
|
||||
priv->remipmap_timeout_id = 0;
|
||||
}
|
||||
|
||||
if (priv->paint_tower)
|
||||
meta_texture_tower_free (priv->paint_tower);
|
||||
priv->paint_tower = NULL;
|
||||
@ -372,6 +397,21 @@ set_cogl_texture (MetaShapedTexture *stex,
|
||||
meta_texture_tower_set_base_texture (priv->paint_tower, cogl_tex);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
texture_is_idle_and_not_mipmapped (gpointer user_data)
|
||||
{
|
||||
MetaShapedTexture *stex = META_SHAPED_TEXTURE (user_data);
|
||||
MetaShapedTexturePrivate *priv = stex->priv;
|
||||
|
||||
if ((g_get_monotonic_time () - priv->earliest_remipmap) < 0)
|
||||
return G_SOURCE_CONTINUE;
|
||||
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
|
||||
priv->remipmap_timeout_id = 0;
|
||||
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_shaped_texture_paint (ClutterActor *actor)
|
||||
{
|
||||
@ -381,9 +421,10 @@ meta_shaped_texture_paint (ClutterActor *actor)
|
||||
guchar opacity;
|
||||
CoglContext *ctx;
|
||||
CoglFramebuffer *fb;
|
||||
CoglTexture *paint_tex;
|
||||
CoglTexture *paint_tex = NULL;
|
||||
ClutterActorBox alloc;
|
||||
CoglPipelineFilter filter;
|
||||
gint64 now = g_get_monotonic_time ();
|
||||
|
||||
if (priv->clip_region && cairo_region_is_empty (priv->clip_region))
|
||||
return;
|
||||
@ -406,13 +447,34 @@ meta_shaped_texture_paint (ClutterActor *actor)
|
||||
* Setting the texture quality to high without SGIS_generate_mipmap
|
||||
* support for TFP textures will result in fallbacks to XGetImage.
|
||||
*/
|
||||
if (priv->create_mipmaps)
|
||||
paint_tex = meta_texture_tower_get_paint_texture (priv->paint_tower);
|
||||
else
|
||||
paint_tex = COGL_TEXTURE (priv->texture);
|
||||
if (priv->create_mipmaps && priv->last_invalidation)
|
||||
{
|
||||
gint64 age = now - priv->last_invalidation;
|
||||
|
||||
if (age >= MIN_MIPMAP_AGE_USEC ||
|
||||
priv->fast_updates < MIN_FAST_UPDATES_BEFORE_UNMIPMAP)
|
||||
paint_tex = meta_texture_tower_get_paint_texture (priv->paint_tower);
|
||||
}
|
||||
|
||||
if (paint_tex == NULL)
|
||||
return;
|
||||
{
|
||||
paint_tex = COGL_TEXTURE (priv->texture);
|
||||
|
||||
if (paint_tex == NULL)
|
||||
return;
|
||||
|
||||
if (priv->create_mipmaps)
|
||||
{
|
||||
/* Minus 1000 to ensure we don't fail the age test in timeout */
|
||||
priv->earliest_remipmap = now + MIN_MIPMAP_AGE_USEC - 1000;
|
||||
|
||||
if (!priv->remipmap_timeout_id)
|
||||
priv->remipmap_timeout_id =
|
||||
g_timeout_add (MIN_MIPMAP_AGE_USEC / 1000,
|
||||
texture_is_idle_and_not_mipmapped,
|
||||
stex);
|
||||
}
|
||||
}
|
||||
|
||||
tex_width = priv->tex_width;
|
||||
tex_height = priv->tex_height;
|
||||
@ -758,6 +820,20 @@ meta_shaped_texture_update_area (MetaShapedTexture *stex,
|
||||
|
||||
meta_texture_tower_update_area (priv->paint_tower, x, y, width, height);
|
||||
|
||||
priv->prev_invalidation = priv->last_invalidation;
|
||||
priv->last_invalidation = g_get_monotonic_time ();
|
||||
|
||||
if (priv->prev_invalidation)
|
||||
{
|
||||
gint64 interval = priv->last_invalidation - priv->prev_invalidation;
|
||||
gboolean fast_update = interval < MIN_MIPMAP_AGE_USEC;
|
||||
|
||||
if (!fast_update)
|
||||
priv->fast_updates = 0;
|
||||
else if (priv->fast_updates < MIN_FAST_UPDATES_BEFORE_UNMIPMAP)
|
||||
priv->fast_updates++;
|
||||
}
|
||||
|
||||
unobscured_region = effective_unobscured_region (stex);
|
||||
if (unobscured_region)
|
||||
{
|
||||
|
24
src/compositor/meta-window-group-private.h
Normal file
24
src/compositor/meta-window-group-private.h
Normal file
@ -0,0 +1,24 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#ifndef META_WINDOW_GROUP_PRIVATE_H
|
||||
#define META_WINDOW_GROUP_PRIVATE_H
|
||||
|
||||
#include <meta/meta-window-group.h>
|
||||
|
||||
#include <meta/screen.h>
|
||||
|
||||
/**
|
||||
* MetaWindowGroup:
|
||||
*
|
||||
* This class is a subclass of ClutterActor with special handling for
|
||||
* #MetaCullable when painting children. It uses code similar to
|
||||
* meta_cullable_cull_out_children(), but also has additional special
|
||||
* cases for the undirected window, and similar.
|
||||
*/
|
||||
|
||||
|
||||
typedef struct _MetaWindowGroupPrivate MetaWindowGroupPrivate;
|
||||
|
||||
ClutterActor *meta_window_group_new (MetaScreen *screen);
|
||||
|
||||
#endif /* META_WINDOW_GROUP_PRIVATE_H */
|
@ -10,7 +10,7 @@
|
||||
#include "clutter-utils.h"
|
||||
#include "compositor-private.h"
|
||||
#include "meta-window-actor-private.h"
|
||||
#include "meta-window-group.h"
|
||||
#include "meta-window-group-private.h"
|
||||
#include "window-private.h"
|
||||
#include "meta-cullable.h"
|
||||
|
||||
|
@ -1,37 +0,0 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#ifndef META_WINDOW_GROUP_H
|
||||
#define META_WINDOW_GROUP_H
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
#include <meta/screen.h>
|
||||
|
||||
/**
|
||||
* MetaWindowGroup:
|
||||
*
|
||||
* This class is a subclass of ClutterActor with special handling for
|
||||
* #MetaCullable when painting children. It uses code similar to
|
||||
* meta_cullable_cull_out_children(), but also has additional special
|
||||
* cases for the undirected window, and similar.
|
||||
*/
|
||||
|
||||
#define META_TYPE_WINDOW_GROUP (meta_window_group_get_type ())
|
||||
#define META_WINDOW_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_WINDOW_GROUP, MetaWindowGroup))
|
||||
#define META_WINDOW_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_WINDOW_GROUP, MetaWindowGroupClass))
|
||||
#define META_IS_WINDOW_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_WINDOW_GROUP))
|
||||
#define META_IS_WINDOW_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_WINDOW_GROUP))
|
||||
#define META_WINDOW_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_WINDOW_GROUP, MetaWindowGroupClass))
|
||||
|
||||
typedef struct _MetaWindowGroup MetaWindowGroup;
|
||||
typedef struct _MetaWindowGroupClass MetaWindowGroupClass;
|
||||
typedef struct _MetaWindowGroupPrivate MetaWindowGroupPrivate;
|
||||
|
||||
GType meta_window_group_get_type (void);
|
||||
|
||||
ClutterActor *meta_window_group_new (MetaScreen *screen);
|
||||
|
||||
gboolean meta_window_group_actor_is_untransformed (ClutterActor *actor,
|
||||
int *x_origin,
|
||||
int *y_origin);
|
||||
#endif /* META_WINDOW_GROUP_H */
|
@ -115,5 +115,8 @@ meta_window_kill (MetaWindow *window)
|
||||
void
|
||||
meta_window_free_delete_dialog (MetaWindow *window)
|
||||
{
|
||||
if (window->close_dialog &&
|
||||
meta_close_dialog_is_visible (window->close_dialog))
|
||||
meta_close_dialog_hide (window->close_dialog);
|
||||
g_clear_object (&window->close_dialog);
|
||||
}
|
||||
|
@ -53,7 +53,7 @@
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
#include "backends/native/meta-backend-native.h"
|
||||
#include "backends/x11/meta-backend-x11.h"
|
||||
#include "backends/meta-stage.h"
|
||||
#include "backends/meta-stage-private.h"
|
||||
#include "backends/meta-input-settings-private.h"
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
|
||||
|
@ -417,7 +417,7 @@ check_for_wayland_session_type (void)
|
||||
*
|
||||
* If no flag is passed that forces the compositor type, the compositor type
|
||||
* is determined first from the logind session type, or if that fails, from the
|
||||
* XDG_SESSION_TYPE enviornment variable.
|
||||
* XDG_SESSION_TYPE environment variable.
|
||||
*
|
||||
* If no flag is passed that forces the backend type, the backend type is
|
||||
* determined given the compositor type. If the compositor is a Wayland
|
||||
|
@ -81,6 +81,7 @@ typedef enum
|
||||
META_MOVE_RESIZE_STATE_CHANGED = 1 << 5,
|
||||
META_MOVE_RESIZE_UNMAXIMIZE = 1 << 6,
|
||||
META_MOVE_RESIZE_FORCE_MOVE = 1 << 7,
|
||||
META_MOVE_RESIZE_WAYLAND_STATE_CHANGED = 1 << 8,
|
||||
} MetaMoveResizeFlags;
|
||||
|
||||
typedef enum
|
||||
@ -88,6 +89,7 @@ typedef enum
|
||||
META_MOVE_RESIZE_RESULT_MOVED = 1 << 0,
|
||||
META_MOVE_RESIZE_RESULT_RESIZED = 1 << 1,
|
||||
META_MOVE_RESIZE_RESULT_FRAME_SHAPE_CHANGED = 1 << 2,
|
||||
META_MOVE_RESIZE_RESULT_STATE_CHANGED = 1 << 3,
|
||||
} MetaMoveResizeResultFlags;
|
||||
|
||||
typedef enum
|
||||
|
@ -3997,7 +3997,7 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
|
||||
if ((moved_or_resized ||
|
||||
did_placement ||
|
||||
(flags & META_MOVE_RESIZE_STATE_CHANGED) != 0) &&
|
||||
(result & META_MOVE_RESIZE_RESULT_STATE_CHANGED) != 0) &&
|
||||
window->known_to_compositor)
|
||||
{
|
||||
meta_compositor_sync_window_geometry (window->display->compositor,
|
||||
@ -4734,7 +4734,7 @@ set_workspace_state (MetaWindow *window,
|
||||
/* queue a move_resize since changing workspaces may change
|
||||
* the relevant struts
|
||||
*/
|
||||
if (!window->override_redirect)
|
||||
if (!window->override_redirect && window != window->display->grab_window)
|
||||
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
|
||||
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
|
||||
meta_window_current_workspace_changed (window);
|
||||
|
@ -54,4 +54,7 @@ MetaMonitorSwitchConfigType meta_monitor_manager_get_switch_config (MetaMonitorM
|
||||
|
||||
gint meta_monitor_manager_get_display_configuration_timeout (void);
|
||||
|
||||
/* Re-declaration of parent type for introspection */
|
||||
GType meta_dbus_display_config_skeleton_get_type (void) G_GNUC_CONST;
|
||||
|
||||
#endif /* META_MONITOR_MANAGER_H */
|
||||
|
32
src/meta/meta-stage.h
Normal file
32
src/meta/meta-stage.h
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_STAGE_H
|
||||
#define META_STAGE_H
|
||||
|
||||
#include "clutter/clutter.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define META_TYPE_STAGE (meta_stage_get_type ())
|
||||
G_DECLARE_FINAL_TYPE (MetaStage, meta_stage, META, STAGE, ClutterStage)
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* META_STAGE_H */
|
11
src/meta/meta-window-group.h
Normal file
11
src/meta/meta-window-group.h
Normal file
@ -0,0 +1,11 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#ifndef META_WINDOW_GROUP_H
|
||||
#define META_WINDOW_GROUP_H
|
||||
|
||||
#include "clutter/clutter.h"
|
||||
|
||||
#define META_TYPE_WINDOW_GROUP (meta_window_group_get_type())
|
||||
G_DECLARE_FINAL_TYPE (MetaWindowGroup, meta_window_group, META, WINDOW_GROUP, ClutterActor)
|
||||
|
||||
#endif /* META_WINDOW_GROUP_H */
|
271
src/ui/frames.c
271
src/ui/frames.c
@ -71,6 +71,14 @@ static MetaFrameControl get_control (MetaUIFrame *frame,
|
||||
|
||||
G_DEFINE_TYPE (MetaFrames, meta_frames, GTK_TYPE_WINDOW);
|
||||
|
||||
enum {
|
||||
META_ACTION_CLICK,
|
||||
META_ACTION_RIGHT_CLICK,
|
||||
META_ACTION_MIDDLE_CLICK,
|
||||
META_ACTION_DOUBLE_CLICK,
|
||||
META_ACTION_IGNORE
|
||||
};
|
||||
|
||||
static GObject *
|
||||
meta_frames_constructor (GType gtype,
|
||||
guint n_properties,
|
||||
@ -742,17 +750,25 @@ redraw_control (MetaUIFrame *frame,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_frame_titlebar_event (MetaUIFrame *frame,
|
||||
ClutterButtonEvent *event,
|
||||
int action)
|
||||
meta_frame_titlebar_event (MetaUIFrame *frame,
|
||||
const ClutterEvent *event,
|
||||
int action)
|
||||
{
|
||||
MetaFrameFlags flags;
|
||||
Display *display;
|
||||
uint32_t evtime;
|
||||
float x, y;
|
||||
|
||||
g_assert (event->type == CLUTTER_BUTTON_PRESS ||
|
||||
event->type == CLUTTER_TOUCH_BEGIN);
|
||||
|
||||
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
|
||||
flags = meta_frame_get_flags (frame->meta_window->frame);
|
||||
|
||||
evtime = clutter_event_get_time (event);
|
||||
clutter_event_get_coords (event, &x, &y);
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case G_DESKTOP_TITLEBAR_ACTION_TOGGLE_SHADE:
|
||||
@ -760,9 +776,9 @@ meta_frame_titlebar_event (MetaUIFrame *frame,
|
||||
if (flags & META_FRAME_ALLOWS_SHADE)
|
||||
{
|
||||
if (flags & META_FRAME_SHADED)
|
||||
meta_window_unshade (frame->meta_window, event->time);
|
||||
meta_window_unshade (frame->meta_window, evtime);
|
||||
else
|
||||
meta_window_shade (frame->meta_window, event->time);
|
||||
meta_window_shade (frame->meta_window, evtime);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -808,16 +824,14 @@ meta_frame_titlebar_event (MetaUIFrame *frame,
|
||||
case G_DESKTOP_TITLEBAR_ACTION_LOWER:
|
||||
meta_core_user_lower_and_unfocus (display,
|
||||
frame->xwindow,
|
||||
event->time);
|
||||
evtime);
|
||||
break;
|
||||
|
||||
case G_DESKTOP_TITLEBAR_ACTION_MENU:
|
||||
meta_core_show_window_menu (display,
|
||||
frame->xwindow,
|
||||
META_WINDOW_MENU_WM,
|
||||
event->x,
|
||||
event->y,
|
||||
event->time);
|
||||
x, y, evtime);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -825,8 +839,8 @@ meta_frame_titlebar_event (MetaUIFrame *frame,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_frame_double_click_event (MetaUIFrame *frame,
|
||||
ClutterButtonEvent *event)
|
||||
meta_frame_double_click_event (MetaUIFrame *frame,
|
||||
const ClutterEvent *event)
|
||||
{
|
||||
int action = meta_prefs_get_action_double_click_titlebar ();
|
||||
|
||||
@ -839,7 +853,8 @@ meta_frame_middle_click_event (MetaUIFrame *frame,
|
||||
{
|
||||
int action = meta_prefs_get_action_middle_click_titlebar();
|
||||
|
||||
return meta_frame_titlebar_event (frame, event, action);
|
||||
return meta_frame_titlebar_event (frame, (const ClutterEvent *) event,
|
||||
action);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -848,7 +863,8 @@ meta_frame_right_click_event (MetaUIFrame *frame,
|
||||
{
|
||||
int action = meta_prefs_get_action_right_click_titlebar();
|
||||
|
||||
return meta_frame_titlebar_event (frame, event, action);
|
||||
return meta_frame_titlebar_event (frame, (const ClutterEvent *) event,
|
||||
action);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -879,6 +895,8 @@ meta_frames_try_grab_op (MetaUIFrame *frame,
|
||||
frames->grab_x = grab_x;
|
||||
frames->grab_y = grab_y;
|
||||
}
|
||||
else
|
||||
frames->grab_touch = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -889,6 +907,7 @@ meta_frames_retry_grab_op (MetaFrames *frames,
|
||||
{
|
||||
Display *display;
|
||||
MetaGrabOp op;
|
||||
gboolean ret;
|
||||
|
||||
if (frames->current_grab_op == META_GRAB_OP_NONE)
|
||||
return TRUE;
|
||||
@ -897,16 +916,20 @@ meta_frames_retry_grab_op (MetaFrames *frames,
|
||||
frames->current_grab_op = META_GRAB_OP_NONE;
|
||||
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
|
||||
return meta_core_begin_grab_op (display,
|
||||
frames->grab_frame->xwindow,
|
||||
op,
|
||||
FALSE,
|
||||
TRUE,
|
||||
frames->grab_frame->grab_button,
|
||||
0,
|
||||
time,
|
||||
frames->grab_x,
|
||||
frames->grab_y);
|
||||
ret = meta_core_begin_grab_op (display,
|
||||
frames->grab_frame->xwindow,
|
||||
op,
|
||||
FALSE,
|
||||
TRUE,
|
||||
frames->grab_frame->grab_button,
|
||||
0,
|
||||
time,
|
||||
frames->grab_x,
|
||||
frames->grab_y);
|
||||
if (ret)
|
||||
frames->grab_touch = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static MetaGrabOp
|
||||
@ -935,12 +958,65 @@ grab_op_from_resize_control (MetaFrameControl control)
|
||||
}
|
||||
}
|
||||
|
||||
static guint
|
||||
get_action (const ClutterEvent *event)
|
||||
{
|
||||
if (event->type == CLUTTER_BUTTON_PRESS ||
|
||||
event->type == CLUTTER_BUTTON_RELEASE)
|
||||
{
|
||||
switch (event->button.button)
|
||||
{
|
||||
case CLUTTER_BUTTON_PRIMARY:
|
||||
if (clutter_event_get_click_count (event) == 2)
|
||||
return META_ACTION_DOUBLE_CLICK;
|
||||
else
|
||||
return META_ACTION_CLICK;
|
||||
case CLUTTER_BUTTON_SECONDARY:
|
||||
return META_ACTION_RIGHT_CLICK;
|
||||
case CLUTTER_BUTTON_MIDDLE:
|
||||
return META_ACTION_MIDDLE_CLICK;
|
||||
default:
|
||||
meta_verbose ("No action triggered for button %u %s\n",
|
||||
event->button.button,
|
||||
(event->type == CLUTTER_BUTTON_PRESS) ? "press" : "release");
|
||||
}
|
||||
}
|
||||
else if (event->type == CLUTTER_TOUCH_BEGIN ||
|
||||
event->type == CLUTTER_TOUCH_UPDATE ||
|
||||
event->type == CLUTTER_TOUCH_END)
|
||||
{
|
||||
return META_ACTION_CLICK;
|
||||
}
|
||||
|
||||
return META_ACTION_IGNORE;
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
get_button_number (const ClutterEvent *event)
|
||||
{
|
||||
if (event->type == CLUTTER_TOUCH_BEGIN ||
|
||||
event->type == CLUTTER_TOUCH_UPDATE ||
|
||||
event->type == CLUTTER_TOUCH_END)
|
||||
return -1;
|
||||
else if (event->type == CLUTTER_BUTTON_PRESS ||
|
||||
event->type == CLUTTER_BUTTON_RELEASE)
|
||||
return clutter_event_get_button (event);
|
||||
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_frame_left_click_event (MetaUIFrame *frame,
|
||||
ClutterButtonEvent *event)
|
||||
meta_frame_left_click_event (MetaUIFrame *frame,
|
||||
const ClutterEvent *event)
|
||||
{
|
||||
Display *display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
MetaFrameControl control = get_control (frame, event->x, event->y);
|
||||
MetaFrameControl control;
|
||||
guint32 evtime;
|
||||
gfloat x, y;
|
||||
|
||||
evtime = clutter_event_get_time (event);
|
||||
clutter_event_get_coords (event, &x, &y);
|
||||
control = get_control (frame, x, y);
|
||||
|
||||
switch (control)
|
||||
{
|
||||
@ -950,7 +1026,7 @@ meta_frame_left_click_event (MetaUIFrame *frame,
|
||||
case META_FRAME_CONTROL_DELETE:
|
||||
case META_FRAME_CONTROL_MENU:
|
||||
case META_FRAME_CONTROL_APPMENU:
|
||||
frame->grab_button = event->button;
|
||||
frame->grab_button = get_button_number (event);
|
||||
frame->button_state = META_BUTTON_STATE_PRESSED;
|
||||
frame->prelit_control = control;
|
||||
redraw_control (frame, control);
|
||||
@ -987,13 +1063,12 @@ meta_frame_left_click_event (MetaUIFrame *frame,
|
||||
frame->xwindow,
|
||||
menu,
|
||||
&root_rect,
|
||||
event->time);
|
||||
evtime);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_frames_try_grab_op (frame, META_GRAB_OP_FRAME_BUTTON,
|
||||
event->x, event->y,
|
||||
event->time);
|
||||
x, y, evtime);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
@ -1007,8 +1082,7 @@ meta_frame_left_click_event (MetaUIFrame *frame,
|
||||
case META_FRAME_CONTROL_RESIZE_W:
|
||||
meta_frames_try_grab_op (frame,
|
||||
grab_op_from_resize_control (control),
|
||||
event->x, event->y,
|
||||
event->time);
|
||||
x, y, evtime);
|
||||
|
||||
return TRUE;
|
||||
case META_FRAME_CONTROL_TITLE:
|
||||
@ -1019,8 +1093,7 @@ meta_frame_left_click_event (MetaUIFrame *frame,
|
||||
{
|
||||
meta_frames_try_grab_op (frame,
|
||||
META_GRAB_OP_MOVING,
|
||||
event->x, event->y,
|
||||
event->time);
|
||||
x, y, evtime);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1036,21 +1109,31 @@ meta_frame_left_click_event (MetaUIFrame *frame,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
handle_button_press_event (MetaUIFrame *frame,
|
||||
ClutterButtonEvent *event)
|
||||
handle_press_event (MetaUIFrame *frame,
|
||||
const ClutterEvent *event)
|
||||
{
|
||||
MetaFrameControl control;
|
||||
Display *display;
|
||||
uint32_t evtime, action;
|
||||
float x, y;
|
||||
|
||||
g_assert (event->type == CLUTTER_BUTTON_PRESS ||
|
||||
event->type == CLUTTER_TOUCH_BEGIN);
|
||||
|
||||
action = get_action (event);
|
||||
if (action == META_ACTION_IGNORE)
|
||||
return FALSE;
|
||||
|
||||
display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
|
||||
control = get_control (frame, event->x, event->y);
|
||||
|
||||
evtime = clutter_event_get_time (event);
|
||||
clutter_event_get_coords (event, &x, &y);
|
||||
control = get_control (frame, x, y);
|
||||
/* don't do the rest of this if on client area */
|
||||
if (control == META_FRAME_CONTROL_CLIENT_AREA)
|
||||
return FALSE; /* not on the frame, just passed through from client */
|
||||
|
||||
if (event->button == 1 &&
|
||||
if (action == META_ACTION_CLICK &&
|
||||
!(control == META_FRAME_CONTROL_MINIMIZE ||
|
||||
control == META_FRAME_CONTROL_DELETE ||
|
||||
control == META_FRAME_CONTROL_MAXIMIZE))
|
||||
@ -1058,52 +1141,60 @@ handle_button_press_event (MetaUIFrame *frame,
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Focusing window with frame 0x%lx due to button 1 press\n",
|
||||
frame->xwindow);
|
||||
meta_window_focus (frame->meta_window, event->time);
|
||||
meta_window_focus (frame->meta_window, evtime);
|
||||
}
|
||||
|
||||
/* We want to shade even if we have a GrabOp, since we'll have a move grab
|
||||
* if we double click the titlebar.
|
||||
*/
|
||||
if (control == META_FRAME_CONTROL_TITLE &&
|
||||
event->button == 1 &&
|
||||
event->click_count == 2)
|
||||
action == META_ACTION_DOUBLE_CLICK)
|
||||
{
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
meta_core_end_grab_op (display, evtime);
|
||||
return meta_frame_double_click_event (frame, event);
|
||||
}
|
||||
|
||||
if (meta_core_get_grab_op (display) != META_GRAB_OP_NONE)
|
||||
return FALSE; /* already up to something */
|
||||
|
||||
frame->grab_button = event->button;
|
||||
frame->grab_button = get_button_number (event);
|
||||
|
||||
switch (event->button)
|
||||
switch (action)
|
||||
{
|
||||
case 1:
|
||||
case META_ACTION_CLICK:
|
||||
return meta_frame_left_click_event (frame, event);
|
||||
case 2:
|
||||
return meta_frame_middle_click_event (frame, event);
|
||||
case 3:
|
||||
return meta_frame_right_click_event (frame, event);
|
||||
case META_ACTION_MIDDLE_CLICK:
|
||||
return meta_frame_middle_click_event (frame, (ClutterButtonEvent *) event);
|
||||
case META_ACTION_RIGHT_CLICK:
|
||||
return meta_frame_right_click_event (frame, (ClutterButtonEvent *) event);
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
handle_button_release_event (MetaUIFrame *frame,
|
||||
ClutterButtonEvent *event)
|
||||
handle_release_event (MetaUIFrame *frame,
|
||||
const ClutterEvent *event)
|
||||
{
|
||||
Display *display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
||||
guint32 evtime, button;
|
||||
gfloat x, y;
|
||||
|
||||
g_assert (event->type == CLUTTER_BUTTON_RELEASE ||
|
||||
event->type == CLUTTER_TOUCH_END);
|
||||
|
||||
evtime = clutter_event_get_time (event);
|
||||
clutter_event_get_coords (event, &x, &y);
|
||||
button = get_button_number (event);
|
||||
|
||||
frame->frames->current_grab_op = META_GRAB_OP_NONE;
|
||||
meta_core_end_grab_op (display, event->time);
|
||||
meta_core_end_grab_op (display, evtime);
|
||||
|
||||
/* We only handle the releases we handled the presses for (things
|
||||
* involving frame controls). Window ops that don't require a
|
||||
* frame are handled in the Xlib part of the code, display.c/window.c
|
||||
*/
|
||||
if (((int) event->button) == frame->grab_button &&
|
||||
if (((int) button) == frame->grab_button &&
|
||||
frame->button_state == META_BUTTON_STATE_PRESSED)
|
||||
{
|
||||
switch (frame->prelit_control)
|
||||
@ -1113,7 +1204,7 @@ handle_button_release_event (MetaUIFrame *frame,
|
||||
break;
|
||||
case META_FRAME_CONTROL_MAXIMIZE:
|
||||
/* Focus the window on the maximize */
|
||||
meta_window_focus (frame->meta_window, event->time);
|
||||
meta_window_focus (frame->meta_window, evtime);
|
||||
if (meta_prefs_get_raise_on_click ())
|
||||
meta_window_raise (frame->meta_window);
|
||||
meta_window_maximize (frame->meta_window, META_MAXIMIZE_BOTH);
|
||||
@ -1124,7 +1215,7 @@ handle_button_release_event (MetaUIFrame *frame,
|
||||
meta_window_unmaximize (frame->meta_window, META_MAXIMIZE_BOTH);
|
||||
break;
|
||||
case META_FRAME_CONTROL_DELETE:
|
||||
meta_window_delete (frame->meta_window, event->time);
|
||||
meta_window_delete (frame->meta_window, evtime);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -1135,7 +1226,7 @@ handle_button_release_event (MetaUIFrame *frame,
|
||||
* prelit so to let the user know that it can now be pressed.
|
||||
* :)
|
||||
*/
|
||||
MetaFrameControl control = get_control (frame, event->x, event->y);
|
||||
MetaFrameControl control = get_control (frame, x, y);
|
||||
meta_ui_frame_update_prelit_control (frame, control);
|
||||
}
|
||||
|
||||
@ -1236,13 +1327,22 @@ meta_ui_frame_update_prelit_control (MetaUIFrame *frame,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
handle_motion_notify_event (MetaUIFrame *frame,
|
||||
ClutterMotionEvent *event)
|
||||
handle_motion_event (MetaUIFrame *frame,
|
||||
const ClutterEvent *event)
|
||||
{
|
||||
MetaFrames *frames = frame->frames;
|
||||
MetaFrameControl control;
|
||||
ClutterModifierType modifiers;
|
||||
guint32 evtime;
|
||||
gfloat x, y;
|
||||
|
||||
control = get_control (frame, event->x, event->y);
|
||||
g_assert (event->type == CLUTTER_MOTION ||
|
||||
event->type == CLUTTER_TOUCH_UPDATE);
|
||||
|
||||
modifiers = clutter_event_get_state (event);
|
||||
evtime = clutter_event_get_time (event);
|
||||
clutter_event_get_coords (event, &x, &y);
|
||||
control = get_control (frame, x, y);
|
||||
|
||||
if (frame->button_state == META_BUTTON_STATE_PRESSED)
|
||||
{
|
||||
@ -1260,9 +1360,11 @@ handle_motion_notify_event (MetaUIFrame *frame,
|
||||
meta_ui_frame_update_prelit_control (frame, control);
|
||||
}
|
||||
|
||||
if ((event->modifier_state & CLUTTER_BUTTON1_MASK) &&
|
||||
frames->current_grab_op != META_GRAB_OP_NONE)
|
||||
meta_frames_retry_grab_op (frames, event->time);
|
||||
if (frames->current_grab_op != META_GRAB_OP_NONE &&
|
||||
(event->type == CLUTTER_TOUCH_UPDATE ||
|
||||
(event->type == CLUTTER_MOTION &&
|
||||
(modifiers & CLUTTER_BUTTON1_MASK))))
|
||||
meta_frames_retry_grab_op (frames, evtime);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -1516,14 +1618,51 @@ gboolean
|
||||
meta_ui_frame_handle_event (MetaUIFrame *frame,
|
||||
const ClutterEvent *event)
|
||||
{
|
||||
if (event->type == CLUTTER_TOUCH_BEGIN ||
|
||||
event->type == CLUTTER_TOUCH_UPDATE ||
|
||||
event->type == CLUTTER_TOUCH_END)
|
||||
{
|
||||
ClutterEventSequence *sequence;
|
||||
MetaFrames *frames = frame->frames;
|
||||
|
||||
/* In X11, mutter sets up passive touch grabs which basically
|
||||
* means we handle those events twice (once through the passive
|
||||
* grab, and then through XISelectEvents).
|
||||
*
|
||||
* Receiving touch events here means we are going through the
|
||||
* former, but passive grabs are exclusively for gesture
|
||||
* recognition purposes.
|
||||
*
|
||||
* We do actually want this to happen though the regular event
|
||||
* selection paths to avoid breaking internal state, which means
|
||||
* we will get pointer events, because we don't select for XI_Touch*.
|
||||
*/
|
||||
if (!meta_is_wayland_compositor ())
|
||||
return FALSE;
|
||||
|
||||
sequence = clutter_event_get_event_sequence (event);
|
||||
|
||||
/* Lock onto a single touch */
|
||||
if (frames->grab_touch && frames->grab_touch != sequence)
|
||||
return FALSE;
|
||||
|
||||
if (event->type == CLUTTER_TOUCH_BEGIN)
|
||||
frames->grab_touch = sequence;
|
||||
else if (event->type == CLUTTER_TOUCH_END)
|
||||
frames->grab_touch = NULL;
|
||||
}
|
||||
|
||||
switch (event->any.type)
|
||||
{
|
||||
case CLUTTER_BUTTON_PRESS:
|
||||
return handle_button_press_event (frame, (ClutterButtonEvent *) event);
|
||||
case CLUTTER_TOUCH_BEGIN:
|
||||
return handle_press_event (frame, event);
|
||||
case CLUTTER_BUTTON_RELEASE:
|
||||
return handle_button_release_event (frame, (ClutterButtonEvent *) event);
|
||||
case CLUTTER_TOUCH_END:
|
||||
return handle_release_event (frame, event);
|
||||
case CLUTTER_MOTION:
|
||||
return handle_motion_notify_event (frame, (ClutterMotionEvent *) event);
|
||||
case CLUTTER_TOUCH_UPDATE:
|
||||
return handle_motion_event (frame, event);
|
||||
case CLUTTER_ENTER:
|
||||
return handle_enter_notify_event (frame, (ClutterCrossingEvent *) event);
|
||||
case CLUTTER_LEAVE:
|
||||
|
@ -99,6 +99,8 @@ struct _MetaFrames
|
||||
guint grab_button;
|
||||
gdouble grab_x;
|
||||
gdouble grab_y;
|
||||
|
||||
ClutterEventSequence *grab_touch;
|
||||
};
|
||||
|
||||
struct _MetaFramesClass
|
||||
|
@ -50,19 +50,23 @@ meta_wayland_actor_surface_constructed (GObject *object)
|
||||
}
|
||||
|
||||
static void
|
||||
meta_wayland_actor_surface_finalize (GObject *object)
|
||||
meta_wayland_actor_surface_dispose (GObject *object)
|
||||
{
|
||||
MetaWaylandActorSurfacePrivate *priv =
|
||||
meta_wayland_actor_surface_get_instance_private (META_WAYLAND_ACTOR_SURFACE (object));
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (META_WAYLAND_SURFACE_ROLE (object));
|
||||
|
||||
g_signal_handlers_disconnect_by_func (priv->actor,
|
||||
meta_wayland_surface_notify_geometry_changed,
|
||||
surface);
|
||||
g_object_unref (priv->actor);
|
||||
if (priv->actor)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (priv->actor,
|
||||
meta_wayland_surface_notify_geometry_changed,
|
||||
surface);
|
||||
clutter_actor_set_reactive (CLUTTER_ACTOR (priv->actor), FALSE);
|
||||
g_clear_object (&priv->actor);
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (meta_wayland_actor_surface_parent_class)->finalize (object);
|
||||
G_OBJECT_CLASS (meta_wayland_actor_surface_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -72,10 +76,18 @@ meta_wayland_actor_surface_assigned (MetaWaylandSurfaceRole *surface_role)
|
||||
meta_wayland_actor_surface_get_instance_private (META_WAYLAND_ACTOR_SURFACE (surface_role));
|
||||
MetaWaylandSurface *surface =
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
GList *l;
|
||||
|
||||
meta_surface_actor_wayland_add_frame_callbacks (META_SURFACE_ACTOR_WAYLAND (priv->actor),
|
||||
&surface->pending_frame_callback_list);
|
||||
wl_list_init (&surface->pending_frame_callback_list);
|
||||
|
||||
for (l = surface->subsurfaces; l; l = l->next)
|
||||
{
|
||||
ClutterActor *subsurface_actor =
|
||||
CLUTTER_ACTOR (meta_wayland_surface_get_actor (l->data));
|
||||
clutter_actor_add_child (CLUTTER_ACTOR (priv->actor), subsurface_actor);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -262,7 +274,7 @@ meta_wayland_actor_surface_class_init (MetaWaylandActorSurfaceClass *klass)
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->constructed = meta_wayland_actor_surface_constructed;
|
||||
object_class->finalize = meta_wayland_actor_surface_finalize;
|
||||
object_class->dispose = meta_wayland_actor_surface_dispose;
|
||||
|
||||
surface_role_class->assigned = meta_wayland_actor_surface_assigned;
|
||||
surface_role_class->commit = meta_wayland_actor_surface_commit;
|
||||
|
@ -600,6 +600,10 @@ meta_wayland_zxdg_toplevel_v6_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWindow *window = surface->window;
|
||||
MetaRectangle window_geometry;
|
||||
MetaRectangle old_geometry;
|
||||
gboolean geometry_changed;
|
||||
|
||||
old_geometry = xdg_surface_priv->geometry;
|
||||
|
||||
surface_role_class =
|
||||
META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_zxdg_toplevel_v6_parent_class);
|
||||
@ -618,7 +622,9 @@ meta_wayland_zxdg_toplevel_v6_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
if (pending->has_new_geometry)
|
||||
geometry_changed = !meta_rectangle_equal (&old_geometry, &xdg_surface_priv->geometry);
|
||||
|
||||
if (geometry_changed || meta_window_wayland_needs_move_resize (window))
|
||||
{
|
||||
window_geometry =
|
||||
meta_wayland_zxdg_surface_v6_get_window_geometry (xdg_surface);
|
||||
|
@ -471,8 +471,11 @@ wl_subcompositor_get_subsurface (struct wl_client *client,
|
||||
&surface->sub.parent_destroy_listener);
|
||||
parent->subsurfaces = g_list_append (parent->subsurfaces, surface);
|
||||
|
||||
clutter_actor_add_child (CLUTTER_ACTOR (meta_wayland_surface_get_actor (parent)),
|
||||
CLUTTER_ACTOR (meta_wayland_surface_get_actor (surface)));
|
||||
if (meta_wayland_surface_get_actor (parent))
|
||||
{
|
||||
clutter_actor_add_child (CLUTTER_ACTOR (meta_wayland_surface_get_actor (parent)),
|
||||
CLUTTER_ACTOR (meta_wayland_surface_get_actor (surface)));
|
||||
}
|
||||
|
||||
clutter_actor_set_reactive (CLUTTER_ACTOR (meta_wayland_surface_get_actor (surface)), TRUE);
|
||||
}
|
||||
|
@ -573,7 +573,10 @@ meta_wayland_surface_is_effectively_synchronized (MetaWaylandSurface *surface)
|
||||
{
|
||||
MetaWaylandSurface *parent = surface->sub.parent;
|
||||
|
||||
return meta_wayland_surface_is_effectively_synchronized (parent);
|
||||
if (parent)
|
||||
return meta_wayland_surface_is_effectively_synchronized (parent);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -120,8 +120,6 @@ meta_wayland_text_input_focus_commit_text (ClutterInputFocus *focus,
|
||||
gtk_text_input_send_preedit_string (resource, NULL, 0);
|
||||
gtk_text_input_send_commit_string (resource, text);
|
||||
}
|
||||
|
||||
clutter_input_focus_reset (focus);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -252,10 +252,8 @@ is_valid_child (MetaWaylandSurface *surface)
|
||||
if (!surface->role)
|
||||
return FALSE;
|
||||
|
||||
if (!META_IS_WAYLAND_XDG_SURFACE (surface->role))
|
||||
return FALSE;
|
||||
|
||||
if (!META_IS_WAYLAND_ZXDG_SURFACE_V6 (surface->role))
|
||||
if (!META_IS_WAYLAND_XDG_TOPLEVEL (surface->role) &&
|
||||
!META_IS_WAYLAND_ZXDG_TOPLEVEL_V6 (surface->role))
|
||||
return FALSE;
|
||||
|
||||
if (!surface->window)
|
||||
@ -384,7 +382,7 @@ xdg_importer_import (struct wl_client *client,
|
||||
(!META_IS_WAYLAND_XDG_SURFACE (exported->surface->role) &&
|
||||
!META_IS_WAYLAND_ZXDG_SURFACE_V6 (exported->surface->role)))
|
||||
{
|
||||
zxdg_imported_v1_send_destroyed (resource);
|
||||
zxdg_imported_v1_send_destroyed (xdg_imported_resource);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -621,6 +621,8 @@ meta_wayland_xdg_toplevel_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
meta_wayland_surface_role_get_surface (surface_role);
|
||||
MetaWindow *window;
|
||||
MetaRectangle window_geometry;
|
||||
MetaRectangle old_geometry;
|
||||
gboolean geometry_changed;
|
||||
|
||||
if (!surface->buffer_ref.buffer && xdg_surface_priv->first_buffer_attached)
|
||||
{
|
||||
@ -629,6 +631,7 @@ meta_wayland_xdg_toplevel_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
}
|
||||
|
||||
window = surface->window;
|
||||
old_geometry = xdg_surface_priv->geometry;
|
||||
|
||||
surface_role_class =
|
||||
META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_xdg_toplevel_parent_class);
|
||||
@ -643,7 +646,9 @@ meta_wayland_xdg_toplevel_commit (MetaWaylandSurfaceRole *surface_role,
|
||||
if (!pending->newly_attached)
|
||||
return;
|
||||
|
||||
if (pending->has_new_geometry)
|
||||
geometry_changed = !meta_rectangle_equal (&old_geometry, &xdg_surface_priv->geometry);
|
||||
|
||||
if (geometry_changed || meta_window_wayland_needs_move_resize (window))
|
||||
{
|
||||
window_geometry = meta_wayland_xdg_surface_get_window_geometry (xdg_surface);
|
||||
meta_window_wayland_move_resize (window,
|
||||
|
@ -48,6 +48,7 @@ struct _MetaWindowWayland
|
||||
int geometry_scale;
|
||||
|
||||
MetaWaylandSerial pending_configure_serial;
|
||||
gboolean has_pending_state_change;
|
||||
gboolean has_pending_move;
|
||||
int pending_move_x;
|
||||
int pending_move_y;
|
||||
@ -324,6 +325,9 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
|
||||
window->buffer_rect.x = new_buffer_x;
|
||||
window->buffer_rect.y = new_buffer_y;
|
||||
}
|
||||
|
||||
if (flags & META_MOVE_RESIZE_WAYLAND_STATE_CHANGED)
|
||||
*result |= META_MOVE_RESIZE_RESULT_STATE_CHANGED;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -336,6 +340,8 @@ meta_window_wayland_move_resize_internal (MetaWindow *window,
|
||||
wl_window->pending_move_x = new_x;
|
||||
wl_window->pending_move_y = new_y;
|
||||
}
|
||||
|
||||
wl_window->has_pending_state_change = (flags & META_MOVE_RESIZE_STATE_CHANGED) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -629,12 +635,9 @@ meta_window_wayland_new (MetaDisplay *display,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
should_do_pending_move (MetaWindowWayland *wl_window,
|
||||
MetaWaylandSerial *acked_configure_serial)
|
||||
is_pending_ack_configure (MetaWindowWayland *wl_window,
|
||||
MetaWaylandSerial *acked_configure_serial)
|
||||
{
|
||||
if (!wl_window->has_pending_move)
|
||||
return FALSE;
|
||||
|
||||
if (wl_window->pending_configure_serial.set)
|
||||
{
|
||||
/* If we're waiting for a configure and this isn't an ACK for
|
||||
@ -677,6 +680,7 @@ meta_window_wayland_move_resize (MetaWindow *window,
|
||||
int gravity;
|
||||
MetaRectangle rect;
|
||||
MetaMoveResizeFlags flags;
|
||||
gboolean pending_ack_configure;
|
||||
|
||||
/* new_geom is in the logical pixel coordinate space, but MetaWindow wants its
|
||||
* rects to represent what in turn will end up on the stage, i.e. we need to
|
||||
@ -700,10 +704,12 @@ meta_window_wayland_move_resize (MetaWindow *window,
|
||||
|
||||
flags = META_MOVE_RESIZE_WAYLAND_RESIZE;
|
||||
|
||||
pending_ack_configure = is_pending_ack_configure (wl_window, acked_configure_serial);
|
||||
|
||||
/* x/y are ignored when we're doing interactive resizing */
|
||||
if (!meta_grab_op_is_resizing (window->display->grab_op))
|
||||
{
|
||||
if (wl_window->has_pending_move && should_do_pending_move (wl_window, acked_configure_serial))
|
||||
if (wl_window->has_pending_move && pending_ack_configure)
|
||||
{
|
||||
rect.x = wl_window->pending_move_x;
|
||||
rect.y = wl_window->pending_move_y;
|
||||
@ -724,6 +730,12 @@ meta_window_wayland_move_resize (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
if (wl_window->has_pending_state_change && pending_ack_configure)
|
||||
{
|
||||
flags |= META_MOVE_RESIZE_WAYLAND_STATE_CHANGED;
|
||||
wl_window->has_pending_state_change = FALSE;
|
||||
}
|
||||
|
||||
wl_window->pending_configure_serial.set = FALSE;
|
||||
|
||||
rect.width = new_geom.width;
|
||||
@ -903,3 +915,10 @@ meta_window_wayland_get_max_size (MetaWindow *window,
|
||||
scale_size (width, height, scale);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_window_wayland_needs_move_resize (MetaWindow *window)
|
||||
{
|
||||
MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window);
|
||||
|
||||
return wl_window->has_pending_state_change || wl_window->has_pending_move;
|
||||
}
|
||||
|
@ -78,5 +78,6 @@ void meta_window_wayland_get_max_size (MetaWindow *window,
|
||||
int *width,
|
||||
int *height);
|
||||
|
||||
gboolean meta_window_wayland_needs_move_resize (MetaWindow *window);
|
||||
|
||||
#endif
|
||||
|
@ -1282,6 +1282,8 @@ meta_window_x11_move_resize_internal (MetaWindow *window,
|
||||
*result |= META_MOVE_RESIZE_RESULT_MOVED;
|
||||
if (need_resize_client || need_resize_frame)
|
||||
*result |= META_MOVE_RESIZE_RESULT_RESIZED;
|
||||
if (flags & META_MOVE_RESIZE_STATE_CHANGED)
|
||||
*result |= META_MOVE_RESIZE_RESULT_STATE_CHANGED;
|
||||
|
||||
update_gtk_edge_constraints (window);
|
||||
}
|
||||
|
Reference in New Issue
Block a user