Compare commits
100 Commits
wip/frame-
...
3.7.90
Author | SHA1 | Date | |
---|---|---|---|
51ccaaaff0 | |||
b09f47d17f | |||
1dbefc4e36 | |||
7f6a77232f | |||
580feb0c85 | |||
842bc4421c | |||
aba87407e9 | |||
112ef93e19 | |||
c4efd1c789 | |||
7e61ef0936 | |||
e9709b7ff9 | |||
027593faa5 | |||
491c5b622e | |||
5e9621ed80 | |||
f5de1c78af | |||
b0774d795c | |||
034ab77c30 | |||
a6a9d3f448 | |||
a215852d3c | |||
264a0bbd15 | |||
55a4d0e0cb | |||
d900d83522 | |||
e8b0c11703 | |||
3d337a98d9 | |||
3e38a48c40 | |||
5876f2e3e5 | |||
aeb589c176 | |||
14dd766e11 | |||
24ff4b5622 | |||
7f3362bdce | |||
6b5cf2eb61 | |||
fb0cd80332 | |||
579bf2105e | |||
995e8040dd | |||
0503f6bb9a | |||
87fe9685b5 | |||
2d9b8bb2d0 | |||
74b1a9e2b9 | |||
fcc178ee8c | |||
d8696c17be | |||
b07aea467e | |||
04ef448927 | |||
790bfcad9a | |||
fbfab93c63 | |||
70c0d39fa7 | |||
7d43bde019 | |||
7743c70d47 | |||
c9343e3ee3 | |||
3abaf506a6 | |||
9de142db09 | |||
2942b22ccf | |||
94e6e55ef7 | |||
34fc234fd7 | |||
c3ffd28bb6 | |||
1c680be11a | |||
a362c08f4e | |||
380154af0a | |||
d482590c84 | |||
b3c572b8e3 | |||
c64eb94724 | |||
d8f569eaf5 | |||
57c31a56f4 | |||
8b21df92f0 | |||
e914595062 | |||
a2a3188331 | |||
453020c315 | |||
d794db876a | |||
b33b4a8e2c | |||
6f74a63bbd | |||
5298d1c8d0 | |||
493f619adc | |||
a613a55658 | |||
3fe5a676c2 | |||
19420f147f | |||
32b7743735 | |||
093e101252 | |||
6f873be7fa | |||
f37dd25e92 | |||
d48df249c9 | |||
e48c3dac87 | |||
3516902fae | |||
66185a468c | |||
84930f1d78 | |||
07273a075d | |||
3900aa10f8 | |||
d8058138ab | |||
ac49259fc7 | |||
12dbb90a5a | |||
90f2a3ae4c | |||
867e10dbcc | |||
9a57626556 | |||
b9e21b76ae | |||
2ecc50af53 | |||
1cebe19bbe | |||
71055556ee | |||
4d9d66da65 | |||
30bdadb519 | |||
c388ccf477 | |||
a2d54bb2ab | |||
cefadb55b1 |
45
NEWS
45
NEWS
@ -1,3 +1,48 @@
|
||||
3.7.90
|
||||
======
|
||||
* Support _NET_WM_OPAQUE_REGION [Jasper, Adel; #679901]
|
||||
* Add wrapper for XI2.3 pointer barriers [Jasper; #677215]
|
||||
* Update style of resize popups [Cosimo; #692741]
|
||||
* Implement compositor <-> application frame synchronization [Owen; #685463]
|
||||
* Handle animated backgrounds [Ray; #682427]
|
||||
* Add a new window group for override-redirect windows [Gayan; #633620]
|
||||
* Pass on pointer events on guard window to Clutter [Jasper; #681540]
|
||||
* Show correct shortcut in window menus [Giovanni; #694045]
|
||||
* Don't put minimized windows at the back of alt-tab [Jasper; #693991]
|
||||
* Misc bug fixes and cleanups [Jasper, Rico, Adel, Florian, Rui, Giovanni,
|
||||
Owen; #692679, #693354, #690581, #693439, #692718, #693475, #693482, #693540,
|
||||
#690580, #680990, #693833, #693922, #693854, #694224]
|
||||
|
||||
Contributors:
|
||||
Giovanni Campagna, Cosimo Cecchi, Adel Gadllah, Rui Matos, Florian Müllner,
|
||||
Gayan Perera, Jasper St. Pierre, Ray Strode, Owen Taylor, Rico Tzschichholz
|
||||
|
||||
Translations:
|
||||
Fran Diéguez [gl], A S Alam [pa], Alexandre Franke [fr], Aurimas Černius [lt],
|
||||
Мирослав Николић [sr, sr@latin], Fran Diéguez [gl], Piotr Drąg [pl],
|
||||
Luca Ferretti [it], Daniel Mustieles [es]
|
||||
|
||||
3.7.5
|
||||
=====
|
||||
* Don't allow multiline window titles [Jon; #683056]
|
||||
* Make meta_window_located_on_workspace() public [Jasper; #691744]
|
||||
* Request XI2.3 [Colin; #692877]
|
||||
* Add meta_window_set_icon_geometry() method [Florian; #692997]
|
||||
* Require XFixes 5.0 [Jasper; #677215]
|
||||
* Change unredirection hints to match spec changes [Adel; #693064]
|
||||
* Improve unredict heuristicts [Adel; #683786]
|
||||
* Misc bug fixes and cleanups [Florian, Jasper, Adel; #691874, #679901,
|
||||
#692952, #693042]
|
||||
|
||||
Contributors:
|
||||
Adel Gadllah, William Jon McCann, Florian Müllner, Jasper St. Pierre,
|
||||
Colin Walters
|
||||
|
||||
Translations:
|
||||
Daniel Mustieles [es], Ihar Hrachyshka [be], Nilamdyuti Goswami [as],
|
||||
Gheyret Kenji [ug], Kjartan Maraas [nb], Yaron Shahrabani [he],
|
||||
Piotr Drąg [pl], Chao-Hsiung Liao [zh_HK,zh_TW], Milo Casagrande [it]
|
||||
|
||||
3.7.4
|
||||
=====
|
||||
* Add support for bypass compositor hints [Adel; #683020]
|
||||
|
11
configure.ac
11
configure.ac
@ -2,7 +2,7 @@ AC_PREREQ(2.50)
|
||||
|
||||
m4_define([mutter_major_version], [3])
|
||||
m4_define([mutter_minor_version], [7])
|
||||
m4_define([mutter_micro_version], [4])
|
||||
m4_define([mutter_micro_version], [90])
|
||||
|
||||
m4_define([mutter_version],
|
||||
[mutter_major_version.mutter_minor_version.mutter_micro_version])
|
||||
@ -71,10 +71,10 @@ MUTTER_PC_MODULES="
|
||||
gio-2.0 >= 2.25.10
|
||||
pango >= 1.2.0
|
||||
cairo >= 1.10.0
|
||||
gsettings-desktop-schemas >= 3.3.0
|
||||
gsettings-desktop-schemas >= 3.7.3
|
||||
xcomposite >= 0.2 xfixes xrender xdamage xi >= 1.6.0
|
||||
$CLUTTER_PACKAGE >= 1.13.2
|
||||
cogl-1.0 >= 1.9.6
|
||||
$CLUTTER_PACKAGE >= 1.13.5
|
||||
cogl-1.0 >= 1.13.3
|
||||
"
|
||||
|
||||
GLIB_GSETTINGS
|
||||
@ -201,6 +201,9 @@ fi
|
||||
|
||||
PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES)
|
||||
|
||||
PKG_CHECK_EXISTS([xi >= 1.6.99.1],
|
||||
AC_DEFINE([HAVE_XI23],[1],[Define if you have support for XInput 2.3 or greater]))
|
||||
|
||||
# This is used for plugins
|
||||
AC_SUBST(CLUTTER_PACKAGE)
|
||||
PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE)
|
||||
|
@ -4,6 +4,7 @@ src/50-mutter-navigation.xml.in
|
||||
src/50-mutter-system.xml.in
|
||||
src/50-mutter-windows.xml.in
|
||||
src/compositor/compositor.c
|
||||
src/compositor/meta-background.c
|
||||
src/core/bell.c
|
||||
src/core/core.c
|
||||
src/core/delete.c
|
||||
|
90
po/es.po
90
po/es.po
@ -14,8 +14,8 @@ 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: 2013-01-11 15:23+0000\n"
|
||||
"PO-Revision-Date: 2013-01-15 13:02+0100\n"
|
||||
"POT-Creation-Date: 2013-02-14 19:45+0000\n"
|
||||
"PO-Revision-Date: 2013-02-19 12:34+0100\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"Language: \n"
|
||||
@ -170,7 +170,6 @@ msgid "Close window"
|
||||
msgstr "Cerrar la ventana"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
#| msgid "Resize window"
|
||||
msgid "Hide window"
|
||||
msgstr "Ocultar la ventana"
|
||||
|
||||
@ -216,7 +215,7 @@ msgstr "Ver división a la derecha"
|
||||
|
||||
#. 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:512
|
||||
#: ../src/compositor/compositor.c:542
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@ -259,12 +258,12 @@ msgstr "_Esperar"
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forzar la salida"
|
||||
|
||||
#: ../src/core/display.c:394
|
||||
#: ../src/core/display.c:392
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Falta la extensión %s requerida para la composición"
|
||||
|
||||
#: ../src/core/display.c:491
|
||||
#: ../src/core/display.c:485
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
|
||||
@ -376,12 +375,12 @@ msgstr ""
|
||||
msgid "Workspace %d"
|
||||
msgstr "Área de trabajo %d"
|
||||
|
||||
#: ../src/core/screen.c:658
|
||||
#: ../src/core/screen.c:659
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "La ventana %d en la pantalla «%s» no es válida\n"
|
||||
|
||||
#: ../src/core/screen.c:674
|
||||
#: ../src/core/screen.c:675
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@ -390,7 +389,7 @@ msgstr ""
|
||||
"La ventana %d en la pantalla «%s» ya tiene un gestor de ventanas, intente "
|
||||
"usar la opción «--replace» para reemplazar el gestor de ventanas activo.\n"
|
||||
|
||||
#: ../src/core/screen.c:701
|
||||
#: ../src/core/screen.c:702
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
@ -398,12 +397,12 @@ msgstr ""
|
||||
"No se ha podido obtener la selección del gestor de ventanas en la ventana %d "
|
||||
"en la pantalla «%s»\n"
|
||||
|
||||
#: ../src/core/screen.c:770
|
||||
#: ../src/core/screen.c:780
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "La ventana %d en la pantalla «%s» ya tiene un gestor de ventanas\n"
|
||||
|
||||
#: ../src/core/screen.c:955
|
||||
#: ../src/core/screen.c:965
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "No se ha podido liberar el monitor %d en la pantalla «%s»\n"
|
||||
@ -502,7 +501,7 @@ msgid "Window manager error: "
|
||||
msgstr "Error del gestor de ventanas: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7279
|
||||
#: ../src/core/window.c:7447
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@ -518,7 +517,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7945
|
||||
#: ../src/core/window.c:8171
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@ -528,23 +527,23 @@ msgstr ""
|
||||
"redimensionable, pero configuró el tamaño mínimo a %d x %d y el tamaño "
|
||||
"máximo a %d x %d ; esto no tiene mucho sentido.\n"
|
||||
|
||||
#: ../src/core/window-props.c:274
|
||||
#: ../src/core/window-props.c:304
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "La aplicación establecio un _NET_WM_PID %lu erróneo\n"
|
||||
|
||||
#: ../src/core/window-props.c:393
|
||||
#: ../src/core/window-props.c:423
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (on %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1448
|
||||
#: ../src/core/window-props.c:1506
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr ""
|
||||
"WM_TRANSIENT_FOR no válido para la ventana 0x%lx especificada para %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1459
|
||||
#: ../src/core/window-props.c:1517
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR ventana 0x%lx para %s crearía un bucle.\n"
|
||||
@ -701,12 +700,15 @@ msgstr ""
|
||||
"pantalla"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
#| msgid ""
|
||||
#| "If enabled, monitor nearly monitor sized windows automatically get "
|
||||
#| "maximized when mapped."
|
||||
msgid ""
|
||||
"If enabled, monitor nearly monitor sized windows automatically get maximized "
|
||||
"when mapped."
|
||||
"If enabled, new windows that are initially the size of the monitor "
|
||||
"automatically get maximized."
|
||||
msgstr ""
|
||||
"Si está activada, las ventanas cercanas al tamaño de la pantalla se "
|
||||
"maximizan automáticamente al mapearlas."
|
||||
"Si está activada, las ventanas nuevas que inicialmente tienen el tamaño de "
|
||||
"la pantalla, se maximizan."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:19
|
||||
msgid "Select window from tab popup"
|
||||
@ -915,7 +917,7 @@ msgstr "Mod5"
|
||||
#. Translators: This represents the size of a window. The first number is
|
||||
#. * the width of the window and the second is the height.
|
||||
#.
|
||||
#: ../src/ui/resizepopup.c:113
|
||||
#: ../src/ui/resizepopup.c:136
|
||||
#, c-format
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
@ -1214,7 +1216,7 @@ msgstr ""
|
||||
"No hay un estilo de marco para el tipo de ventana «%s» en el tema «%s», añada "
|
||||
"un elemento <window type=\"%s\" style_set=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5659 ../src/ui/theme.c:5721 ../src/ui/theme.c:5784
|
||||
#: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@ -1222,7 +1224,7 @@ msgstr ""
|
||||
"Las constantes definidas por el usuario deben comenzar con una letra "
|
||||
"mayúscula; «%s» no lo hace"
|
||||
|
||||
#: ../src/ui/theme.c:5667 ../src/ui/theme.c:5729 ../src/ui/theme.c:5792
|
||||
#: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "La constante «%s» ya ha sido definida"
|
||||
@ -1719,56 +1721,56 @@ msgstr "Borde"
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Diálogo modal adjunto"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:739
|
||||
#: ../src/ui/theme-viewer.c:737
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Test de distribución de botones %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:768
|
||||
#: ../src/ui/theme-viewer.c:766
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g milisegundos para dibujar un marco de ventana"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:813
|
||||
#: ../src/ui/theme-viewer.c:811
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Uso: metacity-theme-viewer [NOMBRETEMA]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:820
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Ocurrió un error al cargar el tema:«%s»\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:826
|
||||
#: ../src/ui/theme-viewer.c:824
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Se cargó el tema «%s» en %g segundos\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:871
|
||||
#: ../src/ui/theme-viewer.c:869
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Tipografía de título normal"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:877
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Small Title Font"
|
||||
msgstr "Tipografía de título pequeña"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:883
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Large Title Font"
|
||||
msgstr "Tipografía de título grande"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:888
|
||||
#: ../src/ui/theme-viewer.c:886
|
||||
msgid "Button Layouts"
|
||||
msgstr "Distribución de botones"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:893
|
||||
#: ../src/ui/theme-viewer.c:891
|
||||
msgid "Benchmark"
|
||||
msgstr "Banco de pruebas"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
#: ../src/ui/theme-viewer.c:947
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "El título de la ventana va aquí"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1055
|
||||
#: ../src/ui/theme-viewer.c:1053
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
|
||||
@ -1779,41 +1781,41 @@ msgstr ""
|
||||
"marco) y %g segundos de tiempo estándar incluyendo recursos del servidor X (%"
|
||||
"g milisegundos por marco)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1275
|
||||
#: ../src/ui/theme-viewer.c:1273
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr ""
|
||||
"prueba de expresión de la posición devolvió TRUE pero estableció un error"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
#: ../src/ui/theme-viewer.c:1275
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr ""
|
||||
"prueba de expresión de la posición devolvió FASE pero no estableció un error"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1281
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "Se esperaba un error, pero no se dio ninguno"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1283
|
||||
#: ../src/ui/theme-viewer.c:1281
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "Se esperaba el error %d pero se dio el %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1289
|
||||
#: ../src/ui/theme-viewer.c:1287
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "No se esperaba un error pero se devolvió uno: %s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1293
|
||||
#: ../src/ui/theme-viewer.c:1291
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "el valor x era %d, se esperaba %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1296
|
||||
#: ../src/ui/theme-viewer.c:1294
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "el valor y era %d, se esperaba %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1361
|
||||
#: ../src/ui/theme-viewer.c:1359
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr ""
|
||||
|
208
po/gl.po
208
po/gl.po
@ -9,13 +9,13 @@
|
||||
# Mancomún - Centro de Referencia e Servizos de Software Libre <g11n@mancomun.org>, 2009.
|
||||
# Fran Diéguez <frandieguez@gnome.org>, 2009, 2010, 2011, 2012.
|
||||
# Leandro Regueiro <leandro.regueiro@gmail.com>, 2012.
|
||||
# Fran Dieguez <frandieguez@gnome.org>, 2012.
|
||||
# Fran Dieguez <frandieguez@gnome.org>, 2012, 2013.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gl\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-12-24 22:58+0100\n"
|
||||
"PO-Revision-Date: 2012-12-24 23:03+0200\n"
|
||||
"POT-Creation-Date: 2013-02-17 13:08+0100\n"
|
||||
"PO-Revision-Date: 2013-02-17 13:11+0200\n"
|
||||
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
|
||||
"Language-Team: gnome-l10n-gl@gnome.org\n"
|
||||
"Language: gl\n"
|
||||
@ -170,8 +170,8 @@ msgid "Close window"
|
||||
msgstr "Pechar xanela"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
msgid "Minimize window"
|
||||
msgstr "Minimizar xanela"
|
||||
msgid "Hide window"
|
||||
msgstr "Ocultar xanela"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Move window"
|
||||
@ -215,7 +215,7 @@ msgstr "Dividir vista á dereita"
|
||||
|
||||
#. 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:512
|
||||
#: ../src/compositor/compositor.c:542
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@ -258,12 +258,12 @@ msgstr "Espe_rar"
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Forzar a saída"
|
||||
|
||||
#: ../src/core/display.c:394
|
||||
#: ../src/core/display.c:392
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Falta a extensión %s que se require para a composición"
|
||||
|
||||
#: ../src/core/display.c:491
|
||||
#: ../src/core/display.c:485
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Produciuse un erro ao abrir a visualización do X Window System «%s»\n"
|
||||
@ -301,12 +301,12 @@ msgstr "Inicializar sesión desde o ficheiro de salvagarda"
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Facer que as chamadas a X sexan sincrónicas"
|
||||
|
||||
#: ../src/core/main.c:496
|
||||
#: ../src/core/main.c:494
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Produciuse un erro ao dixitalizar o directorio de temas: %s\n"
|
||||
|
||||
#: ../src/core/main.c:512
|
||||
#: ../src/core/main.c:510
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@ -337,7 +337,7 @@ msgstr "Imprimir versión"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Engadido de mutter que usar"
|
||||
|
||||
#: ../src/core/prefs.c:1079
|
||||
#: ../src/core/prefs.c:1087
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@ -345,14 +345,14 @@ msgstr ""
|
||||
"Desactiváronse os arranxos para aplicativos danados. Pode que algúns "
|
||||
"aplicativos non se comporten correctamente.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1154
|
||||
#: ../src/core/prefs.c:1162
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr ""
|
||||
"Non foi posíbel analizar a descrición do tipo de letra «%s» da chave "
|
||||
"GSettings %s\n"
|
||||
|
||||
#: ../src/core/prefs.c:1220
|
||||
#: ../src/core/prefs.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@ -361,7 +361,7 @@ msgstr ""
|
||||
"«%s» atopados na base de datos de configuración non é un valor correcto para "
|
||||
"o modificador do botón do rato\n"
|
||||
|
||||
#: ../src/core/prefs.c:1757
|
||||
#: ../src/core/prefs.c:1780
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@ -370,17 +370,17 @@ msgstr ""
|
||||
"«%s» atopados na base de datos de configuración non é un valor correcto para "
|
||||
"a combinación de teclas «%s»\n"
|
||||
|
||||
#: ../src/core/prefs.c:1854
|
||||
#: ../src/core/prefs.c:1877
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Espazo de traballo %d"
|
||||
|
||||
#: ../src/core/screen.c:658
|
||||
#: ../src/core/screen.c:659
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "A pantalla %d na visualización «%s» non é válida\n"
|
||||
|
||||
#: ../src/core/screen.c:674
|
||||
#: ../src/core/screen.c:675
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@ -389,7 +389,7 @@ msgstr ""
|
||||
"A visualización %d na pantalla «%s» ten xa un xestor de xanelas, tente usar "
|
||||
"a opción --replace para substituír o xestor de xanelas.\n"
|
||||
|
||||
#: ../src/core/screen.c:701
|
||||
#: ../src/core/screen.c:702
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
@ -397,12 +397,12 @@ msgstr ""
|
||||
"Non foi posíbel obter a selección do xestor de xanelas na pantalla %d na "
|
||||
"visualización «%s»\n"
|
||||
|
||||
#: ../src/core/screen.c:770
|
||||
#: ../src/core/screen.c:780
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "A visualización %d na pantalla «%s» ten xa un xestor de xanelas\n"
|
||||
|
||||
#: ../src/core/screen.c:955
|
||||
#: ../src/core/screen.c:965
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Non foi posíbel liberar a visualización %d na pantalla «%s»\n"
|
||||
@ -499,7 +499,7 @@ msgid "Window manager error: "
|
||||
msgstr "Erro do xestor de xanelas: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7275
|
||||
#: ../src/core/window.c:7452
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@ -515,7 +515,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7941
|
||||
#: ../src/core/window.c:8176
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@ -525,23 +525,23 @@ msgstr ""
|
||||
"mais configurou o tamaño mínimo a %d x %d e o tamaño máximo a %d x %d, isto "
|
||||
"non ten moito sentido.\n"
|
||||
|
||||
#: ../src/core/window-props.c:274
|
||||
#: ../src/core/window-props.c:304
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "O aplicativo configurou un _NET_WM_PID %lu falso\n"
|
||||
|
||||
#: ../src/core/window-props.c:393
|
||||
#: ../src/core/window-props.c:423
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (en %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1448
|
||||
#: ../src/core/window-props.c:1506
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr ""
|
||||
"WM_TRANSIENT_FOR non válido para a xanela 0x%lx especificada para %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1459
|
||||
#: ../src/core/window-props.c:1517
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR xanela 0x%lx para %s crearía un bucle.\n"
|
||||
@ -689,10 +689,23 @@ msgstr ""
|
||||
"son suficientes, engadiranse bordos invisíbeis para satisfacer este valor."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
msgid "Auto maximize nearly monitor sized windows"
|
||||
msgstr ""
|
||||
"Maximizar automaticamente as xanelas que case teñan o tamaño da pantalla"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"If enabled, new windows that are initially the size of the monitor "
|
||||
"automatically get maximized."
|
||||
msgstr ""
|
||||
"Se está activada, as xanelas novas que inicialmente teñan o tamaño da "
|
||||
"pantalla maximizaranse automaticamente."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:19
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Seleccionar xanela da lapela emerxente"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:20
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Cancelar lapela emerxente"
|
||||
|
||||
@ -895,53 +908,53 @@ msgstr "Mod5"
|
||||
#. Translators: This represents the size of a window. The first number is
|
||||
#. * the width of the window and the second is the height.
|
||||
#.
|
||||
#: ../src/ui/resizepopup.c:113
|
||||
#: ../src/ui/resizepopup.c:136
|
||||
#, c-format
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:235
|
||||
msgid "top"
|
||||
msgstr "superior"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:237
|
||||
msgid "bottom"
|
||||
msgstr "inferior"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:239
|
||||
msgid "left"
|
||||
msgstr "esquerda"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:241
|
||||
msgid "right"
|
||||
msgstr "dereita"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:269
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "a xeometría do marco non especifica a dimensión «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "a xeometría do marco non especifica a dimensión «%s» para o bordo «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:325
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "A proporción de aspecto do botón %g non é razoábel"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:337
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "A xeometría do marco non especifica o tamaño dos botóns"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1050
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "As gradacións deben ter polo menos dúas cores"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
@ -951,7 +964,7 @@ msgstr ""
|
||||
"entre parénteses, por exemplo: gtk:custom(foo,bar); non foi posíbel analizar "
|
||||
"«%s»."
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
@ -960,7 +973,7 @@ msgstr ""
|
||||
"O carácter «%c» non é válido no parámetro «color_name» de «gtk:custom», só "
|
||||
"«A-Za-z0-9» son válidos"
|
||||
|
||||
#: ../src/ui/theme.c:1231
|
||||
#: ../src/ui/theme.c:1232
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
@ -969,7 +982,7 @@ msgstr ""
|
||||
"O formato de «gtk:custom» é «gtk:custom(nome_de_cor,nome_alternativo», «%s» "
|
||||
"non respecta o formato"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1277
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@ -978,7 +991,7 @@ msgstr ""
|
||||
"A especificación de cor do GTK debe ter o estado entre parénteses, exemplo. "
|
||||
"gtk:fg[NORMAL] onde NORMAL é o estado; non foi posíbel analizar «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@ -988,17 +1001,17 @@ msgstr ""
|
||||
"estado, exemplo. gtk:fg[NORMAL] onde NORMAL é o estado; non foi posíbel "
|
||||
"analizar «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1302
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Non se entende o estado «%s» na especificación da cor"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1315
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Non se entende o compoñente de cor «%s» na especificación da cor"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1344
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@ -1007,17 +1020,17 @@ msgstr ""
|
||||
"O formato de blend é «blend/bg_color/fg_color/alpha», «%s»non coincide co "
|
||||
"formato"
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1355
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Non foi posíbel analizar o valor alfa «%s» na cor mesturada"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1365
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "O valor alfa «%s» na cor mesturada non está entre 0.0 e 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1411
|
||||
#: ../src/ui/theme.c:1412
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
@ -1025,28 +1038,28 @@ msgstr ""
|
||||
"O formato de sombreado é \"shade/base_color/factor\", «%s» non coincide co "
|
||||
"formato"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1423
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Non foi posíbel analizar o factor de sombreado «%s» na cor sombreada"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1433
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "O factor de sombreado «%s» na cor sombreada é negativo"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1462
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Non foi posíbel analizar a cor «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1779
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas contén un carácter «%s» que non está permitido"
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1806
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@ -1055,14 +1068,14 @@ msgstr ""
|
||||
"A expresión de coordenadas contén un número de coma flotante «%s» que non "
|
||||
"foi posíbel analizar"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1820
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas contén un enteiro «%s» que non foi posíbel "
|
||||
"analizar"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1941
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@ -1071,17 +1084,17 @@ msgstr ""
|
||||
"A expresión de coordenadas contén un operador non válido ao inicio do seu "
|
||||
"texto: «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:1998
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "A expresión de coordenadas está baleira ou non se entendeu"
|
||||
|
||||
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "A expresión de coordenadas resultou nun erro de división por cero"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2163
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
@ -1089,25 +1102,25 @@ msgstr ""
|
||||
"A expresión de coordenadas tentou usar un operador mod cun número de coma "
|
||||
"flotante"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2219
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas ten un operador «%s» onde se esperaba un operando"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2228
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas ten un operando onde se esperaba un operador"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2236
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "A expresión de coordenadas remata cun operador en vez dun operando"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@ -1116,42 +1129,42 @@ msgstr ""
|
||||
"A expresión de coordenadas ten un operador \"%c\" seguido do operador \"%c\" "
|
||||
"sen un operando entre eles"
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr ""
|
||||
"A expresión de coordenadas ten unha variábel ou constante descoñecida «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2496
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "O analizador da expresión de coordenadas desbordou o seu búfer."
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2525
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas ten unha paréntese pechada sen unha paréntese "
|
||||
"aberta"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2589
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr ""
|
||||
"A expresión de coordenadas ten unha paréntese aberta sen unha paréntese "
|
||||
"pechada"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2600
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "A expresión de coordenadas non parece ter nin operadores nin operandos"
|
||||
|
||||
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "O tema contiña unha expresión que resultou ser un erro: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4499
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@ -1160,24 +1173,24 @@ msgstr ""
|
||||
"<button function=«%s» state=«%s» draw_ops=\"whatever\"/> débese especificar "
|
||||
"para este estilo de marco"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr "Falta <frame state=«%s» resize=«%s» focus=«%s» style=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5082
|
||||
#: ../src/ui/theme.c:5083
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Produciuse un erro ao cargar o tema «%s»: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
|
||||
#: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Non se configurou <%s> para o tema «%s»"
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5255
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@ -1186,7 +1199,7 @@ msgstr ""
|
||||
"Non hai un estilo de marco para o tipo de xanela «%s» no tema «%s», engada "
|
||||
"un elemento <window type=«%s» style_set=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@ -1194,7 +1207,7 @@ msgstr ""
|
||||
"As constantes definidas polo usuario deben comezar cunha letra maiúscula; "
|
||||
"«%s» non o fai"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "A constante «%s» xa foi definida"
|
||||
@ -1687,56 +1700,56 @@ msgstr "Bordo"
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Diálogo modal adxunto"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:739
|
||||
#: ../src/ui/theme-viewer.c:737
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Proba de disposición de botóns %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:768
|
||||
#: ../src/ui/theme-viewer.c:766
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g milisegundos para debuxar un marco de xanela"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:813
|
||||
#: ../src/ui/theme-viewer.c:811
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Uso: metacity-theme-viewer [NOMETEMA]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:820
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Produciuse un erro ao cargar o tema: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:826
|
||||
#: ../src/ui/theme-viewer.c:824
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Cargouse o tema «%s» en %g segundos\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:870
|
||||
#: ../src/ui/theme-viewer.c:869
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Tipo de letra de título normal"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:876
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Small Title Font"
|
||||
msgstr "Tipo de letra de título pequena"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:882
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Large Title Font"
|
||||
msgstr "Tipo de letra de título grande"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
#: ../src/ui/theme-viewer.c:886
|
||||
msgid "Button Layouts"
|
||||
msgstr "Disposición dos botóns"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
#: ../src/ui/theme-viewer.c:891
|
||||
msgid "Benchmark"
|
||||
msgstr "Banco de probas"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
#: ../src/ui/theme-viewer.c:947
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "O título da xanela vai aquí"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1052
|
||||
#: ../src/ui/theme-viewer.c:1053
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
|
||||
@ -1747,47 +1760,50 @@ msgstr ""
|
||||
"marco) e %g segundos de tempo estándar incluíndo recursos do servidor X (%g "
|
||||
"milisegundos por marco)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1271
|
||||
#: ../src/ui/theme-viewer.c:1273
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr ""
|
||||
"a proba de expresión da posición devolveu TRUE mais estabeleceu un erro"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1273
|
||||
#: ../src/ui/theme-viewer.c:1275
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr ""
|
||||
"a proba de expresión da posición devolveu FALSE mais estabeleceu un erro"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "Esperábase un erro, mais non se deu ningún"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
#: ../src/ui/theme-viewer.c:1281
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "Esperábase un erro %d mais deuse %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1285
|
||||
#: ../src/ui/theme-viewer.c:1287
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "Non se esperaba ningún erro mais devolveuse un: %s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1289
|
||||
#: ../src/ui/theme-viewer.c:1291
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "o valor x era %d, esperábase %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1292
|
||||
#: ../src/ui/theme-viewer.c:1294
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "o valor y era %d, esperábase %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1357
|
||||
#: ../src/ui/theme-viewer.c:1359
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr ""
|
||||
"%d expresións de coordenadas interpretadas en %g segundos (%g segundos de "
|
||||
"media)\n"
|
||||
|
||||
#~ msgid "Minimize window"
|
||||
#~ msgstr "Minimizar xanela"
|
||||
|
||||
#~ msgid "Comma-separated list of compositor plugins"
|
||||
#~ msgstr "Lista de separadas por comas dos complementos do compositor"
|
||||
|
||||
|
185
po/he.po
185
po/he.po
@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.HEAD.he\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-12-26 19:50+0200\n"
|
||||
"PO-Revision-Date: 2012-12-26 19:50+0200\n"
|
||||
"POT-Creation-Date: 2013-02-02 11:23+0200\n"
|
||||
"PO-Revision-Date: 2013-02-02 11:23+0200\n"
|
||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||
"Language-Team: Hebrew <he@li.org>\n"
|
||||
"Language: he\n"
|
||||
@ -164,8 +164,8 @@ msgid "Close window"
|
||||
msgstr "סגירת חלון"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
msgid "Minimize window"
|
||||
msgstr "מזעור חלון"
|
||||
msgid "Hide window"
|
||||
msgstr "הסתרת החלון"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Move window"
|
||||
@ -244,12 +244,12 @@ msgstr "ה_מתנה"
|
||||
msgid "_Force Quit"
|
||||
msgstr "_אילוץ סגירה"
|
||||
|
||||
#: ../src/core/display.c:394
|
||||
#: ../src/core/display.c:393
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Missing %s extension required for compositing"
|
||||
|
||||
#: ../src/core/display.c:491
|
||||
#: ../src/core/display.c:489
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Failed to open X Window System display '%s'\n"
|
||||
@ -283,12 +283,12 @@ msgstr "Initialize session from savefile"
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Make X calls synchronous"
|
||||
|
||||
#: ../src/core/main.c:496
|
||||
#: ../src/core/main.c:494
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Failed to scan themes directory: %s\n"
|
||||
|
||||
#: ../src/core/main.c:512
|
||||
#: ../src/core/main.c:510
|
||||
#, c-format
|
||||
msgid "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
msgstr "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@ -328,12 +328,12 @@ msgstr "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgid "\"%s\" found in configuration database is not a valid value for mouse button modifier\n"
|
||||
msgstr "\"%s\" found in configuration database is not a valid value for mouse button modifier\n"
|
||||
|
||||
#: ../src/core/prefs.c:1768
|
||||
#: ../src/core/prefs.c:1780
|
||||
#, c-format
|
||||
msgid "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"
|
||||
msgstr "\"%s\" found in configuration database is not a valid value for keybinding \"%s\"\n"
|
||||
|
||||
#: ../src/core/prefs.c:1865
|
||||
#: ../src/core/prefs.c:1877
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "סביבת עבודה %d"
|
||||
@ -455,7 +455,7 @@ msgid "Window manager error: "
|
||||
msgstr "Window manager error: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7277
|
||||
#: ../src/core/window.c:7285
|
||||
#, c-format
|
||||
msgid "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"
|
||||
msgstr "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER window as specified in the ICCCM.\n"
|
||||
@ -467,27 +467,27 @@ msgstr "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADE
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7943
|
||||
#: ../src/core/window.c:7951
|
||||
#, c-format
|
||||
msgid "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n"
|
||||
msgstr "Window %s sets an MWM hint indicating it isn't resizable, but sets min size %d x %d and max size %d x %d; this doesn't make much sense.\n"
|
||||
|
||||
#: ../src/core/window-props.c:274
|
||||
#: ../src/core/window-props.c:304
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "Application set a bogus _NET_WM_PID %lu\n"
|
||||
|
||||
#: ../src/core/window-props.c:393
|
||||
#: ../src/core/window-props.c:423
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (מעל %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1448
|
||||
#: ../src/core/window-props.c:1478
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1459
|
||||
#: ../src/core/window-props.c:1489
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
@ -807,247 +807,247 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:235
|
||||
msgid "top"
|
||||
msgstr "top"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:237
|
||||
msgid "bottom"
|
||||
msgstr "bottom"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:239
|
||||
msgid "left"
|
||||
msgstr "left"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:241
|
||||
msgid "right"
|
||||
msgstr "right"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:269
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "frame geometry does not specify \"%s\" dimension"
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:325
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Button aspect ratio %g is not reasonable"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:337
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Frame geometry does not specify size of buttons"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1050
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Gradients should have at least two colors"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid "GTK custom color specification must have color name and fallback in parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr "GTK custom color specification must have color name and fallback in parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1218
|
||||
#, c-format
|
||||
msgid "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid"
|
||||
msgstr "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-_ are valid"
|
||||
|
||||
#: ../src/ui/theme.c:1231
|
||||
#: ../src/ui/theme.c:1232
|
||||
#, c-format
|
||||
msgid "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format"
|
||||
msgstr "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not fit the format"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1277
|
||||
#, c-format
|
||||
msgid "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
msgstr "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid "GTK color specification must have a close bracket after the state, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
msgstr "GTK color specification must have a close bracket after the state, e.g. gtk:fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1302
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Did not understand state \"%s\" in color specification"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1315
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Did not understand color component \"%s\" in color specification"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1344
|
||||
#, c-format
|
||||
msgid "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the format"
|
||||
msgstr "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the format"
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1355
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Could not parse alpha value \"%s\" in blended color"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1365
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1411
|
||||
#: ../src/ui/theme.c:1412
|
||||
#, c-format
|
||||
msgid "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1423
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Could not parse shade factor \"%s\" in shaded color"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1433
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Shade factor \"%s\" in shaded color is negative"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1462
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Could not parse color \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1779
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Coordinate expression contains character '%s' which is not allowed"
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1806
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains floating point number '%s' which could not be parsed"
|
||||
msgstr "Coordinate expression contains floating point number '%s' which could not be parsed"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1820
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1941
|
||||
#, c-format
|
||||
msgid "Coordinate expression contained unknown operator at the start of this text: \"%s\""
|
||||
msgstr "Coordinate expression contained unknown operator at the start of this text: \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:1998
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "Coordinate expression was empty or not understood"
|
||||
|
||||
#: ../src/ui/theme.c:2110
|
||||
#: ../src/ui/theme.c:2120
|
||||
#: ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2111
|
||||
#: ../src/ui/theme.c:2121
|
||||
#: ../src/ui/theme.c:2155
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Coordinate expression results in division by zero"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2163
|
||||
#, c-format
|
||||
msgid "Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "Coordinate expression tries to use mod operator on a floating-point number"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2219
|
||||
#, c-format
|
||||
msgid "Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2228
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "Coordinate expression had an operand where an operator was expected"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2236
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Coordinate expression ended with an operator instead of an operand"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid "Coordinate expression has operator \"%c\" following operator \"%c\" with no operand in between"
|
||||
msgstr "Coordinate expression has operator \"%c\" following operator \"%c\" with no operand in between"
|
||||
|
||||
#: ../src/ui/theme.c:2396
|
||||
#: ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2397
|
||||
#: ../src/ui/theme.c:2442
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Coordinate expression had unknown variable or constant \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2496
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Coordinate expression parser overflowed its buffer."
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2525
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2589
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2600
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "Coordinate expression doesn't seem to have any operators or operands"
|
||||
|
||||
#: ../src/ui/theme.c:2812
|
||||
#: ../src/ui/theme.c:2832
|
||||
#: ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2813
|
||||
#: ../src/ui/theme.c:2833
|
||||
#: ../src/ui/theme.c:2853
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Theme contained an expression that resulted in an error: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4499
|
||||
#, c-format
|
||||
msgid "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be specified for this frame style"
|
||||
msgstr "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be specified for this frame style"
|
||||
|
||||
#: ../src/ui/theme.c:5009
|
||||
#: ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5010
|
||||
#: ../src/ui/theme.c:5035
|
||||
#, c-format
|
||||
msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5082
|
||||
#: ../src/ui/theme.c:5083
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Failed to load theme \"%s\": %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218
|
||||
#: ../src/ui/theme.c:5225
|
||||
#: ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239
|
||||
#: ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5219
|
||||
#: ../src/ui/theme.c:5226
|
||||
#: ../src/ui/theme.c:5233
|
||||
#: ../src/ui/theme.c:5240
|
||||
#: ../src/ui/theme.c:5247
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "No <%s> set for theme \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5255
|
||||
#, c-format
|
||||
msgid "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"
|
||||
msgstr "No frame style set for window type \"%s\" in theme \"%s\", add a <window type=\"%s\" style_set=\"whatever\"/> element"
|
||||
|
||||
#: ../src/ui/theme.c:5650
|
||||
#: ../src/ui/theme.c:5712
|
||||
#: ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5662
|
||||
#: ../src/ui/theme.c:5724
|
||||
#: ../src/ui/theme.c:5787
|
||||
#, c-format
|
||||
msgid "User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr "User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
|
||||
#: ../src/ui/theme.c:5658
|
||||
#: ../src/ui/theme.c:5720
|
||||
#: ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5670
|
||||
#: ../src/ui/theme.c:5732
|
||||
#: ../src/ui/theme.c:5795
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Constant \"%s\" has already been defined"
|
||||
@ -1550,23 +1550,23 @@ msgstr "Error loading theme: %s\n"
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Loaded theme \"%s\" in %g seconds\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:870
|
||||
#: ../src/ui/theme-viewer.c:871
|
||||
msgid "Normal Title Font"
|
||||
msgstr "גופן כותרת רגילה"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:876
|
||||
#: ../src/ui/theme-viewer.c:877
|
||||
msgid "Small Title Font"
|
||||
msgstr "גופן כותרת קטנה"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:882
|
||||
#: ../src/ui/theme-viewer.c:883
|
||||
msgid "Large Title Font"
|
||||
msgstr "גופן כותרת גדולה"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
#: ../src/ui/theme-viewer.c:888
|
||||
msgid "Button Layouts"
|
||||
msgstr "פריסת לחצנים"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
#: ../src/ui/theme-viewer.c:893
|
||||
msgid "Benchmark"
|
||||
msgstr "מדידת ביצועים"
|
||||
|
||||
@ -1574,48 +1574,51 @@ msgstr "מדידת ביצועים"
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "כותרת החלון מופיעה כאן"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1052
|
||||
#: ../src/ui/theme-viewer.c:1055
|
||||
#, c-format
|
||||
msgid "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g seconds wall clock time including X server resources (%g milliseconds per frame)\n"
|
||||
msgstr "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g seconds wall clock time including X server resources (%g milliseconds per frame)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1271
|
||||
#: ../src/ui/theme-viewer.c:1275
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr "position expression test returned TRUE but set error"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1273
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr "position expression test returned FALSE but didn't set error"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
#: ../src/ui/theme-viewer.c:1281
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "Error was expected but none given"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
#: ../src/ui/theme-viewer.c:1283
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "Error %d was expected but %d given"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1285
|
||||
#: ../src/ui/theme-viewer.c:1289
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "Error not expected but one was returned: %s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1289
|
||||
#: ../src/ui/theme-viewer.c:1293
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "x value was %d, %d was expected"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1292
|
||||
#: ../src/ui/theme-viewer.c:1296
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "y value was %d, %d was expected"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1357
|
||||
#: ../src/ui/theme-viewer.c:1361
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
|
||||
#~ msgid "Minimize window"
|
||||
#~ msgstr "מזעור חלון"
|
||||
|
||||
#~ msgid "Comma-separated list of compositor plugins"
|
||||
#~ msgstr "Comma-separated list of compositor plugins"
|
||||
|
||||
|
202
po/pa.po
202
po/pa.po
@ -5,19 +5,18 @@
|
||||
#
|
||||
# Amanpreet_Singh <amanlinux@netscape.net>, 2004.
|
||||
# Amanpreet Singh Alam <amanlinux@netscape.net>, 2004.
|
||||
# Amanpreet Singh Alam <aalam@redhat.com>, 2004.
|
||||
# Amanpreet Singh Alam <amanpreetalam@yahoo.com>, 2005.
|
||||
# A S Alam <aalam@users.sf.net>, 2006.
|
||||
# A S Alam <aalam@users.sf.net>, 2007, 2009, 2010, 2011.
|
||||
# ASB <aalam@users.sf.net>, 2007.
|
||||
# Amanpreet Singh Alam <aalam@users.sf.net>, 2009, 2012.
|
||||
# Amanpreet Singh Alam <aalam@users.sf.net>, 2009, 2012, 2013.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.gnome-2-26\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
|
||||
"product=mutter&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-12-13 21:38+0000\n"
|
||||
"PO-Revision-Date: 2012-12-25 08:50+0530\n"
|
||||
"POT-Creation-Date: 2013-02-02 22:59+0000\n"
|
||||
"PO-Revision-Date: 2013-02-10 23:34+0000\n"
|
||||
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
|
||||
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
|
||||
"Language: pa\n"
|
||||
@ -173,8 +172,9 @@ msgid "Close window"
|
||||
msgstr "ਵਿੰਡੋ ਬੰਦ ਕਰੋ"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
msgid "Minimize window"
|
||||
msgstr "ਵਿੰਡੋ ਘੱਟੋ-ਘੱਟ"
|
||||
#| msgid "Resize window"
|
||||
msgid "Hide window"
|
||||
msgstr "ਵਿੰਡੋ ਓਹਲੇ"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Move window"
|
||||
@ -218,7 +218,7 @@ msgstr "ਸੱਜੇ ਪਾਸੇ ਵੰਡ ਵੇਖੋ"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:492
|
||||
#: ../src/compositor/compositor.c:512
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@ -238,7 +238,6 @@ msgstr "ਅਣਜਾਣ ਵਿੰਡੋ ਜਾਣਕਾਰੀ ਮੰਗ: %d"
|
||||
|
||||
#: ../src/core/delete.c:111
|
||||
#, c-format
|
||||
#| msgid "%s is not responding."
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "\"%s\" ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਹੀ ਹੈ।"
|
||||
|
||||
@ -262,17 +261,17 @@ msgstr "ਉਡੀਕੋ(_W)"
|
||||
msgid "_Force Quit"
|
||||
msgstr "ਧੱਕੇ ਨਾਲ ਬੰਦ(_F)"
|
||||
|
||||
#: ../src/core/display.c:397
|
||||
#: ../src/core/display.c:393
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "ਕੰਪੋਜ਼ਿਸ਼ਨਿੰਗ ਲਈ %s ਐਕਸਟੈਨਸ਼ਨ ਗੁੰਮ ਹੈ"
|
||||
|
||||
#: ../src/core/display.c:494
|
||||
#: ../src/core/display.c:489
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "X ਵਿੰਡੋ ਸਿਸਟਮ ਡਿਸਪਲੇਅ '%s' ਨੂੰ ਖੋਲਣ ਵਿੱਚ ਅਸਮਰਥ\n"
|
||||
|
||||
#: ../src/core/keybindings.c:860
|
||||
#: ../src/core/keybindings.c:876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
@ -338,7 +337,7 @@ msgstr "ਵਰਜਨ ਛਾਪੋ"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "ਵਰਤਣ ਲਈ ਮੁੱਟਰ ਪਲੱਗਇਨ"
|
||||
|
||||
#: ../src/core/prefs.c:1079
|
||||
#: ../src/core/prefs.c:1087
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@ -346,13 +345,13 @@ msgstr ""
|
||||
"ਖਰਾਬ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਜੁਗਾੜ ਬੰਦ ਕੀਤਾ ਹੈ। ਕੁਝ ਐਪਲੀਕੇਸ਼ਨ ਚੰਗੀ ਤਰਾਂ ਕੰਮ ਨਹੀਂ ਕਰ ਸਕਦੇ "
|
||||
"ਹਨ।\n"
|
||||
|
||||
#: ../src/core/prefs.c:1154
|
||||
#: ../src/core/prefs.c:1162
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr ""
|
||||
"GSettings ਸਵਿੱਚ \"%2$s\" ਤੋਂ ਫੋਂਟ ਵੇਰਵੇ \"%1$s\" ਨੂੰ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ\n"
|
||||
|
||||
#: ../src/core/prefs.c:1220
|
||||
#: ../src/core/prefs.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@ -360,7 +359,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"ਸੰਰਚਨਾ ਡਾਟਾਬੇਸ ਵਿੱਚ ਲੱਭੀ ਹੋਈ \"%s\" ਮਾਊਸ ਬਟਨ ਸੋਧਕ ਲਈ ਯੋਗ ਕੀਮਤ ਨਹੀਂ ਹੈ\n"
|
||||
|
||||
#: ../src/core/prefs.c:1757
|
||||
#: ../src/core/prefs.c:1780
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@ -369,17 +368,17 @@ msgstr ""
|
||||
"ਸੰਰਚਨਾ ਡਾਟਾਬੇਸ ਵਿੱਚ ਲੱਭੀ ਹੋਈ \"%s\" ਸਵਿੱਚ-ਬਾਈਡਿੰਗ \"%s\" ਲਈ ਯੋਗ ਕੀਮਤ ਨਹੀਂ "
|
||||
"ਹੈ\n"
|
||||
|
||||
#: ../src/core/prefs.c:1854
|
||||
#: ../src/core/prefs.c:1877
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "ਵਰਕਸਪੇਸ %d"
|
||||
|
||||
#: ../src/core/screen.c:659
|
||||
#: ../src/core/screen.c:658
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "ਡਿਸਪਲੇਅ '%2$s' ਉੱਤੇ ਸਕਰੀਨ %1$d ਗਲਤ ਹੈ\n"
|
||||
|
||||
#: ../src/core/screen.c:675
|
||||
#: ../src/core/screen.c:674
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@ -389,18 +388,18 @@ msgstr ""
|
||||
"--replace "
|
||||
"ਮੌਜੂਦਾ ਵਿੰਡੋ ਮੈਨੇਜਰ ਵਰਤੋਂ।\n"
|
||||
|
||||
#: ../src/core/screen.c:702
|
||||
#: ../src/core/screen.c:701
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "ਡਿਸਪਲੇਅ \"%2$s\" %1$d ਸਕਰੀਨ ਉੱਤੇ ਵਿੰਡੋ ਮੈਨੇਜਰ ਚੋਣ ਉਪਲੱਬਧ ਨਹੀਂ ਹੋ ਸਕੀ\n"
|
||||
|
||||
#: ../src/core/screen.c:757
|
||||
#: ../src/core/screen.c:770
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "ਡਿਸਪਲੇਅ \"%2$s\" ਉੱਤੇ ਸਕਰੀਨ %1$d ਕੋਲ ਪਹਿਲਾਂ ਹੀ ਵਿੰਡੋ ਮੈਨੇਜਰ ਹੈ\n"
|
||||
|
||||
#: ../src/core/screen.c:942
|
||||
#: ../src/core/screen.c:955
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "ਡਿਸਪਲੇਅ \"%2$s\" ਉੱਤੇ ਸਕਰੀਨ %1$d ਰੀਲਿਜ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ\n"
|
||||
@ -498,7 +497,7 @@ msgid "Window manager error: "
|
||||
msgstr "ਵਿੰਡੋ ਮੈਨੇਜਰ ਗਲਤੀ: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7240
|
||||
#: ../src/core/window.c:7285
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@ -514,7 +513,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7905
|
||||
#: ../src/core/window.c:7951
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@ -524,22 +523,22 @@ msgstr ""
|
||||
"ਆਕਾਰ %d x %d ਅਤੇ "
|
||||
"ਵੱਧ ਤੋਂ ਵੱਧ ਆਕਾਰ %d x %d ਸੈੱਟ ਕਰਦਾ ਹੈ, ਪਰ ਇਹ ਦਾ ਜ਼ਿਆਦਾ ਮਤਲਬ ਨਹੀਂ ਹੈ।\n"
|
||||
|
||||
#: ../src/core/window-props.c:274
|
||||
#: ../src/core/window-props.c:304
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਨੇ ਇੱਕ ਫਰਜ਼ੀ _NET_WM_PID %lu ਦਿੱਤਾ ਹੈ\n"
|
||||
|
||||
#: ../src/core/window-props.c:393
|
||||
#: ../src/core/window-props.c:423
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (%s ਉੱਤੇ)"
|
||||
|
||||
#: ../src/core/window-props.c:1448
|
||||
#: ../src/core/window-props.c:1478
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "ਗਲਤ WM_TRANSIENT_FOR ਵਿੰਡੋ 0x%lx %s ਲਈ ਦਿੱਤਾ ਗਿਆ ਹੈ।\n"
|
||||
|
||||
#: ../src/core/window-props.c:1459
|
||||
#: ../src/core/window-props.c:1489
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR ਵਿੰਡੋ 0x%lx %s ਲੂਪ ਬਣਾਏਗਾ।\n"
|
||||
@ -665,11 +664,6 @@ msgid "Delay focus changes until the pointer stops moving"
|
||||
msgstr "ਪੁਆਇੰਟਰ ਦੇ ਰੁਕਣ ਤੱਕ ਫੋਕਸ ਬਦਲਣ ਨੂੰ ਰੋਕੋ"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#| msgid ""
|
||||
#| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
|
||||
#| "the focused window will be automatically raised after a delay specified "
|
||||
#| "by the auto_raise_delay key. This is not related to clicking on a window "
|
||||
#| "to raise it, nor to entering a window during drag-and-drop."
|
||||
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 "
|
||||
@ -693,10 +687,23 @@ msgstr ""
|
||||
"ਨੂੰ ਇਹ ਮੁੱਲ ਦੇ ਬਰਾਬਰ ਕਰਨ ਲਈ ਵਧਾਇਆ ਜਾਵੇਗਾ।"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
msgid "Auto maximize nearly monitor sized windows"
|
||||
msgstr "ਲਗਭਗ ਮਾਨੀਟਰ ਆਕਾਰ ਦੀਆਂ ਵਿੰਡੋਜ਼ ਆਪਣੇ-ਆਪ ਵੱਧੋ-ਵੱਧੋ"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"If enabled, monitor nearly monitor sized windows automatically get maximized "
|
||||
"when mapped."
|
||||
msgstr ""
|
||||
"ਜੇ ਚਾਲੂ ਕੀਤਾ ਤਾਂ ਮਾਨੀਟਰ ਮਾਨੀਟਰ ਆਕਾਰ ਦੀਆਂ ਵਿੰਡੋਜ਼ ਆਟੋਮੈਟਿਕ ਹੀ ਵੱਧ ਤੋਂ ਵੱਧ ਹੋ "
|
||||
"ਜਾਣਗੀਆਂ, ਜਦੋਂ ਮੈਪ ਕੀਤਾ "
|
||||
"ਹੋਵੇ।"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:19
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "ਟੈਬ ਪੋਪਅੱਪ ਤੋਂ ਵਿੰਡੋ ਚੁਣੋ"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:20
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "ਟੈਬ ਪੋਪਅੱਪ ਰੱਦ ਕਰੋ"
|
||||
|
||||
@ -904,48 +911,48 @@ msgstr "ਮਾਡ੫"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:235
|
||||
msgid "top"
|
||||
msgstr "ਉੱਤੇ"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:237
|
||||
msgid "bottom"
|
||||
msgstr "ਹੇਠਾਂ"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:239
|
||||
msgid "left"
|
||||
msgstr "ਖੱਬਾ"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:241
|
||||
msgid "right"
|
||||
msgstr "ਸੱਜਾ"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:269
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "ਫਰੇਮ ਜੁਮੈਟਰੀ \"%s\" ਮਾਪ ਨਹੀਂ ਦਰਸਾਉਦੀ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "ਫਰੇਮ ਜੁਮੈਟਰੀ \"%2$s\" ਹਾਸ਼ੀਏ ਲਈ \"%1$s\" ਮਾਪ ਨਹੀਂ ਦਰਸਾਉਦੀ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:325
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "ਤਲ ਆਕਾਰ ਅਨੁਪਾਤ %g ਢੁੱਕਵਾਂ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:337
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "ਫਰੇਮ ਜੁਮੈਟਰੀ ਬਟਨਾਂ ਦਾ ਆਕਾਰ ਨਹੀਂ ਦਰਸਾਉਦੀ"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1050
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "ਢਾਲਵੇ ਲਈ ਘੱਟ ਤੋਂ ਘੱਟ ਦੋ ਰੰਗ ਚਾਹੀਦੇ ਹਨ"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
@ -955,7 +962,7 @@ msgstr ""
|
||||
"gtk:custom (foo,"
|
||||
"bar); \"%s\" ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
@ -965,7 +972,7 @@ msgstr ""
|
||||
"ਸ਼ਾਮਲ ਹੋ "
|
||||
"ਸਕਦੇ ਹਨ"
|
||||
|
||||
#: ../src/ui/theme.c:1231
|
||||
#: ../src/ui/theme.c:1232
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
@ -975,7 +982,7 @@ msgstr ""
|
||||
"ਫਿੱਟ "
|
||||
"ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1277
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@ -985,7 +992,7 @@ msgstr ""
|
||||
"ਜਿੱਥੇ ਸਾਧਾਰਨ "
|
||||
"ਇੱਕ ਹਾਲਤ ਹੈ; \"%s\" ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@ -995,60 +1002,60 @@ msgstr ""
|
||||
"gtk:fg[ਸਾਧਾਰਨ] "
|
||||
"ਜਿੱਥੇ ਸਾਧਾਰਨ ਇੱਕ ਹਾਲਤ ਹੈ; \"%s\" ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1302
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "ਰੰਗ ਹਦਾਇਤ ਵਿੱਚ \"%s\" ਹਾਲਤ ਨੂੰ ਨਹੀਂ ਸਮਝਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1315
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "ਰੰਗ ਹਦਾਇਤ ਵਿੱਚ ਰੰਗ ਸੰਖੇਪ \"%s\" ਨੂੰ ਨਹੀਂ ਸਮਝਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1344
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
"format"
|
||||
msgstr "ਧੁੰਦਲੀ ਬਣਤਰ \"ਧੁੰਦਲੀ/bg_ਰੰਗ/ਐਲਫਾ, \"%s\" ਬਣਤਰ ਵਿੱਚ ਠੀਕ ਨਹੀਂ ਆਂਉਦੀ"
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1355
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "ਧੁੰਦਲੇ ਰੰਗ ਵਿੱਚ ਐਲਫਾ ਕੀਮਤ \"%s\" ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1365
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "ਧੁੰਦਲੇ ਰੰਗ ਵਿੱਚ ਐਲਫਾ ਕੀਮਤ \"%s\" 0.0 ਅਤੇ 1.0 ਵਿਚਕਾਰ ਨਹੀਂ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:1411
|
||||
#: ../src/ui/theme.c:1412
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "ਰੰਗਤ ਬਣਤਰ \"ਰੰਗਤ/ਆਧਾਰ_ਰੰਗ/ਫੈਕਟਰ\" ਹੈ, \"%s\" ਬਣਤਰ ਵਿੱਚ ਠੀਕ ਨਹੀਂ ਆਉਦੀ"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1423
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "ਛਾਇਆ ਰੰਗ ਵਿੱਚ ਰੰਗਤ ਫੈਕਟਰ \"%s\" ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1433
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "ਛਾਇਆ ਰੰਗ ਵਿੱਚ ਰੰਗਤ ਫੈਕਟਰ \"%s\" ਨਾਂਹਵਾਚਕ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1462
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "\"%s\" ਰੰਗ ਦੀ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ"
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1779
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਅੱਖਰ '%s' ਸ਼ਾਮਿਲ ਹੈ ਜਿਸ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ"
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1806
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@ -1057,13 +1064,13 @@ msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਦਸ਼ਮਲਵ ਅੰਕ '%s' ਸ਼ਾਮਿਲ ਹੈ ਜਿਸ ਦੀ ਪਾਰਸ ਨਹੀਂ ਕੀਤੀ ਜਾ "
|
||||
"ਸਕਦੀ"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1820
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਪੂਰਨ ਅੰਕ '%s' ਸ਼ਾਮਿਲ ਹੈ ਜਿਸ ਦੀ ਪਾਰਸ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1941
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@ -1071,42 +1078,42 @@ msgid ""
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਇਸ ਪਾਠ \"%s\" ਦੇ ਸ਼ੁਰੂ ਵਿੱਚ ਅਣਪਛਾਤਾ ਆਪ੍ਰੇਟਰ ਸ਼ਾਮਿਲ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:1998
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਖਾਲੀ ਸੀ ਜਾਂ ਸਮਝਿਆ ਨਹੀਂ"
|
||||
|
||||
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਜੀਰੋ ਨਾਲ ਭਾਗ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2163
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਦਸ਼ਮਲਵ ਅੰਕ ਉੱਤੇ ਮਾਡ (mod) ਆਪ੍ਰੇਟਰ ਵਰਤਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2219
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਆਪ੍ਰੇਟਰ \"%s\" ਹੈ ਜਿੱਥੇ ਪ੍ਰਭਾਵੀ ਅੰਕ ਦੀ ਉਮੀਦ ਸੀ"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2228
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਪ੍ਰਭਾਵੀ ਅੰਕ ਸੀ ਜਿੱਥੇ ਆਪ੍ਰੇਟਰ ਦੀ ਉਮੀਦ ਸੀ"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2236
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਦੀ ਸਮਾਪਤੀ ਆਪ੍ਰੇਟਰ ਨਾਲ ਹੁੰਦੀ ਹੈ ਨਾ ਕਿ ਪ੍ਰਭਾਵੀ ਅੰਕ ਨਾਲ"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@ -1116,39 +1123,39 @@ msgstr ""
|
||||
"ਬਾਅਦ ਆਪ੍ਰੇਟਰ \"%c"
|
||||
"\" ਹੈ "
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਅਣਪਛਾਤਾ ਅਸਥਿਰ ਜਾਂ ਸਥਿਰ \"%s\" ਸੀ"
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2496
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਪਾਰਸਰ ਦਾ ਬਫ਼ਰ ਓਵਰਫਲੋ ਹੋ ਗਿਆ ਹੈ।"
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2525
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr ""
|
||||
"ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਕੋਈ ਖੁੱਲੀ ਬਰੈਕਟ ਨਾ ਹੋਣ ਕਰਕੇ ਬੰਦ ਬਰੈਕਟ(parenthesis) "
|
||||
"ਸੀ"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2589
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਕੋਈ ਬੰਦ ਬਰੈਕਟ ਨਾ ਹੋਣ ਕਰਕੇ ਖੁੱਲੀ ਬਰੈਕਟ ਸੀ"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2600
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "ਕਰੋਆਡੀਨੇਟ ਐਕਸ਼ਪਰੈਸ਼ਨ ਵਿੱਚ ਕੋਈ ਵੀ ਆਪ੍ਰੇਟਰ ਜਾਂ ਪ੍ਰਭਾਵੀ ਅੰਕ ਨਹੀਂ ਦਿਸਦਾ"
|
||||
|
||||
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "ਥੀਮ ਵਿੱਚ ਸਮੀਕਰਨ ਹੈ, ਜਿਸ ਦਾ ਨਤੀਜਾ ਹੈ ਗਲਤੀ: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4499
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@ -1158,25 +1165,25 @@ msgstr ""
|
||||
"ਦੇਣਾ "
|
||||
"ਲਾਜ਼ਮੀ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> ਗੁੰਮ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme.c:5082
|
||||
#: ../src/ui/theme.c:5083
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "ਥੀਮ \"%s\" ਲੋਡ ਕਰਨ ਲਈ ਅਸਫਲ: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
|
||||
#: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "ਥੀਮ \"%2$s\" ਲਈ <%1$s> ਨਹੀਂ ਸੈੱਟ ਕੀਤਾ"
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5255
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@ -1186,13 +1193,13 @@ msgstr ""
|
||||
"window type="
|
||||
"\"%s\" style_set=\"whatever\"/> ਐਲੀਮੈਂਟ ਸ਼ਾਮਿਲ ਕਰੋ"
|
||||
|
||||
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr "ਯੂਜ਼ਰ ਰਾਹੀਂ ਪਰਭਾਸ਼ਿਤ ਸਥਿਰ ਵੱਡੇ ਅੱਖਰ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ; \"%s\" ਨਹੀਂ ਹੁੰਦੇ"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "ਸਥਿਰ \"%s\" ਪਹਿਲਾਂ ਹੀ ਪਰਭਾਸ਼ਿਤ ਕੀਤਾ ਹੈ"
|
||||
@ -1703,31 +1710,31 @@ msgstr "ਥੀਮ ਲੋਡ ਕਰਨ ਵਿੱਚ ਗਲਤੀ: %s\n"
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "ਥੀਮ \"%s\" ਨੂੰ ਲੋਡ ਕਰਨ ਵਿੱਚ ਲੱਗਾ ਸਮਾਂ %g ਸਕਿੰਟਾਂ ਵਿੱਚ \n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:870
|
||||
#: ../src/ui/theme-viewer.c:871
|
||||
msgid "Normal Title Font"
|
||||
msgstr "ਸਾਧਾਰਨ ਟਾਇਟਲ ਫੋਂਟ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:876
|
||||
#: ../src/ui/theme-viewer.c:877
|
||||
msgid "Small Title Font"
|
||||
msgstr "ਛੋਟੇ ਟਾਇਟਲ ਫੋਂਟ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:882
|
||||
#: ../src/ui/theme-viewer.c:883
|
||||
msgid "Large Title Font"
|
||||
msgstr "ਵੱਡੇ ਟਾਇਟਲ ਫੋਂਟ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
#: ../src/ui/theme-viewer.c:888
|
||||
msgid "Button Layouts"
|
||||
msgstr "ਬਟਨ ਲੇਆਉਟ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
#: ../src/ui/theme-viewer.c:893
|
||||
msgid "Benchmark"
|
||||
msgstr "ਬੈਂਚਮਾਰਕ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:944
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "ਵਿੰਡੋ ਟਾਇਟਲ ਇੱਥੇ ਹੋਵੇਗਾ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1047
|
||||
#: ../src/ui/theme-viewer.c:1055
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
|
||||
@ -1738,43 +1745,46 @@ msgstr ""
|
||||
"ਸਰਵਰ ਸਮੇਤ %g "
|
||||
"ਸਕਿੰਟ ਕੰਧ ਘੜੀ ਸਮਾਂ (%g ਮਿਲੀ ਸਕਿੰਟ ਪ੍ਰਤੀ ਫਰੇਮ)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1266
|
||||
#: ../src/ui/theme-viewer.c:1275
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr "ਸਥਿਤੀ ਕਥਨ ਜਾਂਚ ਨੇ ਜਵਾਬ ਠੀਕ(TRUE) ਦਿੱਤਾ ਪਰ ਗਲਤੀ ਕੱਢੀ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1268
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr "ਸਥਿਤੀ ਕਥਨ ਜਾਂਚ ਨੇ ਜਵਾਬ ਗਲਤ(FALSE) ਦਿੱਤਾ ਪਰ ਗਲਤੀ ਨਹੀਂ ਕੱਢੀ ਹੈ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1272
|
||||
#: ../src/ui/theme-viewer.c:1281
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "ਗਲਤੀ ਦੀ ਉਮੀਦ ਸੀ ਪਰ ਕੋਈ ਵਿਖਾਈ ਨਹੀਂ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1274
|
||||
#: ../src/ui/theme-viewer.c:1283
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "ਗਲਤੀ %d ਦੀ ਉਮੀਦ ਸੀ ਪਰ ਵਿਖਾਈ %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1280
|
||||
#: ../src/ui/theme-viewer.c:1289
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "ਗਲਤੀ ਦੀ ਉਮੀਦ ਨਹੀਂ ਸੀ ਪਰ ਇੱਕ ਨਿਕਲੀ: %s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1284
|
||||
#: ../src/ui/theme-viewer.c:1293
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "x ਕੀਮਤ %d ਹੈ, %d ਦੀ ਉਮੀਦ ਸੀ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1287
|
||||
#: ../src/ui/theme-viewer.c:1296
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "y ਕੀਮਤ %d ਸੀ, %d ਦੀ ਉਮੀਦ ਸੀ"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1352
|
||||
#: ../src/ui/theme-viewer.c:1361
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "%d ਕੋਆਰਡੀਨੇਟਰ ਸਮੀਕਰਨ ਪਾਰਸ %g ਸਕਿੰਟਾਂ ਵਿੱਚ ਕੀਤੀ (ਔਸਤਨ %g ਸਕਿੰਟ)\n"
|
||||
|
||||
#~ msgid "Minimize window"
|
||||
#~ msgstr "ਵਿੰਡੋ ਘੱਟੋ-ਘੱਟ"
|
||||
|
||||
#~ msgid "Comma-separated list of compositor plugins"
|
||||
#~ msgstr "ਕਾਮਿਆਂ ਨਾਲ ਵੱਖ ਕੀਤੀ ਕੰਪੋਜ਼ਿਤਰ ਪਲੱਗਇਨ ਦੀ ਲਿਸਟ"
|
||||
|
||||
|
196
po/pl.po
196
po/pl.po
@ -9,14 +9,14 @@
|
||||
# Marek Stępień <marcoos@aviary.pl>, 2007.
|
||||
# Wadim Dziedzic <wdziedzic@aviary.pl>, 2007.
|
||||
# Tomasz Dominikowski <dominikowski@gmail.com>, 2008-2009.
|
||||
# Piotr Drąg <piotrdrag@gmail.com>, 2010-2012.
|
||||
# Aviary.pl <gnomepl@aviary.pl>, 2007-2012.
|
||||
# Piotr Drąg <piotrdrag@gmail.com>, 2010-2013.
|
||||
# Aviary.pl <gnomepl@aviary.pl>, 2007-2013.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-12-26 21:39+0100\n"
|
||||
"PO-Revision-Date: 2012-12-26 21:40+0100\n"
|
||||
"POT-Creation-Date: 2013-02-17 20:31+0100\n"
|
||||
"PO-Revision-Date: 2013-02-17 20:32+0100\n"
|
||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
|
||||
"Language-Team: Polish <gnomepl@aviary.pl>\n"
|
||||
"Language: pl\n"
|
||||
@ -173,8 +173,8 @@ msgid "Close window"
|
||||
msgstr "Zamknięcie okna"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
msgid "Minimize window"
|
||||
msgstr "Minimalizacja okna"
|
||||
msgid "Hide window"
|
||||
msgstr "Ukrycie okna"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Move window"
|
||||
@ -187,7 +187,7 @@ msgstr "Zmiana rozmiaru okna"
|
||||
#: ../src/50-mutter-windows.xml.in.h:12
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr ""
|
||||
"Przełączenie obecności okna na wszystkich obszarach roboczych lub jednym "
|
||||
"Przełączenie obecności okna na wszystkich obszarach roboczych lub jednym"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:13
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
@ -220,7 +220,7 @@ msgstr "Podział widoku po prawej"
|
||||
|
||||
#. 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:512
|
||||
#: ../src/compositor/compositor.c:542
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@ -260,12 +260,12 @@ msgstr "_Czekaj"
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Zakończ"
|
||||
|
||||
#: ../src/core/display.c:394
|
||||
#: ../src/core/display.c:392
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Brak rozszerzenia %s, wymaganego przez składanie"
|
||||
|
||||
#: ../src/core/display.c:491
|
||||
#: ../src/core/display.c:485
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr ""
|
||||
@ -304,12 +304,12 @@ msgstr "Inicjuje sesję z zapisanego pliku"
|
||||
msgid "Make X calls synchronous"
|
||||
msgstr "Synchroniczne wywołania X"
|
||||
|
||||
#: ../src/core/main.c:496
|
||||
#: ../src/core/main.c:494
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Przejrzenie katalogu z motywami się nie powiodło: %s\n"
|
||||
|
||||
#: ../src/core/main.c:512
|
||||
#: ../src/core/main.c:510
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
|
||||
@ -365,7 +365,7 @@ msgstr ""
|
||||
"Wartość \"%s\", odnaleziona w bazie danych konfiguracji nie opisuje "
|
||||
"prawidłowo modyfikatora przycisku myszy\n"
|
||||
|
||||
#: ../src/core/prefs.c:1768
|
||||
#: ../src/core/prefs.c:1780
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@ -374,17 +374,17 @@ msgstr ""
|
||||
"Wartość \"%s\", odnaleziona w bazie danych konfiguracji nie opisuje "
|
||||
"prawidłowo skrótu klawiszowego \"%s\"\n"
|
||||
|
||||
#: ../src/core/prefs.c:1865
|
||||
#: ../src/core/prefs.c:1877
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Obszar roboczy %d"
|
||||
|
||||
#: ../src/core/screen.c:658
|
||||
#: ../src/core/screen.c:659
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Podekran %d ekranu \"%s\" jest nieprawidłowy\n"
|
||||
|
||||
#: ../src/core/screen.c:674
|
||||
#: ../src/core/screen.c:675
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@ -393,7 +393,7 @@ msgstr ""
|
||||
"Na podekranie %d ekranu \"%s\" działa już menedżer okien. Aby zastąpić "
|
||||
"działającego menedżera okien, proszę spróbować użyć opcji --replace.\n"
|
||||
|
||||
#: ../src/core/screen.c:701
|
||||
#: ../src/core/screen.c:702
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
@ -401,12 +401,12 @@ msgstr ""
|
||||
"Nie można uzyskać zaznaczenia menedżera okien na podekranie %d ekranu \"%s"
|
||||
"\"\n"
|
||||
|
||||
#: ../src/core/screen.c:770
|
||||
#: ../src/core/screen.c:780
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "Na podekranie %d ekranu \"%s\" działa już menedżer okien\n"
|
||||
|
||||
#: ../src/core/screen.c:955
|
||||
#: ../src/core/screen.c:965
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Nie można zwolnić podekranu %d ekranu \"%s\"\n"
|
||||
@ -506,7 +506,7 @@ msgid "Window manager error: "
|
||||
msgstr "Błąd menedżera okien: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7277
|
||||
#: ../src/core/window.c:7452
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@ -522,7 +522,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7943
|
||||
#: ../src/core/window.c:8176
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@ -532,23 +532,23 @@ msgstr ""
|
||||
"niezmienny, lecz jednocześnie ustawia minimalny rozmiar na %d x %d, a "
|
||||
"maksymalny rozmiar na %d x %d. To nie ma żadnego sensu.\n"
|
||||
|
||||
#: ../src/core/window-props.c:274
|
||||
#: ../src/core/window-props.c:304
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "Program ustawił błędną wartość _NET_WM_PID %lu\n"
|
||||
|
||||
#: ../src/core/window-props.c:393
|
||||
#: ../src/core/window-props.c:423
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (na %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1448
|
||||
#: ../src/core/window-props.c:1506
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr ""
|
||||
"Nieprawidłowa wartość WM_TRANSIENT_FOR dla okna 0x%lx określona w %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1459
|
||||
#: ../src/core/window-props.c:1517
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR okna 0x%lx dla %s utworzyłoby pętlę.\n"
|
||||
@ -707,11 +707,11 @@ msgstr ""
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"If enabled, monitor nearly monitor sized windows automatically get maximized "
|
||||
"when mapped."
|
||||
"If enabled, new windows that are initially the size of the monitor "
|
||||
"automatically get maximized."
|
||||
msgstr ""
|
||||
"Jeśli jest włączone, to okna o rozmiarze zbliżonym do rozmiaru monitora "
|
||||
"zostają automatycznie maksymalizowane podczas mapowania."
|
||||
"Jeśli jest włączone, to nowe okna o początkowym rozmiarze zbliżonym do "
|
||||
"rozmiaru monitora zostają automatycznie maksymalizowane."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:19
|
||||
msgid "Select window from tab popup"
|
||||
@ -920,54 +920,54 @@ msgstr "Mod5"
|
||||
#. Translators: This represents the size of a window. The first number is
|
||||
#. * the width of the window and the second is the height.
|
||||
#.
|
||||
#: ../src/ui/resizepopup.c:113
|
||||
#: ../src/ui/resizepopup.c:136
|
||||
#, c-format
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:235
|
||||
msgid "top"
|
||||
msgstr "góra"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:237
|
||||
msgid "bottom"
|
||||
msgstr "dół"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:239
|
||||
msgid "left"
|
||||
msgstr "lewa"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:241
|
||||
msgid "right"
|
||||
msgstr "prawa"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:269
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "Rozmiar ramki nie określa wymiaru \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "Rozmiar ramki nie określa wymiaru \"%s\" dla krawędzi \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:325
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr ""
|
||||
"Współczynnik proporcji przycisku %g nie mieści się w rozsądnych granicach"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:337
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Rozmiar ramki nie określa liczby przycisków"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1050
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Gradienty powinny się składać co najmniej z dwóch kolorów"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
@ -977,7 +977,7 @@ msgstr ""
|
||||
"kolor zastępczy w nawiasach, np. gtk:custom(foo,bar); nie można przetworzyć "
|
||||
"\"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
@ -986,7 +986,7 @@ msgstr ""
|
||||
"Nieprawidłowy znak \"%c\" w parametrze nazwa_koloru opcji gtk:custom, tylko "
|
||||
"znaki A-Za-z0-9-_ są prawidłowe"
|
||||
|
||||
#: ../src/ui/theme.c:1231
|
||||
#: ../src/ui/theme.c:1232
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
@ -995,7 +995,7 @@ msgstr ""
|
||||
"Formatem Gtk:custom jest \"gtk:custom(nazwa_koloru,kolor_zastępczy)\", \"%s"
|
||||
"\" nie pasuje do formatu"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1277
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@ -1005,7 +1005,7 @@ msgstr ""
|
||||
"kwadratowych, np. gtk:fg[NORMAL], gdzie NORMAL jest nazwą stanu; nie można "
|
||||
"przetworzyć \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@ -1015,17 +1015,17 @@ msgstr ""
|
||||
"nawias kwadratowy, np. gtk:fg[NORMAL], gdzie NORMAL jest nazwą stanu; nie "
|
||||
"można przetworzyć \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1302
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Niezrozumiały stan \"%s\" w specyfikacji koloru"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1315
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Niezrozumiała definicja koloru \"%s\" w specyfikacji koloru"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1344
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@ -1034,19 +1034,19 @@ msgstr ""
|
||||
"Formatem przenikania jest \"blend/bg_color/fg_color/alpha\", \"%s\" nie "
|
||||
"pasuje do formatu"
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1355
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Nie można przetworzyć wartości alfa \"%s\" w przenikającym kolorze"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1365
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr ""
|
||||
"Wartość alfa \"%s\" w przenikającym kolorze nie zawiera się pomiędzy 0,0 i "
|
||||
"1,0"
|
||||
|
||||
#: ../src/ui/theme.c:1411
|
||||
#: ../src/ui/theme.c:1412
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
@ -1054,29 +1054,29 @@ msgstr ""
|
||||
"Formatem przenikania jest \"shade/base_color/factor\", \"%s\" nie pasuje do "
|
||||
"formatu"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1423
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr ""
|
||||
"Nie można przetworzyć współczynnika przenikania \"%s\" w przenikającym "
|
||||
"kolorze"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1433
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Współczynnik przenikania \"%s\" w przenikającym kolorze jest ujemny"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1462
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Nie można przetworzyć koloru \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1779
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Wyrażenie określające współrzędne zawiera niedozwolony znak \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1806
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@ -1085,14 +1085,14 @@ msgstr ""
|
||||
"Wyrażenie określające współrzędne zawiera liczbę zmiennoprzecinkową \"%s\", "
|
||||
"której nie można przetworzyć"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1820
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr ""
|
||||
"Wyrażenie określające współrzędne zawiera liczbę całkowitą \"%s\", której "
|
||||
"nie można przetworzyć"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1941
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@ -1101,18 +1101,18 @@ msgstr ""
|
||||
"Wyrażenie określające współrzędne zawiera nieznany operator na początku "
|
||||
"tekstu: \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:1998
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr ""
|
||||
"Wyrażenie określające współrzędne jest puste lub nie można go rozpoznać"
|
||||
|
||||
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Wyrażenie opisujące położenie zawiera dzielenie przez zero"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2163
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
@ -1120,7 +1120,7 @@ msgstr ""
|
||||
"Wyrażenie opisujące położenie używa operatora dzielenia modulo z liczbą "
|
||||
"zmiennoprzecinkową"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2219
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
@ -1128,19 +1128,19 @@ msgstr ""
|
||||
"Wyrażenie opisujące położenie zawiera operator \"%s\" w miejscu, w którym "
|
||||
"oczekiwano operandu"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2228
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr ""
|
||||
"Wyrażenie opisujące położenie zawiera operand w miejscu, w którym oczekiwano "
|
||||
"operatora"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2236
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Wyrażenie opisujące położenie kończy się operatorem zamiast operandem"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@ -1149,43 +1149,43 @@ msgstr ""
|
||||
"Wyrażenie opisujące położenie zawiera operator \"%c\" bezpośrednio po "
|
||||
"operatorze \"%c\" bez rozdzielającego ich operandu"
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr ""
|
||||
"Wyrażenie opisujące położenie zawiera nieznaną zmienną lub stałą \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2496
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Parser wyrażeń określających współrzędne przepełnił swój bufor."
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2525
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr ""
|
||||
"Wyrażenie opisujące położenie zawiera nawias zamykający bez odpowiadającego "
|
||||
"mu nawiasu otwierającego"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2589
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr ""
|
||||
"Wyrażenie opisujące położenie zawiera nawias otwierający bez odpowiadającego "
|
||||
"mu nawiasu zamykającego"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2600
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr ""
|
||||
"Wyrażenie opisujące położenie nie zawiera żadnych operatorów ani operandów"
|
||||
|
||||
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Motyw zawiera wyrażenie, przy którego obliczaniu wystąpił błąd: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4499
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@ -1194,25 +1194,25 @@ msgstr ""
|
||||
"Przy tym stylu ramki należy podać <button function=\"%s\" state=\"%s\" "
|
||||
"draw_ops=\"cokolwiek\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"Brak <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"cokolwiek\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5082
|
||||
#: ../src/ui/theme.c:5083
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Wczytanie motywu \"%s\" się nie powiodło: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
|
||||
#: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Nie określono elementu <%s> dla motywu \"%s\""
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5255
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@ -1221,7 +1221,7 @@ msgstr ""
|
||||
"Przy typie okna \"%s\" w motywie \"%s\" nie ustawiono stylu ramki. Należy "
|
||||
"dodać element <window type=\"%s\" style_set=\"cokolwiek\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
@ -1229,7 +1229,7 @@ msgstr ""
|
||||
"Stałe definiowane przez użytkownika powinny rozpoczynać się wielką literą, "
|
||||
"natomiast \"%s\" nie spełnia tego warunku"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Stała \"%s\" została już określona"
|
||||
@ -1723,57 +1723,57 @@ msgstr "Krawędź"
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Dołączone modalne okno dialogowe"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:739
|
||||
#: ../src/ui/theme-viewer.c:737
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Test układu przycisków %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:768
|
||||
#: ../src/ui/theme-viewer.c:766
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g milisekundy do narysowania jednej ramki okna"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:813
|
||||
#: ../src/ui/theme-viewer.c:811
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Użycie: metacity-theme-viewer [NAZWA_MOTYWU]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:820
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Błąd podczas wczytywania motywu: %s\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:826
|
||||
#: ../src/ui/theme-viewer.c:824
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Wczytano motyw \"%s\" w ciągu %g sekund\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:870
|
||||
#: ../src/ui/theme-viewer.c:869
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Zwykła czcionka tytułu"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:876
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Small Title Font"
|
||||
msgstr "Mała czcionka tytułu"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:882
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Large Title Font"
|
||||
msgstr "Duża czcionka tytułu"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
#: ../src/ui/theme-viewer.c:886
|
||||
msgid "Button Layouts"
|
||||
msgstr "Układy przycisków"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
#: ../src/ui/theme-viewer.c:891
|
||||
msgid "Benchmark"
|
||||
msgstr "Test wydajności"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
#: ../src/ui/theme-viewer.c:947
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "Tutaj znajduje się tytuł okna"
|
||||
|
||||
# FIXME - bełkot
|
||||
#: ../src/ui/theme-viewer.c:1052
|
||||
#: ../src/ui/theme-viewer.c:1053
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
|
||||
@ -1784,39 +1784,39 @@ msgstr ""
|
||||
"%g sekund rzeczywistych, włączając w to zasoby serwera X (%g milisekund na "
|
||||
"ramkę)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1271
|
||||
#: ../src/ui/theme-viewer.c:1273
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr "Test wyrażenia pozycji zwrócił wartość PRAWDA, lecz ustawił błąd"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1273
|
||||
#: ../src/ui/theme-viewer.c:1275
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr "Test wyrażenia pozycji zwrócił wartość FAŁSZ, lecz nie ustawił błędu"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "Oczekiwano błędu, lecz nie otrzymano żadnego"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
#: ../src/ui/theme-viewer.c:1281
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "Oczekiwano błędu %d, lecz otrzymano %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1285
|
||||
#: ../src/ui/theme-viewer.c:1287
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "Nie oczekiwano błędu, lecz został on zwrócony: %s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1289
|
||||
#: ../src/ui/theme-viewer.c:1291
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "Wartością X było %d, oczekiwano wartości %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1292
|
||||
#: ../src/ui/theme-viewer.c:1294
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "Wartością Y było %d, oczekiwano wartości %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1357
|
||||
#: ../src/ui/theme-viewer.c:1359
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr ""
|
||||
|
553
po/sr.po
553
po/sr.po
@ -4,14 +4,14 @@
|
||||
# Maintainer: Горан Ракић <grakic@devbase.net>
|
||||
# Reviewed on 2005-09-03 by: Данило Шеган <danilo@prevod.org>"
|
||||
# Милош Поповић <gpopac@gmail.com>, 2010.
|
||||
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2012.
|
||||
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2012, 2013.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
|
||||
"&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-10-16 12:48+0000\n"
|
||||
"PO-Revision-Date: 2012-10-16 20:28+0200\n"
|
||||
"POT-Creation-Date: 2013-02-14 19:45+0000\n"
|
||||
"PO-Revision-Date: 2013-02-17 10:31+0200\n"
|
||||
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
|
||||
"Language-Team: Serbian <gnom@prevod.org>\n"
|
||||
"Language: sr\n"
|
||||
@ -22,21 +22,199 @@ msgstr ""
|
||||
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1 ../src/50-mutter-windows.xml.in.h:17
|
||||
#: ../src/50-mutter-navigation.xml.in.h:1
|
||||
msgid "Navigation"
|
||||
msgstr "Навигација"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:2
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "Премешта прозор на радни простор број 1"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:3
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "Премешта прозор на радни простор број 2"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:4
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "Премешта прозор на радни простор број 3"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:5
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "Премешта прозор на радни простор број 4"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:6
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Премешта прозор један радни простор улево"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Премешта прозор један радни простор удесно"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Премешта прозор један радни простор на горе"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:9
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Премешта прозор један радни простор на доле"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:10
|
||||
msgid "Switch applications"
|
||||
msgstr "Пребацује програме"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:11
|
||||
#| msgid "Switch windows directly"
|
||||
msgid "Switch windows"
|
||||
msgstr "Пребацује прозоре"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:12
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Пребацује прозоре програма"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:13
|
||||
msgid "Switch system controls"
|
||||
msgstr "Пребацује контроле система"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:14
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Пребацује прозоре директно"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:15
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Пребацује прозоре програма директно"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:16
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Пребацује контроле система директно"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:17
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Скрива све обичне прозоре"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:18
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Пребацује се на радни простор 1"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:19
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Пребацује се на радни простор 2"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:20
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Пребацује се на радни простор 3"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:21
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Пребацује се на радни простор 4"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:22
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Премешта на радни простор лево"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:23
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Премешта на радни простор десно"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:24
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Премешта на радни простор изнад"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:25
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Премешта на радни простор испод"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:1
|
||||
msgid "System"
|
||||
msgstr "Систем"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:2
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "Приказује промпт за покретање наредбе"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:3
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Приказује преглед активности"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1
|
||||
msgid "Windows"
|
||||
msgstr "Прозори"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:2
|
||||
msgid "Activate the window menu"
|
||||
msgstr "Активира мени прозора"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "Искључује/укључује приказ преко целог екрана"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:4
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "Искључује/укључује стање увећања"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:5
|
||||
msgid "Maximize window"
|
||||
msgstr "Увећава прозор"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:6
|
||||
msgid "Restore window"
|
||||
msgstr "Враћа величину прозора"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:7
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Искључује/укључује стање засенчености"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:8
|
||||
msgid "Close window"
|
||||
msgstr "Затвара прозор"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
#| msgid "Resize window"
|
||||
msgid "Hide window"
|
||||
msgstr "Скрива прозор"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Move window"
|
||||
msgstr "Премешта прозор"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:11
|
||||
msgid "Resize window"
|
||||
msgstr "Мења величину прозора"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:12
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "Приказује прозор на свим радним просторима или само на једном"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:13
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Издиже прозор уколико га други прозор заклања, у противном га спушта"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:14
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Издиже прозор изнад осталих прозора"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:15
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Спушта прозор испод осталих прозора"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:16
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Увећава прозор вертикално"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:17
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Увећава прозор хоризонтално"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:18
|
||||
msgid "View split on left"
|
||||
msgstr "Прикажите поделу на лево"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
#: ../src/50-mutter-windows.xml.in.h:19
|
||||
msgid "View split on right"
|
||||
msgstr "Прикажите поделу на десно"
|
||||
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:492
|
||||
#: ../src/compositor/compositor.c:542
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@ -55,7 +233,6 @@ msgstr "Захтевана је непозната информација о п
|
||||
|
||||
#: ../src/core/delete.c:111
|
||||
#, c-format
|
||||
#| msgid "%s is not responding."
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "„%s“ не даје одзив."
|
||||
|
||||
@ -79,17 +256,17 @@ msgstr "_Сачекај"
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Приморај излаз"
|
||||
|
||||
#: ../src/core/display.c:396
|
||||
#: ../src/core/display.c:392
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Недостаје потребан композитни додатак %s"
|
||||
|
||||
#: ../src/core/display.c:493
|
||||
#: ../src/core/display.c:485
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Нисам успео да отворим екран „%s“ Икс система прозора\n"
|
||||
|
||||
#: ../src/core/keybindings.c:853
|
||||
#: ../src/core/keybindings.c:876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
@ -158,7 +335,7 @@ msgstr "Исписује издање"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Прикључци Матера за коришћење"
|
||||
|
||||
#: ../src/core/prefs.c:1079
|
||||
#: ../src/core/prefs.c:1087
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@ -166,12 +343,12 @@ msgstr ""
|
||||
"Решења за оштећене програме су искључена. Неке апликације се могу понашати "
|
||||
"чудно.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1154
|
||||
#: ../src/core/prefs.c:1162
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr "Не могу да обрадим опис „%s“ из кључа „%s“ у Гномовим подешавањима\n"
|
||||
|
||||
#: ../src/core/prefs.c:1220
|
||||
#: ../src/core/prefs.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@ -180,24 +357,24 @@ msgstr ""
|
||||
"„%s“ је пронађен у бази подешавања што није исправна вредност која мења "
|
||||
"понашање тастера миша\n"
|
||||
|
||||
#: ../src/core/prefs.c:1747
|
||||
#: ../src/core/prefs.c:1780
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
"\"%s\"\n"
|
||||
msgstr "„%s“ из базе са подешавањима није исправна комбинација тастера „%s“\n"
|
||||
|
||||
#: ../src/core/prefs.c:1844
|
||||
#: ../src/core/prefs.c:1877
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "%d. радни простор"
|
||||
|
||||
#: ../src/core/screen.c:652
|
||||
#: ../src/core/screen.c:659
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Приказ „%d“ на екрану „%s“ није исправан\n"
|
||||
|
||||
#: ../src/core/screen.c:668
|
||||
#: ../src/core/screen.c:675
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@ -206,18 +383,18 @@ msgstr ""
|
||||
"Приказ „%d“ на екрану „%s“ већ има управника прозора; покушајте да користите "
|
||||
"опцију „--replace“ да замените тренутног управника прозора.\n"
|
||||
|
||||
#: ../src/core/screen.c:695
|
||||
#: ../src/core/screen.c:702
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "Не могу да добијем избор управника прозора на приказу %d еркана „%s“\n"
|
||||
|
||||
#: ../src/core/screen.c:750
|
||||
#: ../src/core/screen.c:780
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "Приказ %d на екрану „%s“ већ има управника прозора\n"
|
||||
|
||||
#: ../src/core/screen.c:935
|
||||
#: ../src/core/screen.c:965
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Не могу да отпустим приказ %d на екрану „%s“\n"
|
||||
@ -314,7 +491,7 @@ msgid "Window manager error: "
|
||||
msgstr "Грешка управника прозора: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7237
|
||||
#: ../src/core/window.c:7447
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@ -330,7 +507,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7902
|
||||
#: ../src/core/window.c:8171
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@ -340,22 +517,22 @@ msgstr ""
|
||||
"али је поставио најмању величину %d x %d и највећу величину %d x %d што нема "
|
||||
"много смисла.\n"
|
||||
|
||||
#: ../src/core/window-props.c:274
|
||||
#: ../src/core/window-props.c:304
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "Програм је поставио нетачан _NET_WM_PID %lu\n"
|
||||
|
||||
#: ../src/core/window-props.c:393
|
||||
#: ../src/core/window-props.c:423
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (на %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1448
|
||||
#: ../src/core/window-props.c:1506
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Неисправан прозор 0x%lx наведен као WM_TRANSIENT_FOR за %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1459
|
||||
#: ../src/core/window-props.c:1517
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR прозор 0x%lx за %s ће направити петљу.\n"
|
||||
@ -501,10 +678,22 @@ msgstr ""
|
||||
"додате невидљиве ивице за достизање ове вредности."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
msgid "Auto maximize nearly monitor sized windows"
|
||||
msgstr "Сам увећава повећане прозоре најближег монитора"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"If enabled, new windows that are initially the size of the monitor "
|
||||
"automatically get maximized."
|
||||
msgstr ""
|
||||
"Ако је укључено, нови прозори који су почетно величине монитора самостално "
|
||||
"бивају увећани."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:19
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Бира прозор из језичка искакања"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:20
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Отказивање језичка искакања"
|
||||
|
||||
@ -707,53 +896,53 @@ msgstr "Мод5"
|
||||
#. Translators: This represents the size of a window. The first number is
|
||||
#. * the width of the window and the second is the height.
|
||||
#.
|
||||
#: ../src/ui/resizepopup.c:113
|
||||
#: ../src/ui/resizepopup.c:136
|
||||
#, c-format
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:235
|
||||
msgid "top"
|
||||
msgstr "горњу"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:237
|
||||
msgid "bottom"
|
||||
msgstr "доњу"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:239
|
||||
msgid "left"
|
||||
msgstr "леву"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:241
|
||||
msgid "right"
|
||||
msgstr "десну"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:269
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "геометрија оквира не подешава „%s“ димензију"
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "геометрија оквира не подешава „%s“ димензију за ивицу „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:325
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Однос размере дугмета %g није разуман"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:337
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Геометрија оквира не подешава величину дугмића"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1050
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Преливи морају имати најмање две боје"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
@ -762,7 +951,7 @@ msgstr ""
|
||||
"Спецификација произвољне ГТК боје мора имати назив боје и пребацивање у "
|
||||
"загради, на пример gtk:custom(foo,bar); не могу да обрадим „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
@ -771,7 +960,7 @@ msgstr ""
|
||||
"Неисправан знак „%c“ параметра назив_боје у gtk:custom, иасправни су само A-"
|
||||
"Za-z0-9-_"
|
||||
|
||||
#: ../src/ui/theme.c:1231
|
||||
#: ../src/ui/theme.c:1232
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
@ -780,7 +969,7 @@ msgstr ""
|
||||
"Гтк:произвољни формат је „gtk:custom(назив_боје,пребацивање)“, „%s“ се не "
|
||||
"уклапа у формат"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1277
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@ -789,7 +978,7 @@ msgstr ""
|
||||
"Спецификација ГТК боје мора имати наведено стање у загради, на пример „gtk:fg"
|
||||
"[NORMAL]“ где је „NORMAL“ стање; не могу да обрадим „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@ -798,17 +987,17 @@ msgstr ""
|
||||
"Спецификација ГТК боје мора имати наведено стање у загради, на пример „gtk:fg"
|
||||
"[NORMAL]“ где је „NORMAL“ стање; не могу да обрадим „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1302
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Нисам разумео стање „%s“ у спецификацији боје"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1315
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Нисам разумео део боје „%s“ у спецификацији боје"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1344
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@ -817,55 +1006,55 @@ msgstr ""
|
||||
"Формат смеше је „blend/bg_color/fg_color/alpha“, „%s“ се не уклапа у тражени "
|
||||
"формат записа"
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1355
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Не могу да обрадим алфа вредност „%s“ у смешаној боји"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1365
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "Алфа вредност „%s“ у смешаној боји није између 0.0 и 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1411
|
||||
#: ../src/ui/theme.c:1412
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "Формат сенке је „shade/base_color/factor“, „%s“ се не уклапа у формат"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1423
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Не могу да обрадим фактор сенке „%s“ у осенченој боји"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1433
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Фактор сенке „%s“ у осенченој боји је негативан"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1462
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Не могу да обрадим боју „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1779
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Израз координата садржи знак „%s“ који није дозвољен"
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1806
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "Израз координата садржи децимални број „%s“ који не може бити обрађен"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1820
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "Израз координата садржи цели број „%s“ који не може бити обрађен"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1941
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@ -873,17 +1062,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"Израз са координатама садржи непознати оператор на почетку овог текста: „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:1998
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "Израз са координатама је био празан или неразумљив"
|
||||
|
||||
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Израз са координатама резултира у дељењу нулом"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2163
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
@ -891,23 +1080,23 @@ msgstr ""
|
||||
"Израз са координатам покушава да користи оператор остатка при дељењу за "
|
||||
"децимални број"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2219
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "Израз са координатама има оператор „%s“ где је очекиван операнд"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2228
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "Израз са координатама имаше операнд где је очекиван оператор"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2236
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Израз са координарама је завршио са оператором уместо са операндом"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@ -916,37 +1105,37 @@ msgstr ""
|
||||
"Израз са координатама има оператор „%c“, а затим оператор „%c“ без операнда "
|
||||
"између"
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Израз са координатама има непознату променљиву или константи „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2496
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Израз са координатама је био превелики за смештај и обраду."
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2525
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "Израз са координатама има затворене заграде без отворених заграда"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2589
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "Израз са координатама има отворену заграду без затворене заграде"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2600
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "Израз са координатама изгледа да нема ни један оператор или операнд"
|
||||
|
||||
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Тема садржи израз који резултира грешком: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4499
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@ -955,25 +1144,25 @@ msgstr ""
|
||||
"<button function=„%s“ state=„%s“ draw_ops=\"whatever\"/> мора бити наведен "
|
||||
"за овај стил оквира"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"Недостаје <frame state=„%s“ resize=„%s“ focus=„%s“ style=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5082
|
||||
#: ../src/ui/theme.c:5083
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Нисам успео да учитам тему „%s“: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
|
||||
#: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Није дефинисан елемент <%s> за тему „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5255
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@ -982,14 +1171,14 @@ msgstr ""
|
||||
"Није подешен стил оквира за прозор типа „%s“ у теми „%s“. Додајте <window "
|
||||
"type=„%s“ style_set=\"whatever\"/> елемент"
|
||||
|
||||
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
"Кориснички дефинисане константе морају почети великим словом; „%s“ не почиње"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Константа „%s“ је већ дефинисана"
|
||||
@ -1478,59 +1667,59 @@ msgstr "Ивица"
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Приложено важно прозорче"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:739
|
||||
#: ../src/ui/theme-viewer.c:737
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Проба распореда дугмића %d"
|
||||
|
||||
# bug: plural-forms
|
||||
#: ../src/ui/theme-viewer.c:768
|
||||
#: ../src/ui/theme-viewer.c:766
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g милисекунди за исцртавање оквира једног прозора"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:813
|
||||
#: ../src/ui/theme-viewer.c:811
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Употреба: metacity-theme-viewer [НАЗИВ_ТЕМЕ]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:820
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Грешка приликом учитавања теме: %s\n"
|
||||
|
||||
# bug: plural-forms
|
||||
#: ../src/ui/theme-viewer.c:826
|
||||
#: ../src/ui/theme-viewer.c:824
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Учитана је тема „%s“ за %g секунде\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:870
|
||||
#: ../src/ui/theme-viewer.c:869
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Обичан словни лик наслова"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:876
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Small Title Font"
|
||||
msgstr "Мали словни лик наслова"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:882
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Large Title Font"
|
||||
msgstr "Велики словни лик наслова"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
#: ../src/ui/theme-viewer.c:886
|
||||
msgid "Button Layouts"
|
||||
msgstr "Распоред дугмића"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
#: ../src/ui/theme-viewer.c:891
|
||||
msgid "Benchmark"
|
||||
msgstr "Провера брзине"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:944
|
||||
#: ../src/ui/theme-viewer.c:947
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "Овде иде наслов прозора"
|
||||
|
||||
# bug: plural-forms
|
||||
#: ../src/ui/theme-viewer.c:1047
|
||||
#: ../src/ui/theme-viewer.c:1053
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
|
||||
@ -1541,212 +1730,40 @@ msgstr ""
|
||||
"%g секунди времена на зидном часовнику укључујући и ресурсе Икс сервера (%g "
|
||||
"милисекунди по оквиру)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1266
|
||||
#: ../src/ui/theme-viewer.c:1273
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr "провера израза положаја је вратила тачно, али је поставила грешку"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1268
|
||||
#: ../src/ui/theme-viewer.c:1275
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr "провера израза положаја је вратила нетачно, али није поставила грешку"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1272
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "Очекивана је грешка, али није дата"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1274
|
||||
#: ../src/ui/theme-viewer.c:1281
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "Очекивана је грешка „%d“, али је дата „%d“"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1280
|
||||
#: ../src/ui/theme-viewer.c:1287
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "Грешка није очекивана, али је враћена једна: %s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1284
|
||||
#: ../src/ui/theme-viewer.c:1291
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "x вредност је била „%d“, а очекивана је „%d“"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1287
|
||||
#: ../src/ui/theme-viewer.c:1294
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "y вредност је била „%d“, а очекивана је „%d“"
|
||||
|
||||
# bug: plural-forms
|
||||
#: ../src/ui/theme-viewer.c:1352
|
||||
#: ../src/ui/theme-viewer.c:1359
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "%d израза координата је обрађено за %g секунде (просек %g секунде)\n"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:1
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Скрива све обичне прозоре"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:2
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Премешта на радни простор изнад"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:3
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Премешта на радни простор испод"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:4
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Премешта на радни простор лево"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:5
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Премешта на радни простор десно"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:6
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Премешта прозор један радни простор на доле"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Премешта прозор један радни простор улево"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Премешта прозор један радни простор удесно"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:9
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Премешта прозор један радни простор на горе"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:10
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "Премешта прозор на радни простор број 1"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:11
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "Премешта прозор на радни простор број 2"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:12
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "Премешта прозор на радни простор број 3"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:13
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "Премешта прозор на радни простор број 4"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:14
|
||||
msgid "Navigation"
|
||||
msgstr "Навигација"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:15
|
||||
msgid "Switch applications"
|
||||
msgstr "Пребацује програме"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:16
|
||||
msgid "Switch system controls"
|
||||
msgstr "Пребацује контроле система"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:17
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Пребацује контроле система директно"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:18
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Пребацује се на радни простор 1"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:19
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Пребацује се на радни простор 2"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:20
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Пребацује се на радни простор 3"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:21
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Пребацује се на радни простор 4"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:22
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Пребацује прозоре директно"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:23
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Пребацује прозоре програма директно"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:24
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Пребацује прозор програма"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:1
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Приказује преглед активности"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:2
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "Приказује промпт за покретање наредбе"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:3
|
||||
msgid "System"
|
||||
msgstr "Систем"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1
|
||||
msgid "Activate the window menu"
|
||||
msgstr "Активира мени прозора"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:2
|
||||
msgid "Close window"
|
||||
msgstr "Затвара прозор"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Спушта прозор испод осталих прозора"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:4
|
||||
msgid "Maximize window"
|
||||
msgstr "Увећава прозор"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:5
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Увећава прозор хоризонтално"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:6
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Увећава прозор вертикално"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:7
|
||||
msgid "Minimize window"
|
||||
msgstr "Умањује прозор"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:8
|
||||
msgid "Move window"
|
||||
msgstr "Премешта прозор"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Издиже прозор изнад осталих прозора"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Издиже прозор уколико га други прозор заклања, у противном га спушта"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:11
|
||||
msgid "Resize window"
|
||||
msgstr "Мења величину прозора"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:12
|
||||
msgid "Restore window"
|
||||
msgstr "Враћа величину прозора"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:13
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "Искључује/укључује приказ преко целог екрана"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:14
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "Искључује/укључује стање увећања"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:15
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Искључује/укључује стање засенчености"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:16
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "Приказује прозор на свим радним просторима или само на једном"
|
||||
|
553
po/sr@latin.po
553
po/sr@latin.po
@ -4,14 +4,14 @@
|
||||
# Maintainer: Goran Rakić <grakic@devbase.net>
|
||||
# Reviewed on 2005-09-03 by: Danilo Šegan <danilo@prevod.org>"
|
||||
# Miloš Popović <gpopac@gmail.com>, 2010.
|
||||
# Miroslav Nikolić <miroslavnikolic@rocketmail.com>, 2011, 2012.
|
||||
# Miroslav Nikolić <miroslavnikolic@rocketmail.com>, 2011, 2012, 2013.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mutter\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter"
|
||||
"&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-10-16 12:48+0000\n"
|
||||
"PO-Revision-Date: 2012-10-16 20:28+0200\n"
|
||||
"POT-Creation-Date: 2013-02-14 19:45+0000\n"
|
||||
"PO-Revision-Date: 2013-02-17 10:31+0200\n"
|
||||
"Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
|
||||
"Language-Team: Serbian <gnom@prevod.org>\n"
|
||||
"Language: sr\n"
|
||||
@ -22,21 +22,199 @@ msgstr ""
|
||||
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1 ../src/50-mutter-windows.xml.in.h:17
|
||||
#: ../src/50-mutter-navigation.xml.in.h:1
|
||||
msgid "Navigation"
|
||||
msgstr "Navigacija"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:2
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "Premešta prozor na radni prostor broj 1"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:3
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "Premešta prozor na radni prostor broj 2"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:4
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "Premešta prozor na radni prostor broj 3"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:5
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "Premešta prozor na radni prostor broj 4"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:6
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Premešta prozor jedan radni prostor ulevo"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Premešta prozor jedan radni prostor udesno"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Premešta prozor jedan radni prostor na gore"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:9
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Premešta prozor jedan radni prostor na dole"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:10
|
||||
msgid "Switch applications"
|
||||
msgstr "Prebacuje programe"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:11
|
||||
#| msgid "Switch windows directly"
|
||||
msgid "Switch windows"
|
||||
msgstr "Prebacuje prozore"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:12
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Prebacuje prozore programa"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:13
|
||||
msgid "Switch system controls"
|
||||
msgstr "Prebacuje kontrole sistema"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:14
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Prebacuje prozore direktno"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:15
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Prebacuje prozore programa direktno"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:16
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Prebacuje kontrole sistema direktno"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:17
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Skriva sve obične prozore"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:18
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Prebacuje se na radni prostor 1"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:19
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Prebacuje se na radni prostor 2"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:20
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Prebacuje se na radni prostor 3"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:21
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Prebacuje se na radni prostor 4"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:22
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Premešta na radni prostor levo"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:23
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Premešta na radni prostor desno"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:24
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Premešta na radni prostor iznad"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:25
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Premešta na radni prostor ispod"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:1
|
||||
msgid "System"
|
||||
msgstr "Sistem"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:2
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "Prikazuje prompt za pokretanje naredbe"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:3
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Prikazuje pregled aktivnosti"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1
|
||||
msgid "Windows"
|
||||
msgstr "Prozori"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:2
|
||||
msgid "Activate the window menu"
|
||||
msgstr "Aktivira meni prozora"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "Isključuje/uključuje prikaz preko celog ekrana"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:4
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "Isključuje/uključuje stanje uvećanja"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:5
|
||||
msgid "Maximize window"
|
||||
msgstr "Uvećava prozor"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:6
|
||||
msgid "Restore window"
|
||||
msgstr "Vraća veličinu prozora"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:7
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Isključuje/uključuje stanje zasenčenosti"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:8
|
||||
msgid "Close window"
|
||||
msgstr "Zatvara prozor"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
#| msgid "Resize window"
|
||||
msgid "Hide window"
|
||||
msgstr "Skriva prozor"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Move window"
|
||||
msgstr "Premešta prozor"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:11
|
||||
msgid "Resize window"
|
||||
msgstr "Menja veličinu prozora"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:12
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "Prikazuje prozor na svim radnim prostorima ili samo na jednom"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:13
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Izdiže prozor ukoliko ga drugi prozor zaklanja, u protivnom ga spušta"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:14
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Izdiže prozor iznad ostalih prozora"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:15
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Spušta prozor ispod ostalih prozora"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:16
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Uvećava prozor vertikalno"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:17
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Uvećava prozor horizontalno"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:18
|
||||
msgid "View split on left"
|
||||
msgstr "Prikažite podelu na levo"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
#: ../src/50-mutter-windows.xml.in.h:19
|
||||
msgid "View split on right"
|
||||
msgstr "Prikažite podelu na desno"
|
||||
|
||||
#. 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:492
|
||||
#: ../src/compositor/compositor.c:542
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@ -55,7 +233,6 @@ msgstr "Zahtevana je nepoznata informacija o prozoru: %d"
|
||||
|
||||
#: ../src/core/delete.c:111
|
||||
#, c-format
|
||||
#| msgid "%s is not responding."
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "„%s“ ne daje odziv."
|
||||
|
||||
@ -79,17 +256,17 @@ msgstr "_Sačekaj"
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Primoraj izlaz"
|
||||
|
||||
#: ../src/core/display.c:396
|
||||
#: ../src/core/display.c:392
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "Nedostaje potreban kompozitni dodatak %s"
|
||||
|
||||
#: ../src/core/display.c:493
|
||||
#: ../src/core/display.c:485
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Nisam uspeo da otvorim ekran „%s“ Iks sistema prozora\n"
|
||||
|
||||
#: ../src/core/keybindings.c:853
|
||||
#: ../src/core/keybindings.c:876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
@ -158,7 +335,7 @@ msgstr "Ispisuje izdanje"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "Priključci Matera za korišćenje"
|
||||
|
||||
#: ../src/core/prefs.c:1079
|
||||
#: ../src/core/prefs.c:1087
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@ -166,12 +343,12 @@ msgstr ""
|
||||
"Rešenja za oštećene programe su isključena. Neke aplikacije se mogu ponašati "
|
||||
"čudno.\n"
|
||||
|
||||
#: ../src/core/prefs.c:1154
|
||||
#: ../src/core/prefs.c:1162
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr "Ne mogu da obradim opis „%s“ iz ključa „%s“ u Gnomovim podešavanjima\n"
|
||||
|
||||
#: ../src/core/prefs.c:1220
|
||||
#: ../src/core/prefs.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@ -180,24 +357,24 @@ msgstr ""
|
||||
"„%s“ je pronađen u bazi podešavanja što nije ispravna vrednost koja menja "
|
||||
"ponašanje tastera miša\n"
|
||||
|
||||
#: ../src/core/prefs.c:1747
|
||||
#: ../src/core/prefs.c:1780
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
"\"%s\"\n"
|
||||
msgstr "„%s“ iz baze sa podešavanjima nije ispravna kombinacija tastera „%s“\n"
|
||||
|
||||
#: ../src/core/prefs.c:1844
|
||||
#: ../src/core/prefs.c:1877
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "%d. radni prostor"
|
||||
|
||||
#: ../src/core/screen.c:652
|
||||
#: ../src/core/screen.c:659
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "Prikaz „%d“ na ekranu „%s“ nije ispravan\n"
|
||||
|
||||
#: ../src/core/screen.c:668
|
||||
#: ../src/core/screen.c:675
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@ -206,18 +383,18 @@ msgstr ""
|
||||
"Prikaz „%d“ na ekranu „%s“ već ima upravnika prozora; pokušajte da koristite "
|
||||
"opciju „--replace“ da zamenite trenutnog upravnika prozora.\n"
|
||||
|
||||
#: ../src/core/screen.c:695
|
||||
#: ../src/core/screen.c:702
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "Ne mogu da dobijem izbor upravnika prozora na prikazu %d erkana „%s“\n"
|
||||
|
||||
#: ../src/core/screen.c:750
|
||||
#: ../src/core/screen.c:780
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "Prikaz %d na ekranu „%s“ već ima upravnika prozora\n"
|
||||
|
||||
#: ../src/core/screen.c:935
|
||||
#: ../src/core/screen.c:965
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Ne mogu da otpustim prikaz %d na ekranu „%s“\n"
|
||||
@ -314,7 +491,7 @@ msgid "Window manager error: "
|
||||
msgstr "Greška upravnika prozora: "
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7237
|
||||
#: ../src/core/window.c:7447
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@ -330,7 +507,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7902
|
||||
#: ../src/core/window.c:8171
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@ -340,22 +517,22 @@ msgstr ""
|
||||
"ali je postavio najmanju veličinu %d x %d i najveću veličinu %d x %d što nema "
|
||||
"mnogo smisla.\n"
|
||||
|
||||
#: ../src/core/window-props.c:274
|
||||
#: ../src/core/window-props.c:304
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "Program je postavio netačan _NET_WM_PID %lu\n"
|
||||
|
||||
#: ../src/core/window-props.c:393
|
||||
#: ../src/core/window-props.c:423
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (na %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1448
|
||||
#: ../src/core/window-props.c:1506
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "Neispravan prozor 0x%lx naveden kao WM_TRANSIENT_FOR za %s.\n"
|
||||
|
||||
#: ../src/core/window-props.c:1459
|
||||
#: ../src/core/window-props.c:1517
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "WM_TRANSIENT_FOR prozor 0x%lx za %s će napraviti petlju.\n"
|
||||
@ -501,10 +678,22 @@ msgstr ""
|
||||
"dodate nevidljive ivice za dostizanje ove vrednosti."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
msgid "Auto maximize nearly monitor sized windows"
|
||||
msgstr "Sam uvećava povećane prozore najbližeg monitora"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"If enabled, new windows that are initially the size of the monitor "
|
||||
"automatically get maximized."
|
||||
msgstr ""
|
||||
"Ako je uključeno, novi prozori koji su početno veličine monitora samostalno "
|
||||
"bivaju uvećani."
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:19
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "Bira prozor iz jezička iskakanja"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:20
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "Otkazivanje jezička iskakanja"
|
||||
|
||||
@ -707,53 +896,53 @@ msgstr "Mod5"
|
||||
#. Translators: This represents the size of a window. The first number is
|
||||
#. * the width of the window and the second is the height.
|
||||
#.
|
||||
#: ../src/ui/resizepopup.c:113
|
||||
#: ../src/ui/resizepopup.c:136
|
||||
#, c-format
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:235
|
||||
msgid "top"
|
||||
msgstr "gornju"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:237
|
||||
msgid "bottom"
|
||||
msgstr "donju"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:239
|
||||
msgid "left"
|
||||
msgstr "levu"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:241
|
||||
msgid "right"
|
||||
msgstr "desnu"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:269
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "geometrija okvira ne podešava „%s“ dimenziju"
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "geometrija okvira ne podešava „%s“ dimenziju za ivicu „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:325
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "Odnos razmere dugmeta %g nije razuman"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:337
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Geometrija okvira ne podešava veličinu dugmića"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1050
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Prelivi moraju imati najmanje dve boje"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
@ -762,7 +951,7 @@ msgstr ""
|
||||
"Specifikacija proizvoljne GTK boje mora imati naziv boje i prebacivanje u "
|
||||
"zagradi, na primer gtk:custom(foo,bar); ne mogu da obradim „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
@ -771,7 +960,7 @@ msgstr ""
|
||||
"Neispravan znak „%c“ parametra naziv_boje u gtk:custom, iaspravni su samo A-"
|
||||
"Za-z0-9-_"
|
||||
|
||||
#: ../src/ui/theme.c:1231
|
||||
#: ../src/ui/theme.c:1232
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
@ -780,7 +969,7 @@ msgstr ""
|
||||
"Gtk:proizvoljni format je „gtk:custom(naziv_boje,prebacivanje)“, „%s“ se ne "
|
||||
"uklapa u format"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1277
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@ -789,7 +978,7 @@ msgstr ""
|
||||
"Specifikacija GTK boje mora imati navedeno stanje u zagradi, na primer „gtk:fg"
|
||||
"[NORMAL]“ gde je „NORMAL“ stanje; ne mogu da obradim „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@ -798,17 +987,17 @@ msgstr ""
|
||||
"Specifikacija GTK boje mora imati navedeno stanje u zagradi, na primer „gtk:fg"
|
||||
"[NORMAL]“ gde je „NORMAL“ stanje; ne mogu da obradim „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1302
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Nisam razumeo stanje „%s“ u specifikaciji boje"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1315
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Nisam razumeo deo boje „%s“ u specifikaciji boje"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1344
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@ -817,55 +1006,55 @@ msgstr ""
|
||||
"Format smeše je „blend/bg_color/fg_color/alpha“, „%s“ se ne uklapa u traženi "
|
||||
"format zapisa"
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1355
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Ne mogu da obradim alfa vrednost „%s“ u smešanoj boji"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1365
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "Alfa vrednost „%s“ u smešanoj boji nije između 0.0 i 1.0"
|
||||
|
||||
#: ../src/ui/theme.c:1411
|
||||
#: ../src/ui/theme.c:1412
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "Format senke je „shade/base_color/factor“, „%s“ se ne uklapa u format"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1423
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Ne mogu da obradim faktor senke „%s“ u osenčenoj boji"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1433
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Faktor senke „%s“ u osenčenoj boji je negativan"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1462
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Ne mogu da obradim boju „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1779
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Izraz koordinata sadrži znak „%s“ koji nije dozvoljen"
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1806
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "Izraz koordinata sadrži decimalni broj „%s“ koji ne može biti obrađen"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1820
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "Izraz koordinata sadrži celi broj „%s“ koji ne može biti obrađen"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1941
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@ -873,17 +1062,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"Izraz sa koordinatama sadrži nepoznati operator na početku ovog teksta: „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:1998
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "Izraz sa koordinatama je bio prazan ili nerazumljiv"
|
||||
|
||||
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Izraz sa koordinatama rezultira u deljenju nulom"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2163
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
@ -891,23 +1080,23 @@ msgstr ""
|
||||
"Izraz sa koordinatam pokušava da koristi operator ostatka pri deljenju za "
|
||||
"decimalni broj"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2219
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "Izraz sa koordinatama ima operator „%s“ gde je očekivan operand"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2228
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "Izraz sa koordinatama imaše operand gde je očekivan operator"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2236
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Izraz sa koordinarama je završio sa operatorom umesto sa operandom"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@ -916,37 +1105,37 @@ msgstr ""
|
||||
"Izraz sa koordinatama ima operator „%c“, a zatim operator „%c“ bez operanda "
|
||||
"između"
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Izraz sa koordinatama ima nepoznatu promenljivu ili konstanti „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2496
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Izraz sa koordinatama je bio preveliki za smeštaj i obradu."
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2525
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "Izraz sa koordinatama ima zatvorene zagrade bez otvorenih zagrada"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2589
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "Izraz sa koordinatama ima otvorenu zagradu bez zatvorene zagrade"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2600
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "Izraz sa koordinatama izgleda da nema ni jedan operator ili operand"
|
||||
|
||||
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "Tema sadrži izraz koji rezultira greškom: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4499
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@ -955,25 +1144,25 @@ msgstr ""
|
||||
"<button function=„%s“ state=„%s“ draw_ops=\"whatever\"/> mora biti naveden "
|
||||
"za ovaj stil okvira"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"Nedostaje <frame state=„%s“ resize=„%s“ focus=„%s“ style=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5082
|
||||
#: ../src/ui/theme.c:5083
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Nisam uspeo da učitam temu „%s“: %s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
|
||||
#: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "Nije definisan element <%s> za temu „%s“"
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5255
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@ -982,14 +1171,14 @@ msgstr ""
|
||||
"Nije podešen stil okvira za prozor tipa „%s“ u temi „%s“. Dodajte <window "
|
||||
"type=„%s“ style_set=\"whatever\"/> element"
|
||||
|
||||
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
"Korisnički definisane konstante moraju početi velikim slovom; „%s“ ne počinje"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Konstanta „%s“ je već definisana"
|
||||
@ -1478,59 +1667,59 @@ msgstr "Ivica"
|
||||
msgid "Attached Modal Dialog"
|
||||
msgstr "Priloženo važno prozorče"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:739
|
||||
#: ../src/ui/theme-viewer.c:737
|
||||
#, c-format
|
||||
msgid "Button layout test %d"
|
||||
msgstr "Proba rasporeda dugmića %d"
|
||||
|
||||
# bug: plural-forms
|
||||
#: ../src/ui/theme-viewer.c:768
|
||||
#: ../src/ui/theme-viewer.c:766
|
||||
#, c-format
|
||||
msgid "%g milliseconds to draw one window frame"
|
||||
msgstr "%g milisekundi za iscrtavanje okvira jednog prozora"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:813
|
||||
#: ../src/ui/theme-viewer.c:811
|
||||
#, c-format
|
||||
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
|
||||
msgstr "Upotreba: metacity-theme-viewer [NAZIV_TEME]\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:820
|
||||
#: ../src/ui/theme-viewer.c:818
|
||||
#, c-format
|
||||
msgid "Error loading theme: %s\n"
|
||||
msgstr "Greška prilikom učitavanja teme: %s\n"
|
||||
|
||||
# bug: plural-forms
|
||||
#: ../src/ui/theme-viewer.c:826
|
||||
#: ../src/ui/theme-viewer.c:824
|
||||
#, c-format
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "Učitana je tema „%s“ za %g sekunde\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:870
|
||||
#: ../src/ui/theme-viewer.c:869
|
||||
msgid "Normal Title Font"
|
||||
msgstr "Običan slovni lik naslova"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:876
|
||||
#: ../src/ui/theme-viewer.c:875
|
||||
msgid "Small Title Font"
|
||||
msgstr "Mali slovni lik naslova"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:882
|
||||
#: ../src/ui/theme-viewer.c:881
|
||||
msgid "Large Title Font"
|
||||
msgstr "Veliki slovni lik naslova"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
#: ../src/ui/theme-viewer.c:886
|
||||
msgid "Button Layouts"
|
||||
msgstr "Raspored dugmića"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
#: ../src/ui/theme-viewer.c:891
|
||||
msgid "Benchmark"
|
||||
msgstr "Provera brzine"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:944
|
||||
#: ../src/ui/theme-viewer.c:947
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "Ovde ide naslov prozora"
|
||||
|
||||
# bug: plural-forms
|
||||
#: ../src/ui/theme-viewer.c:1047
|
||||
#: ../src/ui/theme-viewer.c:1053
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
|
||||
@ -1541,212 +1730,40 @@ msgstr ""
|
||||
"%g sekundi vremena na zidnom časovniku uključujući i resurse Iks servera (%g "
|
||||
"milisekundi po okviru)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1266
|
||||
#: ../src/ui/theme-viewer.c:1273
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr "provera izraza položaja je vratila tačno, ali je postavila grešku"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1268
|
||||
#: ../src/ui/theme-viewer.c:1275
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr "provera izraza položaja je vratila netačno, ali nije postavila grešku"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1272
|
||||
#: ../src/ui/theme-viewer.c:1279
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "Očekivana je greška, ali nije data"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1274
|
||||
#: ../src/ui/theme-viewer.c:1281
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "Očekivana je greška „%d“, ali je data „%d“"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1280
|
||||
#: ../src/ui/theme-viewer.c:1287
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "Greška nije očekivana, ali je vraćena jedna: %s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1284
|
||||
#: ../src/ui/theme-viewer.c:1291
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "x vrednost je bila „%d“, a očekivana je „%d“"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1287
|
||||
#: ../src/ui/theme-viewer.c:1294
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "y vrednost je bila „%d“, a očekivana je „%d“"
|
||||
|
||||
# bug: plural-forms
|
||||
#: ../src/ui/theme-viewer.c:1352
|
||||
#: ../src/ui/theme-viewer.c:1359
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "%d izraza koordinata je obrađeno za %g sekunde (prosek %g sekunde)\n"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:1
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "Skriva sve obične prozore"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:2
|
||||
msgid "Move to workspace above"
|
||||
msgstr "Premešta na radni prostor iznad"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:3
|
||||
msgid "Move to workspace below"
|
||||
msgstr "Premešta na radni prostor ispod"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:4
|
||||
msgid "Move to workspace left"
|
||||
msgstr "Premešta na radni prostor levo"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:5
|
||||
msgid "Move to workspace right"
|
||||
msgstr "Premešta na radni prostor desno"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:6
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "Premešta prozor jedan radni prostor na dole"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "Premešta prozor jedan radni prostor ulevo"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "Premešta prozor jedan radni prostor udesno"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:9
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Premešta prozor jedan radni prostor na gore"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:10
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "Premešta prozor na radni prostor broj 1"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:11
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "Premešta prozor na radni prostor broj 2"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:12
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "Premešta prozor na radni prostor broj 3"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:13
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "Premešta prozor na radni prostor broj 4"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:14
|
||||
msgid "Navigation"
|
||||
msgstr "Navigacija"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:15
|
||||
msgid "Switch applications"
|
||||
msgstr "Prebacuje programe"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:16
|
||||
msgid "Switch system controls"
|
||||
msgstr "Prebacuje kontrole sistema"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:17
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "Prebacuje kontrole sistema direktno"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:18
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "Prebacuje se na radni prostor 1"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:19
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "Prebacuje se na radni prostor 2"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:20
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "Prebacuje se na radni prostor 3"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:21
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "Prebacuje se na radni prostor 4"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:22
|
||||
msgid "Switch windows directly"
|
||||
msgstr "Prebacuje prozore direktno"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:23
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "Prebacuje prozore programa direktno"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:24
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "Prebacuje prozor programa"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:1
|
||||
msgid "Show the activities overview"
|
||||
msgstr "Prikazuje pregled aktivnosti"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:2
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "Prikazuje prompt za pokretanje naredbe"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:3
|
||||
msgid "System"
|
||||
msgstr "Sistem"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1
|
||||
msgid "Activate the window menu"
|
||||
msgstr "Aktivira meni prozora"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:2
|
||||
msgid "Close window"
|
||||
msgstr "Zatvara prozor"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "Spušta prozor ispod ostalih prozora"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:4
|
||||
msgid "Maximize window"
|
||||
msgstr "Uvećava prozor"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:5
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "Uvećava prozor horizontalno"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:6
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "Uvećava prozor vertikalno"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:7
|
||||
msgid "Minimize window"
|
||||
msgstr "Umanjuje prozor"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:8
|
||||
msgid "Move window"
|
||||
msgstr "Premešta prozor"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "Izdiže prozor iznad ostalih prozora"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "Izdiže prozor ukoliko ga drugi prozor zaklanja, u protivnom ga spušta"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:11
|
||||
msgid "Resize window"
|
||||
msgstr "Menja veličinu prozora"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:12
|
||||
msgid "Restore window"
|
||||
msgstr "Vraća veličinu prozora"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:13
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "Isključuje/uključuje prikaz preko celog ekrana"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:14
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "Isključuje/uključuje stanje uvećanja"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:15
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "Isključuje/uključuje stanje zasenčenosti"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:16
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "Prikazuje prozor na svim radnim prostorima ili samo na jednom"
|
||||
|
565
po/zh_HK.po
565
po/zh_HK.po
@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity 3.3.4\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-07-17 15:17+0800\n"
|
||||
"PO-Revision-Date: 2012-07-17 15:17+0800\n"
|
||||
"POT-Creation-Date: 2013-02-04 06:49+0800\n"
|
||||
"PO-Revision-Date: 2013-02-04 06:50+0800\n"
|
||||
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
|
||||
"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
|
||||
"Language: \n"
|
||||
@ -18,23 +18,200 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 1.5.4\n"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1 ../src/50-mutter-windows.xml.in.h:17
|
||||
#: ../src/50-mutter-navigation.xml.in.h:1
|
||||
msgid "Navigation"
|
||||
msgstr "導航"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:2
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "將視窗移至第 1 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:3
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "將視窗移至第 2 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:4
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "將視窗移至第 3 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:5
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "將視窗移至第 4 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:6
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "將視窗移至左方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "將視窗移至右方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "將視窗移至上方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:9
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "將視窗移至下方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:10
|
||||
msgid "Switch applications"
|
||||
msgstr "切換程式"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:11
|
||||
msgid "Switch windows"
|
||||
msgstr "切換視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:12
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "切換程式的視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:13
|
||||
msgid "Switch system controls"
|
||||
msgstr "切換系統控制"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:14
|
||||
msgid "Switch windows directly"
|
||||
msgstr "直接切換視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:15
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "直接切換程式的視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:16
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "直接切換系統控制"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:17
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "隱藏所有一般視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:18
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "切換至第 1 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:19
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "切換至第 2 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:20
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "切換至第 3 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:21
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "切換至第 4 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:22
|
||||
msgid "Move to workspace left"
|
||||
msgstr "移至左方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:23
|
||||
msgid "Move to workspace right"
|
||||
msgstr "移至右方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:24
|
||||
msgid "Move to workspace above"
|
||||
msgstr "移至上方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:25
|
||||
msgid "Move to workspace below"
|
||||
msgstr "移至下方的工作區"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:1
|
||||
msgid "System"
|
||||
msgstr "系統"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:2
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "顯示執行指令提示"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:3
|
||||
msgid "Show the activities overview"
|
||||
msgstr "顯示活動概覽"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1
|
||||
msgid "Windows"
|
||||
msgstr "視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:2
|
||||
msgid "Activate the window menu"
|
||||
msgstr "使用視窗選單"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "切換全螢幕模式"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:4
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "切換最大化狀態"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:5
|
||||
msgid "Maximize window"
|
||||
msgstr "視窗最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:6
|
||||
msgid "Restore window"
|
||||
msgstr "還原視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:7
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "切換視窗捲起/放下狀態"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:8
|
||||
msgid "Close window"
|
||||
msgstr "關閉視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
msgid "Hide window"
|
||||
msgstr "隱藏視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Move window"
|
||||
msgstr "移動視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:11
|
||||
msgid "Resize window"
|
||||
msgstr "調整視窗大小"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:12
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "切換視窗顯示在所有工作區或是只顯示於其中之一"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:13
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "若被其他視窗遮蔽就抬升它,否則將它降下"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:14
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "令某個視窗覆蓋其它視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:15
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "遮蔽某個視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:16
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "將視窗縱向最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:17
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "將視窗橫向最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:18
|
||||
msgid "View split on left"
|
||||
msgstr "檢視分割於左側"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
#: ../src/50-mutter-windows.xml.in.h:19
|
||||
msgid "View split on right"
|
||||
msgstr "檢視分割於右側"
|
||||
|
||||
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:492
|
||||
#: ../src/compositor/compositor.c:512
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@ -50,40 +227,40 @@ msgstr "響鈴事件"
|
||||
msgid "Unknown window information request: %d"
|
||||
msgstr "未知的視窗資訊要求:%d"
|
||||
|
||||
#: ../src/core/delete.c:114
|
||||
#: ../src/core/delete.c:111
|
||||
#, c-format
|
||||
msgid "%s is not responding."
|
||||
msgstr "%s 沒有回應。"
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s”沒有回應。"
|
||||
|
||||
#: ../src/core/delete.c:118
|
||||
#: ../src/core/delete.c:113
|
||||
msgid "Application is not responding."
|
||||
msgstr "應用程式沒有回應。"
|
||||
|
||||
#: ../src/core/delete.c:123
|
||||
#: ../src/core/delete.c:118
|
||||
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:130
|
||||
#: ../src/core/delete.c:125
|
||||
msgid "_Wait"
|
||||
msgstr "等待(_W)"
|
||||
|
||||
#: ../src/core/delete.c:130
|
||||
#: ../src/core/delete.c:125
|
||||
msgid "_Force Quit"
|
||||
msgstr "強制結束(_F)"
|
||||
|
||||
#: ../src/core/display.c:380
|
||||
#: ../src/core/display.c:393
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "遺失複合視窗管理所需的 %s 延伸功能"
|
||||
|
||||
#: ../src/core/display.c:446
|
||||
#: ../src/core/display.c:489
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "無法開啟 X Window 畫面‘%s’\n"
|
||||
|
||||
#: ../src/core/keybindings.c:844
|
||||
#: ../src/core/keybindings.c:876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
@ -147,25 +324,25 @@ msgstr "顯示版本"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "要使用的 Mutter 外掛程式"
|
||||
|
||||
#: ../src/core/prefs.c:1065
|
||||
#: ../src/core/prefs.c:1087
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
msgstr "關閉了對不合規格的程式的支援。某些程式可能無法正常運作。\n"
|
||||
|
||||
#: ../src/core/prefs.c:1140
|
||||
#: ../src/core/prefs.c:1162
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr "無法從 GSettings 設定鍵 %2$s 分析字型描述文字「%1$s」\n"
|
||||
|
||||
#: ../src/core/prefs.c:1206
|
||||
#: ../src/core/prefs.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
"modifier\n"
|
||||
msgstr "組態資料庫中的“%s”設定值不是有效的滑鼠按鈕修改功能鍵\n"
|
||||
|
||||
#: ../src/core/prefs.c:1724
|
||||
#: ../src/core/prefs.c:1780
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@ -173,17 +350,17 @@ msgid ""
|
||||
msgstr "組態資料庫中的“%s”不是按鍵組合“%s”的有效設定值\n"
|
||||
|
||||
# (Abel) take care of the same string in libwnck
|
||||
#: ../src/core/prefs.c:1821
|
||||
#: ../src/core/prefs.c:1877
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "工作區 %d"
|
||||
|
||||
#: ../src/core/screen.c:652
|
||||
#: ../src/core/screen.c:658
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "畫面‘%2$s’中的第 %1$d 個螢幕無效\n"
|
||||
|
||||
#: ../src/core/screen.c:668
|
||||
#: ../src/core/screen.c:674
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@ -191,18 +368,18 @@ msgid ""
|
||||
msgstr "畫面‘%2$s’中的第 %1$d 個螢幕已經有了視窗管理員;請嘗試使用 --replace 選項來替換目前的視窗管理員。\n"
|
||||
|
||||
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
|
||||
#: ../src/core/screen.c:695
|
||||
#: ../src/core/screen.c:701
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "無法在畫面“%2$s”中的第 %1$d 個螢幕進行視窗管理員選擇程序\n"
|
||||
|
||||
#: ../src/core/screen.c:750
|
||||
#: ../src/core/screen.c:770
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "畫面“%2$s”中的第 %1$d 個螢幕已經有了視窗總管\n"
|
||||
|
||||
#: ../src/core/screen.c:935
|
||||
#: ../src/core/screen.c:955
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "無法釋放畫面“%2$s”中的第 %1$d 個螢幕\n"
|
||||
@ -297,7 +474,7 @@ msgid "Window manager error: "
|
||||
msgstr "視窗總管錯誤:"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7234
|
||||
#: ../src/core/window.c:7285
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@ -311,29 +488,29 @@ msgstr "視窗 %s 將 SM_CLIENT_ID 設定為該視窗本身,而不是 ICCCM
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7899
|
||||
#: ../src/core/window.c:7951
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
"%d x %d and max size %d x %d; this doesn't make much sense.\n"
|
||||
msgstr "視窗 %s 設定了 MWM 提示,表示它不可以調整大小,但又將大小下限定為 %d×%d 及將大小上限定為 %d×%d;這種做法不符合常理。\n"
|
||||
|
||||
#: ../src/core/window-props.c:310
|
||||
#: ../src/core/window-props.c:304
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "程式設定了多餘的 _NET_WM_PID %lu\n"
|
||||
|
||||
#: ../src/core/window-props.c:429
|
||||
#: ../src/core/window-props.c:423
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s(在 %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1484
|
||||
#: ../src/core/window-props.c:1478
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "%2$s 指定了無效的 WM_TRANSIENT_FOR 視窗 0x%1$lx。\n"
|
||||
|
||||
#: ../src/core/window-props.c:1495
|
||||
#: ../src/core/window-props.c:1489
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "%2$s 的 WM_TRANSIENT_FOR 視窗 0x%1$lx 會造成迴圈。\n"
|
||||
@ -434,20 +611,41 @@ msgid ""
|
||||
msgstr "決定當視窗輪換時是否使用彈出式和強調框架。"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
msgid "Delay focus changes until the pointer stops moving"
|
||||
msgstr "延遲焦點的改變直到指標停止移動"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
msgid ""
|
||||
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
|
||||
"the focus will not be changed immediately when entering a window, but only "
|
||||
"after the pointer stops moving."
|
||||
msgstr "如果設為 true,焦點模式為「sloppy」或「mouse」,則焦點不會在進入視窗時立即改變,而是在指標停止移動之後才改變。"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
msgid "Draggable border width"
|
||||
msgstr "可拖曳邊框闊度"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr "所有可拖曳邊框的總數。如果布景的可視邊框不夠,會加入隱形邊框來符合這個數值。"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
msgid "Auto maximize nearly monitor sized windows"
|
||||
msgstr "自動最大化接近螢幕大小的視窗"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"If enabled, monitor nearly monitor sized windows automatically get maximized "
|
||||
"when mapped."
|
||||
msgstr "如果啟用,監控接近螢幕大小的視窗在對映時自動最大化。"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:19
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "從分頁彈出項選擇視窗"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:20
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "取消分頁彈出項"
|
||||
|
||||
@ -671,261 +869,261 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:235
|
||||
msgid "top"
|
||||
msgstr "頂"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:237
|
||||
msgid "bottom"
|
||||
msgstr "底"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:239
|
||||
msgid "left"
|
||||
msgstr "左"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:241
|
||||
msgid "right"
|
||||
msgstr "右"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:269
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "邊框的位置大小中沒有指定“%s”部分的大小"
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "邊框的位置大小中沒有指定“%2$s”邊框中的“%1$s”部分"
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:325
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "按鈕的長寬比 %g 不合理"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:337
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "邊框的位置大小規格內未有指定按鈕的大小"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1050
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "漸變色至少應該有兩種顏色"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
|
||||
msgstr "GTK 自選顏色規格規定必須有顏色名稱並加上封閉括號,例如 gtk:custom(foo,bar);無法分析「%s」"
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr "gtk:custom 的 color_name 參數 '%c' 中有無效字符,只能使用 A-Za-z0-9-_ "
|
||||
|
||||
#: ../src/ui/theme.c:1231
|
||||
#: ../src/ui/theme.c:1232
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
"fit the format"
|
||||
msgstr "Gtk:custom 的格式是「gtk:custom(color_name,fallback)」,但「%s」不符合格式"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1277
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
"where NORMAL is the state; could not parse \"%s\""
|
||||
msgstr "GTK 色彩規格規定必須在狀態外加上方括號,例如 gtk:fg[NORMAL],這裏 NORMAL 表示狀態;無法分析“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
"fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
msgstr "GTK 色彩規格規定必須在狀態後加上閉方括號,例如 gtk:fg[NORMAL],這裏 NORMAL 表示狀態;無法分析“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1302
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "無法將“%s”理解為色彩規格中的狀態"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1315
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "無法將“%s”理解為色彩規格中的色彩部分"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1344
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
"format"
|
||||
msgstr "指定混色的格式是“blend/背景顏色/前景顏色/透明度”,“%s”不符合規格"
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1355
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "無法理解“%s”作為混色的透明度數值"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1365
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "混色的透明度數值“%s”不是在 0.0 至 1.0 之間"
|
||||
|
||||
#: ../src/ui/theme.c:1411
|
||||
#: ../src/ui/theme.c:1412
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "陰影的格式是“shade/基本顏色/比重”,但“%s”不符合格式"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1423
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "在陰影顏色中無法將“%s”理解為陰影比重"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1433
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "在陰影顏色中陰影比重“%s”是負數"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1462
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "無法分析顏色“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1779
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "座標表達式中出現不可接受的字符‘%s’"
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1806
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "座標表達式中出現無法分析的浮點小數‘%s’"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1820
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "座標表達式中出現無法分析的整數‘%s’"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1941
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr "在座標表達式中,以下文字的開始部分含有不明的運算符:“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:1998
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "座標表達式是空白的或是無法分析"
|
||||
|
||||
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "座標表達式中出現被 0 整除的錯誤"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2163
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "座標表達式中出現將浮點數使用於餘數運算符 (mod) 的錯誤"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2219
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "在座標表達式中,應該有運算子的地方出現了運算符“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2228
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "在座標表達式中,應該有運算符的地方出現了運算子"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2236
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "結束座標表達式的是一個運算符而非運算子"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
"operand in between"
|
||||
msgstr "在座標表達式中,運算符“%c”緊隨運算符“%c”出現,但中間沒有任何運算子"
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "座標表達式中出現不明的變數或常數“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2496
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "座標表達式分析器令緩衝溢位。"
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2525
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "座標表達式中的閉括號沒有相應的開括號"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2589
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "座標表達式中的開括號沒有相應的閉括號"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2600
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "座標表達式中似乎沒有任何運算符或運算子"
|
||||
|
||||
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "佈景主題中含有引致錯誤的表達式:%s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4499
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
"specified for this frame style"
|
||||
msgstr "此邊框款式必須指定 <button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr "缺少了 <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5082
|
||||
#: ../src/ui/theme.c:5083
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "無法載入佈景主題“%s”:%s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
|
||||
#: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "佈景主題“%s”未指定 <%s>"
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5255
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
"type=\"%s\" style_set=\"whatever\"/> element"
|
||||
msgstr "在佈景主題“%2$s”中,視窗類型“%1$s”沒有指定任何邊框款式。請加上 <window type=\"%3$s\" style_set=\"whatever\"/> 元素"
|
||||
|
||||
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr "自行定義的常數必須以大寫字母開始;但“%s”不是"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "已定義了“%s”常數"
|
||||
@ -1418,31 +1616,31 @@ msgstr "載入佈景主題失敗 %s\n"
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "載入佈景主題 “%s” 需時 %g 秒\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:870
|
||||
#: ../src/ui/theme-viewer.c:871
|
||||
msgid "Normal Title Font"
|
||||
msgstr "正常標題列字型"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:876
|
||||
#: ../src/ui/theme-viewer.c:877
|
||||
msgid "Small Title Font"
|
||||
msgstr "小標題列字型"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:882
|
||||
#: ../src/ui/theme-viewer.c:883
|
||||
msgid "Large Title Font"
|
||||
msgstr "大標題列字型"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
#: ../src/ui/theme-viewer.c:888
|
||||
msgid "Button Layouts"
|
||||
msgstr "按鈕配置"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
#: ../src/ui/theme-viewer.c:893
|
||||
msgid "Benchmark"
|
||||
msgstr "速度測試"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:944
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "這裏是視窗標題"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1047
|
||||
#: ../src/ui/theme-viewer.c:1055
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
|
||||
@ -1453,214 +1651,45 @@ msgstr ""
|
||||
"在客戶端是 %g 秒(每幀 %g 毫秒)\n"
|
||||
"包括 X 伺服器資源的實際消耗時間是 %g 秒(每幀 %g 毫秒)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1266
|
||||
#: ../src/ui/theme-viewer.c:1275
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr "位置表現測試返回值是「正確」,但有 set error"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1268
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr "位置表現測試返回值是「錯誤」,但沒有 set error"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1272
|
||||
#: ../src/ui/theme-viewer.c:1281
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "預期會發生錯誤,但結果並沒錯誤發生"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1274
|
||||
#: ../src/ui/theme-viewer.c:1283
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "預期會發生錯誤 %d ,但結果卻出現 %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1280
|
||||
#: ../src/ui/theme-viewer.c:1289
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "預期不會發生錯誤,但結果返回了一個:%s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1284
|
||||
#: ../src/ui/theme-viewer.c:1293
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "x 的數值是 %d,%d是預期中的數值"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1287
|
||||
#: ../src/ui/theme-viewer.c:1296
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "y 的數值是 %d,%d是預期中的數值"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1352
|
||||
#: ../src/ui/theme-viewer.c:1361
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "分析 %d 座標表現需時 %g 秒(平均 %g 秒)\n"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:1
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "隱藏所有一般視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:2
|
||||
msgid "Move to workspace above"
|
||||
msgstr "移至上方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:3
|
||||
msgid "Move to workspace below"
|
||||
msgstr "移至下方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:4
|
||||
msgid "Move to workspace left"
|
||||
msgstr "移至左方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:5
|
||||
msgid "Move to workspace right"
|
||||
msgstr "移至右方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:6
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "將視窗移至下方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "將視窗移至左方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "將視窗移至右方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:9
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "將視窗移至上方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:10
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "將視窗移至第 1 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:11
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "將視窗移至第 2 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:12
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "將視窗移至第 3 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:13
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "將視窗移至第 4 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:14
|
||||
msgid "Navigation"
|
||||
msgstr "導航"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:15
|
||||
msgid "Switch applications"
|
||||
msgstr "切換程式"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:16
|
||||
msgid "Switch system controls"
|
||||
msgstr "切換系統控制"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:17
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "直接切換系統控制"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:18
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "切換至第 1 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:19
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "切換至第 2 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:20
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "切換至第 3 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:21
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "切換至第 4 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:22
|
||||
msgid "Switch windows directly"
|
||||
msgstr "直接切換視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:23
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "直接切換程式的視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:24
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "切換程式的視窗"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:1
|
||||
msgid "Show the activities overview"
|
||||
msgstr "顯示活動概覽"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:2
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "顯示執行指令提示"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:3
|
||||
msgid "System"
|
||||
msgstr "系統"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1
|
||||
msgid "Activate the window menu"
|
||||
msgstr "使用視窗選單"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:2
|
||||
msgid "Close window"
|
||||
msgstr "關閉視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "遮蔽某個視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:4
|
||||
msgid "Maximize window"
|
||||
msgstr "視窗最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:5
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "將視窗橫向最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:6
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "將視窗縱向最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:7
|
||||
msgid "Minimize window"
|
||||
msgstr "視窗最小化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:8
|
||||
msgid "Move window"
|
||||
msgstr "移動視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "令某個視窗覆蓋其它視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "若被其他視窗遮蔽就抬升它,否則將它降下"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:11
|
||||
msgid "Resize window"
|
||||
msgstr "調整視窗大小"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:12
|
||||
msgid "Restore window"
|
||||
msgstr "還原視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:13
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "切換全螢幕模式"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:14
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "切換最大化狀態"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:15
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "切換視窗捲起/放下狀態"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:16
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "切換視窗顯示在所有工作區或是只顯示於其中之一"
|
||||
#~ msgid "Minimize window"
|
||||
#~ msgstr "視窗最小化"
|
||||
|
||||
#~ msgid "Comma-separated list of compositor plugins"
|
||||
#~ msgstr "以逗號分隔的複合視窗外掛程式清單"
|
||||
|
567
po/zh_TW.po
567
po/zh_TW.po
@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity 3.3.4\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-07-17 15:17+0800\n"
|
||||
"PO-Revision-Date: 2012-07-16 11:21+0800\n"
|
||||
"POT-Creation-Date: 2013-02-04 06:49+0800\n"
|
||||
"PO-Revision-Date: 2013-02-03 14:26+0800\n"
|
||||
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
|
||||
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
|
||||
"Language: \n"
|
||||
@ -18,23 +18,200 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 1.5.4\n"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1 ../src/50-mutter-windows.xml.in.h:17
|
||||
#: ../src/50-mutter-navigation.xml.in.h:1
|
||||
msgid "Navigation"
|
||||
msgstr "導航"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:2
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "將視窗移至第 1 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:3
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "將視窗移至第 2 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:4
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "將視窗移至第 3 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:5
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "將視窗移至第 4 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:6
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "將視窗移至左方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "將視窗移至右方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "將視窗移至上方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:9
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "將視窗移至下方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:10
|
||||
msgid "Switch applications"
|
||||
msgstr "切換程式"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:11
|
||||
msgid "Switch windows"
|
||||
msgstr "切換視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:12
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "切換程式的視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:13
|
||||
msgid "Switch system controls"
|
||||
msgstr "切換系統控制"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:14
|
||||
msgid "Switch windows directly"
|
||||
msgstr "直接切換視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:15
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "直接切換程式的視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:16
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "直接切換系統控制"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:17
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "隱藏所有一般視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:18
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "切換至第 1 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:19
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "切換至第 2 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:20
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "切換至第 3 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:21
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "切換至第 4 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:22
|
||||
msgid "Move to workspace left"
|
||||
msgstr "移至左方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:23
|
||||
msgid "Move to workspace right"
|
||||
msgstr "移至右方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:24
|
||||
msgid "Move to workspace above"
|
||||
msgstr "移至上方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:25
|
||||
msgid "Move to workspace below"
|
||||
msgstr "移至下方的工作區"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:1
|
||||
msgid "System"
|
||||
msgstr "系統"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:2
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "顯示執行指令提示"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:3
|
||||
msgid "Show the activities overview"
|
||||
msgstr "顯示活動概覽"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1
|
||||
msgid "Windows"
|
||||
msgstr "視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:2
|
||||
msgid "Activate the window menu"
|
||||
msgstr "使用視窗選單"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "切換全螢幕模式"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:4
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "切換最大化狀態"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:5
|
||||
msgid "Maximize window"
|
||||
msgstr "視窗最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:6
|
||||
msgid "Restore window"
|
||||
msgstr "還原視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:7
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "切換視窗捲起/放下狀態"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:8
|
||||
msgid "Close window"
|
||||
msgstr "關閉視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
msgid "Hide window"
|
||||
msgstr "隱藏視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Move window"
|
||||
msgstr "移動視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:11
|
||||
msgid "Resize window"
|
||||
msgstr "調整視窗大小"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:12
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "切換視窗顯示在所有工作區或是只顯示於其中之一"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:13
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "若被其他視窗遮蔽就抬升它,否則將它降下"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:14
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "令某個視窗覆蓋其它視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:15
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "遮蔽某個視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:16
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "將視窗縱向最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:17
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "將視窗橫向最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:18
|
||||
msgid "View split on left"
|
||||
msgstr "檢視分割於左側"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
#: ../src/50-mutter-windows.xml.in.h:19
|
||||
msgid "View split on right"
|
||||
msgstr "檢視分割於右側"
|
||||
|
||||
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
|
||||
#. This probably means that a non-WM compositor like xcompmgr is running;
|
||||
#. * we have no way to get it to exit
|
||||
#: ../src/compositor/compositor.c:492
|
||||
#: ../src/compositor/compositor.c:512
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Another compositing manager is already running on screen %i on display \"%s"
|
||||
@ -50,40 +227,40 @@ msgstr "響鈴事件"
|
||||
msgid "Unknown window information request: %d"
|
||||
msgstr "未知的視窗資訊要求:%d"
|
||||
|
||||
#: ../src/core/delete.c:114
|
||||
#: ../src/core/delete.c:111
|
||||
#, c-format
|
||||
msgid "%s is not responding."
|
||||
msgstr "%s 沒有回應。"
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s”沒有回應。"
|
||||
|
||||
#: ../src/core/delete.c:118
|
||||
#: ../src/core/delete.c:113
|
||||
msgid "Application is not responding."
|
||||
msgstr "應用程式沒有回應。"
|
||||
|
||||
#: ../src/core/delete.c:123
|
||||
#: ../src/core/delete.c:118
|
||||
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:130
|
||||
#: ../src/core/delete.c:125
|
||||
msgid "_Wait"
|
||||
msgstr "等待(_W)"
|
||||
|
||||
#: ../src/core/delete.c:130
|
||||
#: ../src/core/delete.c:125
|
||||
msgid "_Force Quit"
|
||||
msgstr "強制結束(_F)"
|
||||
|
||||
#: ../src/core/display.c:380
|
||||
#: ../src/core/display.c:393
|
||||
#, c-format
|
||||
msgid "Missing %s extension required for compositing"
|
||||
msgstr "遺失複合視窗管理所需的 %s 延伸功能"
|
||||
|
||||
#: ../src/core/display.c:446
|
||||
#: ../src/core/display.c:489
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "無法開啟 X Window 畫面‘%s’\n"
|
||||
|
||||
#: ../src/core/keybindings.c:844
|
||||
#: ../src/core/keybindings.c:876
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
@ -147,25 +324,25 @@ msgstr "顯示版本"
|
||||
msgid "Mutter plugin to use"
|
||||
msgstr "要使用的 Mutter 外掛程式"
|
||||
|
||||
#: ../src/core/prefs.c:1065
|
||||
#: ../src/core/prefs.c:1087
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
msgstr "關閉了對不合規格的程式的支援。某些程式可能無法正常運作。\n"
|
||||
|
||||
#: ../src/core/prefs.c:1140
|
||||
#: ../src/core/prefs.c:1162
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
|
||||
msgstr "無法從 GSettings 設定鍵 %2$s 分析字型描述文字「%1$s」\n"
|
||||
|
||||
#: ../src/core/prefs.c:1206
|
||||
#: ../src/core/prefs.c:1228
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
"modifier\n"
|
||||
msgstr "組態資料庫中的“%s”設定值不是有效的滑鼠按鈕修改功能鍵\n"
|
||||
|
||||
#: ../src/core/prefs.c:1724
|
||||
#: ../src/core/prefs.c:1780
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@ -173,17 +350,17 @@ msgid ""
|
||||
msgstr "組態資料庫中的“%s”不是按鍵組合“%s”的有效設定值\n"
|
||||
|
||||
# (Abel) take care of the same string in libwnck
|
||||
#: ../src/core/prefs.c:1821
|
||||
#: ../src/core/prefs.c:1877
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "工作區 %d"
|
||||
|
||||
#: ../src/core/screen.c:652
|
||||
#: ../src/core/screen.c:658
|
||||
#, c-format
|
||||
msgid "Screen %d on display '%s' is invalid\n"
|
||||
msgstr "畫面‘%2$s’中的第 %1$d 個螢幕無效\n"
|
||||
|
||||
#: ../src/core/screen.c:668
|
||||
#: ../src/core/screen.c:674
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Screen %d on display \"%s\" already has a window manager; try using the --"
|
||||
@ -193,18 +370,18 @@ msgstr ""
|
||||
"換目前的視窗管理員。\n"
|
||||
|
||||
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
|
||||
#: ../src/core/screen.c:695
|
||||
#: ../src/core/screen.c:701
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "無法在畫面“%2$s”中的第 %1$d 個螢幕進行視窗管理員選擇程序\n"
|
||||
|
||||
#: ../src/core/screen.c:750
|
||||
#: ../src/core/screen.c:770
|
||||
#, c-format
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "畫面“%2$s”中的第 %1$d 個螢幕已經有了視窗總管\n"
|
||||
|
||||
#: ../src/core/screen.c:935
|
||||
#: ../src/core/screen.c:955
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "無法釋放畫面“%2$s”中的第 %1$d 個螢幕\n"
|
||||
@ -299,7 +476,7 @@ msgid "Window manager error: "
|
||||
msgstr "視窗總管錯誤:"
|
||||
|
||||
#. first time through
|
||||
#: ../src/core/window.c:7234
|
||||
#: ../src/core/window.c:7285
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@ -315,7 +492,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/core/window.c:7899
|
||||
#: ../src/core/window.c:7951
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
|
||||
@ -324,22 +501,22 @@ msgstr ""
|
||||
"視窗 %s 設定了 MWM 提示,表示它不可以調整大小,但又將大小下限定為 %d×%d 及將"
|
||||
"大小上限定為 %d×%d;這種做法不符合常理。\n"
|
||||
|
||||
#: ../src/core/window-props.c:310
|
||||
#: ../src/core/window-props.c:304
|
||||
#, c-format
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "程式設定了多餘的 _NET_WM_PID %lu\n"
|
||||
|
||||
#: ../src/core/window-props.c:429
|
||||
#: ../src/core/window-props.c:423
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s(在 %s)"
|
||||
|
||||
#: ../src/core/window-props.c:1484
|
||||
#: ../src/core/window-props.c:1478
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "%2$s 指定了無效的 WM_TRANSIENT_FOR 視窗 0x%1$lx。\n"
|
||||
|
||||
#: ../src/core/window-props.c:1495
|
||||
#: ../src/core/window-props.c:1489
|
||||
#, c-format
|
||||
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
|
||||
msgstr "%2$s 的 WM_TRANSIENT_FOR 視窗 0x%1$lx 會造成迴圈。\n"
|
||||
@ -449,21 +626,44 @@ msgid ""
|
||||
msgstr "決定當視窗輪換時是否使用彈出式和強調框架。"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:13
|
||||
msgid "Delay focus changes until the pointer stops moving"
|
||||
msgstr "延遲焦點的改變直到指標停止移動"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
msgid ""
|
||||
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
|
||||
"the focus will not be changed immediately when entering a window, but only "
|
||||
"after the pointer stops moving."
|
||||
msgstr ""
|
||||
"如果設為 true,焦點模式為「sloppy」或「mouse」,則焦點不會在進入視窗時立即改"
|
||||
"變,而是在指標停止移動之後才改變。"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
msgid "Draggable border width"
|
||||
msgstr "可拖曳邊框寬度"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:14
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
msgid ""
|
||||
"The amount of total draggable borders. If the theme's visible borders are "
|
||||
"not enough, invisible borders will be added to meet this value."
|
||||
msgstr ""
|
||||
"所有可拖曳邊框的總數。如果布景的可視邊框不夠,會加入隱形邊框來符合這個數值。"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:15
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
|
||||
msgid "Auto maximize nearly monitor sized windows"
|
||||
msgstr "自動最大化接近螢幕大小的視窗"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
|
||||
msgid ""
|
||||
"If enabled, monitor nearly monitor sized windows automatically get maximized "
|
||||
"when mapped."
|
||||
msgstr "如果啟用,監控接近螢幕大小的視窗在對映時自動最大化。"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:19
|
||||
msgid "Select window from tab popup"
|
||||
msgstr "從分頁彈出項選擇視窗"
|
||||
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:16
|
||||
#: ../src/org.gnome.mutter.gschema.xml.in.h:20
|
||||
msgid "Cancel tab popup"
|
||||
msgstr "取消分頁彈出項"
|
||||
|
||||
@ -687,48 +887,48 @@ msgstr "Mod5"
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
|
||||
#: ../src/ui/theme.c:234
|
||||
#: ../src/ui/theme.c:235
|
||||
msgid "top"
|
||||
msgstr "頂"
|
||||
|
||||
#: ../src/ui/theme.c:236
|
||||
#: ../src/ui/theme.c:237
|
||||
msgid "bottom"
|
||||
msgstr "底"
|
||||
|
||||
#: ../src/ui/theme.c:238
|
||||
#: ../src/ui/theme.c:239
|
||||
msgid "left"
|
||||
msgstr "左"
|
||||
|
||||
#: ../src/ui/theme.c:240
|
||||
#: ../src/ui/theme.c:241
|
||||
msgid "right"
|
||||
msgstr "右"
|
||||
|
||||
#: ../src/ui/theme.c:268
|
||||
#: ../src/ui/theme.c:269
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify \"%s\" dimension"
|
||||
msgstr "邊框的位置大小中沒有指定“%s”部分的大小"
|
||||
|
||||
#: ../src/ui/theme.c:287
|
||||
#: ../src/ui/theme.c:288
|
||||
#, c-format
|
||||
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
|
||||
msgstr "邊框的位置大小中沒有指定“%2$s”邊框中的“%1$s”部分"
|
||||
|
||||
#: ../src/ui/theme.c:324
|
||||
#: ../src/ui/theme.c:325
|
||||
#, c-format
|
||||
msgid "Button aspect ratio %g is not reasonable"
|
||||
msgstr "按鈕的長寬比 %g 不合理"
|
||||
|
||||
#: ../src/ui/theme.c:336
|
||||
#: ../src/ui/theme.c:337
|
||||
#, c-format
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "邊框的位置大小規格內未有指定按鈕的大小"
|
||||
|
||||
#: ../src/ui/theme.c:1049
|
||||
#: ../src/ui/theme.c:1050
|
||||
#, c-format
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "漸層至少應該有兩種顏色"
|
||||
|
||||
#: ../src/ui/theme.c:1201
|
||||
#: ../src/ui/theme.c:1202
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK custom color specification must have color name and fallback in "
|
||||
@ -737,14 +937,14 @@ msgstr ""
|
||||
"GTK 自訂顏色規格規定必須有顏色名稱並加上封閉括號,例如 gtk:custom(foo,bar);"
|
||||
"無法分析「%s」"
|
||||
|
||||
#: ../src/ui/theme.c:1217
|
||||
#: ../src/ui/theme.c:1218
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
|
||||
"_ are valid"
|
||||
msgstr "gtk:custom 的 color_name 參數 '%c' 中有無效字元,只能使用 A-Za-z0-9-_ "
|
||||
|
||||
#: ../src/ui/theme.c:1231
|
||||
#: ../src/ui/theme.c:1232
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
|
||||
@ -752,7 +952,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Gtk:custom 的格式是「gtk:custom(color_name,fallback)」,但「%s」不符合格式"
|
||||
|
||||
#: ../src/ui/theme.c:1276
|
||||
#: ../src/ui/theme.c:1277
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@ -761,7 +961,7 @@ msgstr ""
|
||||
"GTK 色彩規格規定必須在狀態外加上方括號,例如 gtk:fg[NORMAL],這裡 NORMAL 表示"
|
||||
"狀態;無法分析“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1290
|
||||
#: ../src/ui/theme.c:1291
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@ -770,148 +970,148 @@ msgstr ""
|
||||
"GTK 色彩規格規定必須在狀態後加上閉方括號,例如 gtk:fg[NORMAL],這裡 NORMAL 表"
|
||||
"示狀態;無法分析“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1301
|
||||
#: ../src/ui/theme.c:1302
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "無法將“%s”理解為色彩規格中的狀態"
|
||||
|
||||
#: ../src/ui/theme.c:1314
|
||||
#: ../src/ui/theme.c:1315
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "無法將“%s”理解為色彩規格中的色彩部分"
|
||||
|
||||
#: ../src/ui/theme.c:1343
|
||||
#: ../src/ui/theme.c:1344
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
"format"
|
||||
msgstr "指定混色的格式是“blend/背景顏色/前景顏色/透明度”,“%s”不符合規格"
|
||||
|
||||
#: ../src/ui/theme.c:1354
|
||||
#: ../src/ui/theme.c:1355
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "無法理解“%s”作為混色的透明度數值"
|
||||
|
||||
#: ../src/ui/theme.c:1364
|
||||
#: ../src/ui/theme.c:1365
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "混色的透明度數值“%s”不是在 0.0 至 1.0 之間"
|
||||
|
||||
#: ../src/ui/theme.c:1411
|
||||
#: ../src/ui/theme.c:1412
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "陰影的格式是“shade/基本顏色/比重”,但“%s”不符合格式"
|
||||
|
||||
#: ../src/ui/theme.c:1422
|
||||
#: ../src/ui/theme.c:1423
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "在陰影顏色中無法將“%s”理解為陰影比重"
|
||||
|
||||
#: ../src/ui/theme.c:1432
|
||||
#: ../src/ui/theme.c:1433
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "在陰影顏色中陰影比重“%s”是負數"
|
||||
|
||||
#: ../src/ui/theme.c:1461
|
||||
#: ../src/ui/theme.c:1462
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "無法分析顏色“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1778
|
||||
#: ../src/ui/theme.c:1779
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "座標表達式中出現不可接受的字元‘%s’"
|
||||
|
||||
#: ../src/ui/theme.c:1805
|
||||
#: ../src/ui/theme.c:1806
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "座標表達式中出現無法分析的浮點小數‘%s’"
|
||||
|
||||
#: ../src/ui/theme.c:1819
|
||||
#: ../src/ui/theme.c:1820
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "座標表達式中出現無法分析的整數‘%s’"
|
||||
|
||||
#: ../src/ui/theme.c:1940
|
||||
#: ../src/ui/theme.c:1941
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr "在座標表達式中,以下文字的開始部分含有不明的運算符:“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:1997
|
||||
#: ../src/ui/theme.c:1998
|
||||
#, c-format
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "座標表達式是空白的或是無法分析"
|
||||
|
||||
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
|
||||
#: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
|
||||
#, c-format
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "座標表達式中出現被 0 整除的錯誤"
|
||||
|
||||
#: ../src/ui/theme.c:2162
|
||||
#: ../src/ui/theme.c:2163
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "座標表達式中出現將浮點數使用於餘數運算符 (mod) 的錯誤"
|
||||
|
||||
#: ../src/ui/theme.c:2218
|
||||
#: ../src/ui/theme.c:2219
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "在座標表達式中,應該有運算子的地方出現了運算符“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:2227
|
||||
#: ../src/ui/theme.c:2228
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "在座標表達式中,應該有運算符的地方出現了運算子"
|
||||
|
||||
#: ../src/ui/theme.c:2235
|
||||
#: ../src/ui/theme.c:2236
|
||||
#, c-format
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "結束座標表達式的是一個運算符而非運算子"
|
||||
|
||||
#: ../src/ui/theme.c:2245
|
||||
#: ../src/ui/theme.c:2246
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
"operand in between"
|
||||
msgstr "在座標表達式中,運算符“%c”緊隨運算符“%c”出現,但中間沒有任何運算子"
|
||||
|
||||
#: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
|
||||
#: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "座標表達式中出現不明的變數或常數“%s”"
|
||||
|
||||
#: ../src/ui/theme.c:2495
|
||||
#: ../src/ui/theme.c:2496
|
||||
#, c-format
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "座標表達式分析器令緩衝溢位。"
|
||||
|
||||
#: ../src/ui/theme.c:2524
|
||||
#: ../src/ui/theme.c:2525
|
||||
#, c-format
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "座標表達式中的閉括號沒有相應的開括號"
|
||||
|
||||
#: ../src/ui/theme.c:2588
|
||||
#: ../src/ui/theme.c:2589
|
||||
#, c-format
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "座標表達式中的開括號沒有相應的閉括號"
|
||||
|
||||
#: ../src/ui/theme.c:2599
|
||||
#: ../src/ui/theme.c:2600
|
||||
#, c-format
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "座標表達式中似乎沒有任何運算符或運算子"
|
||||
|
||||
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
|
||||
#: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
|
||||
#, c-format
|
||||
msgid "Theme contained an expression that resulted in an error: %s\n"
|
||||
msgstr "佈景主題中含有引致錯誤的表達式:%s\n"
|
||||
|
||||
#: ../src/ui/theme.c:4498
|
||||
#: ../src/ui/theme.c:4499
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@ -920,25 +1120,25 @@ msgstr ""
|
||||
"此邊框款式必須指定 <button function=\"%s\" state=\"%s\" draw_ops=\"whatever"
|
||||
"\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
|
||||
#: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"缺少了 <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
|
||||
#: ../src/ui/theme.c:5082
|
||||
#: ../src/ui/theme.c:5083
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "無法載入佈景主題“%s”:%s\n"
|
||||
|
||||
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
|
||||
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
|
||||
#: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
|
||||
#: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "佈景主題“%s”未指定 <%s>"
|
||||
|
||||
#: ../src/ui/theme.c:5254
|
||||
#: ../src/ui/theme.c:5255
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@ -947,13 +1147,13 @@ msgstr ""
|
||||
"在佈景主題“%2$s”中,視窗類型“%1$s”沒有指定任何邊框款式。請加上 <window type="
|
||||
"\"%3$s\" style_set=\"whatever\"/> 元素"
|
||||
|
||||
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
|
||||
#: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr "自行定義的常數必須以大寫字母開始;但“%s”不是"
|
||||
|
||||
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
|
||||
#: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "已定義了“%s”常數"
|
||||
@ -1454,31 +1654,31 @@ msgstr "載入佈景主題失敗 %s\n"
|
||||
msgid "Loaded theme \"%s\" in %g seconds\n"
|
||||
msgstr "載入佈景主題 “%s” 需時 %g 秒\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:870
|
||||
#: ../src/ui/theme-viewer.c:871
|
||||
msgid "Normal Title Font"
|
||||
msgstr "正常標題列字型"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:876
|
||||
#: ../src/ui/theme-viewer.c:877
|
||||
msgid "Small Title Font"
|
||||
msgstr "小標題列字型"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:882
|
||||
#: ../src/ui/theme-viewer.c:883
|
||||
msgid "Large Title Font"
|
||||
msgstr "大標題列字型"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:887
|
||||
#: ../src/ui/theme-viewer.c:888
|
||||
msgid "Button Layouts"
|
||||
msgstr "按鈕配置"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:892
|
||||
#: ../src/ui/theme-viewer.c:893
|
||||
msgid "Benchmark"
|
||||
msgstr "速度測試"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:944
|
||||
#: ../src/ui/theme-viewer.c:949
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "這裡是視窗標題"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1047
|
||||
#: ../src/ui/theme-viewer.c:1055
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
|
||||
@ -1489,214 +1689,45 @@ msgstr ""
|
||||
"在客戶端是 %g 秒(每幀 %g 毫秒)\n"
|
||||
"包括 X 伺服器資源的實際消耗時間是 %g 秒(每幀 %g 毫秒)\n"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1266
|
||||
#: ../src/ui/theme-viewer.c:1275
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr "位置表現測試返回值是「正確」,但有 set error"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1268
|
||||
#: ../src/ui/theme-viewer.c:1277
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
msgstr "位置表現測試返回值是「錯誤」,但沒有 set error"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1272
|
||||
#: ../src/ui/theme-viewer.c:1281
|
||||
msgid "Error was expected but none given"
|
||||
msgstr "預期會發生錯誤,但結果並沒錯誤發生"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1274
|
||||
#: ../src/ui/theme-viewer.c:1283
|
||||
#, c-format
|
||||
msgid "Error %d was expected but %d given"
|
||||
msgstr "預期會發生錯誤 %d ,但結果卻出現 %d"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1280
|
||||
#: ../src/ui/theme-viewer.c:1289
|
||||
#, c-format
|
||||
msgid "Error not expected but one was returned: %s"
|
||||
msgstr "預期不會發生錯誤,但結果返回了一個:%s"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1284
|
||||
#: ../src/ui/theme-viewer.c:1293
|
||||
#, c-format
|
||||
msgid "x value was %d, %d was expected"
|
||||
msgstr "x 的數值是 %d,%d是預期中的數值"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1287
|
||||
#: ../src/ui/theme-viewer.c:1296
|
||||
#, c-format
|
||||
msgid "y value was %d, %d was expected"
|
||||
msgstr "y 的數值是 %d,%d是預期中的數值"
|
||||
|
||||
#: ../src/ui/theme-viewer.c:1352
|
||||
#: ../src/ui/theme-viewer.c:1361
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "分析 %d 座標表現需時 %g 秒(平均 %g 秒)\n"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:1
|
||||
msgid "Hide all normal windows"
|
||||
msgstr "隱藏所有一般視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:2
|
||||
msgid "Move to workspace above"
|
||||
msgstr "移至上方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:3
|
||||
msgid "Move to workspace below"
|
||||
msgstr "移至下方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:4
|
||||
msgid "Move to workspace left"
|
||||
msgstr "移至左方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:5
|
||||
msgid "Move to workspace right"
|
||||
msgstr "移至右方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:6
|
||||
msgid "Move window one workspace down"
|
||||
msgstr "將視窗移至下方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:7
|
||||
msgid "Move window one workspace to the left"
|
||||
msgstr "將視窗移至左方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:8
|
||||
msgid "Move window one workspace to the right"
|
||||
msgstr "將視窗移至右方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:9
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "將視窗移至上方的工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:10
|
||||
msgid "Move window to workspace 1"
|
||||
msgstr "將視窗移至第 1 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:11
|
||||
msgid "Move window to workspace 2"
|
||||
msgstr "將視窗移至第 2 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:12
|
||||
msgid "Move window to workspace 3"
|
||||
msgstr "將視窗移至第 3 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:13
|
||||
msgid "Move window to workspace 4"
|
||||
msgstr "將視窗移至第 4 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:14
|
||||
msgid "Navigation"
|
||||
msgstr "導航"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:15
|
||||
msgid "Switch applications"
|
||||
msgstr "切換程式"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:16
|
||||
msgid "Switch system controls"
|
||||
msgstr "切換系統控制"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:17
|
||||
msgid "Switch system controls directly"
|
||||
msgstr "直接切換系統控制"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:18
|
||||
msgid "Switch to workspace 1"
|
||||
msgstr "切換至第 1 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:19
|
||||
msgid "Switch to workspace 2"
|
||||
msgstr "切換至第 2 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:20
|
||||
msgid "Switch to workspace 3"
|
||||
msgstr "切換至第 3 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:21
|
||||
msgid "Switch to workspace 4"
|
||||
msgstr "切換至第 4 個工作區"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:22
|
||||
msgid "Switch windows directly"
|
||||
msgstr "直接切換視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:23
|
||||
msgid "Switch windows of an app directly"
|
||||
msgstr "直接切換程式的視窗"
|
||||
|
||||
#: ../src/50-mutter-navigation.xml.in.h:24
|
||||
msgid "Switch windows of an application"
|
||||
msgstr "切換程式的視窗"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:1
|
||||
msgid "Show the activities overview"
|
||||
msgstr "顯示活動概覽"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:2
|
||||
msgid "Show the run command prompt"
|
||||
msgstr "顯示執行指令提示"
|
||||
|
||||
#: ../src/50-mutter-system.xml.in.h:3
|
||||
msgid "System"
|
||||
msgstr "系統"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:1
|
||||
msgid "Activate the window menu"
|
||||
msgstr "使用視窗選單"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:2
|
||||
msgid "Close window"
|
||||
msgstr "關閉視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:3
|
||||
msgid "Lower window below other windows"
|
||||
msgstr "遮蔽某個視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:4
|
||||
msgid "Maximize window"
|
||||
msgstr "視窗最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:5
|
||||
msgid "Maximize window horizontally"
|
||||
msgstr "將視窗橫向最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:6
|
||||
msgid "Maximize window vertically"
|
||||
msgstr "將視窗縱向最大化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:7
|
||||
msgid "Minimize window"
|
||||
msgstr "視窗最小化"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:8
|
||||
msgid "Move window"
|
||||
msgstr "移動視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:9
|
||||
msgid "Raise window above other windows"
|
||||
msgstr "令某個視窗覆蓋其它視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:10
|
||||
msgid "Raise window if covered, otherwise lower it"
|
||||
msgstr "若被其他視窗遮蔽就抬升它,否則將它降下"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:11
|
||||
msgid "Resize window"
|
||||
msgstr "調整視窗大小"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:12
|
||||
msgid "Restore window"
|
||||
msgstr "還原視窗"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:13
|
||||
msgid "Toggle fullscreen mode"
|
||||
msgstr "切換全螢幕模式"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:14
|
||||
msgid "Toggle maximization state"
|
||||
msgstr "切換最大化狀態"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:15
|
||||
msgid "Toggle shaded state"
|
||||
msgstr "切換視窗捲起/放下狀態"
|
||||
|
||||
#: ../src/50-mutter-windows.xml.in.h:16
|
||||
msgid "Toggle window on all workspaces or one"
|
||||
msgstr "切換視窗顯示在所有工作區或是只顯示於其中之一"
|
||||
#~ msgid "Minimize window"
|
||||
#~ msgstr "視窗最小化"
|
||||
|
||||
#~ msgid "Comma-separated list of compositor plugins"
|
||||
#~ msgstr "以逗號分隔的複合視窗外掛程式清單"
|
||||
|
@ -6,6 +6,9 @@ lib_LTLIBRARIES = libmutter.la
|
||||
SUBDIRS=wm-tester tools compositor/plugins
|
||||
|
||||
INCLUDES= \
|
||||
-DCLUTTER_ENABLE_EXPERIMENTAL_API \
|
||||
-DCOGL_ENABLE_EXPERIMENTAL_API \
|
||||
-DCOGL_ENABLE_EXPERIMENTAL_2_0_API \
|
||||
$(MUTTER_CFLAGS) \
|
||||
-I$(srcdir) \
|
||||
-I$(srcdir)/core \
|
||||
@ -33,17 +36,24 @@ mutter_built_sources = \
|
||||
libmutter_la_SOURCES = \
|
||||
core/async-getprop.c \
|
||||
core/async-getprop.h \
|
||||
core/barrier.c \
|
||||
meta/barrier.h \
|
||||
core/bell.c \
|
||||
core/bell.h \
|
||||
core/boxes.c \
|
||||
core/boxes-private.h \
|
||||
meta/boxes.h \
|
||||
compositor/clutter-utils.c \
|
||||
compositor/clutter-utils.h \
|
||||
compositor/cogl-utils.c \
|
||||
compositor/cogl-utils.h \
|
||||
compositor/compositor.c \
|
||||
compositor/compositor-private.h \
|
||||
compositor/meta-background.c \
|
||||
compositor/meta-background-actor.c \
|
||||
compositor/meta-background-actor-private.h \
|
||||
compositor/meta-background-group.c \
|
||||
compositor/meta-background-group-private.h \
|
||||
compositor/meta-module.c \
|
||||
compositor/meta-module.h \
|
||||
compositor/meta-plugin.c \
|
||||
@ -65,7 +75,9 @@ libmutter_la_SOURCES = \
|
||||
compositor/region-utils.c \
|
||||
compositor/region-utils.h \
|
||||
meta/compositor.h \
|
||||
meta/meta-background.h \
|
||||
meta/meta-background-actor.h \
|
||||
meta/meta-background-group.h \
|
||||
meta/meta-plugin.h \
|
||||
meta/meta-shadow-factory.h \
|
||||
meta/meta-window-actor.h \
|
||||
@ -157,6 +169,7 @@ libmutter_la_LIBADD = $(MUTTER_LIBS)
|
||||
# Headers installed for plugins; introspected information will
|
||||
# be extracted into Mutter-<version>.gir
|
||||
libmutterinclude_base_headers = \
|
||||
meta/barrier.h \
|
||||
meta/boxes.h \
|
||||
meta/common.h \
|
||||
meta/compositor-mutter.h \
|
||||
@ -168,6 +181,8 @@ libmutterinclude_base_headers = \
|
||||
meta/keybindings.h \
|
||||
meta/main.h \
|
||||
meta/meta-background-actor.h \
|
||||
meta/meta-background-group.h \
|
||||
meta/meta-background.h \
|
||||
meta/meta-plugin.h \
|
||||
meta/meta-shaped-texture.h \
|
||||
meta/meta-shadow-factory.h \
|
||||
|
120
src/compositor/clutter-utils.c
Normal file
120
src/compositor/clutter-utils.c
Normal file
@ -0,0 +1,120 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
/*
|
||||
* Utilities for use with Cogl
|
||||
*
|
||||
* Copyright 2010 Red Hat, Inc.
|
||||
* Copyright 2010 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.
|
||||
*/
|
||||
|
||||
#include "clutter-utils.h"
|
||||
#include <math.h>
|
||||
|
||||
/* This file uses pixel-aligned region computation to determine what
|
||||
* can be clipped out. This only really works if everything is aligned
|
||||
* to the pixel grid - not scaled or rotated and at integer offsets.
|
||||
*
|
||||
* (This could be relaxed - if we turned off filtering for unscaled
|
||||
* windows then windows would be, by definition aligned to the pixel
|
||||
* grid. And for rectangular windows without a shape, the outline that
|
||||
* we draw for an unrotated window is always a rectangle because we
|
||||
* don't use antialasing for the window boundary - with or without
|
||||
* filtering, with or without a scale. But figuring out exactly
|
||||
* what pixels will be drawn by the graphics system in these cases
|
||||
* gets tricky, so we just go for the easiest part - no scale,
|
||||
* and at integer offsets.)
|
||||
*
|
||||
* The way we check for pixel-aligned is by looking at the
|
||||
* transformation into screen space of the allocation box of an actor
|
||||
* and and checking if the corners are "close enough" to integral
|
||||
* pixel values.
|
||||
*/
|
||||
|
||||
/* The definition of "close enough" to integral pixel values is
|
||||
* equality when we convert to 24.8 fixed-point.
|
||||
*/
|
||||
static inline int
|
||||
round_to_fixed (float x)
|
||||
{
|
||||
return roundf (x * 256);
|
||||
}
|
||||
|
||||
/* This helper function checks if (according to our fixed point precision)
|
||||
* the vertices @verts form a box of width @widthf and height @heightf
|
||||
* located at integral coordinates. These coordinates are returned
|
||||
* in @x_origin and @y_origin.
|
||||
*/
|
||||
gboolean
|
||||
meta_actor_vertices_are_untransformed (ClutterVertex *verts,
|
||||
float widthf,
|
||||
float heightf,
|
||||
int *x_origin,
|
||||
int *y_origin)
|
||||
{
|
||||
int width, height;
|
||||
int v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y;
|
||||
int x, y;
|
||||
|
||||
width = round_to_fixed (widthf); height = round_to_fixed (heightf);
|
||||
|
||||
v0x = round_to_fixed (verts[0].x); v0y = round_to_fixed (verts[0].y);
|
||||
v1x = round_to_fixed (verts[1].x); v1y = round_to_fixed (verts[1].y);
|
||||
v2x = round_to_fixed (verts[2].x); v2y = round_to_fixed (verts[2].y);
|
||||
v3x = round_to_fixed (verts[3].x); v3y = round_to_fixed (verts[3].y);
|
||||
|
||||
/* Using shifting for converting fixed => int, gets things right for
|
||||
* negative values. / 256. wouldn't do the same
|
||||
*/
|
||||
x = v0x >> 8;
|
||||
y = v0y >> 8;
|
||||
|
||||
/* At integral coordinates? */
|
||||
if (x * 256 != v0x || y * 256 != v0y)
|
||||
return FALSE;
|
||||
|
||||
/* Not scaled? */
|
||||
if (v1x - v0x != width || v2y - v0y != height)
|
||||
return FALSE;
|
||||
|
||||
/* Not rotated/skewed? */
|
||||
if (v0x != v2x || v0y != v1y ||
|
||||
v3x != v1x || v3y != v2y)
|
||||
return FALSE;
|
||||
|
||||
*x_origin = x;
|
||||
*y_origin = y;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Check if an actor is "untransformed" - which actually means transformed by
|
||||
* at most a integer-translation. The integer translation, if any, is returned.
|
||||
*/
|
||||
gboolean
|
||||
meta_actor_is_untransformed (ClutterActor *actor,
|
||||
int *x_origin,
|
||||
int *y_origin)
|
||||
{
|
||||
gfloat widthf, heightf;
|
||||
ClutterVertex verts[4];
|
||||
|
||||
clutter_actor_get_size (actor, &widthf, &heightf);
|
||||
clutter_actor_get_abs_allocation_vertices (actor, verts);
|
||||
|
||||
return meta_actor_vertices_are_untransformed (verts, widthf, heightf, x_origin, y_origin);
|
||||
}
|
||||
|
36
src/compositor/clutter-utils.h
Normal file
36
src/compositor/clutter-utils.h
Normal file
@ -0,0 +1,36 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
/*
|
||||
* Utilities for use with Clutter
|
||||
*
|
||||
* Copyright 2010 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __META_CLUTTER_UTILS_H__
|
||||
#define __META_CLUTTER_UTILS_H__
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
gboolean meta_actor_vertices_are_untransformed (ClutterVertex *verts,
|
||||
float widthf,
|
||||
float heightf,
|
||||
int *x_origin,
|
||||
int *y_origin);
|
||||
gboolean meta_actor_is_untransformed (ClutterActor *actor,
|
||||
int *x_origin,
|
||||
int *y_origin);
|
||||
|
||||
#endif /* __META_CLUTTER_UTILS_H__ */
|
@ -21,6 +21,7 @@
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
#include "cogl-utils.h"
|
||||
|
||||
/**
|
||||
@ -39,7 +40,7 @@
|
||||
*
|
||||
* Return value: (transfer full): a newly created Cogl texture
|
||||
*/
|
||||
CoglHandle
|
||||
CoglTexture *
|
||||
meta_create_color_texture_4ub (guint8 red,
|
||||
guint8 green,
|
||||
guint8 blue,
|
||||
@ -68,43 +69,45 @@ meta_create_color_texture_4ub (guint8 red,
|
||||
/* Based on gnome-shell/src/st/st-private.c:_st_create_texture_material.c */
|
||||
|
||||
/**
|
||||
* meta_create_texture_material:
|
||||
* meta_create_texture_pipeline:
|
||||
* @src_texture: (allow-none): texture to use initially for the layer
|
||||
*
|
||||
* Creates a material with a single layer. Using a common template
|
||||
* Creates a pipeline with a single layer. Using a common template
|
||||
* allows sharing a shader for different uses in Mutter. To share the same
|
||||
* shader with all other materials that are just texture plus opacity
|
||||
* shader with all other pipelines that are just texture plus opacity
|
||||
* would require Cogl fixes.
|
||||
* (See http://bugzilla.clutter-project.org/show_bug.cgi?id=2425)
|
||||
*
|
||||
* Return value: (transfer full): a newly created Cogl material
|
||||
* Return value: (transfer full): a newly created #CoglPipeline
|
||||
*/
|
||||
CoglHandle
|
||||
meta_create_texture_material (CoglHandle src_texture)
|
||||
CoglPipeline *
|
||||
meta_create_texture_pipeline (CoglTexture *src_texture)
|
||||
{
|
||||
static CoglHandle texture_material_template = COGL_INVALID_HANDLE;
|
||||
CoglHandle material;
|
||||
static CoglPipeline *texture_pipeline_template = NULL;
|
||||
CoglPipeline *pipeline;
|
||||
|
||||
/* We use a material that has a dummy texture as a base for all
|
||||
texture materials. The idea is that only the Cogl texture object
|
||||
/* We use a pipeline that has a dummy texture as a base for all
|
||||
texture pipelines. The idea is that only the Cogl texture object
|
||||
would be different in the children so it is likely that Cogl will
|
||||
be able to share GL programs between all the textures. */
|
||||
if (G_UNLIKELY (texture_material_template == COGL_INVALID_HANDLE))
|
||||
if (G_UNLIKELY (texture_pipeline_template == NULL))
|
||||
{
|
||||
CoglHandle dummy_texture;
|
||||
CoglTexture *dummy_texture;
|
||||
CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
||||
|
||||
dummy_texture = meta_create_color_texture_4ub (0xff, 0xff, 0xff, 0xff,
|
||||
COGL_TEXTURE_NONE);
|
||||
|
||||
texture_material_template = cogl_material_new ();
|
||||
cogl_material_set_layer (texture_material_template, 0, dummy_texture);
|
||||
cogl_handle_unref (dummy_texture);
|
||||
|
||||
texture_pipeline_template = cogl_pipeline_new (ctx);
|
||||
cogl_pipeline_set_layer_texture (texture_pipeline_template, 0, dummy_texture);
|
||||
cogl_object_unref (dummy_texture);
|
||||
}
|
||||
|
||||
material = cogl_material_copy (texture_material_template);
|
||||
pipeline = cogl_pipeline_copy (texture_pipeline_template);
|
||||
|
||||
if (src_texture != COGL_INVALID_HANDLE)
|
||||
cogl_material_set_layer (material, 0, src_texture);
|
||||
if (src_texture != NULL)
|
||||
cogl_pipeline_set_layer_texture (pipeline, 0, src_texture);
|
||||
|
||||
return material;
|
||||
return pipeline;
|
||||
}
|
||||
|
@ -25,11 +25,11 @@
|
||||
|
||||
#include <cogl/cogl.h>
|
||||
|
||||
CoglHandle meta_create_color_texture_4ub (guint8 red,
|
||||
guint8 green,
|
||||
guint8 blue,
|
||||
guint8 alpha,
|
||||
CoglTextureFlags flags);
|
||||
CoglHandle meta_create_texture_material (CoglHandle src_texture);
|
||||
CoglTexture * meta_create_color_texture_4ub (guint8 red,
|
||||
guint8 green,
|
||||
guint8 blue,
|
||||
guint8 alpha,
|
||||
CoglTextureFlags flags);
|
||||
CoglPipeline * meta_create_texture_pipeline (CoglTexture *texture);
|
||||
|
||||
#endif /* __META_COGL_UTILS_H__ */
|
||||
|
@ -25,22 +25,28 @@ struct _MetaCompositor
|
||||
|
||||
MetaPlugin *modal_plugin;
|
||||
|
||||
gboolean show_redraw : 1;
|
||||
gboolean debug : 1;
|
||||
gboolean no_mipmaps : 1;
|
||||
gint64 server_time_query_time;
|
||||
gint64 server_time_offset;
|
||||
|
||||
guint server_time_is_monotonic_time : 1;
|
||||
guint show_redraw : 1;
|
||||
guint debug : 1;
|
||||
guint no_mipmaps : 1;
|
||||
};
|
||||
|
||||
struct _MetaCompScreen
|
||||
{
|
||||
MetaScreen *screen;
|
||||
|
||||
ClutterActor *stage, *window_group, *overlay_group;
|
||||
ClutterActor *stage, *window_group, *top_window_group, *overlay_group;
|
||||
ClutterActor *background_actor;
|
||||
ClutterActor *hidden_group;
|
||||
GList *windows;
|
||||
GHashTable *windows_by_xid;
|
||||
Window output;
|
||||
|
||||
CoglOnscreen *onscreen;
|
||||
CoglFrameClosure *frame_closure;
|
||||
|
||||
/* Used for unredirecting fullscreen windows */
|
||||
guint disable_unredirect_count;
|
||||
MetaWindowActor *unredirected_window;
|
||||
@ -53,6 +59,9 @@ struct _MetaCompScreen
|
||||
MetaPluginManager *plugin_mgr;
|
||||
};
|
||||
|
||||
/* Wait 2ms after vblank before starting to draw next frame */
|
||||
#define META_SYNC_DELAY 2
|
||||
|
||||
void meta_switch_workspace_completed (MetaScreen *screen);
|
||||
|
||||
gboolean meta_begin_modal_for_plugin (MetaScreen *screen,
|
||||
@ -65,6 +74,9 @@ void meta_end_modal_for_plugin (MetaScreen *screen,
|
||||
MetaPlugin *plugin,
|
||||
guint32 timestamp);
|
||||
|
||||
gint64 meta_compositor_monotonic_time_to_server_time (MetaDisplay *display,
|
||||
gint64 monotonic_time);
|
||||
|
||||
void meta_check_end_modal (MetaScreen *screen);
|
||||
|
||||
#endif /* META_COMPOSITOR_PRIVATE_H */
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
|
||||
#include "core.h"
|
||||
#include <meta/screen.h>
|
||||
#include <meta/errors.h>
|
||||
#include <meta/window.h>
|
||||
@ -12,10 +13,11 @@
|
||||
#include "xprops.h"
|
||||
#include <meta/prefs.h>
|
||||
#include <meta/main.h>
|
||||
#include <meta/meta-background-actor.h>
|
||||
#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-background-actor-private.h"
|
||||
#include "window-private.h" /* to check window->hidden */
|
||||
#include "display-private.h" /* for meta_display_lookup_x_window() */
|
||||
#include <X11/extensions/shape.h>
|
||||
@ -116,21 +118,6 @@ process_property_notify (MetaCompositor *compositor,
|
||||
{
|
||||
MetaWindowActor *window_actor;
|
||||
|
||||
if (event->atom == compositor->atom_x_root_pixmap)
|
||||
{
|
||||
GSList *l;
|
||||
|
||||
for (l = meta_display_get_screens (compositor->display); l; l = l->next)
|
||||
{
|
||||
MetaScreen *screen = l->data;
|
||||
if (event->window == meta_screen_get_xroot (screen))
|
||||
{
|
||||
meta_background_actor_update (screen);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (window == NULL)
|
||||
return;
|
||||
|
||||
@ -163,6 +150,8 @@ get_output_window (MetaScreen *screen)
|
||||
xroot = meta_screen_get_xroot (screen);
|
||||
output = XCompositeGetOverlayWindow (xdisplay, xroot);
|
||||
|
||||
meta_core_add_old_event_mask (xdisplay, output, &mask);
|
||||
|
||||
XISetMask (mask.mask, XI_KeyPress);
|
||||
XISetMask (mask.mask, XI_KeyRelease);
|
||||
XISetMask (mask.mask, XI_ButtonPress);
|
||||
@ -235,24 +224,20 @@ meta_get_window_group_for_screen (MetaScreen *screen)
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_get_background_actor_for_screen:
|
||||
* meta_get_top_window_group_for_screen:
|
||||
* @screen: a #MetaScreen
|
||||
*
|
||||
* Gets the actor that draws the root window background under the windows.
|
||||
* The root window background automatically tracks the image or color set
|
||||
* by the environment.
|
||||
*
|
||||
* Returns: (transfer none): The background actor corresponding to @screen
|
||||
* Returns: (transfer none): The top window group corresponding to @screen
|
||||
*/
|
||||
ClutterActor *
|
||||
meta_get_background_actor_for_screen (MetaScreen *screen)
|
||||
meta_get_top_window_group_for_screen (MetaScreen *screen)
|
||||
{
|
||||
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
|
||||
|
||||
if (!info)
|
||||
return NULL;
|
||||
|
||||
return info->background_actor;
|
||||
return info->top_window_group;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -467,6 +452,16 @@ meta_check_end_modal (MetaScreen *screen)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
after_stage_paint (ClutterActor *stage,
|
||||
MetaCompScreen *info)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
for (l = info->windows; l; l = l->next)
|
||||
meta_window_actor_post_paint (l->data);
|
||||
}
|
||||
|
||||
void
|
||||
meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
MetaScreen *screen)
|
||||
@ -536,6 +531,10 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
meta_screen_set_cm_selection (screen);
|
||||
|
||||
info->stage = clutter_stage_new ();
|
||||
g_signal_connect_after (info->stage, "paint",
|
||||
G_CALLBACK (after_stage_paint), info);
|
||||
|
||||
clutter_stage_set_sync_delay (CLUTTER_STAGE (info->stage), META_SYNC_DELAY);
|
||||
|
||||
meta_screen_get_size (screen, &width, &height);
|
||||
clutter_actor_realize (info->stage);
|
||||
@ -550,6 +549,8 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits };
|
||||
XWindowAttributes attr;
|
||||
|
||||
meta_core_add_old_event_mask (xdisplay, xwin, &mask);
|
||||
|
||||
XISetMask (mask.mask, XI_KeyPress);
|
||||
XISetMask (mask.mask, XI_KeyRelease);
|
||||
XISetMask (mask.mask, XI_ButtonPress);
|
||||
@ -569,22 +570,15 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
}
|
||||
|
||||
info->window_group = meta_window_group_new (screen);
|
||||
info->background_actor = meta_background_actor_new_for_screen (screen);
|
||||
info->top_window_group = meta_window_group_new (screen);
|
||||
info->overlay_group = clutter_group_new ();
|
||||
info->hidden_group = clutter_group_new ();
|
||||
|
||||
clutter_container_add (CLUTTER_CONTAINER (info->window_group),
|
||||
info->background_actor,
|
||||
NULL);
|
||||
|
||||
clutter_container_add (CLUTTER_CONTAINER (info->stage),
|
||||
info->window_group,
|
||||
info->top_window_group,
|
||||
info->overlay_group,
|
||||
info->hidden_group,
|
||||
NULL);
|
||||
|
||||
clutter_actor_hide (info->hidden_group);
|
||||
|
||||
info->plugin_mgr = meta_plugin_manager_new (screen);
|
||||
|
||||
/*
|
||||
@ -716,10 +710,33 @@ meta_compositor_remove_window (MetaCompositor *compositor,
|
||||
}
|
||||
|
||||
void
|
||||
meta_compositor_set_updates (MetaCompositor *compositor,
|
||||
MetaWindow *window,
|
||||
gboolean updates)
|
||||
meta_compositor_set_updates_frozen (MetaCompositor *compositor,
|
||||
MetaWindow *window,
|
||||
gboolean updates_frozen)
|
||||
{
|
||||
MetaWindowActor *window_actor;
|
||||
|
||||
DEBUG_TRACE ("meta_compositor_set_updates_frozen\n");
|
||||
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
|
||||
if (!window_actor)
|
||||
return;
|
||||
|
||||
meta_window_actor_set_updates_frozen (window_actor, updates_frozen);
|
||||
}
|
||||
|
||||
void
|
||||
meta_compositor_queue_frame_drawn (MetaCompositor *compositor,
|
||||
MetaWindow *window,
|
||||
gboolean no_delay_frame)
|
||||
{
|
||||
MetaWindowActor *window_actor;
|
||||
|
||||
DEBUG_TRACE ("meta_compositor_queue_frame_drawn\n");
|
||||
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
|
||||
if (!window_actor)
|
||||
return;
|
||||
|
||||
meta_window_actor_queue_frame_drawn (window_actor, no_delay_frame);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -754,6 +771,52 @@ meta_compositor_window_shape_changed (MetaCompositor *compositor,
|
||||
meta_window_actor_update_shape (window_actor);
|
||||
}
|
||||
|
||||
/* Clutter makes the assumption that there is only one X window
|
||||
* per stage, which is a valid assumption to make for a generic
|
||||
* application toolkit. As such, it will ignore any events sent
|
||||
* to the a stage that isn't its X window.
|
||||
*
|
||||
* When a user clicks on what she thinks is the wallpaper, she
|
||||
* is actually clicking on the guard window, which is an entirely
|
||||
* separate top-level override-redirect window in the hierarchy.
|
||||
* We want to recieve events on this guard window so that users
|
||||
* can right-click on the background actor. We do this by telling
|
||||
* Clutter a little white lie, by transforming clicks on the guard
|
||||
* window to become clicks on the stage window, allowing Clutter
|
||||
* to process the event normally.
|
||||
*/
|
||||
static void
|
||||
maybe_spoof_guard_window_event_as_stage_event (MetaCompScreen *info,
|
||||
XEvent *event)
|
||||
{
|
||||
MetaDisplay *display = meta_screen_get_display (info->screen);
|
||||
|
||||
if (event->type == GenericEvent &&
|
||||
event->xcookie.extension == display->xinput_opcode)
|
||||
{
|
||||
XIEvent *input_event = (XIEvent *) event->xcookie.data;
|
||||
|
||||
/* Only care about pointer events for now. */
|
||||
switch (input_event->evtype)
|
||||
{
|
||||
case XI_Motion:
|
||||
case XI_ButtonPress:
|
||||
case XI_ButtonRelease:
|
||||
{
|
||||
XIDeviceEvent *device_event = ((XIDeviceEvent *) input_event);
|
||||
if (device_event->event == info->screen->guard_window)
|
||||
{
|
||||
Window xwin = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage));
|
||||
device_event->event = xwin;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_compositor_process_event: (skip)
|
||||
*
|
||||
@ -802,6 +865,8 @@ meta_compositor_process_event (MetaCompositor *compositor,
|
||||
|
||||
info = meta_screen_get_compositor_data (screen);
|
||||
|
||||
maybe_spoof_guard_window_event_as_stage_event (info, event);
|
||||
|
||||
if (meta_plugin_manager_xevent_filter (info->plugin_mgr, event))
|
||||
{
|
||||
DEBUG_TRACE ("meta_compositor_process_event (filtered,window==NULL)\n");
|
||||
@ -957,8 +1022,11 @@ static void
|
||||
sync_actor_stacking (MetaCompScreen *info)
|
||||
{
|
||||
GList *children;
|
||||
GList *expected_window_node;
|
||||
GList *tmp;
|
||||
GList *old;
|
||||
GList *backgrounds;
|
||||
gboolean has_windows;
|
||||
gboolean reordered;
|
||||
|
||||
/* NB: The first entries in the lists are stacked the lowest */
|
||||
@ -970,49 +1038,48 @@ sync_actor_stacking (MetaCompScreen *info)
|
||||
children = clutter_container_get_children (CLUTTER_CONTAINER (info->window_group));
|
||||
reordered = FALSE;
|
||||
|
||||
old = children;
|
||||
|
||||
/* We allow for actors in the window group other than the actors we
|
||||
* know about, but it's up to a plugin to try and keep them stacked correctly
|
||||
* (we really need extra API to make that reliable.)
|
||||
*/
|
||||
|
||||
/* Of the actors we know, the bottom actor should be the background actor */
|
||||
|
||||
while (old && old->data != info->background_actor && !META_IS_WINDOW_ACTOR (old->data))
|
||||
old = old->next;
|
||||
if (old == NULL || old->data != info->background_actor)
|
||||
/* First we collect a list of all backgrounds, and check if they're at the
|
||||
* bottom. Then we check if the window actors are in the correct sequence */
|
||||
backgrounds = NULL;
|
||||
expected_window_node = info->windows;
|
||||
for (old = children; old != NULL; old = old->next)
|
||||
{
|
||||
reordered = TRUE;
|
||||
goto done_with_check;
|
||||
}
|
||||
ClutterActor *actor = old->data;
|
||||
|
||||
/* Then the window actors should follow in sequence */
|
||||
|
||||
old = old->next;
|
||||
for (tmp = info->windows; tmp != NULL; tmp = tmp->next)
|
||||
{
|
||||
while (old && !META_IS_WINDOW_ACTOR (old->data))
|
||||
old = old->next;
|
||||
|
||||
/* old == NULL: someone reparented a window out of the window group,
|
||||
* order undefined, always restack */
|
||||
if (old == NULL || old->data != tmp->data)
|
||||
if (META_IS_BACKGROUND_GROUP (actor) ||
|
||||
META_IS_BACKGROUND_ACTOR (actor))
|
||||
{
|
||||
reordered = TRUE;
|
||||
goto done_with_check;
|
||||
backgrounds = g_list_prepend (backgrounds, actor);
|
||||
|
||||
if (has_windows)
|
||||
reordered = TRUE;
|
||||
}
|
||||
else if (META_IS_WINDOW_ACTOR (actor) && !reordered)
|
||||
{
|
||||
has_windows = TRUE;
|
||||
|
||||
old = old->next;
|
||||
if (expected_window_node != NULL && actor == expected_window_node->data)
|
||||
expected_window_node = expected_window_node->next;
|
||||
else
|
||||
reordered = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
done_with_check:
|
||||
|
||||
g_list_free (children);
|
||||
|
||||
if (!reordered)
|
||||
return;
|
||||
{
|
||||
g_list_free (backgrounds);
|
||||
return;
|
||||
}
|
||||
|
||||
/* reorder the actors by lowering them in turn to the bottom of the stack.
|
||||
* windows first, then background */
|
||||
for (tmp = g_list_last (info->windows); tmp != NULL; tmp = tmp->prev)
|
||||
{
|
||||
MetaWindowActor *window_actor = tmp->data;
|
||||
@ -1020,7 +1087,16 @@ sync_actor_stacking (MetaCompScreen *info)
|
||||
clutter_actor_lower_bottom (CLUTTER_ACTOR (window_actor));
|
||||
}
|
||||
|
||||
clutter_actor_lower_bottom (info->background_actor);
|
||||
/* we prepended the backgrounds above so the last actor in the list
|
||||
* should get lowered to the bottom last.
|
||||
*/
|
||||
for (tmp = backgrounds; tmp != NULL; tmp = tmp->next)
|
||||
{
|
||||
ClutterActor *actor = tmp->data;
|
||||
|
||||
clutter_actor_lower_bottom (CLUTTER_ACTOR (actor));
|
||||
}
|
||||
g_list_free (backgrounds);
|
||||
}
|
||||
|
||||
void
|
||||
@ -1141,7 +1217,8 @@ meta_compositor_window_unmapped (MetaCompositor *compositor,
|
||||
|
||||
void
|
||||
meta_compositor_sync_window_geometry (MetaCompositor *compositor,
|
||||
MetaWindow *window)
|
||||
MetaWindow *window,
|
||||
gboolean did_placement)
|
||||
{
|
||||
MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
|
||||
MetaScreen *screen = meta_window_get_screen (window);
|
||||
@ -1153,7 +1230,7 @@ meta_compositor_sync_window_geometry (MetaCompositor *compositor,
|
||||
if (!window_actor)
|
||||
return;
|
||||
|
||||
meta_window_actor_sync_actor_position (window_actor);
|
||||
meta_window_actor_sync_actor_geometry (window_actor, did_placement);
|
||||
}
|
||||
|
||||
void
|
||||
@ -1175,13 +1252,53 @@ meta_compositor_sync_screen_size (MetaCompositor *compositor,
|
||||
|
||||
XResizeWindow (xdisplay, xwin, width, height);
|
||||
|
||||
meta_background_actor_screen_size_changed (screen);
|
||||
|
||||
meta_verbose ("Changed size for stage on screen %d to %dx%d\n",
|
||||
meta_screen_get_screen_number (screen),
|
||||
width, height);
|
||||
}
|
||||
|
||||
static void
|
||||
frame_callback (CoglOnscreen *onscreen,
|
||||
CoglFrameEvent event,
|
||||
CoglFrameInfo *frame_info,
|
||||
void *user_data)
|
||||
{
|
||||
MetaCompScreen *info = user_data;
|
||||
GList *l;
|
||||
|
||||
if (event == COGL_FRAME_EVENT_COMPLETE)
|
||||
{
|
||||
gint64 presentation_time_cogl = cogl_frame_info_get_presentation_time (frame_info);
|
||||
gint64 presentation_time;
|
||||
|
||||
if (presentation_time_cogl != 0)
|
||||
{
|
||||
/* Cogl reports presentation in terms of its own clock, which is
|
||||
* guaranteed to be in nanoseconds but with no specified base. The
|
||||
* normal case with the open source GPU drivers on Linux 3.8 and
|
||||
* newer is that the base of cogl_get_clock_time() is that of
|
||||
* clock_gettime(CLOCK_MONOTONIC), so the same as g_get_monotonic_time),
|
||||
* but there's no exposure of that through the API. clock_gettime()
|
||||
* is fairly fast, so calling it twice and subtracting to get a
|
||||
* nearly-zero number is acceptable, if a litle ugly.
|
||||
*/
|
||||
CoglContext *context = cogl_framebuffer_get_context (COGL_FRAMEBUFFER (onscreen));
|
||||
gint64 current_cogl_time = cogl_get_clock_time (context);
|
||||
gint64 current_monotonic_time = g_get_monotonic_time ();
|
||||
|
||||
presentation_time =
|
||||
current_monotonic_time + (presentation_time_cogl - current_cogl_time) / 1000;
|
||||
}
|
||||
else
|
||||
{
|
||||
presentation_time = 0;
|
||||
}
|
||||
|
||||
for (l = info->windows; l; l = l->next)
|
||||
meta_window_actor_frame_complete (l->data, frame_info, presentation_time);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pre_paint_windows (MetaCompScreen *info)
|
||||
{
|
||||
@ -1189,6 +1306,15 @@ pre_paint_windows (MetaCompScreen *info)
|
||||
MetaWindowActor *top_window;
|
||||
MetaWindowActor *expected_unredirected_window = NULL;
|
||||
|
||||
if (info->onscreen == NULL)
|
||||
{
|
||||
info->onscreen = COGL_ONSCREEN (cogl_get_draw_framebuffer ());
|
||||
info->frame_closure = cogl_onscreen_add_frame_callback (info->onscreen,
|
||||
frame_callback,
|
||||
info,
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (info->windows == NULL)
|
||||
return;
|
||||
|
||||
@ -1391,3 +1517,51 @@ meta_compositor_flash_screen (MetaCompositor *compositor,
|
||||
"signal-after::completed", flash_in_completed, flash,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_compositor_monotonic_time_to_server_time:
|
||||
* @display: a #MetaDisplay
|
||||
* @monotonic_time: time in the units of g_get_monotonic_time()
|
||||
*
|
||||
* _NET_WM_FRAME_DRAWN and _NET_WM_FRAME_TIMINGS messages represent time
|
||||
* as a "high resolution server time" - this is the server time interpolated
|
||||
* to microsecond resolution. The advantage of this time representation
|
||||
* is that if X server is running on the same computer as a client, and
|
||||
* the Xserver uses 'clock_gettime(CLOCK_MONOTONIC, ...)' for the server
|
||||
* time, the client can detect this, and all such clients will share a
|
||||
* a time representation with high accuracy. If there is not a common
|
||||
* time source, then the time synchronization will be less accurate.
|
||||
*/
|
||||
gint64
|
||||
meta_compositor_monotonic_time_to_server_time (MetaDisplay *display,
|
||||
gint64 monotonic_time)
|
||||
{
|
||||
MetaCompositor *compositor = display->compositor;
|
||||
|
||||
if (compositor->server_time_query_time == 0 ||
|
||||
(!compositor->server_time_is_monotonic_time &&
|
||||
monotonic_time > compositor->server_time_query_time + 10*1000*1000)) /* 10 seconds */
|
||||
{
|
||||
guint32 server_time = meta_display_get_current_time_roundtrip (display);
|
||||
gint64 server_time_usec = (gint64)server_time * 1000;
|
||||
gint64 current_monotonic_time = g_get_monotonic_time ();
|
||||
compositor->server_time_query_time = current_monotonic_time;
|
||||
|
||||
/* If the server time is within a second of the monotonic time,
|
||||
* we assume that they are identical. This seems like a big margin,
|
||||
* but we want to be as robust as possible even if the system
|
||||
* is under load and our processing of the server response is
|
||||
* delayed.
|
||||
*/
|
||||
if (server_time_usec > current_monotonic_time - 1000*1000 &&
|
||||
server_time_usec < current_monotonic_time + 1000*1000)
|
||||
compositor->server_time_is_monotonic_time = TRUE;
|
||||
|
||||
compositor->server_time_offset = server_time_usec - current_monotonic_time;
|
||||
}
|
||||
|
||||
if (compositor->server_time_is_monotonic_time)
|
||||
return monotonic_time;
|
||||
else
|
||||
return monotonic_time + compositor->server_time_offset;
|
||||
}
|
||||
|
@ -9,7 +9,6 @@
|
||||
void meta_background_actor_set_visible_region (MetaBackgroundActor *self,
|
||||
cairo_region_t *visible_region);
|
||||
|
||||
void meta_background_actor_update (MetaScreen *screen);
|
||||
void meta_background_actor_screen_size_changed (MetaScreen *screen);
|
||||
cairo_region_t *meta_background_actor_get_visible_region (MetaBackgroundActor *self);
|
||||
|
||||
#endif /* META_BACKGROUND_ACTOR_PRIVATE_H */
|
||||
|
@ -25,10 +25,8 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#define COGL_ENABLE_EXPERIMENTAL_API
|
||||
#include <cogl/cogl-texture-pixmap-x11.h>
|
||||
|
||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
#include <X11/Xatom.h>
|
||||
@ -36,223 +34,23 @@
|
||||
#include "cogl-utils.h"
|
||||
#include "compositor-private.h"
|
||||
#include <meta/errors.h>
|
||||
#include <meta/meta-background.h>
|
||||
#include "meta-background-actor-private.h"
|
||||
|
||||
/* We allow creating multiple MetaBackgroundActors for the same MetaScreen to
|
||||
* allow different rendering options to be set for different copies.
|
||||
* But we want to share the same underlying CoglTexture for efficiency and
|
||||
* to avoid driver bugs that might occur if we created multiple CoglTexturePixmaps
|
||||
* for the same pixmap.
|
||||
*
|
||||
* This structure holds common information.
|
||||
*/
|
||||
typedef struct _MetaScreenBackground MetaScreenBackground;
|
||||
|
||||
struct _MetaScreenBackground
|
||||
{
|
||||
MetaScreen *screen;
|
||||
GSList *actors;
|
||||
|
||||
float texture_width;
|
||||
float texture_height;
|
||||
CoglTexture *texture;
|
||||
CoglMaterialWrapMode wrap_mode;
|
||||
guint have_pixmap : 1;
|
||||
};
|
||||
|
||||
struct _MetaBackgroundActorPrivate
|
||||
{
|
||||
MetaScreenBackground *background;
|
||||
CoglPipeline *pipeline;
|
||||
|
||||
cairo_region_t *visible_region;
|
||||
float dim_factor;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
|
||||
PROP_DIM_FACTOR,
|
||||
|
||||
PROP_LAST
|
||||
};
|
||||
|
||||
static GParamSpec *obj_props[PROP_LAST];
|
||||
|
||||
G_DEFINE_TYPE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR);
|
||||
|
||||
static void set_texture (MetaScreenBackground *background,
|
||||
CoglHandle texture);
|
||||
static void set_texture_to_stage_color (MetaScreenBackground *background);
|
||||
|
||||
static void
|
||||
on_notify_stage_color (GObject *stage,
|
||||
GParamSpec *pspec,
|
||||
MetaScreenBackground *background)
|
||||
{
|
||||
if (!background->have_pixmap)
|
||||
set_texture_to_stage_color (background);
|
||||
}
|
||||
|
||||
static void
|
||||
free_screen_background (MetaScreenBackground *background)
|
||||
{
|
||||
set_texture (background, COGL_INVALID_HANDLE);
|
||||
|
||||
if (background->screen != NULL)
|
||||
{
|
||||
ClutterActor *stage = meta_get_stage_for_screen (background->screen);
|
||||
g_signal_handlers_disconnect_by_func (stage,
|
||||
(gpointer) on_notify_stage_color,
|
||||
background);
|
||||
background->screen = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static MetaScreenBackground *
|
||||
meta_screen_background_get (MetaScreen *screen)
|
||||
{
|
||||
MetaScreenBackground *background;
|
||||
|
||||
background = g_object_get_data (G_OBJECT (screen), "meta-screen-background");
|
||||
if (background == NULL)
|
||||
{
|
||||
ClutterActor *stage;
|
||||
|
||||
background = g_new0 (MetaScreenBackground, 1);
|
||||
|
||||
background->screen = screen;
|
||||
g_object_set_data_full (G_OBJECT (screen), "meta-screen-background",
|
||||
background, (GDestroyNotify) free_screen_background);
|
||||
|
||||
stage = meta_get_stage_for_screen (screen);
|
||||
g_signal_connect (stage, "notify::color",
|
||||
G_CALLBACK (on_notify_stage_color), background);
|
||||
|
||||
meta_background_actor_update (screen);
|
||||
}
|
||||
|
||||
return background;
|
||||
}
|
||||
|
||||
static void
|
||||
update_wrap_mode_of_actor (MetaBackgroundActor *self)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
|
||||
cogl_pipeline_set_layer_wrap_mode (priv->pipeline, 0, priv->background->wrap_mode);
|
||||
}
|
||||
|
||||
static void
|
||||
update_wrap_mode (MetaScreenBackground *background)
|
||||
{
|
||||
GSList *l;
|
||||
int width, height;
|
||||
|
||||
meta_screen_get_size (background->screen, &width, &height);
|
||||
|
||||
/* We turn off repeating when we have a full-screen pixmap to keep from
|
||||
* getting artifacts from one side of the image sneaking into the other
|
||||
* side of the image via bilinear filtering.
|
||||
*/
|
||||
if (width == background->texture_width && height == background->texture_height)
|
||||
background->wrap_mode = COGL_MATERIAL_WRAP_MODE_CLAMP_TO_EDGE;
|
||||
else
|
||||
background->wrap_mode = COGL_MATERIAL_WRAP_MODE_REPEAT;
|
||||
|
||||
for (l = background->actors; l; l = l->next)
|
||||
update_wrap_mode_of_actor (l->data);
|
||||
}
|
||||
|
||||
static void
|
||||
set_texture_on_actor (MetaBackgroundActor *self)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
MetaDisplay *display = meta_screen_get_display (priv->background->screen);
|
||||
|
||||
/* This may trigger destruction of an old texture pixmap, which, if
|
||||
* the underlying X pixmap is already gone has the tendency to trigger
|
||||
* X errors inside DRI. For safety, trap errors */
|
||||
meta_error_trap_push (display);
|
||||
cogl_pipeline_set_layer_texture (priv->pipeline, 0, priv->background->texture);
|
||||
meta_error_trap_pop (display);
|
||||
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
|
||||
}
|
||||
|
||||
static void
|
||||
set_texture (MetaScreenBackground *background,
|
||||
CoglHandle texture)
|
||||
{
|
||||
MetaDisplay *display = meta_screen_get_display (background->screen);
|
||||
GSList *l;
|
||||
|
||||
/* This may trigger destruction of an old texture pixmap, which, if
|
||||
* the underlying X pixmap is already gone has the tendency to trigger
|
||||
* X errors inside DRI. For safety, trap errors */
|
||||
meta_error_trap_push (display);
|
||||
if (background->texture != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_handle_unref (background->texture);
|
||||
background->texture = COGL_INVALID_HANDLE;
|
||||
}
|
||||
meta_error_trap_pop (display);
|
||||
|
||||
if (texture != COGL_INVALID_HANDLE)
|
||||
background->texture = cogl_handle_ref (texture);
|
||||
|
||||
background->texture_width = cogl_texture_get_width (background->texture);
|
||||
background->texture_height = cogl_texture_get_height (background->texture);
|
||||
|
||||
for (l = background->actors; l; l = l->next)
|
||||
set_texture_on_actor (l->data);
|
||||
|
||||
update_wrap_mode (background);
|
||||
}
|
||||
|
||||
/* Sets our pipeline to paint with a 1x1 texture of the stage's background
|
||||
* color; doing this when we have no pixmap allows the application to turn
|
||||
* off painting the stage. There might be a performance benefit to
|
||||
* painting in this case with a solid color, but the normal solid color
|
||||
* case is a 1x1 root pixmap, so we'd have to reverse-engineer that to
|
||||
* actually pick up the (small?) performance win. This is just a fallback.
|
||||
*/
|
||||
static void
|
||||
set_texture_to_stage_color (MetaScreenBackground *background)
|
||||
{
|
||||
ClutterActor *stage = meta_get_stage_for_screen (background->screen);
|
||||
ClutterColor color;
|
||||
CoglHandle texture;
|
||||
|
||||
clutter_stage_get_color (CLUTTER_STAGE (stage), &color);
|
||||
|
||||
/* Slicing will prevent COGL from using hardware texturing for
|
||||
* the tiled 1x1 pixmap, and will cause it to draw the window
|
||||
* background in millions of separate 1x1 rectangles */
|
||||
texture = meta_create_color_texture_4ub (color.red, color.green,
|
||||
color.blue, 0xff,
|
||||
COGL_TEXTURE_NO_SLICING);
|
||||
set_texture (background, texture);
|
||||
cogl_handle_unref (texture);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_dispose (GObject *object)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
|
||||
meta_background_actor_set_visible_region (self, NULL);
|
||||
|
||||
if (priv->background != NULL)
|
||||
{
|
||||
priv->background->actors = g_slist_remove (priv->background->actors, self);
|
||||
priv->background = NULL;
|
||||
}
|
||||
|
||||
g_clear_pointer(&priv->pipeline, cogl_object_unref);
|
||||
|
||||
G_OBJECT_CLASS (meta_background_actor_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
@ -262,11 +60,15 @@ meta_background_actor_get_preferred_width (ClutterActor *actor,
|
||||
gfloat *min_width_p,
|
||||
gfloat *natural_width_p)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
int width, height;
|
||||
ClutterContent *content;
|
||||
gfloat width;
|
||||
|
||||
meta_screen_get_size (priv->background->screen, &width, &height);
|
||||
content = clutter_actor_get_content (actor);
|
||||
|
||||
if (content)
|
||||
clutter_content_get_preferred_size (content, &width, NULL);
|
||||
else
|
||||
width = 0;
|
||||
|
||||
if (min_width_p)
|
||||
*min_width_p = width;
|
||||
@ -281,11 +83,15 @@ meta_background_actor_get_preferred_height (ClutterActor *actor,
|
||||
gfloat *natural_height_p)
|
||||
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
int width, height;
|
||||
ClutterContent *content;
|
||||
gfloat height;
|
||||
|
||||
meta_screen_get_size (priv->background->screen, &width, &height);
|
||||
content = clutter_actor_get_content (actor);
|
||||
|
||||
if (content)
|
||||
clutter_content_get_preferred_size (content, NULL, &height);
|
||||
else
|
||||
height = 0;
|
||||
|
||||
if (min_height_p)
|
||||
*min_height_p = height;
|
||||
@ -293,64 +99,19 @@ meta_background_actor_get_preferred_height (ClutterActor *actor,
|
||||
*natural_height_p = height;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_paint (ClutterActor *actor)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
guint8 opacity = clutter_actor_get_paint_opacity (actor);
|
||||
guint8 color_component;
|
||||
int width, height;
|
||||
|
||||
meta_screen_get_size (priv->background->screen, &width, &height);
|
||||
|
||||
color_component = (int)(0.5 + opacity * priv->dim_factor);
|
||||
|
||||
cogl_pipeline_set_color4ub (priv->pipeline,
|
||||
color_component,
|
||||
color_component,
|
||||
color_component,
|
||||
opacity);
|
||||
|
||||
cogl_set_source (priv->pipeline);
|
||||
|
||||
if (priv->visible_region)
|
||||
{
|
||||
int n_rectangles = cairo_region_num_rectangles (priv->visible_region);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < n_rectangles; i++)
|
||||
{
|
||||
cairo_rectangle_int_t rect;
|
||||
cairo_region_get_rectangle (priv->visible_region, i, &rect);
|
||||
|
||||
cogl_rectangle_with_texture_coords (rect.x, rect.y,
|
||||
rect.x + rect.width, rect.y + rect.height,
|
||||
rect.x / priv->background->texture_width,
|
||||
rect.y / priv->background->texture_height,
|
||||
(rect.x + rect.width) / priv->background->texture_width,
|
||||
(rect.y + rect.height) / priv->background->texture_height);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cogl_rectangle_with_texture_coords (0.0f, 0.0f,
|
||||
width, height,
|
||||
0.0f, 0.0f,
|
||||
width / priv->background->texture_width,
|
||||
height / priv->background->texture_height);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_background_actor_get_paint_volume (ClutterActor *actor,
|
||||
ClutterPaintVolume *volume)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
int width, height;
|
||||
ClutterContent *content;
|
||||
gfloat width, height;
|
||||
|
||||
meta_screen_get_size (priv->background->screen, &width, &height);
|
||||
content = clutter_actor_get_content (actor);
|
||||
|
||||
if (!content)
|
||||
return FALSE;
|
||||
|
||||
clutter_content_get_preferred_size (content, &width, &height);
|
||||
|
||||
clutter_paint_volume_set_width (volume, width);
|
||||
clutter_paint_volume_set_height (volume, height);
|
||||
@ -358,215 +119,48 @@ meta_background_actor_get_paint_volume (ClutterActor *actor,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_set_dim_factor (MetaBackgroundActor *self,
|
||||
gfloat dim_factor)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
|
||||
if (priv->dim_factor == dim_factor)
|
||||
return;
|
||||
|
||||
priv->dim_factor = dim_factor;
|
||||
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_DIM_FACTOR]);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_get_property(GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_DIM_FACTOR:
|
||||
g_value_set_float (value, priv->dim_factor);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_set_property(GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_DIM_FACTOR:
|
||||
meta_background_actor_set_dim_factor (self, g_value_get_float (value));
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_class_init (MetaBackgroundActorClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
|
||||
GParamSpec *pspec;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MetaBackgroundActorPrivate));
|
||||
|
||||
object_class->dispose = meta_background_actor_dispose;
|
||||
object_class->get_property = meta_background_actor_get_property;
|
||||
object_class->set_property = meta_background_actor_set_property;
|
||||
|
||||
actor_class->get_preferred_width = meta_background_actor_get_preferred_width;
|
||||
actor_class->get_preferred_height = meta_background_actor_get_preferred_height;
|
||||
actor_class->paint = meta_background_actor_paint;
|
||||
actor_class->get_paint_volume = meta_background_actor_get_paint_volume;
|
||||
|
||||
/**
|
||||
* MetaBackgroundActor:dim-factor:
|
||||
*
|
||||
* Factor to dim the background by, between 0.0 (black) and 1.0 (original
|
||||
* colors)
|
||||
*/
|
||||
pspec = g_param_spec_float ("dim-factor",
|
||||
"Dim factor",
|
||||
"Factor to dim the background by",
|
||||
0.0, 1.0,
|
||||
1.0,
|
||||
G_PARAM_READWRITE);
|
||||
obj_props[PROP_DIM_FACTOR] = pspec;
|
||||
g_object_class_install_property (object_class, PROP_DIM_FACTOR, pspec);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_actor_init (MetaBackgroundActor *self)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv;
|
||||
|
||||
priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
|
||||
META_TYPE_BACKGROUND_ACTOR,
|
||||
MetaBackgroundActorPrivate);
|
||||
priv->dim_factor = 1.0;
|
||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
|
||||
META_TYPE_BACKGROUND_ACTOR,
|
||||
MetaBackgroundActorPrivate);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_actor_new:
|
||||
* @screen: the #MetaScreen
|
||||
*
|
||||
* Creates a new actor to draw the background for the given screen.
|
||||
* Creates a new actor to draw the background for the given monitor.
|
||||
* This actor should be associated with a #MetaBackground using
|
||||
* clutter_actor_set_content()
|
||||
*
|
||||
* Return value: the newly created background actor
|
||||
*/
|
||||
ClutterActor *
|
||||
meta_background_actor_new_for_screen (MetaScreen *screen)
|
||||
meta_background_actor_new (void)
|
||||
{
|
||||
MetaBackgroundActor *self;
|
||||
MetaBackgroundActorPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (META_IS_SCREEN (screen), NULL);
|
||||
|
||||
self = g_object_new (META_TYPE_BACKGROUND_ACTOR, NULL);
|
||||
priv = self->priv;
|
||||
|
||||
priv->background = meta_screen_background_get (screen);
|
||||
priv->background->actors = g_slist_prepend (priv->background->actors, self);
|
||||
|
||||
/* A CoglMaterial and a CoglPipeline are the same thing */
|
||||
priv->pipeline = (CoglPipeline*) meta_create_texture_material (NULL);
|
||||
|
||||
set_texture_on_actor (self);
|
||||
update_wrap_mode_of_actor (self);
|
||||
|
||||
return CLUTTER_ACTOR (self);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_actor_update:
|
||||
* @screen: a #MetaScreen
|
||||
*
|
||||
* Refetches the _XROOTPMAP_ID property for the root window and updates
|
||||
* the contents of the background actor based on that. There's no attempt
|
||||
* to optimize out pixmap values that don't change (since a root pixmap
|
||||
* could be replaced by with another pixmap with the same ID under some
|
||||
* circumstances), so this should only be called when we actually receive
|
||||
* a PropertyNotify event for the property.
|
||||
*/
|
||||
void
|
||||
meta_background_actor_update (MetaScreen *screen)
|
||||
{
|
||||
MetaScreenBackground *background;
|
||||
MetaDisplay *display;
|
||||
MetaCompositor *compositor;
|
||||
Atom type;
|
||||
int format;
|
||||
gulong nitems;
|
||||
gulong bytes_after;
|
||||
guchar *data;
|
||||
Pixmap root_pixmap_id;
|
||||
|
||||
background = meta_screen_background_get (screen);
|
||||
display = meta_screen_get_display (screen);
|
||||
compositor = meta_display_get_compositor (display);
|
||||
|
||||
root_pixmap_id = None;
|
||||
if (!XGetWindowProperty (meta_display_get_xdisplay (display),
|
||||
meta_screen_get_xroot (screen),
|
||||
compositor->atom_x_root_pixmap,
|
||||
0, LONG_MAX,
|
||||
False,
|
||||
AnyPropertyType,
|
||||
&type, &format, &nitems, &bytes_after, &data) &&
|
||||
type != None)
|
||||
{
|
||||
/* Got a property. */
|
||||
if (type == XA_PIXMAP && format == 32 && nitems == 1)
|
||||
{
|
||||
/* Was what we expected. */
|
||||
root_pixmap_id = *(Pixmap *)data;
|
||||
}
|
||||
|
||||
XFree(data);
|
||||
}
|
||||
|
||||
if (root_pixmap_id != None)
|
||||
{
|
||||
CoglHandle texture;
|
||||
CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
||||
GError *error = NULL;
|
||||
|
||||
meta_error_trap_push (display);
|
||||
texture = cogl_texture_pixmap_x11_new (ctx, root_pixmap_id, FALSE, &error);
|
||||
meta_error_trap_pop (display);
|
||||
|
||||
if (texture != COGL_INVALID_HANDLE)
|
||||
{
|
||||
set_texture (background, texture);
|
||||
cogl_handle_unref (texture);
|
||||
|
||||
background->have_pixmap = True;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("Failed to create background texture from pixmap: %s",
|
||||
error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
}
|
||||
|
||||
background->have_pixmap = False;
|
||||
set_texture_to_stage_color (background);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_actor_set_visible_region:
|
||||
* @self: a #MetaBackgroundActor
|
||||
@ -586,120 +180,44 @@ meta_background_actor_set_visible_region (MetaBackgroundActor *self,
|
||||
|
||||
priv = self->priv;
|
||||
|
||||
if (priv->visible_region)
|
||||
{
|
||||
cairo_region_destroy (priv->visible_region);
|
||||
priv->visible_region = NULL;
|
||||
}
|
||||
g_clear_pointer (&priv->visible_region,
|
||||
(GDestroyNotify)
|
||||
cairo_region_destroy);
|
||||
|
||||
if (visible_region)
|
||||
{
|
||||
cairo_rectangle_int_t screen_rect = { 0 };
|
||||
meta_screen_get_size (priv->background->screen, &screen_rect.width, &screen_rect.height);
|
||||
|
||||
/* Doing the intersection here is probably unnecessary - MetaWindowGroup
|
||||
* should never compute a visible area that's larger than the root screen!
|
||||
* but it's not that expensive and adds some extra robustness.
|
||||
*/
|
||||
priv->visible_region = cairo_region_create_rectangle (&screen_rect);
|
||||
cairo_region_intersect (priv->visible_region, visible_region);
|
||||
}
|
||||
priv->visible_region = cairo_region_copy (visible_region);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_actor_screen_size_changed:
|
||||
* @screen: a #MetaScreen
|
||||
* meta_background_actor_get_visible_region:
|
||||
* @self: a #MetaBackgroundActor
|
||||
*
|
||||
* Called by the compositor when the size of the #MetaScreen changes
|
||||
* Return value (transfer full): a #cairo_region_t that represents the part of
|
||||
* the background not obscured by other #MetaBackgroundActor or
|
||||
* #MetaWindowActor objects.
|
||||
*/
|
||||
void
|
||||
meta_background_actor_screen_size_changed (MetaScreen *screen)
|
||||
cairo_region_t *
|
||||
meta_background_actor_get_visible_region (MetaBackgroundActor *self)
|
||||
{
|
||||
MetaScreenBackground *background = meta_screen_background_get (screen);
|
||||
GSList *l;
|
||||
MetaBackgroundActorPrivate *priv = self->priv;
|
||||
ClutterActorBox content_box;
|
||||
cairo_rectangle_int_t content_area = { 0 };
|
||||
cairo_region_t *visible_region;
|
||||
|
||||
update_wrap_mode (background);
|
||||
g_return_val_if_fail (META_IS_BACKGROUND_ACTOR (self), NULL);
|
||||
|
||||
for (l = background->actors; l; l = l->next)
|
||||
clutter_actor_queue_relayout (l->data);
|
||||
if (!priv->visible_region)
|
||||
return NULL;
|
||||
|
||||
clutter_actor_get_content_box (CLUTTER_ACTOR (self), &content_box);
|
||||
|
||||
content_area.x = content_box.x1;
|
||||
content_area.y = content_box.y1;
|
||||
content_area.width = content_box.x2 - content_box.x1;
|
||||
content_area.height = content_box.y2 - content_box.y1;
|
||||
|
||||
visible_region = cairo_region_create_rectangle (&content_area);
|
||||
cairo_region_intersect (visible_region, priv->visible_region);
|
||||
|
||||
return visible_region;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_actor_add_glsl_snippet:
|
||||
* @actor: a #MetaBackgroundActor
|
||||
* @hook: where to insert the code
|
||||
* @declarations: GLSL declarations
|
||||
* @code: GLSL code
|
||||
* @is_replace: wheter Cogl code should be replaced by the custom shader
|
||||
*
|
||||
* Adds a GLSL snippet to the pipeline used for drawing the background.
|
||||
* See #CoglSnippet for details.
|
||||
*/
|
||||
void
|
||||
meta_background_actor_add_glsl_snippet (MetaBackgroundActor *actor,
|
||||
MetaSnippetHook hook,
|
||||
const char *declarations,
|
||||
const char *code,
|
||||
gboolean is_replace)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv;
|
||||
CoglSnippet *snippet;
|
||||
|
||||
g_return_if_fail (META_IS_BACKGROUND_ACTOR (actor));
|
||||
|
||||
priv = actor->priv;
|
||||
|
||||
if (is_replace)
|
||||
{
|
||||
snippet = cogl_snippet_new (hook, declarations, NULL);
|
||||
cogl_snippet_set_replace (snippet, code);
|
||||
}
|
||||
else
|
||||
{
|
||||
snippet = cogl_snippet_new (hook, declarations, code);
|
||||
}
|
||||
|
||||
if (hook == META_SNIPPET_HOOK_VERTEX ||
|
||||
hook == META_SNIPPET_HOOK_FRAGMENT)
|
||||
cogl_pipeline_add_snippet (priv->pipeline, snippet);
|
||||
else
|
||||
cogl_pipeline_add_layer_snippet (priv->pipeline, 0, snippet);
|
||||
|
||||
cogl_object_unref (snippet);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_actor_set_uniform_float:
|
||||
* @actor: a #MetaBackgroundActor
|
||||
* @uniform_name:
|
||||
* @n_components: number of components (for vector uniforms)
|
||||
* @count: number of uniforms (for array uniforms)
|
||||
* @uniform: (array length=uniform_length): the float values to set
|
||||
* @uniform_length: the length of @uniform. Must be exactly @n_components x @count,
|
||||
* and is provided mainly for language bindings.
|
||||
*
|
||||
* Sets a new GLSL uniform to the provided value. This is mostly
|
||||
* useful in congiunction with meta_background_actor_add_glsl_snippet().
|
||||
*/
|
||||
|
||||
void
|
||||
meta_background_actor_set_uniform_float (MetaBackgroundActor *actor,
|
||||
const char *uniform_name,
|
||||
int n_components,
|
||||
int count,
|
||||
const float *uniform,
|
||||
int uniform_length)
|
||||
{
|
||||
MetaBackgroundActorPrivate *priv;
|
||||
|
||||
g_return_if_fail (META_IS_BACKGROUND_ACTOR (actor));
|
||||
g_return_if_fail (uniform_length == n_components * count);
|
||||
|
||||
priv = actor->priv;
|
||||
|
||||
cogl_pipeline_set_uniform_float (priv->pipeline,
|
||||
cogl_pipeline_get_uniform_location (priv->pipeline,
|
||||
uniform_name),
|
||||
n_components, count, uniform);
|
||||
}
|
||||
|
||||
|
11
src/compositor/meta-background-group-private.h
Normal file
11
src/compositor/meta-background-group-private.h
Normal file
@ -0,0 +1,11 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#ifndef META_BACKGROUND_GROUP_PRIVATE_H
|
||||
#define META_BACKGROUND_GROUP_PRIVATE_H
|
||||
|
||||
#include <meta/screen.h>
|
||||
#include <meta/meta-background-group.h>
|
||||
|
||||
void meta_background_group_set_visible_region (MetaBackgroundGroup *self,
|
||||
cairo_region_t *visible_region);
|
||||
#endif /* META_BACKGROUND_GROUP_PRIVATE_H */
|
92
src/compositor/meta-background-group.c
Normal file
92
src/compositor/meta-background-group.c
Normal file
@ -0,0 +1,92 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "compositor-private.h"
|
||||
#include "clutter-utils.h"
|
||||
#include "meta-background-actor-private.h"
|
||||
#include "meta-background-group-private.h"
|
||||
|
||||
G_DEFINE_TYPE (MetaBackgroundGroup, meta_background_group, CLUTTER_TYPE_GROUP);
|
||||
|
||||
struct _MetaBackgroundGroupPrivate
|
||||
{
|
||||
ClutterLayoutManager *layout_manager;
|
||||
};
|
||||
|
||||
static void
|
||||
meta_background_group_dispose (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (meta_background_group_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_group_class_init (MetaBackgroundGroupClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->dispose = meta_background_group_dispose;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (MetaBackgroundGroupPrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_group_init (MetaBackgroundGroup *self)
|
||||
{
|
||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
|
||||
META_TYPE_BACKGROUND_GROUP,
|
||||
MetaBackgroundGroupPrivate);
|
||||
|
||||
self->priv->layout_manager = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FIXED,
|
||||
CLUTTER_BIN_ALIGNMENT_FIXED);
|
||||
|
||||
clutter_actor_set_layout_manager (CLUTTER_ACTOR (self), self->priv->layout_manager);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_group_set_visible_region:
|
||||
* @self: a #MetaBackgroundGroup
|
||||
* @visible_region: (allow-none): the parts of the background to paint
|
||||
*
|
||||
* Sets the area of the backgrounds that is unobscured by overlapping windows.
|
||||
* This is used to optimize and only paint the visible portions.
|
||||
*/
|
||||
void
|
||||
meta_background_group_set_visible_region (MetaBackgroundGroup *self,
|
||||
cairo_region_t *region)
|
||||
{
|
||||
GList *children, *l;
|
||||
|
||||
children = clutter_actor_get_children (CLUTTER_ACTOR (self));
|
||||
for (l = children; l; l = l->next)
|
||||
{
|
||||
ClutterActor *actor = l->data;
|
||||
|
||||
if (META_IS_BACKGROUND_ACTOR (actor))
|
||||
{
|
||||
meta_background_actor_set_visible_region (META_BACKGROUND_ACTOR (actor), region);
|
||||
}
|
||||
else if (META_IS_BACKGROUND_GROUP (actor))
|
||||
{
|
||||
int x, y;
|
||||
|
||||
if (!meta_actor_is_untransformed (actor, &x, &y))
|
||||
continue;
|
||||
|
||||
cairo_region_translate (region, -x, -y);
|
||||
meta_background_group_set_visible_region (META_BACKGROUND_GROUP (actor), region);
|
||||
cairo_region_translate (region, x, y);
|
||||
}
|
||||
}
|
||||
g_list_free (children);
|
||||
}
|
||||
|
||||
ClutterActor *
|
||||
meta_background_group_new (void)
|
||||
{
|
||||
MetaBackgroundGroup *background_group;
|
||||
|
||||
background_group = g_object_new (META_TYPE_BACKGROUND_GROUP, NULL);
|
||||
|
||||
return CLUTTER_ACTOR (background_group);
|
||||
}
|
1326
src/compositor/meta-background.c
Normal file
1326
src/compositor/meta-background.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -40,7 +40,7 @@ typedef struct _MetaShadow MetaShadow;
|
||||
|
||||
MetaShadow *meta_shadow_ref (MetaShadow *shadow);
|
||||
void meta_shadow_unref (MetaShadow *shadow);
|
||||
CoglHandle meta_shadow_get_texture (MetaShadow *shadow);
|
||||
CoglTexture*meta_shadow_get_texture (MetaShadow *shadow);
|
||||
void meta_shadow_paint (MetaShadow *shadow,
|
||||
int window_x,
|
||||
int window_y,
|
||||
|
@ -65,8 +65,8 @@ struct _MetaShadow
|
||||
|
||||
MetaShadowFactory *factory;
|
||||
MetaShadowCacheKey key;
|
||||
CoglHandle texture;
|
||||
CoglHandle material;
|
||||
CoglTexture *texture;
|
||||
CoglPipeline *pipeline;
|
||||
|
||||
/* The outer order is the distance the shadow extends outside the window
|
||||
* shape; the inner border is the unscaled portion inside the window
|
||||
@ -175,8 +175,8 @@ meta_shadow_unref (MetaShadow *shadow)
|
||||
}
|
||||
|
||||
meta_window_shape_unref (shadow->key.shape);
|
||||
cogl_handle_unref (shadow->texture);
|
||||
cogl_handle_unref (shadow->material);
|
||||
cogl_object_unref (shadow->texture);
|
||||
cogl_object_unref (shadow->pipeline);
|
||||
|
||||
g_slice_free (MetaShadow, shadow);
|
||||
}
|
||||
@ -218,10 +218,10 @@ meta_shadow_paint (MetaShadow *shadow,
|
||||
int dest_y[4];
|
||||
int n_x, n_y;
|
||||
|
||||
cogl_material_set_color4ub (shadow->material,
|
||||
cogl_pipeline_set_color4ub (shadow->pipeline,
|
||||
opacity, opacity, opacity, opacity);
|
||||
|
||||
cogl_set_source (shadow->material);
|
||||
cogl_set_source (shadow->pipeline);
|
||||
|
||||
if (shadow->scale_width)
|
||||
{
|
||||
@ -801,7 +801,7 @@ make_shadow (MetaShadow *shadow,
|
||||
cairo_region_destroy (column_convolve_region);
|
||||
g_free (buffer);
|
||||
|
||||
shadow->material = meta_create_texture_material (shadow->texture);
|
||||
shadow->pipeline = meta_create_texture_pipeline (shadow->texture);
|
||||
}
|
||||
|
||||
static MetaShadowParams *
|
||||
|
@ -27,9 +27,6 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||
#define COGL_ENABLE_EXPERIMENTAL_API
|
||||
|
||||
#include <meta/meta-shaped-texture.h>
|
||||
#include "meta-texture-tower.h"
|
||||
|
||||
@ -67,10 +64,10 @@ struct _MetaShapedTexturePrivate
|
||||
{
|
||||
MetaTextureTower *paint_tower;
|
||||
Pixmap pixmap;
|
||||
CoglHandle texture;
|
||||
CoglHandle mask_texture;
|
||||
CoglHandle material;
|
||||
CoglHandle material_unshaped;
|
||||
CoglTexturePixmapX11 *texture;
|
||||
CoglTexture *mask_texture;
|
||||
CoglPipeline *pipeline;
|
||||
CoglPipeline *pipeline_unshaped;
|
||||
|
||||
cairo_region_t *clip_region;
|
||||
|
||||
@ -104,8 +101,8 @@ meta_shaped_texture_init (MetaShapedTexture *self)
|
||||
priv = self->priv = META_SHAPED_TEXTURE_GET_PRIVATE (self);
|
||||
|
||||
priv->paint_tower = meta_texture_tower_new ();
|
||||
priv->texture = COGL_INVALID_HANDLE;
|
||||
priv->mask_texture = COGL_INVALID_HANDLE;
|
||||
priv->texture = NULL;
|
||||
priv->mask_texture = NULL;
|
||||
priv->create_mipmaps = TRUE;
|
||||
}
|
||||
|
||||
@ -119,23 +116,11 @@ meta_shaped_texture_dispose (GObject *object)
|
||||
meta_texture_tower_free (priv->paint_tower);
|
||||
priv->paint_tower = NULL;
|
||||
|
||||
if (priv->material != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_handle_unref (priv->material);
|
||||
priv->material = COGL_INVALID_HANDLE;
|
||||
}
|
||||
if (priv->material_unshaped != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_handle_unref (priv->material_unshaped);
|
||||
priv->material_unshaped = COGL_INVALID_HANDLE;
|
||||
}
|
||||
if (priv->texture != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_handle_unref (priv->texture);
|
||||
priv->texture = COGL_INVALID_HANDLE;
|
||||
}
|
||||
g_clear_pointer (&priv->pipeline, cogl_object_unref);
|
||||
g_clear_pointer (&priv->pipeline_unshaped, cogl_object_unref);
|
||||
g_clear_pointer (&priv->texture, cogl_object_unref);
|
||||
|
||||
meta_shaped_texture_set_mask_texture (self, COGL_INVALID_HANDLE);
|
||||
meta_shaped_texture_set_mask_texture (self, NULL);
|
||||
meta_shaped_texture_set_clip_region (self, NULL);
|
||||
|
||||
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object);
|
||||
@ -146,14 +131,14 @@ meta_shaped_texture_paint (ClutterActor *actor)
|
||||
{
|
||||
MetaShapedTexture *stex = (MetaShapedTexture *) actor;
|
||||
MetaShapedTexturePrivate *priv = stex->priv;
|
||||
CoglHandle paint_tex;
|
||||
CoglTexture *paint_tex;
|
||||
guint tex_width, tex_height;
|
||||
ClutterActorBox alloc;
|
||||
|
||||
static CoglHandle material_template = COGL_INVALID_HANDLE;
|
||||
static CoglHandle material_unshaped_template = COGL_INVALID_HANDLE;
|
||||
static CoglPipeline *pipeline_template = NULL;
|
||||
static CoglPipeline *pipeline_unshaped_template = NULL;
|
||||
|
||||
CoglHandle material;
|
||||
CoglPipeline *pipeline;
|
||||
|
||||
if (priv->clip_region && cairo_region_is_empty (priv->clip_region))
|
||||
return;
|
||||
@ -179,9 +164,9 @@ meta_shaped_texture_paint (ClutterActor *actor)
|
||||
if (priv->create_mipmaps)
|
||||
paint_tex = meta_texture_tower_get_paint_texture (priv->paint_tower);
|
||||
else
|
||||
paint_tex = priv->texture;
|
||||
paint_tex = COGL_TEXTURE (priv->texture);
|
||||
|
||||
if (paint_tex == COGL_INVALID_HANDLE)
|
||||
if (paint_tex == NULL)
|
||||
return;
|
||||
|
||||
tex_width = priv->tex_width;
|
||||
@ -190,47 +175,51 @@ meta_shaped_texture_paint (ClutterActor *actor)
|
||||
if (tex_width == 0 || tex_height == 0) /* no contents yet */
|
||||
return;
|
||||
|
||||
if (priv->mask_texture == COGL_INVALID_HANDLE)
|
||||
if (priv->mask_texture == NULL)
|
||||
{
|
||||
/* Use a single-layer texture if we don't have a mask. */
|
||||
|
||||
if (priv->material_unshaped == COGL_INVALID_HANDLE)
|
||||
if (priv->pipeline_unshaped == NULL)
|
||||
{
|
||||
if (G_UNLIKELY (material_unshaped_template == COGL_INVALID_HANDLE))
|
||||
material_unshaped_template = cogl_material_new ();
|
||||
if (G_UNLIKELY (pipeline_unshaped_template == NULL))
|
||||
{
|
||||
CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
||||
pipeline_unshaped_template = cogl_pipeline_new (ctx);
|
||||
}
|
||||
|
||||
priv->material_unshaped = cogl_material_copy (material_unshaped_template);
|
||||
priv->pipeline_unshaped = cogl_pipeline_copy (pipeline_unshaped_template);
|
||||
}
|
||||
material = priv->material_unshaped;
|
||||
pipeline = priv->pipeline_unshaped;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (priv->material == COGL_INVALID_HANDLE)
|
||||
if (priv->pipeline == NULL)
|
||||
{
|
||||
if (G_UNLIKELY (material_template == COGL_INVALID_HANDLE))
|
||||
if (G_UNLIKELY (pipeline_template == NULL))
|
||||
{
|
||||
material_template = cogl_material_new ();
|
||||
cogl_material_set_layer_combine (material_template, 1,
|
||||
CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
||||
pipeline_template = cogl_pipeline_new (ctx);
|
||||
cogl_pipeline_set_layer_combine (pipeline_template, 1,
|
||||
"RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
|
||||
NULL);
|
||||
}
|
||||
priv->material = cogl_material_copy (material_template);
|
||||
priv->pipeline = cogl_pipeline_copy (pipeline_template);
|
||||
}
|
||||
material = priv->material;
|
||||
pipeline = priv->pipeline;
|
||||
|
||||
cogl_material_set_layer (material, 1, priv->mask_texture);
|
||||
cogl_pipeline_set_layer_texture (pipeline, 1, priv->mask_texture);
|
||||
}
|
||||
|
||||
cogl_material_set_layer (material, 0, paint_tex);
|
||||
cogl_pipeline_set_layer_texture (pipeline, 0, paint_tex);
|
||||
|
||||
{
|
||||
CoglColor color;
|
||||
guchar opacity = clutter_actor_get_paint_opacity (actor);
|
||||
cogl_color_set_from_4ub (&color, opacity, opacity, opacity, opacity);
|
||||
cogl_material_set_color (material, &color);
|
||||
cogl_pipeline_set_color (pipeline, &color);
|
||||
}
|
||||
|
||||
cogl_set_source (material);
|
||||
cogl_set_source (pipeline);
|
||||
|
||||
clutter_actor_get_allocation_box (actor, &alloc);
|
||||
|
||||
@ -295,18 +284,18 @@ meta_shaped_texture_pick (ClutterActor *actor,
|
||||
MetaShapedTexturePrivate *priv = stex->priv;
|
||||
|
||||
/* If there is no region then use the regular pick */
|
||||
if (priv->mask_texture == COGL_INVALID_HANDLE)
|
||||
if (priv->mask_texture == NULL)
|
||||
CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class)
|
||||
->pick (actor, color);
|
||||
else if (clutter_actor_should_pick_paint (actor))
|
||||
{
|
||||
CoglHandle paint_tex;
|
||||
CoglTexture *paint_tex;
|
||||
ClutterActorBox alloc;
|
||||
guint tex_width, tex_height;
|
||||
|
||||
paint_tex = priv->texture;
|
||||
paint_tex = COGL_TEXTURE (priv->texture);
|
||||
|
||||
if (paint_tex == COGL_INVALID_HANDLE)
|
||||
if (paint_tex == NULL)
|
||||
return;
|
||||
|
||||
tex_width = cogl_texture_get_width (paint_tex);
|
||||
@ -396,17 +385,17 @@ meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex,
|
||||
|
||||
if (create_mipmaps != priv->create_mipmaps)
|
||||
{
|
||||
CoglHandle base_texture;
|
||||
CoglTexture *base_texture;
|
||||
priv->create_mipmaps = create_mipmaps;
|
||||
base_texture = create_mipmaps ?
|
||||
priv->texture : COGL_INVALID_HANDLE;
|
||||
COGL_TEXTURE (priv->texture) : NULL;
|
||||
meta_texture_tower_set_base_texture (priv->paint_tower, base_texture);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex,
|
||||
CoglHandle mask_texture)
|
||||
CoglTexture *mask_texture)
|
||||
{
|
||||
MetaShapedTexturePrivate *priv;
|
||||
|
||||
@ -414,16 +403,12 @@ meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex,
|
||||
|
||||
priv = stex->priv;
|
||||
|
||||
if (priv->mask_texture != COGL_INVALID_HANDLE)
|
||||
{
|
||||
cogl_handle_unref (priv->mask_texture);
|
||||
priv->mask_texture = COGL_INVALID_HANDLE;
|
||||
}
|
||||
g_clear_pointer (&priv->mask_texture, cogl_object_unref);
|
||||
|
||||
if (mask_texture != COGL_INVALID_HANDLE)
|
||||
if (mask_texture != NULL)
|
||||
{
|
||||
priv->mask_texture = mask_texture;
|
||||
cogl_handle_ref (priv->mask_texture);
|
||||
cogl_object_ref (priv->mask_texture);
|
||||
}
|
||||
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
|
||||
@ -441,10 +426,11 @@ meta_shaped_texture_update_area (MetaShapedTexture *stex,
|
||||
|
||||
priv = stex->priv;
|
||||
|
||||
if (priv->texture == COGL_INVALID_HANDLE)
|
||||
if (priv->texture == NULL)
|
||||
return;
|
||||
|
||||
cogl_texture_pixmap_x11_update_area (priv->texture, x, y, width, height);
|
||||
cogl_texture_pixmap_x11_update_area (priv->texture,
|
||||
x, y, width, height);
|
||||
|
||||
meta_texture_tower_update_area (priv->paint_tower, x, y, width, height);
|
||||
|
||||
@ -452,8 +438,8 @@ meta_shaped_texture_update_area (MetaShapedTexture *stex,
|
||||
}
|
||||
|
||||
static void
|
||||
set_cogl_texture (MetaShapedTexture *stex,
|
||||
CoglHandle cogl_tex)
|
||||
set_cogl_texture (MetaShapedTexture *stex,
|
||||
CoglTexturePixmapX11 *cogl_tex)
|
||||
{
|
||||
MetaShapedTexturePrivate *priv;
|
||||
guint width, height;
|
||||
@ -462,21 +448,21 @@ set_cogl_texture (MetaShapedTexture *stex,
|
||||
|
||||
priv = stex->priv;
|
||||
|
||||
if (priv->texture != COGL_INVALID_HANDLE)
|
||||
cogl_handle_unref (priv->texture);
|
||||
if (priv->texture != NULL)
|
||||
cogl_object_unref (priv->texture);
|
||||
|
||||
priv->texture = cogl_tex;
|
||||
|
||||
if (priv->material != COGL_INVALID_HANDLE)
|
||||
cogl_material_set_layer (priv->material, 0, cogl_tex);
|
||||
if (priv->pipeline != NULL)
|
||||
cogl_pipeline_set_layer_texture (priv->pipeline, 0, COGL_TEXTURE (cogl_tex));
|
||||
|
||||
if (priv->material_unshaped != COGL_INVALID_HANDLE)
|
||||
cogl_material_set_layer (priv->material_unshaped, 0, cogl_tex);
|
||||
if (priv->pipeline_unshaped != NULL)
|
||||
cogl_pipeline_set_layer_texture (priv->pipeline_unshaped, 0, COGL_TEXTURE (cogl_tex));
|
||||
|
||||
if (cogl_tex != COGL_INVALID_HANDLE)
|
||||
if (cogl_tex != NULL)
|
||||
{
|
||||
width = cogl_texture_get_width (cogl_tex);
|
||||
height = cogl_texture_get_height (cogl_tex);
|
||||
width = cogl_texture_get_width (COGL_TEXTURE (cogl_tex));
|
||||
height = cogl_texture_get_height (COGL_TEXTURE (cogl_tex));
|
||||
|
||||
if (width != priv->tex_width ||
|
||||
height != priv->tex_height)
|
||||
@ -489,7 +475,7 @@ set_cogl_texture (MetaShapedTexture *stex,
|
||||
}
|
||||
else
|
||||
{
|
||||
/* size changed to 0 going to an invalid handle */
|
||||
/* size changed to 0 going to an inavlid texture */
|
||||
priv->tex_width = 0;
|
||||
priv->tex_height = 0;
|
||||
clutter_actor_queue_relayout (CLUTTER_ACTOR (stex));
|
||||
@ -525,10 +511,11 @@ meta_shaped_texture_set_pixmap (MetaShapedTexture *stex,
|
||||
set_cogl_texture (stex, cogl_texture_pixmap_x11_new (ctx, pixmap, FALSE, NULL));
|
||||
}
|
||||
else
|
||||
set_cogl_texture (stex, COGL_INVALID_HANDLE);
|
||||
set_cogl_texture (stex, NULL);
|
||||
|
||||
if (priv->create_mipmaps)
|
||||
meta_texture_tower_set_base_texture (priv->paint_tower, priv->texture);
|
||||
meta_texture_tower_set_base_texture (priv->paint_tower,
|
||||
COGL_TEXTURE (priv->texture));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -537,11 +524,11 @@ meta_shaped_texture_set_pixmap (MetaShapedTexture *stex,
|
||||
*
|
||||
* Returns: (transfer none): the unshaped texture
|
||||
*/
|
||||
CoglHandle
|
||||
CoglTexture *
|
||||
meta_shaped_texture_get_texture (MetaShapedTexture *stex)
|
||||
{
|
||||
g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), COGL_INVALID_HANDLE);
|
||||
return stex->priv->texture;
|
||||
g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL);
|
||||
return COGL_TEXTURE (stex->priv->texture);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -598,13 +585,13 @@ cairo_surface_t *
|
||||
meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
||||
cairo_rectangle_int_t *clip)
|
||||
{
|
||||
CoglHandle texture, mask_texture;
|
||||
CoglTexture *texture, *mask_texture;
|
||||
cairo_rectangle_int_t texture_rect = { 0, 0, 0, 0 };
|
||||
cairo_surface_t *surface;
|
||||
|
||||
g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL);
|
||||
|
||||
texture = stex->priv->texture;
|
||||
texture = COGL_TEXTURE (stex->priv->texture);
|
||||
|
||||
if (texture == NULL)
|
||||
return NULL;
|
||||
@ -641,7 +628,7 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
||||
cogl_object_unref (texture);
|
||||
|
||||
mask_texture = stex->priv->mask_texture;
|
||||
if (mask_texture != COGL_INVALID_HANDLE)
|
||||
if (mask_texture != NULL)
|
||||
{
|
||||
cairo_t *cr;
|
||||
cairo_surface_t *mask_surface;
|
||||
|
@ -25,9 +25,6 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||
#define COGL_ENABLE_EXPERIMENTAL_API
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
#include "meta-texture-rectangle.h"
|
||||
|
||||
|
@ -59,8 +59,8 @@ typedef struct
|
||||
struct _MetaTextureTower
|
||||
{
|
||||
int n_levels;
|
||||
CoglHandle textures[MAX_TEXTURE_LEVELS];
|
||||
CoglHandle fbos[MAX_TEXTURE_LEVELS];
|
||||
CoglTexture *textures[MAX_TEXTURE_LEVELS];
|
||||
CoglOffscreen *fbos[MAX_TEXTURE_LEVELS];
|
||||
Box invalid[MAX_TEXTURE_LEVELS];
|
||||
};
|
||||
|
||||
@ -93,7 +93,7 @@ meta_texture_tower_free (MetaTextureTower *tower)
|
||||
{
|
||||
g_return_if_fail (tower != NULL);
|
||||
|
||||
meta_texture_tower_set_base_texture (tower, COGL_INVALID_HANDLE);
|
||||
meta_texture_tower_set_base_texture (tower, NULL);
|
||||
|
||||
g_slice_free (MetaTextureTower, tower);
|
||||
}
|
||||
@ -110,7 +110,7 @@ meta_texture_tower_free (MetaTextureTower *tower)
|
||||
*/
|
||||
void
|
||||
meta_texture_tower_set_base_texture (MetaTextureTower *tower,
|
||||
CoglHandle texture)
|
||||
CoglTexture *texture)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -119,33 +119,33 @@ meta_texture_tower_set_base_texture (MetaTextureTower *tower,
|
||||
if (texture == tower->textures[0])
|
||||
return;
|
||||
|
||||
if (tower->textures[0] != COGL_INVALID_HANDLE)
|
||||
if (tower->textures[0] != NULL)
|
||||
{
|
||||
for (i = 1; i < tower->n_levels; i++)
|
||||
{
|
||||
if (tower->textures[i] != COGL_INVALID_HANDLE)
|
||||
if (tower->textures[i] != NULL)
|
||||
{
|
||||
cogl_handle_unref (tower->textures[i]);
|
||||
tower->textures[i] = COGL_INVALID_HANDLE;
|
||||
cogl_object_unref (tower->textures[i]);
|
||||
tower->textures[i] = NULL;
|
||||
}
|
||||
|
||||
if (tower->fbos[i] != COGL_INVALID_HANDLE)
|
||||
if (tower->fbos[i] != NULL)
|
||||
{
|
||||
cogl_handle_unref (tower->fbos[i]);
|
||||
tower->fbos[i] = COGL_INVALID_HANDLE;
|
||||
cogl_object_unref (tower->fbos[i]);
|
||||
tower->fbos[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
cogl_handle_unref (tower->textures[0]);
|
||||
cogl_object_unref (tower->textures[0]);
|
||||
}
|
||||
|
||||
tower->textures[0] = texture;
|
||||
|
||||
if (tower->textures[0] != COGL_INVALID_HANDLE)
|
||||
if (tower->textures[0] != NULL)
|
||||
{
|
||||
int width, height;
|
||||
|
||||
cogl_handle_ref (tower->textures[0]);
|
||||
cogl_object_ref (tower->textures[0]);
|
||||
|
||||
width = cogl_texture_get_width (tower->textures[0]);
|
||||
height = cogl_texture_get_height (tower->textures[0]);
|
||||
@ -186,7 +186,7 @@ meta_texture_tower_update_area (MetaTextureTower *tower,
|
||||
|
||||
g_return_if_fail (tower != NULL);
|
||||
|
||||
if (tower->textures[0] == COGL_INVALID_HANDLE)
|
||||
if (tower->textures[0] == NULL)
|
||||
return;
|
||||
|
||||
texture_width = cogl_texture_get_width (tower->textures[0]);
|
||||
@ -387,22 +387,22 @@ static gboolean
|
||||
texture_tower_revalidate_fbo (MetaTextureTower *tower,
|
||||
int level)
|
||||
{
|
||||
CoglHandle source_texture = tower->textures[level - 1];
|
||||
CoglTexture *source_texture = tower->textures[level - 1];
|
||||
int source_texture_width = cogl_texture_get_width (source_texture);
|
||||
int source_texture_height = cogl_texture_get_height (source_texture);
|
||||
CoglHandle dest_texture = tower->textures[level];
|
||||
CoglTexture *dest_texture = tower->textures[level];
|
||||
int dest_texture_width = cogl_texture_get_width (dest_texture);
|
||||
int dest_texture_height = cogl_texture_get_height (dest_texture);
|
||||
Box *invalid = &tower->invalid[level];
|
||||
CoglMatrix modelview;
|
||||
|
||||
if (tower->fbos[level] == COGL_INVALID_HANDLE)
|
||||
if (tower->fbos[level] == NULL)
|
||||
tower->fbos[level] = cogl_offscreen_new_to_texture (dest_texture);
|
||||
|
||||
if (tower->fbos[level] == COGL_INVALID_HANDLE)
|
||||
if (tower->fbos[level] == NULL)
|
||||
return FALSE;
|
||||
|
||||
cogl_push_framebuffer (tower->fbos[level]);
|
||||
cogl_push_framebuffer (COGL_FRAMEBUFFER (tower->fbos[level]));
|
||||
|
||||
cogl_ortho (0, dest_texture_width, dest_texture_height, 0, -1., 1.);
|
||||
|
||||
@ -460,12 +460,12 @@ static void
|
||||
texture_tower_revalidate_client (MetaTextureTower *tower,
|
||||
int level)
|
||||
{
|
||||
CoglHandle source_texture = tower->textures[level - 1];
|
||||
CoglTexture *source_texture = tower->textures[level - 1];
|
||||
int source_texture_width = cogl_texture_get_width (source_texture);
|
||||
int source_texture_height = cogl_texture_get_height (source_texture);
|
||||
guint source_rowstride;
|
||||
guchar *source_data;
|
||||
CoglHandle dest_texture = tower->textures[level];
|
||||
CoglTexture *dest_texture = tower->textures[level];
|
||||
int dest_texture_width = cogl_texture_get_width (dest_texture);
|
||||
int dest_texture_height = cogl_texture_get_height (dest_texture);
|
||||
int dest_x = tower->invalid[level].x1;
|
||||
@ -575,28 +575,28 @@ texture_tower_revalidate (MetaTextureTower *tower,
|
||||
* rectangle (0, 0, 200, 200).
|
||||
*
|
||||
* Return value: the COGL texture handle to use for painting, or
|
||||
* %COGL_INVALID_HANDLE if no base texture has yet been set.
|
||||
* %NULL if no base texture has yet been set.
|
||||
*/
|
||||
CoglHandle
|
||||
CoglTexture *
|
||||
meta_texture_tower_get_paint_texture (MetaTextureTower *tower)
|
||||
{
|
||||
int texture_width, texture_height;
|
||||
int level;
|
||||
|
||||
g_return_val_if_fail (tower != NULL, COGL_INVALID_HANDLE);
|
||||
g_return_val_if_fail (tower != NULL, NULL);
|
||||
|
||||
if (tower->textures[0] == COGL_INVALID_HANDLE)
|
||||
return COGL_INVALID_HANDLE;
|
||||
if (tower->textures[0] == NULL)
|
||||
return NULL;
|
||||
|
||||
texture_width = cogl_texture_get_width (tower->textures[0]);
|
||||
texture_height = cogl_texture_get_height (tower->textures[0]);
|
||||
|
||||
level = get_paint_level(texture_width, texture_height);
|
||||
if (level < 0) /* singular paint matrix, scaled to nothing */
|
||||
return COGL_INVALID_HANDLE;
|
||||
return NULL;
|
||||
level = MIN (level, tower->n_levels - 1);
|
||||
|
||||
if (tower->textures[level] == COGL_INVALID_HANDLE ||
|
||||
if (tower->textures[level] == NULL ||
|
||||
(tower->invalid[level].x2 != tower->invalid[level].x1 &&
|
||||
tower->invalid[level].y2 != tower->invalid[level].y1))
|
||||
{
|
||||
@ -608,7 +608,7 @@ meta_texture_tower_get_paint_texture (MetaTextureTower *tower)
|
||||
texture_width = MAX (1, texture_width / 2);
|
||||
texture_height = MAX (1, texture_height / 2);
|
||||
|
||||
if (tower->textures[i] == COGL_INVALID_HANDLE)
|
||||
if (tower->textures[i] == NULL)
|
||||
texture_tower_create_texture (tower, i, texture_width, texture_height);
|
||||
}
|
||||
|
||||
|
@ -56,13 +56,13 @@ typedef struct _MetaTextureTower MetaTextureTower;
|
||||
MetaTextureTower *meta_texture_tower_new (void);
|
||||
void meta_texture_tower_free (MetaTextureTower *tower);
|
||||
void meta_texture_tower_set_base_texture (MetaTextureTower *tower,
|
||||
CoglHandle texture);
|
||||
CoglTexture *texture);
|
||||
void meta_texture_tower_update_area (MetaTextureTower *tower,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height);
|
||||
CoglHandle meta_texture_tower_get_paint_texture (MetaTextureTower *tower);
|
||||
CoglTexture *meta_texture_tower_get_paint_texture (MetaTextureTower *tower);
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
|
@ -28,6 +28,10 @@ void meta_window_actor_process_damage (MetaWindowActor *self,
|
||||
XDamageNotifyEvent *event);
|
||||
|
||||
void meta_window_actor_pre_paint (MetaWindowActor *self);
|
||||
void meta_window_actor_post_paint (MetaWindowActor *self);
|
||||
void meta_window_actor_frame_complete (MetaWindowActor *self,
|
||||
CoglFrameInfo *frame_info,
|
||||
gint64 presentation_time);
|
||||
|
||||
void meta_window_actor_invalidate_shadow (MetaWindowActor *self);
|
||||
|
||||
@ -39,12 +43,17 @@ void meta_window_actor_get_shape_bounds (MetaWindowActor *self,
|
||||
cairo_rectangle_int_t *bounds);
|
||||
|
||||
gboolean meta_window_actor_effect_in_progress (MetaWindowActor *self);
|
||||
void meta_window_actor_sync_actor_position (MetaWindowActor *self);
|
||||
void meta_window_actor_sync_actor_geometry (MetaWindowActor *self,
|
||||
gboolean did_placement);
|
||||
void meta_window_actor_sync_visibility (MetaWindowActor *self);
|
||||
void meta_window_actor_update_shape (MetaWindowActor *self);
|
||||
void meta_window_actor_update_opacity (MetaWindowActor *self);
|
||||
void meta_window_actor_mapped (MetaWindowActor *self);
|
||||
void meta_window_actor_unmapped (MetaWindowActor *self);
|
||||
void meta_window_actor_set_updates_frozen (MetaWindowActor *self,
|
||||
gboolean updates_frozen);
|
||||
void meta_window_actor_queue_frame_drawn (MetaWindowActor *self,
|
||||
gboolean no_delay_frame);
|
||||
|
||||
cairo_region_t *meta_window_actor_get_obscured_region (MetaWindowActor *self);
|
||||
|
||||
|
@ -10,7 +10,6 @@
|
||||
#include <X11/extensions/Xrender.h>
|
||||
|
||||
#include <clutter/x11/clutter-x11.h>
|
||||
#define COGL_ENABLE_EXPERIMENTAL_API
|
||||
#include <cogl/cogl-texture-pixmap-x11.h>
|
||||
#include <gdk/gdk.h> /* for gdk_rectangle_union() */
|
||||
#include <string.h>
|
||||
@ -68,10 +67,11 @@ struct _MetaWindowActorPrivate
|
||||
|
||||
gchar * desc;
|
||||
|
||||
/* If the window is shaped, a region that matches the shape */
|
||||
/* A region that matches the shape of the window, including frame bounds */
|
||||
cairo_region_t *shape_region;
|
||||
/* A rectangular region with the visible extents of the window */
|
||||
cairo_region_t *bounding_region;
|
||||
/* The opaque region, from _NET_WM_OPAQUE_REGION, intersected with
|
||||
* the shape region. */
|
||||
cairo_region_t *opaque_region;
|
||||
/* The region we should clip to when painting the shadow */
|
||||
cairo_region_t *shadow_clip;
|
||||
|
||||
@ -80,7 +80,6 @@ struct _MetaWindowActorPrivate
|
||||
|
||||
gint last_width;
|
||||
gint last_height;
|
||||
MetaFrameBorders last_borders;
|
||||
|
||||
gint freeze_count;
|
||||
|
||||
@ -97,6 +96,9 @@ struct _MetaWindowActorPrivate
|
||||
gint map_in_progress;
|
||||
gint destroy_in_progress;
|
||||
|
||||
/* List of FrameData for recent frames */
|
||||
GList *frames;
|
||||
|
||||
guint visible : 1;
|
||||
guint mapped : 1;
|
||||
guint argb32 : 1;
|
||||
@ -105,12 +107,18 @@ struct _MetaWindowActorPrivate
|
||||
|
||||
guint needs_damage_all : 1;
|
||||
guint received_damage : 1;
|
||||
guint repaint_scheduled : 1;
|
||||
|
||||
/* If set, the client needs to be sent a _NET_WM_FRAME_DRAWN
|
||||
* client message using the most recent frame in ->frames */
|
||||
guint needs_frame_drawn : 1;
|
||||
|
||||
guint needs_pixmap : 1;
|
||||
guint needs_reshape : 1;
|
||||
guint recompute_focused_shadow : 1;
|
||||
guint recompute_unfocused_shadow : 1;
|
||||
guint size_changed : 1;
|
||||
guint updates_frozen : 1;
|
||||
|
||||
guint needs_destroy : 1;
|
||||
|
||||
@ -119,6 +127,19 @@ struct _MetaWindowActorPrivate
|
||||
guint no_more_x_calls : 1;
|
||||
|
||||
guint unredirected : 1;
|
||||
|
||||
/* This is used to detect fullscreen windows that need to be unredirected */
|
||||
guint full_damage_frames_count;
|
||||
guint does_full_damage : 1;
|
||||
};
|
||||
|
||||
typedef struct _FrameData FrameData;
|
||||
|
||||
struct _FrameData
|
||||
{
|
||||
int64_t frame_counter;
|
||||
guint64 sync_request_serial;
|
||||
gint64 frame_drawn_time;
|
||||
};
|
||||
|
||||
enum
|
||||
@ -151,8 +172,18 @@ static gboolean meta_window_actor_get_paint_volume (ClutterActor *actor,
|
||||
static void meta_window_actor_detach (MetaWindowActor *self);
|
||||
static gboolean meta_window_actor_has_shadow (MetaWindowActor *self);
|
||||
|
||||
static void meta_window_actor_handle_updates (MetaWindowActor *self);
|
||||
|
||||
static void check_needs_reshape (MetaWindowActor *self);
|
||||
|
||||
G_DEFINE_TYPE (MetaWindowActor, meta_window_actor, CLUTTER_TYPE_GROUP);
|
||||
|
||||
static void
|
||||
frame_data_free (FrameData *frame)
|
||||
{
|
||||
g_slice_free (FrameData, frame);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_actor_class_init (MetaWindowActorClass *klass)
|
||||
{
|
||||
@ -355,7 +386,10 @@ meta_window_actor_constructed (GObject *object)
|
||||
}
|
||||
|
||||
meta_window_actor_update_opacity (self);
|
||||
meta_window_actor_update_shape (self);
|
||||
|
||||
/* Start off with an empty region to maintain the invariant that
|
||||
the shape region is always set */
|
||||
priv->shape_region = cairo_region_create();
|
||||
}
|
||||
|
||||
static void
|
||||
@ -381,7 +415,7 @@ meta_window_actor_dispose (GObject *object)
|
||||
meta_window_actor_detach (self);
|
||||
|
||||
g_clear_pointer (&priv->shape_region, cairo_region_destroy);
|
||||
g_clear_pointer (&priv->bounding_region, cairo_region_destroy);
|
||||
g_clear_pointer (&priv->opaque_region, cairo_region_destroy);
|
||||
g_clear_pointer (&priv->shadow_clip, cairo_region_destroy);
|
||||
|
||||
g_clear_pointer (&priv->shadow_class, g_free);
|
||||
@ -551,16 +585,7 @@ meta_window_actor_get_shape_bounds (MetaWindowActor *self,
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
|
||||
/* We need to be defensive here because there are corner cases
|
||||
* where getting the shape fails on a window being destroyed
|
||||
* and similar.
|
||||
*/
|
||||
if (priv->shape_region)
|
||||
cairo_region_get_extents (priv->shape_region, bounds);
|
||||
else if (priv->bounding_region)
|
||||
cairo_region_get_extents (priv->bounding_region, bounds);
|
||||
else
|
||||
bounds->x = bounds->y = bounds->width = bounds->height = 0;
|
||||
cairo_region_get_extents (priv->shape_region, bounds);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -663,7 +688,7 @@ meta_window_actor_get_paint_volume (ClutterActor *actor,
|
||||
|
||||
/* The paint volume is computed before paint functions are called
|
||||
* so our bounds might not be updated yet. Force an update. */
|
||||
meta_window_actor_pre_paint (self);
|
||||
meta_window_actor_handle_updates (self);
|
||||
|
||||
meta_window_actor_get_shape_bounds (self, &bounds);
|
||||
|
||||
@ -892,7 +917,7 @@ static void
|
||||
meta_window_actor_damage_all (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
CoglHandle texture;
|
||||
CoglTexture *texture;
|
||||
|
||||
if (!priv->needs_damage_all)
|
||||
return;
|
||||
@ -908,6 +933,7 @@ meta_window_actor_damage_all (MetaWindowActor *self)
|
||||
cogl_texture_get_height (texture));
|
||||
|
||||
priv->needs_damage_all = FALSE;
|
||||
priv->repaint_scheduled = TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -925,14 +951,57 @@ meta_window_actor_thaw (MetaWindowActor *self)
|
||||
if (self->priv->freeze_count)
|
||||
return;
|
||||
|
||||
/* We sometimes ignore moves and resizes on frozen windows */
|
||||
meta_window_actor_sync_actor_geometry (self, FALSE);
|
||||
|
||||
/* We do this now since we might be going right back into the
|
||||
* frozen state */
|
||||
meta_window_actor_handle_updates (self);
|
||||
|
||||
/* Since we ignore damage events while a window is frozen for certain effects
|
||||
* we may need to issue an update_area() covering the whole pixmap if we
|
||||
* don't know what real damage has happened. */
|
||||
|
||||
if (self->priv->needs_damage_all)
|
||||
meta_window_actor_damage_all (self);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_queue_frame_drawn (MetaWindowActor *self,
|
||||
gboolean no_delay_frame)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
FrameData *frame = g_slice_new0 (FrameData);
|
||||
|
||||
priv->needs_frame_drawn = TRUE;
|
||||
|
||||
frame->sync_request_serial = priv->window->sync_request_serial;
|
||||
|
||||
priv->frames = g_list_prepend (priv->frames, frame);
|
||||
|
||||
if (no_delay_frame)
|
||||
{
|
||||
ClutterActor *stage = clutter_actor_get_stage (CLUTTER_ACTOR (self));
|
||||
clutter_stage_skip_sync_delay (CLUTTER_STAGE (stage));
|
||||
}
|
||||
|
||||
if (!priv->repaint_scheduled)
|
||||
{
|
||||
/* A frame was marked by the client without actually doing any
|
||||
* damage, or while we had the window frozen (e.g. during an
|
||||
* interactive resize.) We need to make sure that the
|
||||
* pre_paint/post_paint functions get called, enabling us to
|
||||
* send a _NET_WM_FRAME_DRAWN. We do a 1-pixel redraw to get
|
||||
* consistent timing with non-empty frames.
|
||||
*/
|
||||
if (priv->mapped && !priv->needs_pixmap)
|
||||
{
|
||||
const cairo_rectangle_int_t clip = { 0, 0, 1, 1 };
|
||||
clutter_actor_queue_redraw_with_clip (priv->actor, &clip);
|
||||
priv->repaint_scheduled = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_window_actor_effect_in_progress (MetaWindowActor *self)
|
||||
{
|
||||
@ -943,6 +1012,12 @@ meta_window_actor_effect_in_progress (MetaWindowActor *self)
|
||||
self->priv->destroy_in_progress);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_frozen (MetaWindowActor *self)
|
||||
{
|
||||
return self->priv->freeze_count ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_actor_queue_create_pixmap (MetaWindowActor *self)
|
||||
{
|
||||
@ -953,6 +1028,9 @@ meta_window_actor_queue_create_pixmap (MetaWindowActor *self)
|
||||
if (!priv->mapped)
|
||||
return;
|
||||
|
||||
if (is_frozen (self))
|
||||
return;
|
||||
|
||||
/* This will cause the compositor paint function to be run
|
||||
* if the actor is visible or a clone of the actor is visible.
|
||||
* if the actor isn't visible in any way, then we don't
|
||||
@ -1043,7 +1121,7 @@ meta_window_actor_after_effects (MetaWindowActor *self)
|
||||
}
|
||||
|
||||
meta_window_actor_sync_visibility (self);
|
||||
meta_window_actor_sync_actor_position (self);
|
||||
meta_window_actor_sync_actor_geometry (self, FALSE);
|
||||
|
||||
if (!meta_window_is_mapped (priv->window))
|
||||
meta_window_actor_detach (self);
|
||||
@ -1158,47 +1236,31 @@ gboolean
|
||||
meta_window_actor_should_unredirect (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindow *metaWindow = meta_window_actor_get_meta_window (self);
|
||||
MetaScreen *screen = meta_window_get_screen (metaWindow);
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
int screen_width, screen_height;
|
||||
MetaRectangle window_rect, monitor_rect;
|
||||
int num_monitors = meta_screen_get_n_monitors (screen);
|
||||
int i;
|
||||
|
||||
if (meta_window_requested_dont_bypass_compositor (metaWindow))
|
||||
return FALSE;
|
||||
|
||||
if (!meta_window_is_override_redirect (metaWindow) &&
|
||||
!meta_window_requested_bypass_compositor (metaWindow))
|
||||
return FALSE;
|
||||
|
||||
if (priv->opacity != 0xff)
|
||||
return FALSE;
|
||||
|
||||
if (priv->argb32 && !meta_window_requested_bypass_compositor (metaWindow))
|
||||
return FALSE;
|
||||
|
||||
if (metaWindow->has_shape)
|
||||
return FALSE;
|
||||
|
||||
if (meta_window_requested_bypass_compositor (metaWindow) &&
|
||||
meta_window_is_fullscreen (metaWindow))
|
||||
if (priv->argb32 && !meta_window_requested_bypass_compositor (metaWindow))
|
||||
return FALSE;
|
||||
|
||||
if (!meta_window_is_monitor_sized (metaWindow))
|
||||
return FALSE;
|
||||
|
||||
if (meta_window_requested_bypass_compositor (metaWindow))
|
||||
return TRUE;
|
||||
|
||||
meta_screen_get_size (screen, &screen_width, &screen_height);
|
||||
meta_window_get_outer_rect (metaWindow, &window_rect);
|
||||
|
||||
if (window_rect.x == 0 && window_rect.y == 0 &&
|
||||
window_rect.width == screen_width && window_rect.height == screen_height)
|
||||
if (meta_window_is_override_redirect (metaWindow))
|
||||
return TRUE;
|
||||
|
||||
for (i = 0; i < num_monitors; i++)
|
||||
{
|
||||
meta_screen_get_monitor_geometry (screen , i, &monitor_rect);
|
||||
if (monitor_rect.x == window_rect.x && monitor_rect.y == window_rect.y &&
|
||||
monitor_rect.width == window_rect.width && monitor_rect.height == window_rect.height)
|
||||
return TRUE;
|
||||
}
|
||||
if (priv->does_full_damage)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@ -1217,7 +1279,7 @@ meta_window_actor_set_redirected (MetaWindowActor *self, gboolean state)
|
||||
meta_error_trap_push (display);
|
||||
XCompositeRedirectWindow (xdisplay, xwin, CompositeRedirectManual);
|
||||
meta_error_trap_pop (display);
|
||||
meta_window_actor_queue_create_pixmap (self);
|
||||
meta_window_actor_detach (self);
|
||||
self->priv->unredirected = FALSE;
|
||||
}
|
||||
else
|
||||
@ -1280,11 +1342,22 @@ meta_window_actor_destroy (MetaWindowActor *self)
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_sync_actor_position (MetaWindowActor *self)
|
||||
meta_window_actor_sync_actor_geometry (MetaWindowActor *self,
|
||||
gboolean did_placement)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
MetaRectangle window_rect;
|
||||
|
||||
/* Normally we want freezing a window to also freeze its position; this allows
|
||||
* windows to atomically move and resize together, either under app control,
|
||||
* or because the user is resizing from the left/top. But on initial placement
|
||||
* we need to assign a position, since immediately after the window
|
||||
* is shown, the map effect will go into effect and prevent further geometry
|
||||
* updates.
|
||||
*/
|
||||
if (is_frozen (self) && !did_placement)
|
||||
return;
|
||||
|
||||
meta_window_get_input_rect (priv->window, &window_rect);
|
||||
|
||||
if (priv->last_width != window_rect.width ||
|
||||
@ -1292,6 +1365,7 @@ meta_window_actor_sync_actor_position (MetaWindowActor *self)
|
||||
{
|
||||
priv->size_changed = TRUE;
|
||||
meta_window_actor_queue_create_pixmap (self);
|
||||
meta_window_actor_update_shape (self);
|
||||
|
||||
priv->last_width = window_rect.width;
|
||||
priv->last_height = window_rect.height;
|
||||
@ -1459,6 +1533,7 @@ meta_window_actor_new (MetaWindow *window)
|
||||
MetaWindowActorPrivate *priv;
|
||||
MetaFrame *frame;
|
||||
Window top_window;
|
||||
ClutterActor *window_group;
|
||||
|
||||
frame = meta_window_get_frame (window);
|
||||
if (frame)
|
||||
@ -1483,15 +1558,26 @@ meta_window_actor_new (MetaWindow *window)
|
||||
if (priv->mapped)
|
||||
meta_window_actor_queue_create_pixmap (self);
|
||||
|
||||
meta_window_actor_sync_actor_position (self);
|
||||
meta_window_actor_set_updates_frozen (self,
|
||||
meta_window_updates_are_frozen (priv->window));
|
||||
|
||||
meta_window_actor_sync_actor_geometry (self, priv->window->placed);
|
||||
|
||||
/* Hang our compositor window state off the MetaWindow for fast retrieval */
|
||||
meta_window_set_compositor_private (window, G_OBJECT (self));
|
||||
|
||||
clutter_container_add_actor (CLUTTER_CONTAINER (info->window_group),
|
||||
CLUTTER_ACTOR (self));
|
||||
if (window->layer == META_LAYER_OVERRIDE_REDIRECT)
|
||||
window_group = info->top_window_group;
|
||||
else
|
||||
window_group = info->window_group;
|
||||
|
||||
clutter_container_add_actor (CLUTTER_CONTAINER (window_group),
|
||||
CLUTTER_ACTOR (self));
|
||||
|
||||
clutter_actor_hide (CLUTTER_ACTOR (self));
|
||||
|
||||
clutter_actor_set_reactive (CLUTTER_ACTOR (self), TRUE);
|
||||
|
||||
/* Initial position in the stack is arbitrary; stacking will be synced
|
||||
* before we first paint.
|
||||
*/
|
||||
@ -1528,55 +1614,6 @@ meta_window_actor_unmapped (MetaWindowActor *self)
|
||||
priv->needs_pixmap = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_actor_update_bounding_region_and_borders (MetaWindowActor *self,
|
||||
int width,
|
||||
int height)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
MetaFrameBorders borders;
|
||||
cairo_rectangle_int_t bounding_rectangle;
|
||||
|
||||
meta_frame_calc_borders (priv->window->frame, &borders);
|
||||
|
||||
bounding_rectangle.x = borders.invisible.left;
|
||||
bounding_rectangle.y = borders.invisible.top;
|
||||
|
||||
width -= borders.invisible.left + borders.invisible.right;
|
||||
height -= borders.invisible.top + borders.invisible.bottom;
|
||||
|
||||
bounding_rectangle.width = width;
|
||||
bounding_rectangle.height = height;
|
||||
|
||||
if (priv->bounding_region != NULL)
|
||||
{
|
||||
cairo_rectangle_int_t old_bounding_rectangle;
|
||||
cairo_region_get_extents (priv->bounding_region, &old_bounding_rectangle);
|
||||
|
||||
/* Because the bounding region doesn't include the invisible borders,
|
||||
* we need to make sure that the border sizes haven't changed before
|
||||
* short-circuiting early.
|
||||
*/
|
||||
if (bounding_rectangle.width == old_bounding_rectangle.width &&
|
||||
bounding_rectangle.height == old_bounding_rectangle.height &&
|
||||
priv->last_borders.invisible.left == borders.invisible.left &&
|
||||
priv->last_borders.invisible.right == borders.invisible.right &&
|
||||
priv->last_borders.invisible.top == borders.invisible.top &&
|
||||
priv->last_borders.invisible.bottom == borders.invisible.bottom)
|
||||
return;
|
||||
}
|
||||
|
||||
priv->last_borders = borders;
|
||||
|
||||
g_clear_pointer (&priv->bounding_region, cairo_region_destroy);
|
||||
|
||||
priv->bounding_region = cairo_region_create_rectangle (&bounding_rectangle);
|
||||
|
||||
meta_window_actor_update_shape (self);
|
||||
|
||||
g_signal_emit (self, signals[SIZE_CHANGED], 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_actor_get_obscured_region:
|
||||
* @self: a #MetaWindowActor
|
||||
@ -1592,13 +1629,8 @@ meta_window_actor_get_obscured_region (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
|
||||
if (!priv->argb32 && priv->opacity == 0xff && priv->back_pixmap)
|
||||
{
|
||||
if (priv->shape_region)
|
||||
return priv->shape_region;
|
||||
else
|
||||
return priv->bounding_region;
|
||||
}
|
||||
if (priv->back_pixmap && priv->opacity == 0xff)
|
||||
return priv->opaque_region;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
@ -1746,7 +1778,7 @@ check_needs_pixmap (MetaWindowActor *self)
|
||||
|
||||
if (priv->back_pixmap == None)
|
||||
{
|
||||
CoglHandle texture;
|
||||
CoglTexture *texture;
|
||||
|
||||
meta_error_trap_push (display);
|
||||
|
||||
@ -1767,7 +1799,6 @@ check_needs_pixmap (MetaWindowActor *self)
|
||||
if (priv->back_pixmap == None)
|
||||
{
|
||||
meta_verbose ("Unable to get named pixmap for %p\n", self);
|
||||
meta_window_actor_update_bounding_region_and_borders (self, 0, 0);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -1785,12 +1816,19 @@ check_needs_pixmap (MetaWindowActor *self)
|
||||
* do it here.
|
||||
* See: http://bugzilla.clutter-project.org/show_bug.cgi?id=2236
|
||||
*/
|
||||
if (G_UNLIKELY (!cogl_texture_pixmap_x11_is_using_tfp_extension (texture)))
|
||||
if (G_UNLIKELY (!cogl_texture_pixmap_x11_is_using_tfp_extension (COGL_TEXTURE_PIXMAP_X11 (texture))))
|
||||
g_warning ("NOTE: Not using GLX TFP!\n");
|
||||
|
||||
meta_window_actor_update_bounding_region_and_borders (self,
|
||||
cogl_texture_get_width (texture),
|
||||
cogl_texture_get_height (texture));
|
||||
/* ::size-changed is supposed to refer to meta_window_get_outer_rect().
|
||||
* Emitting it here works pretty much OK because a new value of the
|
||||
* *input* rect (which is the outer rect with the addition of invisible
|
||||
* borders) forces a new pixmap and we get here. In the rare case where
|
||||
* a change to the window size was exactly balanced by a change to the
|
||||
* invisible borders, we would miss emitting the signal. We would also
|
||||
* emit spurious signals when we get a new pixmap without a new size,
|
||||
* but that should be mostly harmless.
|
||||
*/
|
||||
g_signal_emit (self, signals[SIZE_CHANGED], 0);
|
||||
}
|
||||
|
||||
priv->needs_pixmap = FALSE;
|
||||
@ -1847,47 +1885,51 @@ check_needs_shadow (MetaWindowActor *self)
|
||||
if (*shadow_location == NULL && should_have_shadow)
|
||||
{
|
||||
if (priv->shadow_shape == NULL)
|
||||
{
|
||||
if (priv->shape_region)
|
||||
priv->shadow_shape = meta_window_shape_new (priv->shape_region);
|
||||
else if (priv->bounding_region)
|
||||
priv->shadow_shape = meta_window_shape_new (priv->bounding_region);
|
||||
}
|
||||
priv->shadow_shape = meta_window_shape_new (priv->shape_region);
|
||||
|
||||
if (priv->shadow_shape != NULL)
|
||||
{
|
||||
MetaShadowFactory *factory = meta_shadow_factory_get_default ();
|
||||
const char *shadow_class = meta_window_actor_get_shadow_class (self);
|
||||
cairo_rectangle_int_t shape_bounds;
|
||||
MetaShadowFactory *factory = meta_shadow_factory_get_default ();
|
||||
const char *shadow_class = meta_window_actor_get_shadow_class (self);
|
||||
cairo_rectangle_int_t shape_bounds;
|
||||
|
||||
meta_window_actor_get_shape_bounds (self, &shape_bounds);
|
||||
*shadow_location = meta_shadow_factory_get_shadow (factory,
|
||||
priv->shadow_shape,
|
||||
shape_bounds.width, shape_bounds.height,
|
||||
shadow_class, appears_focused);
|
||||
}
|
||||
meta_window_actor_get_shape_bounds (self, &shape_bounds);
|
||||
*shadow_location = meta_shadow_factory_get_shadow (factory,
|
||||
priv->shadow_shape,
|
||||
shape_bounds.width, shape_bounds.height,
|
||||
shadow_class, appears_focused);
|
||||
}
|
||||
|
||||
if (old_shadow != NULL)
|
||||
meta_shadow_unref (old_shadow);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_frozen (MetaWindowActor *self)
|
||||
{
|
||||
return self->priv->freeze_count ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_process_damage (MetaWindowActor *self,
|
||||
XDamageNotifyEvent *event)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
MetaCompScreen *info = meta_screen_get_compositor_data (priv->screen);
|
||||
|
||||
priv->received_damage = TRUE;
|
||||
|
||||
if (meta_window_is_fullscreen (priv->window) && g_list_last (info->windows)->data == self && !priv->unredirected)
|
||||
{
|
||||
MetaRectangle window_rect;
|
||||
meta_window_get_outer_rect (priv->window, &window_rect);
|
||||
|
||||
if (window_rect.x == event->area.x &&
|
||||
window_rect.y == event->area.y &&
|
||||
window_rect.width == event->area.width &&
|
||||
window_rect.height == event->area.height)
|
||||
priv->full_damage_frames_count++;
|
||||
else
|
||||
priv->full_damage_frames_count = 0;
|
||||
|
||||
if (priv->full_damage_frames_count >= 100)
|
||||
priv->does_full_damage = TRUE;
|
||||
}
|
||||
|
||||
/* Drop damage event for unredirected windows */
|
||||
if (self->priv->unredirected)
|
||||
if (priv->unredirected)
|
||||
return;
|
||||
|
||||
if (is_frozen (self))
|
||||
@ -1918,6 +1960,7 @@ meta_window_actor_process_damage (MetaWindowActor *self,
|
||||
event->area.y,
|
||||
event->area.width,
|
||||
event->area.height);
|
||||
priv->repaint_scheduled = TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
@ -2047,13 +2090,13 @@ build_and_scan_frame_mask (MetaWindowActor *self,
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
guchar *mask_data;
|
||||
guint tex_width, tex_height;
|
||||
CoglHandle paint_tex, mask_texture;
|
||||
CoglTexture *paint_tex, *mask_texture;
|
||||
int stride;
|
||||
cairo_t *cr;
|
||||
cairo_surface_t *surface;
|
||||
|
||||
paint_tex = meta_shaped_texture_get_texture (META_SHAPED_TEXTURE (priv->actor));
|
||||
if (paint_tex == COGL_INVALID_HANDLE)
|
||||
if (paint_tex == NULL)
|
||||
return;
|
||||
|
||||
tex_width = cogl_texture_get_width (paint_tex);
|
||||
@ -2122,7 +2165,7 @@ build_and_scan_frame_mask (MetaWindowActor *self,
|
||||
|
||||
meta_shaped_texture_set_mask_texture (META_SHAPED_TEXTURE (priv->actor),
|
||||
mask_texture);
|
||||
cogl_handle_unref (mask_texture);
|
||||
cogl_object_unref (mask_texture);
|
||||
|
||||
g_free (mask_data);
|
||||
}
|
||||
@ -2138,9 +2181,18 @@ check_needs_reshape (MetaWindowActor *self)
|
||||
cairo_rectangle_int_t client_area;
|
||||
gboolean needs_mask;
|
||||
|
||||
if (!priv->mapped)
|
||||
return;
|
||||
|
||||
if (!priv->needs_reshape)
|
||||
return;
|
||||
|
||||
if (priv->shadow_shape != NULL)
|
||||
{
|
||||
meta_window_shape_unref (priv->shadow_shape);
|
||||
priv->shadow_shape = NULL;
|
||||
}
|
||||
|
||||
meta_frame_calc_borders (priv->window->frame, &borders);
|
||||
|
||||
client_area.x = borders.total.left;
|
||||
@ -2148,7 +2200,7 @@ check_needs_reshape (MetaWindowActor *self)
|
||||
client_area.width = priv->window->rect.width;
|
||||
client_area.height = priv->window->rect.height;
|
||||
|
||||
meta_shaped_texture_set_mask_texture (META_SHAPED_TEXTURE (priv->actor), COGL_INVALID_HANDLE);
|
||||
meta_shaped_texture_set_mask_texture (META_SHAPED_TEXTURE (priv->actor), NULL);
|
||||
g_clear_pointer (&priv->shape_region, cairo_region_destroy);
|
||||
|
||||
#ifdef HAVE_SHAPE
|
||||
@ -2190,7 +2242,18 @@ check_needs_reshape (MetaWindowActor *self)
|
||||
|
||||
needs_mask = (region != NULL) || (priv->window->frame != NULL);
|
||||
|
||||
if (region == NULL)
|
||||
if (region != NULL)
|
||||
{
|
||||
/* The shape we get back from the client may have coordinates
|
||||
* outside of the frame. The X SHAPE Extension requires that
|
||||
* the overall shape the client provides never exceeds the
|
||||
* "bounding rectangle" of the window -- the shape that the
|
||||
* window would have gotten if it was unshaped. In our case,
|
||||
* this is simply the client area.
|
||||
*/
|
||||
cairo_region_intersect_rectangle (region, &client_area);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If we don't have a shape on the server, that means that
|
||||
* we have an implicit shape of one rectangle covering the
|
||||
@ -2198,6 +2261,30 @@ check_needs_reshape (MetaWindowActor *self)
|
||||
region = cairo_region_create_rectangle (&client_area);
|
||||
}
|
||||
|
||||
/* The region at this point should be constrained to the
|
||||
* bounds of the client rectangle. */
|
||||
|
||||
if (priv->argb32 && priv->window->opaque_region != NULL)
|
||||
{
|
||||
/* The opaque region is defined to be a part of the
|
||||
* window which ARGB32 will always paint with opaque
|
||||
* pixels. For these regions, we want to avoid painting
|
||||
* windows and shadows beneath them.
|
||||
*
|
||||
* If the client gives bad coordinates where it does not
|
||||
* fully paint, the behavior is defined by the specification
|
||||
* to be undefined, and considered a client bug. In mutter's
|
||||
* case, graphical glitches will occur.
|
||||
*/
|
||||
priv->opaque_region = cairo_region_copy (priv->window->opaque_region);
|
||||
cairo_region_translate (priv->opaque_region, client_area.x, client_area.y);
|
||||
cairo_region_intersect (priv->opaque_region, region);
|
||||
}
|
||||
else if (priv->argb32)
|
||||
priv->opaque_region = NULL;
|
||||
else
|
||||
priv->opaque_region = cairo_region_reference (region);
|
||||
|
||||
if (needs_mask)
|
||||
{
|
||||
/* This takes the region, generates a mask using GTK+
|
||||
@ -2209,20 +2296,6 @@ check_needs_reshape (MetaWindowActor *self)
|
||||
|
||||
priv->shape_region = region;
|
||||
|
||||
/* Our "shape_region" is called the "bounding region" in the X Shape
|
||||
* Extension Documentation.
|
||||
*
|
||||
* Our "bounding_region" is called the "bounding rectangle", which defines
|
||||
* the shape of the window as if it the window was unshaped.
|
||||
*
|
||||
* The X Shape extension requires that the "bounding region" can never
|
||||
* extend outside the "bounding rectangle", and says it must be implicitly
|
||||
* clipped before rendering. The region we get back hasn't been clipped.
|
||||
* We explicitly clip the region here.
|
||||
*/
|
||||
if (priv->bounding_region != NULL)
|
||||
cairo_region_intersect (priv->shape_region, priv->bounding_region);
|
||||
|
||||
priv->needs_reshape = FALSE;
|
||||
meta_window_actor_invalidate_shadow (self);
|
||||
}
|
||||
@ -2233,17 +2306,15 @@ meta_window_actor_update_shape (MetaWindowActor *self)
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
|
||||
priv->needs_reshape = TRUE;
|
||||
if (priv->shadow_shape != NULL)
|
||||
{
|
||||
meta_window_shape_unref (priv->shadow_shape);
|
||||
priv->shadow_shape = NULL;
|
||||
}
|
||||
|
||||
if (is_frozen (self))
|
||||
return;
|
||||
|
||||
clutter_actor_queue_redraw (priv->actor);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_pre_paint (MetaWindowActor *self)
|
||||
static void
|
||||
meta_window_actor_handle_updates (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
MetaScreen *screen = priv->screen;
|
||||
@ -2297,6 +2368,140 @@ meta_window_actor_pre_paint (MetaWindowActor *self)
|
||||
check_needs_shadow (self);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_pre_paint (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
GList *l;
|
||||
|
||||
meta_window_actor_handle_updates (self);
|
||||
|
||||
for (l = priv->frames; l != NULL; l = l->next)
|
||||
{
|
||||
FrameData *frame = l->data;
|
||||
|
||||
if (frame->frame_counter == 0)
|
||||
{
|
||||
CoglOnscreen *onscreen = COGL_ONSCREEN (cogl_get_draw_framebuffer());
|
||||
frame->frame_counter = cogl_onscreen_get_frame_counter (onscreen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_post_paint (MetaWindowActor *self)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
|
||||
priv->repaint_scheduled = FALSE;
|
||||
|
||||
if (priv->needs_frame_drawn)
|
||||
{
|
||||
MetaScreen *screen = priv->screen;
|
||||
MetaDisplay *display = meta_screen_get_display (screen);
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
|
||||
XClientMessageEvent ev = { 0, };
|
||||
|
||||
FrameData *frame = priv->frames->data;
|
||||
|
||||
frame->frame_drawn_time = meta_compositor_monotonic_time_to_server_time (display,
|
||||
g_get_monotonic_time ());
|
||||
|
||||
ev.type = ClientMessage;
|
||||
ev.window = meta_window_get_xwindow (priv->window);
|
||||
ev.message_type = display->atom__NET_WM_FRAME_DRAWN;
|
||||
ev.format = 32;
|
||||
ev.data.l[0] = frame->sync_request_serial & G_GUINT64_CONSTANT(0xffffffff);
|
||||
ev.data.l[1] = frame->sync_request_serial >> 32;
|
||||
ev.data.l[2] = frame->frame_drawn_time & G_GUINT64_CONSTANT(0xffffffff);
|
||||
ev.data.l[3] = frame->frame_drawn_time >> 32;
|
||||
|
||||
meta_error_trap_push (display);
|
||||
XSendEvent (xdisplay, ev.window, False, 0, (XEvent*) &ev);
|
||||
XFlush (xdisplay);
|
||||
meta_error_trap_pop (display);
|
||||
|
||||
priv->needs_frame_drawn = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
send_frame_timings (MetaWindowActor *self,
|
||||
FrameData *frame,
|
||||
CoglFrameInfo *frame_info,
|
||||
gint64 presentation_time)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
MetaDisplay *display = meta_screen_get_display (priv->screen);
|
||||
Display *xdisplay = meta_display_get_xdisplay (display);
|
||||
float refresh_rate;
|
||||
int refresh_interval;
|
||||
|
||||
XClientMessageEvent ev = { 0, };
|
||||
|
||||
ev.type = ClientMessage;
|
||||
ev.window = meta_window_get_xwindow (priv->window);
|
||||
ev.message_type = display->atom__NET_WM_FRAME_TIMINGS;
|
||||
ev.format = 32;
|
||||
ev.data.l[0] = frame->sync_request_serial & G_GUINT64_CONSTANT(0xffffffff);
|
||||
ev.data.l[1] = frame->sync_request_serial >> 32;
|
||||
|
||||
refresh_rate = cogl_frame_info_get_refresh_rate (frame_info);
|
||||
/* 0.0 is a flag for not known, but sanity-check against other odd numbers */
|
||||
if (refresh_rate >= 1.0)
|
||||
refresh_interval = (int) (0.5 + 1000000 / refresh_rate);
|
||||
else
|
||||
refresh_interval = 0;
|
||||
|
||||
if (presentation_time != 0)
|
||||
{
|
||||
gint64 presentation_time_server = meta_compositor_monotonic_time_to_server_time (display,
|
||||
presentation_time);
|
||||
gint64 presentation_time_offset = presentation_time_server - frame->frame_drawn_time;
|
||||
if (presentation_time_offset == 0)
|
||||
presentation_time_offset = 1;
|
||||
|
||||
if ((gint32)presentation_time_offset == presentation_time_offset)
|
||||
ev.data.l[2] = presentation_time_offset;
|
||||
}
|
||||
|
||||
ev.data.l[3] = refresh_interval;
|
||||
ev.data.l[4] = 1000 * META_SYNC_DELAY;
|
||||
|
||||
meta_error_trap_push (display);
|
||||
XSendEvent (xdisplay, ev.window, False, 0, (XEvent*) &ev);
|
||||
XFlush (xdisplay);
|
||||
meta_error_trap_pop (display);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_frame_complete (MetaWindowActor *self,
|
||||
CoglFrameInfo *frame_info,
|
||||
gint64 presentation_time)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
GList *l;
|
||||
|
||||
for (l = priv->frames; l;)
|
||||
{
|
||||
GList *l_next = l->next;
|
||||
FrameData *frame = l->data;
|
||||
|
||||
if (frame->frame_counter == cogl_frame_info_get_frame_counter (frame_info))
|
||||
{
|
||||
if (frame->frame_drawn_time != 0)
|
||||
{
|
||||
priv->frames = g_list_delete_link (priv->frames, l);
|
||||
send_frame_timings (self, frame, frame_info, presentation_time);
|
||||
frame_data_free (frame);
|
||||
}
|
||||
}
|
||||
|
||||
l = l_next;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_invalidate_shadow (MetaWindowActor *self)
|
||||
{
|
||||
@ -2304,6 +2509,10 @@ meta_window_actor_invalidate_shadow (MetaWindowActor *self)
|
||||
|
||||
priv->recompute_focused_shadow = TRUE;
|
||||
priv->recompute_unfocused_shadow = TRUE;
|
||||
|
||||
if (is_frozen (self))
|
||||
return;
|
||||
|
||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
|
||||
}
|
||||
|
||||
@ -2329,3 +2538,21 @@ meta_window_actor_update_opacity (MetaWindowActor *self)
|
||||
self->priv->opacity = opacity;
|
||||
clutter_actor_set_opacity (self->priv->actor, opacity);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_actor_set_updates_frozen (MetaWindowActor *self,
|
||||
gboolean updates_frozen)
|
||||
{
|
||||
MetaWindowActorPrivate *priv = self->priv;
|
||||
|
||||
updates_frozen = updates_frozen != FALSE;
|
||||
|
||||
if (priv->updates_frozen != updates_frozen)
|
||||
{
|
||||
priv->updates_frozen = updates_frozen;
|
||||
if (updates_frozen)
|
||||
meta_window_actor_freeze (self);
|
||||
else
|
||||
meta_window_actor_thaw (self);
|
||||
}
|
||||
}
|
||||
|
@ -7,10 +7,12 @@
|
||||
|
||||
#include <gdk/gdk.h> /* for gdk_rectangle_intersect() */
|
||||
|
||||
#include "clutter-utils.h"
|
||||
#include "compositor-private.h"
|
||||
#include "meta-window-actor-private.h"
|
||||
#include "meta-window-group.h"
|
||||
#include "meta-background-actor-private.h"
|
||||
#include "meta-background-group-private.h"
|
||||
|
||||
struct _MetaWindowGroupClass
|
||||
{
|
||||
@ -26,100 +28,6 @@ struct _MetaWindowGroup
|
||||
|
||||
G_DEFINE_TYPE (MetaWindowGroup, meta_window_group, CLUTTER_TYPE_GROUP);
|
||||
|
||||
/* This file uses pixel-aligned region computation to determine what
|
||||
* can be clipped out. This only really works if everything is aligned
|
||||
* to the pixel grid - not scaled or rotated and at integer offsets.
|
||||
*
|
||||
* (This could be relaxed - if we turned off filtering for unscaled
|
||||
* windows then windows would be, by definition aligned to the pixel
|
||||
* grid. And for rectangular windows without a shape, the outline that
|
||||
* we draw for an unrotated window is always a rectangle because we
|
||||
* don't use antialasing for the window boundary - with or without
|
||||
* filtering, with or without a scale. But figuring out exactly
|
||||
* what pixels will be drawn by the graphics system in these cases
|
||||
* gets tricky, so we just go for the easiest part - no scale,
|
||||
* and at integer offsets.)
|
||||
*
|
||||
* The way we check for pixel-aligned is by looking at the
|
||||
* transformation into screen space of the allocation box of an actor
|
||||
* and and checking if the corners are "close enough" to integral
|
||||
* pixel values.
|
||||
*/
|
||||
|
||||
/* The definition of "close enough" to integral pixel values is
|
||||
* equality when we convert to 24.8 fixed-point.
|
||||
*/
|
||||
static inline int
|
||||
round_to_fixed (float x)
|
||||
{
|
||||
return roundf (x * 256);
|
||||
}
|
||||
|
||||
/* This helper function checks if (according to our fixed point precision)
|
||||
* the vertices @verts form a box of width @widthf and height @heightf
|
||||
* located at integral coordinates. These coordinates are returned
|
||||
* in @x_origin and @y_origin.
|
||||
*/
|
||||
static gboolean
|
||||
vertices_are_untransformed (ClutterVertex *verts,
|
||||
float widthf,
|
||||
float heightf,
|
||||
int *x_origin,
|
||||
int *y_origin)
|
||||
{
|
||||
int width, height;
|
||||
int v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y;
|
||||
int x, y;
|
||||
|
||||
width = round_to_fixed (widthf); height = round_to_fixed (heightf);
|
||||
|
||||
v0x = round_to_fixed (verts[0].x); v0y = round_to_fixed (verts[0].y);
|
||||
v1x = round_to_fixed (verts[1].x); v1y = round_to_fixed (verts[1].y);
|
||||
v2x = round_to_fixed (verts[2].x); v2y = round_to_fixed (verts[2].y);
|
||||
v3x = round_to_fixed (verts[3].x); v3y = round_to_fixed (verts[3].y);
|
||||
|
||||
/* Using shifting for converting fixed => int, gets things right for
|
||||
* negative values. / 256. wouldn't do the same
|
||||
*/
|
||||
x = v0x >> 8;
|
||||
y = v0y >> 8;
|
||||
|
||||
/* At integral coordinates? */
|
||||
if (x * 256 != v0x || y * 256 != v0y)
|
||||
return FALSE;
|
||||
|
||||
/* Not scaled? */
|
||||
if (v1x - v0x != width || v2y - v0y != height)
|
||||
return FALSE;
|
||||
|
||||
/* Not rotated/skewed? */
|
||||
if (v0x != v2x || v0y != v1y ||
|
||||
v3x != v1x || v3y != v2y)
|
||||
return FALSE;
|
||||
|
||||
*x_origin = x;
|
||||
*y_origin = y;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* Check if an actor is "untransformed" - which actually means transformed by
|
||||
* at most a integer-translation. The integer translation, if any, is returned.
|
||||
*/
|
||||
static gboolean
|
||||
actor_is_untransformed (ClutterActor *actor,
|
||||
int *x_origin,
|
||||
int *y_origin)
|
||||
{
|
||||
gfloat widthf, heightf;
|
||||
ClutterVertex verts[4];
|
||||
|
||||
clutter_actor_get_size (actor, &widthf, &heightf);
|
||||
clutter_actor_get_abs_allocation_vertices (actor, verts);
|
||||
|
||||
return vertices_are_untransformed (verts, widthf, heightf, x_origin, y_origin);
|
||||
}
|
||||
|
||||
/* Help macros to scale from OpenGL <-1,1> coordinates system to
|
||||
* window coordinates ranging [0,window-size]. Borrowed from clutter-utils.c
|
||||
*/
|
||||
@ -175,7 +83,7 @@ painting_untransformed (MetaWindowGroup *window_group,
|
||||
viewport[3], viewport[1]);
|
||||
}
|
||||
|
||||
return vertices_are_untransformed (vertices, width, height, x_origin, y_origin);
|
||||
return meta_actor_vertices_are_untransformed (vertices, width, height, x_origin, y_origin);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -206,7 +114,7 @@ meta_window_group_paint (ClutterActor *actor)
|
||||
* on the stage.
|
||||
*/
|
||||
if (!painting_untransformed (window_group, &paint_x_origin, &paint_y_origin) ||
|
||||
!actor_is_untransformed (actor, &actor_x_origin, &actor_y_origin))
|
||||
!meta_actor_is_untransformed (actor, &actor_x_origin, &actor_y_origin))
|
||||
{
|
||||
CLUTTER_ACTOR_CLASS (meta_window_group_parent_class)->paint (actor);
|
||||
return;
|
||||
@ -275,7 +183,7 @@ meta_window_group_paint (ClutterActor *actor)
|
||||
MetaWindowActor *window_actor = l->data;
|
||||
int x, y;
|
||||
|
||||
if (!actor_is_untransformed (CLUTTER_ACTOR (window_actor), &x, &y))
|
||||
if (!meta_actor_is_untransformed (CLUTTER_ACTOR (window_actor), &x, &y))
|
||||
continue;
|
||||
|
||||
x += paint_x_offset;
|
||||
@ -296,19 +204,24 @@ meta_window_group_paint (ClutterActor *actor)
|
||||
meta_window_actor_set_visible_region_beneath (window_actor, visible_region);
|
||||
cairo_region_translate (visible_region, x, y);
|
||||
}
|
||||
else if (META_IS_BACKGROUND_ACTOR (l->data))
|
||||
else if (META_IS_BACKGROUND_ACTOR (l->data) ||
|
||||
META_IS_BACKGROUND_GROUP (l->data))
|
||||
{
|
||||
MetaBackgroundActor *background_actor = l->data;
|
||||
ClutterActor *background_actor = l->data;
|
||||
int x, y;
|
||||
|
||||
if (!actor_is_untransformed (CLUTTER_ACTOR (background_actor), &x, &y))
|
||||
if (!meta_actor_is_untransformed (CLUTTER_ACTOR (background_actor), &x, &y))
|
||||
continue;
|
||||
|
||||
x += paint_x_offset;
|
||||
y += paint_y_offset;
|
||||
|
||||
cairo_region_translate (visible_region, - x, - y);
|
||||
meta_background_actor_set_visible_region (background_actor, visible_region);
|
||||
|
||||
if (META_IS_BACKGROUND_GROUP (background_actor))
|
||||
meta_background_group_set_visible_region (META_BACKGROUND_GROUP (background_actor), visible_region);
|
||||
else
|
||||
meta_background_actor_set_visible_region (META_BACKGROUND_ACTOR (background_actor), visible_region);
|
||||
cairo_region_translate (visible_region, x, y);
|
||||
}
|
||||
}
|
||||
|
@ -49,4 +49,7 @@ 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 */
|
||||
|
398
src/core/barrier.c
Normal file
398
src/core/barrier.c
Normal file
@ -0,0 +1,398 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
#include <X11/extensions/XInput2.h>
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
#include <meta/util.h>
|
||||
#include <meta/barrier.h>
|
||||
#include "display-private.h"
|
||||
#include "mutter-enum-types.h"
|
||||
#include "core.h"
|
||||
|
||||
G_DEFINE_TYPE (MetaBarrier, meta_barrier, G_TYPE_OBJECT)
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
|
||||
PROP_DISPLAY,
|
||||
|
||||
PROP_X1,
|
||||
PROP_Y1,
|
||||
PROP_X2,
|
||||
PROP_Y2,
|
||||
PROP_DIRECTIONS,
|
||||
|
||||
PROP_LAST,
|
||||
};
|
||||
|
||||
static GParamSpec *obj_props[PROP_LAST];
|
||||
|
||||
enum {
|
||||
HIT,
|
||||
LEFT,
|
||||
|
||||
LAST_SIGNAL,
|
||||
};
|
||||
|
||||
static guint obj_signals[LAST_SIGNAL];
|
||||
|
||||
struct _MetaBarrierPrivate
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
int x1;
|
||||
int y1;
|
||||
int x2;
|
||||
int y2;
|
||||
|
||||
MetaBarrierDirection directions;
|
||||
|
||||
PointerBarrier xbarrier;
|
||||
};
|
||||
|
||||
static void
|
||||
meta_barrier_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaBarrier *barrier = META_BARRIER (object);
|
||||
MetaBarrierPrivate *priv = barrier->priv;
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_DISPLAY:
|
||||
g_value_set_object (value, priv->display);
|
||||
break;
|
||||
case PROP_X1:
|
||||
g_value_set_int (value, priv->x1);
|
||||
break;
|
||||
case PROP_Y1:
|
||||
g_value_set_int (value, priv->y1);
|
||||
break;
|
||||
case PROP_X2:
|
||||
g_value_set_int (value, priv->x2);
|
||||
break;
|
||||
case PROP_Y2:
|
||||
g_value_set_int (value, priv->y2);
|
||||
break;
|
||||
case PROP_DIRECTIONS:
|
||||
g_value_set_flags (value, priv->directions);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_barrier_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
MetaBarrier *barrier = META_BARRIER (object);
|
||||
MetaBarrierPrivate *priv = barrier->priv;
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_DISPLAY:
|
||||
priv->display = g_value_get_object (value);
|
||||
break;
|
||||
case PROP_X1:
|
||||
priv->x1 = g_value_get_int (value);
|
||||
break;
|
||||
case PROP_Y1:
|
||||
priv->y1 = g_value_get_int (value);
|
||||
break;
|
||||
case PROP_X2:
|
||||
priv->x2 = g_value_get_int (value);
|
||||
break;
|
||||
case PROP_Y2:
|
||||
priv->y2 = g_value_get_int (value);
|
||||
break;
|
||||
case PROP_DIRECTIONS:
|
||||
priv->directions = g_value_get_flags (value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
meta_barrier_dispose (GObject *object)
|
||||
{
|
||||
MetaBarrier *barrier = META_BARRIER (object);
|
||||
MetaBarrierPrivate *priv = barrier->priv;
|
||||
|
||||
if (meta_barrier_is_active (barrier))
|
||||
{
|
||||
meta_bug ("MetaBarrier wrapper %p for X barrier %ld was destroyed"
|
||||
" while the X barrier is still active.",
|
||||
barrier, priv->xbarrier);
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (meta_barrier_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_barrier_is_active (MetaBarrier *barrier)
|
||||
{
|
||||
return barrier->priv->xbarrier != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_barrier_release:
|
||||
* @barrier: The barrier to release
|
||||
* @event: The event to release the pointer for
|
||||
*
|
||||
* In XI2.3, pointer barriers provide a feature where they can
|
||||
* be temporarily released so that the pointer goes through
|
||||
* them. Pass a #MetaBarrierEvent to release the barrier for
|
||||
* this event sequence.
|
||||
*/
|
||||
void
|
||||
meta_barrier_release (MetaBarrier *barrier,
|
||||
MetaBarrierEvent *event)
|
||||
{
|
||||
#ifdef HAVE_XI23
|
||||
MetaBarrierPrivate *priv = barrier->priv;
|
||||
if (META_DISPLAY_HAS_XINPUT_23 (priv->display))
|
||||
{
|
||||
XIBarrierReleasePointer (priv->display->xdisplay,
|
||||
META_VIRTUAL_CORE_POINTER_ID,
|
||||
priv->xbarrier, event->event_id);
|
||||
}
|
||||
#endif /* HAVE_XI23 */
|
||||
}
|
||||
|
||||
static void
|
||||
meta_barrier_constructed (GObject *object)
|
||||
{
|
||||
MetaBarrier *barrier = META_BARRIER (object);
|
||||
MetaBarrierPrivate *priv = barrier->priv;
|
||||
Display *dpy;
|
||||
Window root;
|
||||
|
||||
g_return_if_fail (priv->x1 == priv->x2 || priv->y1 == priv->y2);
|
||||
|
||||
if (priv->display == NULL)
|
||||
{
|
||||
g_warning ("A display must be provided when constructing a barrier.");
|
||||
return;
|
||||
}
|
||||
|
||||
dpy = priv->display->xdisplay;
|
||||
root = DefaultRootWindow (dpy);
|
||||
|
||||
priv->xbarrier = XFixesCreatePointerBarrier (dpy, root,
|
||||
priv->x1, priv->y1,
|
||||
priv->x2, priv->y2,
|
||||
priv->directions, 0, NULL);
|
||||
|
||||
/* Take a ref that we'll release when the XID dies inside destroy(),
|
||||
* so that the object stays alive and doesn't get GC'd. */
|
||||
g_object_ref (barrier);
|
||||
|
||||
g_hash_table_insert (priv->display->xids, &priv->xbarrier, barrier);
|
||||
|
||||
G_OBJECT_CLASS (meta_barrier_parent_class)->constructed (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_barrier_class_init (MetaBarrierClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->get_property = meta_barrier_get_property;
|
||||
object_class->set_property = meta_barrier_set_property;
|
||||
object_class->dispose = meta_barrier_dispose;
|
||||
object_class->constructed = meta_barrier_constructed;
|
||||
|
||||
obj_props[PROP_DISPLAY] =
|
||||
g_param_spec_object ("display",
|
||||
"Display",
|
||||
"The display to construct the pointer barrier on",
|
||||
META_TYPE_DISPLAY,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
obj_props[PROP_X1] =
|
||||
g_param_spec_int ("x1",
|
||||
"X1",
|
||||
"The first X coordinate of the barrier",
|
||||
0, G_MAXSHORT, 0,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
obj_props[PROP_Y1] =
|
||||
g_param_spec_int ("y1",
|
||||
"Y1",
|
||||
"The first Y coordinate of the barrier",
|
||||
0, G_MAXSHORT, 0,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
obj_props[PROP_X2] =
|
||||
g_param_spec_int ("x2",
|
||||
"X2",
|
||||
"The second X coordinate of the barrier",
|
||||
0, G_MAXSHORT, G_MAXSHORT,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
obj_props[PROP_Y2] =
|
||||
g_param_spec_int ("y2",
|
||||
"Y2",
|
||||
"The second Y coordinate of the barrier",
|
||||
0, G_MAXSHORT, G_MAXSHORT,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
obj_props[PROP_DIRECTIONS] =
|
||||
g_param_spec_flags ("directions",
|
||||
"Directions",
|
||||
"A set of directions to let the pointer through",
|
||||
META_TYPE_BARRIER_DIRECTION,
|
||||
0,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
g_object_class_install_properties (object_class, PROP_LAST, obj_props);
|
||||
|
||||
/**
|
||||
* MetaBarrier::hit:
|
||||
* @barrier: The #MetaBarrier that was hit
|
||||
* @event: A #MetaBarrierEvent that has the details of how
|
||||
* the barrier was hit.
|
||||
*
|
||||
* When a pointer barrier is hit, this will trigger. This
|
||||
* requires an XI2-enabled server.
|
||||
*/
|
||||
obj_signals[HIT] =
|
||||
g_signal_new ("hit",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_BARRIER_EVENT);
|
||||
|
||||
/**
|
||||
* MetaBarrier::left:
|
||||
* @barrier: The #MetaBarrier that was left
|
||||
* @event: A #MetaBarrierEvent that has the details of how
|
||||
* the barrier was left.
|
||||
*
|
||||
* When a pointer barrier hitbox was left, this will trigger.
|
||||
* This requires an XI2-enabled server.
|
||||
*/
|
||||
obj_signals[LEFT] =
|
||||
g_signal_new ("left",
|
||||
G_TYPE_FROM_CLASS (object_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
0,
|
||||
NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 1,
|
||||
META_TYPE_BARRIER_EVENT);
|
||||
|
||||
g_type_class_add_private (object_class, sizeof(MetaBarrierPrivate));
|
||||
}
|
||||
|
||||
void
|
||||
meta_barrier_destroy (MetaBarrier *barrier)
|
||||
{
|
||||
MetaBarrierPrivate *priv = barrier->priv;
|
||||
Display *dpy;
|
||||
|
||||
if (priv->display == NULL)
|
||||
return;
|
||||
|
||||
dpy = priv->display->xdisplay;
|
||||
|
||||
if (!meta_barrier_is_active (barrier))
|
||||
return;
|
||||
|
||||
XFixesDestroyPointerBarrier (dpy, priv->xbarrier);
|
||||
g_hash_table_remove (priv->display->xids, &priv->xbarrier);
|
||||
priv->xbarrier = 0;
|
||||
|
||||
g_object_unref (barrier);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_barrier_init (MetaBarrier *barrier)
|
||||
{
|
||||
barrier->priv = G_TYPE_INSTANCE_GET_PRIVATE (barrier, META_TYPE_BARRIER, MetaBarrierPrivate);
|
||||
}
|
||||
|
||||
#ifdef HAVE_XI23
|
||||
static void
|
||||
meta_barrier_fire_event (MetaBarrier *barrier,
|
||||
XIBarrierEvent *xevent)
|
||||
{
|
||||
MetaBarrierEvent *event = g_slice_new0 (MetaBarrierEvent);
|
||||
|
||||
event->ref_count = 1;
|
||||
event->event_id = xevent->eventid;
|
||||
event->time = xevent->time;
|
||||
event->dt = xevent->dtime;
|
||||
|
||||
event->x = xevent->root_x;
|
||||
event->y = xevent->root_y;
|
||||
event->dx = xevent->dx;
|
||||
event->dy = xevent->dy;
|
||||
|
||||
event->released = (xevent->flags & XIBarrierPointerReleased) != 0;
|
||||
event->grabbed = (xevent->flags & XIBarrierDeviceIsGrabbed) != 0;
|
||||
|
||||
switch (xevent->evtype)
|
||||
{
|
||||
case XI_BarrierHit:
|
||||
g_signal_emit (barrier, obj_signals[HIT], 0, event);
|
||||
break;
|
||||
case XI_BarrierLeave:
|
||||
g_signal_emit (barrier, obj_signals[LEFT], 0, event);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_display_process_barrier_event (MetaDisplay *display,
|
||||
XIBarrierEvent *xev)
|
||||
{
|
||||
MetaBarrier *barrier;
|
||||
|
||||
barrier = g_hash_table_lookup (display->xids, &xev->barrier);
|
||||
if (barrier != NULL)
|
||||
{
|
||||
meta_barrier_fire_event (barrier, xev);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
#endif /* HAVE_XI23 */
|
||||
|
||||
static MetaBarrierEvent *
|
||||
meta_barrier_event_ref (MetaBarrierEvent *event)
|
||||
{
|
||||
g_return_val_if_fail (event != NULL, NULL);
|
||||
g_return_val_if_fail (event->ref_count > 0, NULL);
|
||||
|
||||
g_atomic_int_inc ((volatile int *)&event->ref_count);
|
||||
return event;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_barrier_event_unref (MetaBarrierEvent *event)
|
||||
{
|
||||
g_return_if_fail (event != NULL);
|
||||
g_return_if_fail (event->ref_count > 0);
|
||||
|
||||
if (g_atomic_int_dec_and_test ((volatile int *)&event->ref_count))
|
||||
g_slice_free (MetaBarrierEvent, event);
|
||||
}
|
||||
|
||||
G_DEFINE_BOXED_TYPE (MetaBarrierEvent,
|
||||
meta_barrier_event,
|
||||
meta_barrier_event_ref,
|
||||
meta_barrier_event_unref)
|
@ -775,3 +775,24 @@ meta_invalidate_default_icons (void)
|
||||
g_slist_free (windows);
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_add_old_event_mask (Display *xdisplay,
|
||||
Window xwindow,
|
||||
XIEventMask *mask)
|
||||
{
|
||||
XIEventMask *prev;
|
||||
gint n_masks, i, j;
|
||||
|
||||
prev = XIGetSelectedEvents (xdisplay, xwindow, &n_masks);
|
||||
|
||||
for (i = 0; i < n_masks; i++)
|
||||
{
|
||||
if (prev[i].deviceid != XIAllMasterDevices)
|
||||
continue;
|
||||
|
||||
for (j = 0; j < MIN (mask->mask_len, prev[i].mask_len); j++)
|
||||
mask->mask[j] |= prev[i].mask[j];
|
||||
}
|
||||
|
||||
XFree (prev);
|
||||
}
|
||||
|
@ -205,8 +205,8 @@ void meta_core_increment_event_serial (Display *display);
|
||||
|
||||
void meta_invalidate_default_icons (void);
|
||||
|
||||
void meta_core_add_old_event_mask (Display *xdisplay,
|
||||
Window xwindow,
|
||||
XIEventMask *mask);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include <meta/display.h>
|
||||
#include "keybindings-private.h"
|
||||
#include <meta/prefs.h>
|
||||
#include <meta/barrier.h>
|
||||
|
||||
#ifdef HAVE_STARTUP_NOTIFICATION
|
||||
#include <libsn/sn.h>
|
||||
@ -145,7 +146,7 @@ struct _MetaDisplay
|
||||
MetaEventQueue *events;
|
||||
GSList *screens;
|
||||
MetaScreen *active_screen;
|
||||
GHashTable *window_ids;
|
||||
GHashTable *xids;
|
||||
int error_traps;
|
||||
int (* error_trap_handler) (Display *display,
|
||||
XErrorEvent *error);
|
||||
@ -223,8 +224,7 @@ struct _MetaDisplay
|
||||
guint32 last_bell_time;
|
||||
#endif
|
||||
#ifdef HAVE_XSYNC
|
||||
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
|
||||
XSyncAlarm grab_sync_request_alarm;
|
||||
gint64 grab_sync_counter_wait_serial;
|
||||
#endif
|
||||
int grab_resize_timeout_id;
|
||||
|
||||
@ -315,10 +315,14 @@ struct _MetaDisplay
|
||||
#define META_DISPLAY_HAS_RENDER(display) ((display)->have_render)
|
||||
unsigned int have_composite : 1;
|
||||
unsigned int have_damage : 1;
|
||||
unsigned int have_xfixes : 1;
|
||||
#define META_DISPLAY_HAS_COMPOSITE(display) ((display)->have_composite)
|
||||
#define META_DISPLAY_HAS_DAMAGE(display) ((display)->have_damage)
|
||||
#define META_DISPLAY_HAS_XFIXES(display) ((display)->have_xfixes)
|
||||
#ifdef HAVE_XI23
|
||||
gboolean have_xinput_23 : 1;
|
||||
#define META_DISPLAY_HAS_XINPUT_23(display) ((display)->have_xinput_23)
|
||||
#else
|
||||
#define META_DISPLAY_HAS_XINPUT_23(display) FALSE
|
||||
#endif /* HAVE_XI23 */
|
||||
};
|
||||
|
||||
struct _MetaDisplayClass
|
||||
@ -370,6 +374,16 @@ void meta_display_register_x_window (MetaDisplay *display,
|
||||
void meta_display_unregister_x_window (MetaDisplay *display,
|
||||
Window xwindow);
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
MetaWindow* meta_display_lookup_sync_alarm (MetaDisplay *display,
|
||||
XSyncAlarm alarm);
|
||||
void meta_display_register_sync_alarm (MetaDisplay *display,
|
||||
XSyncAlarm *alarmp,
|
||||
MetaWindow *window);
|
||||
void meta_display_unregister_sync_alarm (MetaDisplay *display,
|
||||
XSyncAlarm alarm);
|
||||
#endif /* HAVE_XSYNC */
|
||||
|
||||
void meta_display_notify_window_created (MetaDisplay *display,
|
||||
MetaWindow *window);
|
||||
|
||||
@ -451,4 +465,9 @@ void meta_display_overlay_key_activate (MetaDisplay *display);
|
||||
/* In above-tab-keycode.c */
|
||||
guint meta_display_get_above_tab_keycode (MetaDisplay *display);
|
||||
|
||||
#ifdef HAVE_XI23
|
||||
gboolean meta_display_process_barrier_event (MetaDisplay *display,
|
||||
XIBarrierEvent *event);
|
||||
#endif /* HAVE_XI23 */
|
||||
|
||||
#endif
|
||||
|
@ -381,20 +381,17 @@ sn_error_trap_pop (SnDisplay *sn_display,
|
||||
#endif
|
||||
|
||||
static void
|
||||
enable_compositor (MetaDisplay *display,
|
||||
gboolean composite_windows)
|
||||
enable_compositor (MetaDisplay *display)
|
||||
{
|
||||
GSList *list;
|
||||
|
||||
if (!META_DISPLAY_HAS_COMPOSITE (display) ||
|
||||
!META_DISPLAY_HAS_DAMAGE (display) ||
|
||||
!META_DISPLAY_HAS_XFIXES (display) ||
|
||||
!META_DISPLAY_HAS_RENDER (display))
|
||||
{
|
||||
meta_warning (_("Missing %s extension required for compositing"),
|
||||
!META_DISPLAY_HAS_COMPOSITE (display) ? "composite" :
|
||||
!META_DISPLAY_HAS_DAMAGE (display) ? "damage" :
|
||||
!META_DISPLAY_HAS_XFIXES (display) ? "xfixes" : "render");
|
||||
!META_DISPLAY_HAS_DAMAGE (display) ? "damage" : "render");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -410,9 +407,6 @@ enable_compositor (MetaDisplay *display,
|
||||
|
||||
meta_compositor_manage_screen (screen->display->compositor,
|
||||
screen);
|
||||
|
||||
if (composite_windows)
|
||||
meta_screen_composite_all_windows (screen);
|
||||
}
|
||||
}
|
||||
|
||||
@ -531,10 +525,6 @@ meta_display_open (void)
|
||||
the_display->allow_terminal_deactivation = TRUE; /* Only relevant for when a
|
||||
terminal has the focus */
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
the_display->grab_sync_request_alarm = None;
|
||||
#endif
|
||||
|
||||
/* FIXME copy the checks from GDK probably */
|
||||
the_display->static_gravity_works = g_getenv ("MUTTER_USE_STATIC_GRAVITY") != NULL;
|
||||
|
||||
@ -590,9 +580,9 @@ meta_display_open (void)
|
||||
event_callback,
|
||||
the_display);
|
||||
|
||||
the_display->window_ids = g_hash_table_new (meta_unsigned_long_hash,
|
||||
meta_unsigned_long_equal);
|
||||
|
||||
the_display->xids = g_hash_table_new (meta_unsigned_long_hash,
|
||||
meta_unsigned_long_equal);
|
||||
|
||||
i = 0;
|
||||
while (i < N_IGNORED_CROSSING_SERIALS)
|
||||
{
|
||||
@ -643,8 +633,11 @@ meta_display_open (void)
|
||||
the_display->xsync_event_base = 0;
|
||||
}
|
||||
else
|
||||
the_display->have_xsync = TRUE;
|
||||
|
||||
{
|
||||
the_display->have_xsync = TRUE;
|
||||
XSyncSetPriority (the_display->xdisplay, None, 10);
|
||||
}
|
||||
|
||||
meta_verbose ("Attempted to init Xsync, found version %d.%d error base %d event base %d\n",
|
||||
major, minor,
|
||||
the_display->xsync_error_base,
|
||||
@ -757,20 +750,24 @@ meta_display_open (void)
|
||||
the_display->damage_error_base,
|
||||
the_display->damage_event_base);
|
||||
|
||||
the_display->have_xfixes = FALSE;
|
||||
|
||||
the_display->xfixes_error_base = 0;
|
||||
the_display->xfixes_event_base = 0;
|
||||
|
||||
if (!XFixesQueryExtension (the_display->xdisplay,
|
||||
&the_display->xfixes_event_base,
|
||||
&the_display->xfixes_error_base))
|
||||
if (XFixesQueryExtension (the_display->xdisplay,
|
||||
&the_display->xfixes_event_base,
|
||||
&the_display->xfixes_error_base))
|
||||
{
|
||||
the_display->xfixes_error_base = 0;
|
||||
the_display->xfixes_event_base = 0;
|
||||
}
|
||||
int xfixes_major, xfixes_minor;
|
||||
|
||||
XFixesQueryVersion (the_display->xdisplay, &xfixes_major, &xfixes_minor);
|
||||
|
||||
if (xfixes_major * 100 + xfixes_minor < 500)
|
||||
meta_fatal ("Mutter requires XFixes 5.0");
|
||||
}
|
||||
else
|
||||
the_display->have_xfixes = TRUE;
|
||||
{
|
||||
meta_fatal ("Mutter requires XFixes 5.0");
|
||||
}
|
||||
|
||||
meta_verbose ("Attempted to init XFixes, found error base %d event base %d\n",
|
||||
the_display->xfixes_error_base,
|
||||
@ -778,7 +775,7 @@ meta_display_open (void)
|
||||
}
|
||||
|
||||
{
|
||||
int major = 2, minor = 2;
|
||||
int major = 2, minor = 3;
|
||||
gboolean has_xi = FALSE;
|
||||
|
||||
if (XQueryExtension (the_display->xdisplay,
|
||||
@ -788,8 +785,16 @@ meta_display_open (void)
|
||||
&the_display->xinput_event_base))
|
||||
{
|
||||
if (XIQueryVersion (the_display->xdisplay, &major, &minor) == Success)
|
||||
if (((major * 10) + minor) >= 22)
|
||||
has_xi = TRUE;
|
||||
{
|
||||
int version = (major * 10) + minor;
|
||||
if (version >= 22)
|
||||
has_xi = TRUE;
|
||||
|
||||
#ifdef HAVE_XI23
|
||||
if (version >= 23)
|
||||
the_display->have_xinput_23 = TRUE;
|
||||
#endif /* HAVE_XI23 */
|
||||
}
|
||||
}
|
||||
|
||||
if (!has_xi)
|
||||
@ -896,10 +901,7 @@ meta_display_open (void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* We don't composite the windows here because they will be composited
|
||||
faster with the call to meta_screen_manage_all_windows further down
|
||||
the code */
|
||||
enable_compositor (the_display, FALSE);
|
||||
enable_compositor (the_display);
|
||||
|
||||
meta_display_grab (the_display);
|
||||
|
||||
@ -994,11 +996,14 @@ meta_display_list_windows (MetaDisplay *display,
|
||||
|
||||
winlist = NULL;
|
||||
|
||||
g_hash_table_iter_init (&iter, display->window_ids);
|
||||
g_hash_table_iter_init (&iter, display->xids);
|
||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
{
|
||||
MetaWindow *window = value;
|
||||
|
||||
if (!META_IS_WINDOW (window))
|
||||
continue;
|
||||
|
||||
if (!window->override_redirect ||
|
||||
(flags & META_LIST_INCLUDE_OVERRIDE_REDIRECT) != 0)
|
||||
winlist = g_slist_prepend (winlist, window);
|
||||
@ -1101,7 +1106,7 @@ meta_display_close (MetaDisplay *display,
|
||||
/* Must be after all calls to meta_window_unmanage() since they
|
||||
* unregister windows
|
||||
*/
|
||||
g_hash_table_destroy (display->window_ids);
|
||||
g_hash_table_destroy (display->xids);
|
||||
|
||||
if (display->leader_window != None)
|
||||
XDestroyWindow (display->xdisplay, display->leader_window);
|
||||
@ -1830,6 +1835,14 @@ get_input_event (MetaDisplay *display,
|
||||
case XI_Leave:
|
||||
if (((XIEnterEvent *) input_event)->deviceid == META_VIRTUAL_CORE_POINTER_ID)
|
||||
return input_event;
|
||||
break;
|
||||
#ifdef HAVE_XI23
|
||||
case XI_BarrierHit:
|
||||
case XI_BarrierLeave:
|
||||
if (((XIBarrierEvent *) input_event)->deviceid == META_VIRTUAL_CORE_POINTER_ID)
|
||||
return input_event;
|
||||
break;
|
||||
#endif /* HAVE_XI23 */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1939,15 +1952,20 @@ event_callback (XEvent *event,
|
||||
}
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
if (META_DISPLAY_HAS_XSYNC (display) &&
|
||||
event->type == (display->xsync_event_base + XSyncAlarmNotify) &&
|
||||
((XSyncAlarmNotifyEvent*)event)->alarm == display->grab_sync_request_alarm)
|
||||
if (META_DISPLAY_HAS_XSYNC (display) &&
|
||||
event->type == (display->xsync_event_base + XSyncAlarmNotify))
|
||||
{
|
||||
XSyncValue value = ((XSyncAlarmNotifyEvent*)event)->counter_value;
|
||||
guint64 new_counter_value;
|
||||
new_counter_value = XSyncValueLow32 (value) + ((gint64)XSyncValueHigh32 (value) << 32);
|
||||
meta_window_update_sync_request_counter (display->grab_window, new_counter_value);
|
||||
filter_out_event = TRUE; /* GTK doesn't want to see this really */
|
||||
MetaWindow *alarm_window = meta_display_lookup_sync_alarm (display,
|
||||
((XSyncAlarmNotifyEvent*)event)->alarm);
|
||||
|
||||
if (alarm_window != NULL)
|
||||
{
|
||||
XSyncValue value = ((XSyncAlarmNotifyEvent*)event)->counter_value;
|
||||
gint64 new_counter_value;
|
||||
new_counter_value = XSyncValueLow32 (value) + ((gint64)XSyncValueHigh32 (value) << 32);
|
||||
meta_window_update_sync_request_counter (alarm_window, new_counter_value);
|
||||
filter_out_event = TRUE; /* GTK doesn't want to see this really */
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_XSYNC */
|
||||
|
||||
@ -2073,7 +2091,7 @@ event_callback (XEvent *event,
|
||||
display->grab_old_window_stacking);
|
||||
}
|
||||
meta_display_end_grab_op (display,
|
||||
device_event->detail);
|
||||
device_event->time);
|
||||
}
|
||||
else if (window && display->grab_op == META_GRAB_OP_NONE)
|
||||
{
|
||||
@ -2393,6 +2411,13 @@ event_callback (XEvent *event,
|
||||
|
||||
}
|
||||
break;
|
||||
#ifdef HAVE_XI23
|
||||
case XI_BarrierHit:
|
||||
case XI_BarrierLeave:
|
||||
if (meta_display_process_barrier_event (display, (XIBarrierEvent *) input_event))
|
||||
filter_out_event = bypass_compositor = TRUE;
|
||||
break;
|
||||
#endif /* HAVE_XI23 */
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -2924,6 +2949,11 @@ event_get_modified_window (MetaDisplay *display,
|
||||
case XI_Enter:
|
||||
case XI_Leave:
|
||||
return ((XIEnterEvent *) input_event)->event;
|
||||
#ifdef HAVE_XI23
|
||||
case XI_BarrierHit:
|
||||
case XI_BarrierLeave:
|
||||
return ((XIBarrierEvent *) input_event)->event;
|
||||
#endif /* HAVE_XI23 */
|
||||
}
|
||||
}
|
||||
|
||||
@ -3168,7 +3198,7 @@ meta_spew_xi2_event (MetaDisplay *display,
|
||||
char *extra = NULL;
|
||||
|
||||
XIDeviceEvent *device_event = (XIDeviceEvent *) input_event;
|
||||
XIEnterEvent *enter_event = (XIEnterEvent *) enter_event;
|
||||
XIEnterEvent *enter_event = (XIEnterEvent *) input_event;
|
||||
|
||||
switch (input_event->evtype)
|
||||
{
|
||||
@ -3199,6 +3229,14 @@ meta_spew_xi2_event (MetaDisplay *display,
|
||||
case XI_Leave:
|
||||
name = "XI_Leave";
|
||||
break;
|
||||
#ifdef HAVE_XI23
|
||||
case XI_BarrierHit:
|
||||
name = "XI_BarrierHit";
|
||||
break;
|
||||
case XI_BarrierLeave:
|
||||
name = "XI_BarrierLeave";
|
||||
break;
|
||||
#endif /* HAVE_XI23 */
|
||||
}
|
||||
|
||||
switch (input_event->evtype)
|
||||
@ -3530,7 +3568,7 @@ MetaWindow*
|
||||
meta_display_lookup_x_window (MetaDisplay *display,
|
||||
Window xwindow)
|
||||
{
|
||||
return g_hash_table_lookup (display->window_ids, &xwindow);
|
||||
return g_hash_table_lookup (display->xids, &xwindow);
|
||||
}
|
||||
|
||||
void
|
||||
@ -3538,23 +3576,56 @@ meta_display_register_x_window (MetaDisplay *display,
|
||||
Window *xwindowp,
|
||||
MetaWindow *window)
|
||||
{
|
||||
g_return_if_fail (g_hash_table_lookup (display->window_ids, xwindowp) == NULL);
|
||||
g_return_if_fail (g_hash_table_lookup (display->xids, xwindowp) == NULL);
|
||||
|
||||
g_hash_table_insert (display->window_ids, xwindowp, window);
|
||||
g_hash_table_insert (display->xids, xwindowp, window);
|
||||
}
|
||||
|
||||
void
|
||||
meta_display_unregister_x_window (MetaDisplay *display,
|
||||
Window xwindow)
|
||||
{
|
||||
g_return_if_fail (g_hash_table_lookup (display->window_ids, &xwindow) != NULL);
|
||||
g_return_if_fail (g_hash_table_lookup (display->xids, &xwindow) != NULL);
|
||||
|
||||
g_hash_table_remove (display->window_ids, &xwindow);
|
||||
g_hash_table_remove (display->xids, &xwindow);
|
||||
|
||||
/* Remove any pending pings */
|
||||
remove_pending_pings_for_window (display, xwindow);
|
||||
}
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
/* We store sync alarms in the window ID hash table, because they are
|
||||
* just more types of XIDs in the same global space, but we have
|
||||
* typesafe functions to register/unregister for readability.
|
||||
*/
|
||||
|
||||
MetaWindow*
|
||||
meta_display_lookup_sync_alarm (MetaDisplay *display,
|
||||
XSyncAlarm alarm)
|
||||
{
|
||||
return g_hash_table_lookup (display->xids, &alarm);
|
||||
}
|
||||
|
||||
void
|
||||
meta_display_register_sync_alarm (MetaDisplay *display,
|
||||
XSyncAlarm *alarmp,
|
||||
MetaWindow *window)
|
||||
{
|
||||
g_return_if_fail (g_hash_table_lookup (display->xids, alarmp) == NULL);
|
||||
|
||||
g_hash_table_insert (display->xids, alarmp, window);
|
||||
}
|
||||
|
||||
void
|
||||
meta_display_unregister_sync_alarm (MetaDisplay *display,
|
||||
XSyncAlarm alarm)
|
||||
{
|
||||
g_return_if_fail (g_hash_table_lookup (display->xids, &alarm) != NULL);
|
||||
|
||||
g_hash_table_remove (display->xids, &alarm);
|
||||
}
|
||||
#endif /* HAVE_XSYNC */
|
||||
|
||||
void
|
||||
meta_display_notify_window_created (MetaDisplay *display,
|
||||
MetaWindow *window)
|
||||
@ -3868,7 +3939,6 @@ meta_display_begin_grab_op (MetaDisplay *display,
|
||||
display->grab_motion_notify_time = 0;
|
||||
display->grab_old_window_stacking = NULL;
|
||||
#ifdef HAVE_XSYNC
|
||||
display->grab_sync_request_alarm = None;
|
||||
display->grab_last_user_action_was_snap = FALSE;
|
||||
#endif
|
||||
display->grab_frame_action = frame_action;
|
||||
@ -3889,55 +3959,11 @@ meta_display_begin_grab_op (MetaDisplay *display,
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
if ( meta_grab_op_is_resizing (display->grab_op) &&
|
||||
display->grab_window->sync_request_counter != None)
|
||||
display->grab_window->sync_request_counter != None)
|
||||
{
|
||||
XSyncAlarmAttributes values;
|
||||
XSyncValue init;
|
||||
|
||||
meta_error_trap_push_with_return (display);
|
||||
|
||||
/* Set the counter to 0, so we know that the application's
|
||||
* responses to the client messages will always trigger
|
||||
* a PositiveTransition
|
||||
*/
|
||||
|
||||
XSyncIntToValue (&init, 0);
|
||||
XSyncSetCounter (display->xdisplay,
|
||||
display->grab_window->sync_request_counter, init);
|
||||
|
||||
display->grab_window->sync_request_serial = 0;
|
||||
display->grab_window->sync_request_time.tv_sec = 0;
|
||||
display->grab_window->sync_request_time.tv_usec = 0;
|
||||
|
||||
values.trigger.counter = display->grab_window->sync_request_counter;
|
||||
values.trigger.value_type = XSyncAbsolute;
|
||||
values.trigger.test_type = XSyncPositiveTransition;
|
||||
XSyncIntToValue (&values.trigger.wait_value,
|
||||
display->grab_window->sync_request_serial + 1);
|
||||
|
||||
/* After triggering, increment test_value by this.
|
||||
* (NOT wait_value above)
|
||||
*/
|
||||
XSyncIntToValue (&values.delta, 1);
|
||||
|
||||
/* we want events (on by default anyway) */
|
||||
values.events = True;
|
||||
|
||||
display->grab_sync_request_alarm = XSyncCreateAlarm (display->xdisplay,
|
||||
XSyncCACounter |
|
||||
XSyncCAValueType |
|
||||
XSyncCAValue |
|
||||
XSyncCATestType |
|
||||
XSyncCADelta |
|
||||
XSyncCAEvents,
|
||||
&values);
|
||||
|
||||
if (meta_error_trap_pop_with_return (display) != Success)
|
||||
display->grab_sync_request_alarm = None;
|
||||
|
||||
meta_topic (META_DEBUG_RESIZING,
|
||||
"Created update alarm 0x%lx\n",
|
||||
display->grab_sync_request_alarm);
|
||||
meta_window_create_sync_request_alarm (display->grab_window);
|
||||
window->sync_request_time.tv_sec = 0;
|
||||
window->sync_request_time.tv_usec = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -4050,14 +4076,6 @@ meta_display_end_grab_op (MetaDisplay *display,
|
||||
meta_screen_ungrab_all_keys (display->grab_screen, timestamp);
|
||||
}
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
if (display->grab_sync_request_alarm != None)
|
||||
{
|
||||
XSyncDestroyAlarm (display->xdisplay,
|
||||
display->grab_sync_request_alarm);
|
||||
display->grab_sync_request_alarm = None;
|
||||
}
|
||||
#endif /* HAVE_XSYNC */
|
||||
|
||||
display->grab_timestamp = 0;
|
||||
display->grab_window = NULL;
|
||||
@ -4877,25 +4895,13 @@ meta_display_get_tab_list (MetaDisplay *display,
|
||||
|
||||
mru_list = workspace ? workspace->mru_list : global_mru_list;
|
||||
|
||||
/* Windows sellout mode - MRU order. Collect unminimized windows
|
||||
* then minimized so minimized windows aren't in the way so much.
|
||||
/* Windows sellout mode - MRU order.
|
||||
*/
|
||||
for (tmp = mru_list; tmp; tmp = tmp->next)
|
||||
{
|
||||
MetaWindow *window = tmp->data;
|
||||
|
||||
if (!window->minimized &&
|
||||
window->screen == screen &&
|
||||
IN_TAB_CHAIN (window, type))
|
||||
tab_list = g_list_prepend (tab_list, window);
|
||||
}
|
||||
|
||||
for (tmp = mru_list; tmp; tmp = tmp->next)
|
||||
{
|
||||
MetaWindow *window = tmp->data;
|
||||
|
||||
if (window->minimized &&
|
||||
window->screen == screen &&
|
||||
if (window->screen == screen &&
|
||||
IN_TAB_CHAIN (window, type))
|
||||
tab_list = g_list_prepend (tab_list, window);
|
||||
}
|
||||
@ -5684,6 +5690,23 @@ meta_display_get_xinput_opcode (MetaDisplay *display)
|
||||
return display->xinput_opcode;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_supports_extended_barriers:
|
||||
* @display: a #MetaDisplay
|
||||
*
|
||||
* Returns whether the X server supports extended barrier
|
||||
* features as defined in version 2.3 of the XInput 2
|
||||
* specification.
|
||||
*
|
||||
* Clients should use this method to determine whether their
|
||||
* interfaces should depend on new barrier features.
|
||||
*/
|
||||
gboolean
|
||||
meta_display_supports_extended_barriers (MetaDisplay *display)
|
||||
{
|
||||
return META_DISPLAY_HAS_XINPUT_23 (display);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_display_get_xdisplay: (skip)
|
||||
*
|
||||
|
@ -1815,6 +1815,8 @@ update_binding (MetaKeyPref *binding,
|
||||
binding->name, keysym, keycode, mods);
|
||||
}
|
||||
|
||||
binding->bindings = g_slist_reverse (binding->bindings);
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
|
@ -241,8 +241,6 @@ void meta_screen_update_showing_desktop_hint (MetaScreen *screen);
|
||||
|
||||
gboolean meta_screen_apply_startup_properties (MetaScreen *screen,
|
||||
MetaWindow *window);
|
||||
void meta_screen_composite_all_windows (MetaScreen *screen);
|
||||
|
||||
void meta_screen_restacked (MetaScreen *screen);
|
||||
|
||||
void meta_screen_workspace_switched (MetaScreen *screen,
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "xprops.h"
|
||||
#include <meta/compositor.h>
|
||||
#include "mutter-enum-types.h"
|
||||
#include "core.h"
|
||||
|
||||
#include <X11/extensions/Xinerama.h>
|
||||
|
||||
@ -580,7 +581,10 @@ reload_monitor_infos (MetaScreen *screen)
|
||||
/* The guard window allows us to leave minimized windows mapped so
|
||||
* that compositor code may provide live previews of them.
|
||||
* Instead of being unmapped/withdrawn, they get pushed underneath
|
||||
* the guard window. */
|
||||
* the guard window. We also select events on the guard window, which
|
||||
* should effectively be forwarded to events on the background actor,
|
||||
* providing that the scene graph is set up correctly.
|
||||
*/
|
||||
static Window
|
||||
create_guard_window (Display *xdisplay, MetaScreen *screen)
|
||||
{
|
||||
@ -608,6 +612,17 @@ create_guard_window (Display *xdisplay, MetaScreen *screen)
|
||||
CopyFromParent, /* visual */
|
||||
CWEventMask|CWOverrideRedirect|CWBackPixel,
|
||||
&attributes);
|
||||
|
||||
{
|
||||
unsigned char mask_bits[XIMaskLen (XI_LASTEVENT)] = { 0 };
|
||||
XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits };
|
||||
|
||||
XISetMask (mask.mask, XI_ButtonPress);
|
||||
XISetMask (mask.mask, XI_ButtonRelease);
|
||||
XISetMask (mask.mask, XI_Motion);
|
||||
XISelectEvents (xdisplay, guard_window, &mask, 1);
|
||||
}
|
||||
|
||||
meta_stack_tracker_record_add (screen->stack_tracker,
|
||||
guard_window,
|
||||
create_serial);
|
||||
@ -748,6 +763,8 @@ meta_screen_new (MetaDisplay *display,
|
||||
XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits };
|
||||
XWindowAttributes attr;
|
||||
|
||||
meta_core_add_old_event_mask (xdisplay, xroot, &mask);
|
||||
|
||||
XISetMask (mask.mask, XI_KeyPress);
|
||||
XISetMask (mask.mask, XI_KeyRelease);
|
||||
XISetMask (mask.mask, XI_Enter);
|
||||
@ -755,6 +772,13 @@ meta_screen_new (MetaDisplay *display,
|
||||
XISetMask (mask.mask, XI_FocusIn);
|
||||
XISetMask (mask.mask, XI_FocusOut);
|
||||
XISetMask (mask.mask, XI_Motion);
|
||||
#ifdef HAVE_XI23
|
||||
if (META_DISPLAY_HAS_XINPUT_23 (display))
|
||||
{
|
||||
XISetMask (mask.mask, XI_BarrierHit);
|
||||
XISetMask (mask.mask, XI_BarrierLeave);
|
||||
}
|
||||
#endif /* HAVE_XI23 */
|
||||
XISelectEvents (xdisplay, xroot, &mask, 1);
|
||||
|
||||
event_mask = (SubstructureRedirectMask | SubstructureNotifyMask |
|
||||
@ -1059,34 +1083,6 @@ meta_screen_manage_all_windows (MetaScreen *screen)
|
||||
meta_display_ungrab (screen->display);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_composite_all_windows (MetaScreen *screen)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
GSList *windows, *tmp;
|
||||
|
||||
display = screen->display;
|
||||
if (!display->compositor)
|
||||
return;
|
||||
|
||||
windows = meta_display_list_windows (display,
|
||||
META_LIST_INCLUDE_OVERRIDE_REDIRECT);
|
||||
for (tmp = windows; tmp != NULL; tmp = tmp->next)
|
||||
{
|
||||
MetaWindow *window = tmp->data;
|
||||
|
||||
meta_compositor_add_window (display->compositor, window);
|
||||
if (window->visible_to_compositor)
|
||||
meta_compositor_show_window (display->compositor, window,
|
||||
META_COMP_EFFECT_NONE);
|
||||
}
|
||||
|
||||
g_slist_free (windows);
|
||||
|
||||
/* initialize the compositor's view of the stacking order */
|
||||
meta_stack_tracker_sync_stack (screen->stack_tracker);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_screen_for_x_screen:
|
||||
* @xscreen: an X screen structure.
|
||||
@ -1210,7 +1206,7 @@ meta_screen_foreach_window (MetaScreen *screen,
|
||||
*/
|
||||
|
||||
winlist = NULL;
|
||||
g_hash_table_foreach (screen->display->window_ids,
|
||||
g_hash_table_foreach (screen->display->xids,
|
||||
listify_func,
|
||||
&winlist);
|
||||
|
||||
@ -1227,7 +1223,9 @@ meta_screen_foreach_window (MetaScreen *screen,
|
||||
{
|
||||
MetaWindow *window = tmp->data;
|
||||
|
||||
if (window->screen == screen && !window->override_redirect)
|
||||
if (META_IS_WINDOW (window) &&
|
||||
window->screen == screen &&
|
||||
!window->override_redirect)
|
||||
(* func) (screen, window, data);
|
||||
}
|
||||
|
||||
@ -2040,6 +2038,14 @@ meta_screen_get_monitor_for_window (MetaScreen *screen,
|
||||
return meta_screen_get_monitor_for_rect (screen, &window_rect);
|
||||
}
|
||||
|
||||
int
|
||||
meta_screen_get_monitor_index_for_rect (MetaScreen *screen,
|
||||
MetaRectangle *rect)
|
||||
{
|
||||
const MetaMonitorInfo *monitor = meta_screen_get_monitor_for_rect (screen, rect);
|
||||
return monitor->number;
|
||||
}
|
||||
|
||||
const MetaMonitorInfo*
|
||||
meta_screen_get_monitor_neighbor (MetaScreen *screen,
|
||||
int which_monitor,
|
||||
@ -2960,7 +2966,7 @@ meta_screen_resize (MetaScreen *screen,
|
||||
|
||||
/* Fix up monitor for all windows on this screen */
|
||||
windows = meta_display_list_windows (screen->display,
|
||||
META_LIST_INCLUDE_OVERRIDE_REDIRECT);
|
||||
META_LIST_DEFAULT);
|
||||
for (tmp = windows; tmp != NULL; tmp = tmp->next)
|
||||
{
|
||||
MetaWindow *window = tmp->data;
|
||||
|
@ -62,6 +62,13 @@ typedef enum {
|
||||
|
||||
#define NUMBER_OF_QUEUES 3
|
||||
|
||||
|
||||
typedef enum {
|
||||
_NET_WM_BYPASS_COMPOSITOR_HINT_AUTO = 0,
|
||||
_NET_WM_BYPASS_COMPOSITOR_HINT_ON = 1,
|
||||
_NET_WM_BYPASS_COMPOSITOR_HINT_OFF = 2,
|
||||
} MetaBypassCompositorHintValue;
|
||||
|
||||
struct _MetaWindow
|
||||
{
|
||||
GObject parent_instance;
|
||||
@ -220,6 +227,9 @@ struct _MetaWindow
|
||||
|
||||
/* whether net_wm_user_time has been set yet */
|
||||
guint net_wm_user_time_set : 1;
|
||||
|
||||
/* whether net_wm_icon_geometry has been set */
|
||||
guint icon_geometry_set : 1;
|
||||
|
||||
/* These are the flags from WM_PROTOCOLS */
|
||||
guint take_focus : 1;
|
||||
@ -333,17 +343,29 @@ struct _MetaWindow
|
||||
/* if TRUE, window is attached to its parent */
|
||||
guint attached : 1;
|
||||
|
||||
/* if TRUE, we are freezing updates during a resize */
|
||||
guint updates_frozen_for_resize : 1;
|
||||
|
||||
/* if non-NULL, the bounds of the window frame */
|
||||
cairo_region_t *frame_bounds;
|
||||
|
||||
/* if non-NULL, the opaque region _NET_WM_OPAQUE_REGION */
|
||||
cairo_region_t *opaque_region;
|
||||
|
||||
/* if TRUE, the we have the new form of sync request counter which
|
||||
* also handles application frames */
|
||||
guint extended_sync_request_counter : 1;
|
||||
|
||||
/* Note: can be NULL */
|
||||
GSList *struts;
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
/* XSync update counter */
|
||||
XSyncCounter sync_request_counter;
|
||||
guint sync_request_serial;
|
||||
gint64 sync_request_serial;
|
||||
GTimeVal sync_request_time;
|
||||
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
|
||||
XSyncAlarm sync_request_alarm;
|
||||
#endif
|
||||
|
||||
/* Number of UnmapNotify that are caused by us, if
|
||||
@ -391,6 +413,9 @@ struct _MetaWindow
|
||||
*/
|
||||
MetaRectangle user_rect;
|
||||
|
||||
/* Cached net_wm_icon_geometry */
|
||||
MetaRectangle icon_geometry;
|
||||
|
||||
/* Requested geometry */
|
||||
int border_width;
|
||||
/* x/y/w/h here get filled with ConfigureRequest values */
|
||||
@ -415,8 +440,7 @@ struct _MetaWindow
|
||||
MetaWindow *tile_match;
|
||||
|
||||
/* Bypass compositor hints */
|
||||
guint bypass_compositor : 1;
|
||||
guint dont_bypass_compositor : 1;
|
||||
guint bypass_compositor;
|
||||
};
|
||||
|
||||
struct _MetaWindowClass
|
||||
@ -587,7 +611,7 @@ void meta_window_set_gravity (MetaWindow *window,
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
void meta_window_update_sync_request_counter (MetaWindow *window,
|
||||
guint64 new_counter_value);
|
||||
gint64 new_counter_value);
|
||||
#endif /* HAVE_XSYNC */
|
||||
|
||||
void meta_window_handle_mouse_grab_op_event (MetaWindow *window,
|
||||
@ -595,14 +619,6 @@ void meta_window_handle_mouse_grab_op_event (MetaWindow *window,
|
||||
|
||||
GList* meta_window_get_workspaces (MetaWindow *window);
|
||||
|
||||
void meta_window_get_work_area_current_monitor (MetaWindow *window,
|
||||
MetaRectangle *area);
|
||||
void meta_window_get_work_area_for_monitor (MetaWindow *window,
|
||||
int which_monitor,
|
||||
MetaRectangle *area);
|
||||
void meta_window_get_work_area_all_monitors (MetaWindow *window,
|
||||
MetaRectangle *area);
|
||||
|
||||
void meta_window_get_current_tile_area (MetaWindow *window,
|
||||
MetaRectangle *tile_area);
|
||||
|
||||
@ -623,6 +639,8 @@ void meta_window_refresh_resize_popup (MetaWindow *window);
|
||||
|
||||
void meta_window_free_delete_dialog (MetaWindow *window);
|
||||
|
||||
void meta_window_create_sync_request_alarm (MetaWindow *window);
|
||||
void meta_window_destroy_sync_request_alarm (MetaWindow *window);
|
||||
|
||||
void meta_window_update_keyboard_resize (MetaWindow *window,
|
||||
gboolean update_cursor);
|
||||
@ -644,6 +662,7 @@ void meta_window_update_icon_now (MetaWindow *window);
|
||||
|
||||
void meta_window_update_role (MetaWindow *window);
|
||||
void meta_window_update_net_wm_type (MetaWindow *window);
|
||||
void meta_window_update_opaque_region (MetaWindow *window);
|
||||
void meta_window_update_for_monitors_changed (MetaWindow *window);
|
||||
void meta_window_update_on_all_workspaces (MetaWindow *window);
|
||||
|
||||
@ -655,4 +674,6 @@ gboolean meta_window_can_tile_side_by_side (MetaWindow *window);
|
||||
|
||||
void meta_window_compute_tile_match (MetaWindow *window);
|
||||
|
||||
gboolean meta_window_updates_are_frozen (MetaWindow *window);
|
||||
|
||||
#endif
|
||||
|
@ -245,6 +245,36 @@ reload_kwm_win_icon (MetaWindow *window,
|
||||
reload_icon (window, window->display->atom__KWM_WIN_ICON);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_icon_geometry (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
if (value->v.cardinal_list.n_cardinals != 4)
|
||||
{
|
||||
meta_verbose ("_NET_WM_ICON_GEOMETRY on %s has %d values instead of 4\n",
|
||||
window->desc, value->v.cardinal_list.n_cardinals);
|
||||
}
|
||||
else
|
||||
{
|
||||
MetaRectangle geometry;
|
||||
|
||||
geometry.x = (int)value->v.cardinal_list.cardinals[0];
|
||||
geometry.y = (int)value->v.cardinal_list.cardinals[1];
|
||||
geometry.width = (int)value->v.cardinal_list.cardinals[2];
|
||||
geometry.height = (int)value->v.cardinal_list.cardinals[3];
|
||||
|
||||
meta_window_set_icon_geometry (window, &geometry);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_window_set_icon_geometry (window, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
reload_struts (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
@ -490,6 +520,14 @@ reload_wm_name (MetaWindow *window,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
reload_opaque_region (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
meta_window_update_opaque_region (window);
|
||||
}
|
||||
|
||||
static void
|
||||
reload_mutter_hints (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
@ -882,12 +920,32 @@ reload_update_counter (MetaWindow *window,
|
||||
{
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
#ifdef HAVE_XSYNC
|
||||
XSyncCounter counter = value->v.xcounter;
|
||||
meta_window_destroy_sync_request_alarm (window);
|
||||
window->sync_request_counter = None;
|
||||
|
||||
window->sync_request_counter = counter;
|
||||
meta_verbose ("Window has _NET_WM_SYNC_REQUEST_COUNTER 0x%lx\n",
|
||||
window->sync_request_counter);
|
||||
#ifdef HAVE_XSYNC
|
||||
if (value->v.xcounter_list.n_counters == 0)
|
||||
{
|
||||
meta_warning ("_NET_WM_SYNC_REQUEST_COUNTER is empty\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (value->v.xcounter_list.n_counters == 1)
|
||||
{
|
||||
window->sync_request_counter = value->v.xcounter_list.counters[0];
|
||||
window->extended_sync_request_counter = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
window->sync_request_counter = value->v.xcounter_list.counters[1];
|
||||
window->extended_sync_request_counter = TRUE;
|
||||
}
|
||||
meta_verbose ("Window has _NET_WM_SYNC_REQUEST_COUNTER 0x%lx (extended=%s)\n",
|
||||
window->sync_request_counter,
|
||||
window->extended_sync_request_counter ? "true" : "false");
|
||||
|
||||
if (window->extended_sync_request_counter)
|
||||
meta_window_create_sync_request_alarm (window);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -1589,53 +1647,25 @@ reload_bypass_compositor (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
gboolean requested_value = FALSE;
|
||||
gboolean current_value = window->bypass_compositor;
|
||||
int requested_value = 0;
|
||||
int current_value = window->bypass_compositor;
|
||||
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
requested_value = ((int) value->v.cardinal == 1);
|
||||
meta_verbose ("Request to bypass compositor for window %s.\n", window->desc);
|
||||
}
|
||||
requested_value = (int) value->v.cardinal;
|
||||
|
||||
if (requested_value == current_value)
|
||||
return;
|
||||
|
||||
if (requested_value && window->dont_bypass_compositor)
|
||||
{
|
||||
meta_verbose ("Setting bypass and dont compositor for same window (%s) makes no sense, ignoring.\n", window->desc);
|
||||
return;
|
||||
}
|
||||
if (requested_value == _NET_WM_BYPASS_COMPOSITOR_HINT_ON)
|
||||
meta_verbose ("Request to bypass compositor for window %s.\n", window->desc);
|
||||
else if (requested_value == _NET_WM_BYPASS_COMPOSITOR_HINT_OFF)
|
||||
meta_verbose ("Request to don't bypass compositor for window %s.\n", window->desc);
|
||||
else if (requested_value != _NET_WM_BYPASS_COMPOSITOR_HINT_AUTO)
|
||||
return;
|
||||
|
||||
window->bypass_compositor = requested_value;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_dont_bypass_compositor (MetaWindow *window,
|
||||
MetaPropValue *value,
|
||||
gboolean initial)
|
||||
{
|
||||
gboolean requested_value = FALSE;
|
||||
gboolean current_value = window->dont_bypass_compositor;
|
||||
|
||||
if (value->type != META_PROP_VALUE_INVALID)
|
||||
{
|
||||
requested_value = ((int) value->v.cardinal == 1);
|
||||
meta_verbose ("Request to don't bypass compositor for window %s.\n", window->desc);
|
||||
}
|
||||
|
||||
if (requested_value == current_value)
|
||||
return;
|
||||
|
||||
if (requested_value && window->bypass_compositor)
|
||||
{
|
||||
meta_verbose ("Setting bypass and dont compositor for same window (%s) makes no sense, ignoring.\n", window->desc);
|
||||
return;
|
||||
}
|
||||
|
||||
window->dont_bypass_compositor = requested_value;
|
||||
}
|
||||
|
||||
#define RELOAD_STRING(var_name, propname) \
|
||||
static void \
|
||||
reload_ ## var_name (MetaWindow *window, \
|
||||
@ -1704,11 +1734,12 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
|
||||
{ display->atom__NET_WM_PID, META_PROP_VALUE_CARDINAL, reload_net_wm_pid, TRUE, TRUE },
|
||||
{ XA_WM_NAME, META_PROP_VALUE_TEXT_PROPERTY, reload_wm_name, TRUE, TRUE },
|
||||
{ display->atom__MUTTER_HINTS, META_PROP_VALUE_TEXT_PROPERTY, reload_mutter_hints, TRUE, TRUE },
|
||||
{ display->atom__NET_WM_OPAQUE_REGION, META_PROP_VALUE_CARDINAL_LIST, reload_opaque_region, TRUE, TRUE },
|
||||
{ display->atom__NET_WM_ICON_NAME, META_PROP_VALUE_UTF8, reload_net_wm_icon_name, TRUE, FALSE },
|
||||
{ XA_WM_ICON_NAME, META_PROP_VALUE_TEXT_PROPERTY, reload_wm_icon_name, TRUE, FALSE },
|
||||
{ display->atom__NET_WM_DESKTOP, META_PROP_VALUE_CARDINAL, reload_net_wm_desktop, TRUE, FALSE },
|
||||
{ display->atom__NET_STARTUP_ID, META_PROP_VALUE_UTF8, reload_net_startup_id, TRUE, FALSE },
|
||||
{ display->atom__NET_WM_SYNC_REQUEST_COUNTER, META_PROP_VALUE_SYNC_COUNTER, reload_update_counter, TRUE, FALSE },
|
||||
{ display->atom__NET_WM_SYNC_REQUEST_COUNTER, META_PROP_VALUE_SYNC_COUNTER_LIST, reload_update_counter, TRUE, TRUE },
|
||||
{ XA_WM_NORMAL_HINTS, META_PROP_VALUE_SIZE_HINTS, reload_normal_hints, TRUE, FALSE },
|
||||
{ display->atom_WM_PROTOCOLS, META_PROP_VALUE_ATOM_LIST, reload_wm_protocols, TRUE, FALSE },
|
||||
{ XA_WM_HINTS, META_PROP_VALUE_WM_HINTS, reload_wm_hints, TRUE, FALSE },
|
||||
@ -1728,7 +1759,7 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
|
||||
{ display->atom_WM_STATE, META_PROP_VALUE_INVALID, NULL, FALSE, FALSE },
|
||||
{ display->atom__NET_WM_ICON, META_PROP_VALUE_INVALID, reload_net_wm_icon, FALSE, FALSE },
|
||||
{ display->atom__KWM_WIN_ICON, META_PROP_VALUE_INVALID, reload_kwm_win_icon, FALSE, FALSE },
|
||||
{ display->atom__NET_WM_ICON_GEOMETRY, META_PROP_VALUE_INVALID, NULL, FALSE, FALSE },
|
||||
{ display->atom__NET_WM_ICON_GEOMETRY, META_PROP_VALUE_CARDINAL_LIST, reload_icon_geometry, FALSE, FALSE },
|
||||
{ display->atom_WM_CLIENT_LEADER, META_PROP_VALUE_INVALID, complain_about_broken_client, FALSE, FALSE },
|
||||
{ display->atom_SM_CLIENT_ID, META_PROP_VALUE_INVALID, complain_about_broken_client, FALSE, FALSE },
|
||||
{ display->atom_WM_WINDOW_ROLE, META_PROP_VALUE_INVALID, reload_wm_window_role, FALSE, FALSE },
|
||||
@ -1736,7 +1767,6 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
|
||||
{ display->atom__NET_WM_STRUT, META_PROP_VALUE_INVALID, reload_struts, FALSE, FALSE },
|
||||
{ display->atom__NET_WM_STRUT_PARTIAL, META_PROP_VALUE_INVALID, reload_struts, FALSE, FALSE },
|
||||
{ display->atom__NET_WM_BYPASS_COMPOSITOR, META_PROP_VALUE_CARDINAL, reload_bypass_compositor, FALSE, FALSE },
|
||||
{ display->atom__NET_WM_DONT_BYPASS_COMPOSITOR, META_PROP_VALUE_CARDINAL, reload_dont_bypass_compositor, FALSE, FALSE },
|
||||
{ 0 },
|
||||
};
|
||||
|
||||
|
@ -44,6 +44,7 @@
|
||||
#include "window-props.h"
|
||||
#include "constraints.h"
|
||||
#include "mutter-enum-types.h"
|
||||
#include "core.h"
|
||||
|
||||
#include <X11/Xatom.h>
|
||||
#include <X11/Xlibint.h> /* For display->resource_mask */
|
||||
@ -226,6 +227,9 @@ meta_window_finalize (GObject *object)
|
||||
if (window->frame_bounds)
|
||||
cairo_region_destroy (window->frame_bounds);
|
||||
|
||||
if (window->opaque_region)
|
||||
cairo_region_destroy (window->opaque_region);
|
||||
|
||||
meta_icon_cache_free (&window->icon_cache);
|
||||
|
||||
g_free (window->sm_client_id);
|
||||
@ -936,6 +940,8 @@ meta_window_new_with_attrs (MetaDisplay *display,
|
||||
unsigned char mask_bits[XIMaskLen (XI_LASTEVENT)] = { 0 };
|
||||
XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits };
|
||||
|
||||
meta_core_add_old_event_mask (display->xdisplay, xwindow, &mask);
|
||||
|
||||
XISetMask (mask.mask, XI_Enter);
|
||||
XISetMask (mask.mask, XI_Leave);
|
||||
XISetMask (mask.mask, XI_FocusIn);
|
||||
@ -1015,6 +1021,7 @@ meta_window_new_with_attrs (MetaDisplay *display,
|
||||
window->sync_request_serial = 0;
|
||||
window->sync_request_time.tv_sec = 0;
|
||||
window->sync_request_time.tv_usec = 0;
|
||||
window->sync_request_alarm = None;
|
||||
#endif
|
||||
|
||||
window->screen = screen;
|
||||
@ -1818,6 +1825,8 @@ meta_window_unmanage (MetaWindow *window,
|
||||
if (!window->override_redirect)
|
||||
meta_stack_remove (window->screen->stack, window);
|
||||
|
||||
meta_window_destroy_sync_request_alarm (window);
|
||||
|
||||
if (window->frame)
|
||||
meta_window_destroy_frame (window);
|
||||
|
||||
@ -3637,6 +3646,57 @@ meta_window_is_fullscreen (MetaWindow *window)
|
||||
return window->fullscreen;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_is_screen_sized:
|
||||
*
|
||||
* Return value: %TRUE if the window is occupies the
|
||||
* the whole screen (all monitors).
|
||||
*/
|
||||
gboolean
|
||||
meta_window_is_screen_sized (MetaWindow *window)
|
||||
{
|
||||
MetaRectangle window_rect;
|
||||
int screen_width, screen_height;
|
||||
|
||||
meta_screen_get_size (window->screen, &screen_width, &screen_height);
|
||||
meta_window_get_outer_rect (window, &window_rect);
|
||||
|
||||
if (window_rect.x == 0 && window_rect.y == 0 &&
|
||||
window_rect.width == screen_width && window_rect.height == screen_height)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_is_monitor_sized:
|
||||
*
|
||||
* Return value: %TRUE if the window is occupies an entire monitor or
|
||||
* the whole screen.
|
||||
*/
|
||||
gboolean
|
||||
meta_window_is_monitor_sized (MetaWindow *window)
|
||||
{
|
||||
if (window->fullscreen)
|
||||
return TRUE;
|
||||
|
||||
if (meta_window_is_screen_sized (window))
|
||||
return TRUE;
|
||||
|
||||
if (window->override_redirect)
|
||||
{
|
||||
MetaRectangle window_rect, monitor_rect;
|
||||
|
||||
meta_window_get_outer_rect (window, &window_rect);
|
||||
meta_screen_get_monitor_geometry (window->screen, window->monitor->number, &monitor_rect);
|
||||
|
||||
if (meta_rectangle_equal (&window_rect, &monitor_rect))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_is_on_primary_monitor:
|
||||
*
|
||||
@ -3656,7 +3716,7 @@ meta_window_is_on_primary_monitor (MetaWindow *window)
|
||||
gboolean
|
||||
meta_window_requested_bypass_compositor (MetaWindow *window)
|
||||
{
|
||||
return window->bypass_compositor;
|
||||
return window->bypass_compositor == _NET_WM_BYPASS_COMPOSITOR_HINT_ON;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -3667,7 +3727,7 @@ meta_window_requested_bypass_compositor (MetaWindow *window)
|
||||
gboolean
|
||||
meta_window_requested_dont_bypass_compositor (MetaWindow *window)
|
||||
{
|
||||
return window->dont_bypass_compositor;
|
||||
return window->bypass_compositor == _NET_WM_BYPASS_COMPOSITOR_HINT_OFF;
|
||||
}
|
||||
|
||||
void
|
||||
@ -4431,16 +4491,114 @@ static_gravity_works (MetaDisplay *display)
|
||||
return display->static_gravity_works;
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_create_sync_request_alarm (MetaWindow *window)
|
||||
{
|
||||
#ifdef HAVE_XSYNC
|
||||
XSyncAlarmAttributes values;
|
||||
XSyncValue init;
|
||||
|
||||
if (window->sync_request_counter == None ||
|
||||
window->sync_request_alarm != None)
|
||||
return;
|
||||
|
||||
meta_error_trap_push_with_return (window->display);
|
||||
|
||||
/* In the new (extended style), the counter value is initialized by
|
||||
* the client before mapping the window. In the old style, we're
|
||||
* responsible for setting the initial value of the counter.
|
||||
*/
|
||||
if (window->extended_sync_request_counter)
|
||||
{
|
||||
if (!XSyncQueryCounter(window->display->xdisplay,
|
||||
window->sync_request_counter,
|
||||
&init))
|
||||
{
|
||||
meta_error_trap_pop_with_return (window->display);
|
||||
window->sync_request_counter = None;
|
||||
return;
|
||||
}
|
||||
|
||||
window->sync_request_serial =
|
||||
XSyncValueLow32 (init) + ((gint64)XSyncValueHigh32 (init) << 32);
|
||||
|
||||
/* if the value is odd, the window starts off with updates frozen */
|
||||
meta_compositor_set_updates_frozen (window->display->compositor, window,
|
||||
meta_window_updates_are_frozen (window));
|
||||
}
|
||||
else
|
||||
{
|
||||
XSyncIntToValue (&init, 0);
|
||||
XSyncSetCounter (window->display->xdisplay,
|
||||
window->sync_request_counter, init);
|
||||
window->sync_request_serial = 0;
|
||||
}
|
||||
|
||||
values.trigger.counter = window->sync_request_counter;
|
||||
values.trigger.test_type = XSyncPositiveComparison;
|
||||
|
||||
/* Initialize to one greater than the current value */
|
||||
values.trigger.value_type = XSyncRelative;
|
||||
XSyncIntToValue (&values.trigger.wait_value, 1);
|
||||
|
||||
/* After triggering, increment test_value by this until
|
||||
* until the test condition is false */
|
||||
XSyncIntToValue (&values.delta, 1);
|
||||
|
||||
/* we want events (on by default anyway) */
|
||||
values.events = True;
|
||||
|
||||
window->sync_request_alarm = XSyncCreateAlarm (window->display->xdisplay,
|
||||
XSyncCACounter |
|
||||
XSyncCAValueType |
|
||||
XSyncCAValue |
|
||||
XSyncCATestType |
|
||||
XSyncCADelta |
|
||||
XSyncCAEvents,
|
||||
&values);
|
||||
|
||||
if (meta_error_trap_pop_with_return (window->display) == Success)
|
||||
meta_display_register_sync_alarm (window->display, &window->sync_request_alarm, window);
|
||||
else
|
||||
{
|
||||
window->sync_request_alarm = None;
|
||||
window->sync_request_counter = None;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_destroy_sync_request_alarm (MetaWindow *window)
|
||||
{
|
||||
#ifdef HAVE_XSYNC
|
||||
if (window->sync_request_alarm != None)
|
||||
{
|
||||
/* Has to be unregistered _before_ clearing the structure field */
|
||||
meta_display_unregister_sync_alarm (window->display, window->sync_request_alarm);
|
||||
XSyncDestroyAlarm (window->display->xdisplay,
|
||||
window->sync_request_alarm);
|
||||
window->sync_request_alarm = None;
|
||||
}
|
||||
#endif /* HAVE_XSYNC */
|
||||
}
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
static void
|
||||
send_sync_request (MetaWindow *window)
|
||||
{
|
||||
XSyncValue value;
|
||||
XClientMessageEvent ev;
|
||||
gint64 wait_serial;
|
||||
|
||||
window->sync_request_serial++;
|
||||
/* For the old style of _NET_WM_SYNC_REQUEST_COUNTER, we just have to
|
||||
* increase the value, but for the new "extended" style we need to
|
||||
* pick an even (unfrozen) value sufficiently ahead of the last serial
|
||||
* that we received from the client; the same code still works
|
||||
* for the old style. The increment of 240 is specified by the EWMH
|
||||
* and is (1 second) * (60fps) * (an increment of 4 per frame).
|
||||
*/
|
||||
wait_serial = window->sync_request_serial + 240;
|
||||
|
||||
XSyncIntToValue (&value, window->sync_request_serial);
|
||||
window->display->grab_sync_counter_wait_serial = wait_serial;
|
||||
|
||||
ev.type = ClientMessage;
|
||||
ev.window = window->xwindow;
|
||||
@ -4453,8 +4611,9 @@ send_sync_request (MetaWindow *window)
|
||||
* want to use _roundtrip, though?
|
||||
*/
|
||||
ev.data.l[1] = meta_display_get_current_time (window->display);
|
||||
ev.data.l[2] = XSyncValueLow32 (value);
|
||||
ev.data.l[3] = XSyncValueHigh32 (value);
|
||||
ev.data.l[2] = wait_serial & G_GUINT64_CONSTANT(0xffffffff);
|
||||
ev.data.l[3] = wait_serial >> 32;
|
||||
ev.data.l[4] = window->extended_sync_request_counter ? 1 : 0;
|
||||
|
||||
/* We don't need to trap errors here as we are already
|
||||
* inside an error_trap_push()/pop() pair.
|
||||
@ -4466,6 +4625,43 @@ send_sync_request (MetaWindow *window)
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* meta_window_updates_are_frozen:
|
||||
* @window: a #MetaWindow
|
||||
*
|
||||
* Gets whether the compositor should be updating the window contents;
|
||||
* window content updates may be frozen at client request by setting
|
||||
* an odd value in the extended _NET_WM_SYNC_REQUEST_COUNTER counter r
|
||||
* by the window manager during a resize operation while waiting for
|
||||
* the client to redraw.
|
||||
*
|
||||
* Return value: %TRUE if updates are currently frozen
|
||||
*/
|
||||
gboolean
|
||||
meta_window_updates_are_frozen (MetaWindow *window)
|
||||
{
|
||||
#ifdef HAVE_XSYNC
|
||||
if (window->extended_sync_request_counter &&
|
||||
window->sync_request_serial % 2 == 1)
|
||||
return TRUE;
|
||||
#endif
|
||||
|
||||
return window->updates_frozen_for_resize;
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_set_updates_frozen_for_resize (MetaWindow *window,
|
||||
gboolean updates_frozen)
|
||||
{
|
||||
if (updates_frozen != window->updates_frozen_for_resize)
|
||||
{
|
||||
window->updates_frozen_for_resize = updates_frozen;
|
||||
if (window->display->compositor)
|
||||
meta_compositor_set_updates_frozen (window->display->compositor, window,
|
||||
meta_window_updates_are_frozen (window));
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
maybe_move_attached_dialog (MetaWindow *window,
|
||||
void *data)
|
||||
@ -4630,6 +4826,7 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
gboolean is_configure_request;
|
||||
gboolean do_gravity_adjust;
|
||||
gboolean is_user_action;
|
||||
gboolean did_placement;
|
||||
gboolean configure_frame_first;
|
||||
gboolean use_static_gravity;
|
||||
/* used for the configure request, but may not be final
|
||||
@ -4703,6 +4900,8 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
new_rect.x, new_rect.y);
|
||||
}
|
||||
|
||||
did_placement = !window->placed && window->calc_placement;
|
||||
|
||||
meta_window_constrain (window,
|
||||
window->frame ? &borders : NULL,
|
||||
flags,
|
||||
@ -4914,12 +5113,28 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
* efficiently as possible
|
||||
*/
|
||||
|
||||
/* configure frame first if we grow more than we shrink
|
||||
/* Normally, we configure the frame first depending on whether
|
||||
* we grow the frame more than we shrink. The idea is to avoid
|
||||
* messing up the window contents by having a temporary situation
|
||||
* where the frame is smaller than the window. However, if we're
|
||||
* cooperating with the client to create an atomic frame upate,
|
||||
* and the window is redirected, then we should always update
|
||||
* the frame first, since updating the frame will force a new
|
||||
* backing pixmap to be allocated, and the old backing pixmap
|
||||
* will be left undisturbed for us to paint to the screen until
|
||||
* the client finishes redrawing.
|
||||
*/
|
||||
size_dx = w - window->rect.width;
|
||||
size_dy = h - window->rect.height;
|
||||
if (window->extended_sync_request_counter)
|
||||
{
|
||||
configure_frame_first = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
size_dx = w - window->rect.width;
|
||||
size_dy = h - window->rect.height;
|
||||
|
||||
configure_frame_first = (size_dx + size_dy >= 0);
|
||||
configure_frame_first = size_dx + size_dy >= 0;
|
||||
}
|
||||
|
||||
if (use_static_gravity)
|
||||
meta_window_set_gravity (window, StaticGravity);
|
||||
@ -4960,14 +5175,15 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
meta_error_trap_push (window->display);
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
if (window->sync_request_counter != None &&
|
||||
window->display->grab_sync_request_alarm != None &&
|
||||
if (window == window->display->grab_window &&
|
||||
meta_grab_op_is_resizing (window->display->grab_op) &&
|
||||
window->sync_request_counter != None &&
|
||||
window->sync_request_alarm != None &&
|
||||
window->sync_request_time.tv_usec == 0 &&
|
||||
window->sync_request_time.tv_sec == 0)
|
||||
{
|
||||
/* turn off updating */
|
||||
if (window->display->compositor)
|
||||
meta_compositor_set_updates (window->display->compositor, window, FALSE);
|
||||
meta_window_set_updates_frozen_for_resize (window, TRUE);
|
||||
|
||||
send_sync_request (window);
|
||||
}
|
||||
@ -4999,7 +5215,8 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
save_user_window_placement (window);
|
||||
|
||||
if (need_move_frame || need_resize_frame ||
|
||||
need_move_client || need_resize_client)
|
||||
need_move_client || need_resize_client ||
|
||||
did_placement)
|
||||
{
|
||||
int newx, newy;
|
||||
meta_window_get_position (window, &newx, &newy);
|
||||
@ -5010,7 +5227,8 @@ meta_window_move_resize_internal (MetaWindow *window,
|
||||
window->user_rect.width, window->user_rect.height);
|
||||
if (window->display->compositor)
|
||||
meta_compositor_sync_window_geometry (window->display->compositor,
|
||||
window);
|
||||
window,
|
||||
did_placement);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -5344,7 +5562,7 @@ meta_window_configure_notify (MetaWindow *window,
|
||||
meta_warning ("Unhandled change of windows override redirect status\n");
|
||||
|
||||
if (window->display->compositor)
|
||||
meta_compositor_sync_window_geometry (window->display->compositor, window);
|
||||
meta_compositor_sync_window_geometry (window->display->compositor, window, FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
@ -6697,11 +6915,11 @@ meta_window_client_message (MetaWindow *window,
|
||||
&buttons, &mods, &group);
|
||||
meta_error_trap_pop (window->display);
|
||||
|
||||
if (mods.effective & Button1Mask)
|
||||
if (XIMaskIsSet (buttons.mask, Button1))
|
||||
button = 1;
|
||||
else if (mods.effective & Button2Mask)
|
||||
else if (XIMaskIsSet (buttons.mask, Button2))
|
||||
button = 2;
|
||||
else if (mods.effective & Button3Mask)
|
||||
else if (XIMaskIsSet (buttons.mask, Button3))
|
||||
button = 3;
|
||||
else
|
||||
button = 0;
|
||||
@ -7144,19 +7362,14 @@ send_configure_notify (MetaWindow *window)
|
||||
meta_error_trap_pop (window->display);
|
||||
}
|
||||
|
||||
/* FIXME: @rect should be marked (out), but gjs doesn't currently support
|
||||
* this. See also http://bugzilla.gnome.org/show_bug.cgi?id=573314
|
||||
*/
|
||||
/**
|
||||
* meta_window_get_icon_geometry:
|
||||
* @window: a #MetaWindow
|
||||
* @rect: rectangle into which to store the returned geometry.
|
||||
* @rect: (out): rectangle into which to store the returned geometry.
|
||||
*
|
||||
* Gets the location of the icon corresponding to the window. The location
|
||||
* will be provided set by the task bar or other user interface element
|
||||
* displaying the icon, and is relative to the root window. This currently
|
||||
* retrieves the icon geometry from the X server as a round trip on every
|
||||
* call.
|
||||
* displaying the icon, and is relative to the root window.
|
||||
*
|
||||
* Return value: %TRUE if the icon geometry was succesfully retrieved.
|
||||
*/
|
||||
@ -7164,33 +7377,12 @@ gboolean
|
||||
meta_window_get_icon_geometry (MetaWindow *window,
|
||||
MetaRectangle *rect)
|
||||
{
|
||||
gulong *geometry = NULL;
|
||||
int nitems;
|
||||
|
||||
g_return_val_if_fail (!window->override_redirect, FALSE);
|
||||
|
||||
if (meta_prop_get_cardinal_list (window->display,
|
||||
window->xwindow,
|
||||
window->display->atom__NET_WM_ICON_GEOMETRY,
|
||||
&geometry, &nitems))
|
||||
if (window->icon_geometry_set)
|
||||
{
|
||||
if (nitems != 4)
|
||||
{
|
||||
meta_verbose ("_NET_WM_ICON_GEOMETRY on %s has %d values instead of 4\n",
|
||||
window->desc, nitems);
|
||||
meta_XFree (geometry);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (rect)
|
||||
{
|
||||
rect->x = geometry[0];
|
||||
rect->y = geometry[1];
|
||||
rect->width = geometry[2];
|
||||
rect->height = geometry[3];
|
||||
}
|
||||
|
||||
meta_XFree (geometry);
|
||||
*rect = window->icon_geometry;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -7198,6 +7390,30 @@ meta_window_get_icon_geometry (MetaWindow *window,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_set_icon_geometry:
|
||||
* @window: a #MetaWindow
|
||||
* @rect: (allow-none): rectangle with the desired geometry or %NULL.
|
||||
*
|
||||
* Sets or unsets the location of the icon corresponding to the window. If
|
||||
* set, the location should correspond to a dock, task bar or other user
|
||||
* interface element displaying the icon, and is relative to the root window.
|
||||
*/
|
||||
void
|
||||
meta_window_set_icon_geometry (MetaWindow *window,
|
||||
MetaRectangle *rect)
|
||||
{
|
||||
if (rect)
|
||||
{
|
||||
window->icon_geometry = *rect;
|
||||
window->icon_geometry_set = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
window->icon_geometry_set = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static Window
|
||||
read_client_leader (MetaDisplay *display,
|
||||
Window xwindow)
|
||||
@ -7390,6 +7606,64 @@ meta_window_update_net_wm_type (MetaWindow *window)
|
||||
meta_window_recalc_window_type (window);
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_update_opaque_region (MetaWindow *window)
|
||||
{
|
||||
cairo_region_t *opaque_region = NULL;
|
||||
gulong *region = NULL;
|
||||
int nitems;
|
||||
|
||||
g_clear_pointer (&window->opaque_region, cairo_region_destroy);
|
||||
|
||||
if (meta_prop_get_cardinal_list (window->display,
|
||||
window->xwindow,
|
||||
window->display->atom__NET_WM_OPAQUE_REGION,
|
||||
®ion, &nitems))
|
||||
{
|
||||
cairo_rectangle_int_t *rects;
|
||||
int i, rect_index, nrects;
|
||||
|
||||
if (nitems % 4 != 0)
|
||||
{
|
||||
meta_verbose ("_NET_WM_OPAQUE_REGION does not have a list of 4-tuples.");
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* empty region */
|
||||
if (nitems == 0)
|
||||
goto out;
|
||||
|
||||
nrects = nitems / 4;
|
||||
|
||||
rects = g_new (cairo_rectangle_int_t, nrects);
|
||||
|
||||
rect_index = 0;
|
||||
i = 0;
|
||||
while (i < nitems)
|
||||
{
|
||||
cairo_rectangle_int_t *rect = &rects[rect_index];
|
||||
|
||||
rect->x = region[i++];
|
||||
rect->y = region[i++];
|
||||
rect->width = region[i++];
|
||||
rect->height = region[i++];
|
||||
|
||||
rect_index++;
|
||||
}
|
||||
|
||||
opaque_region = cairo_region_create_rectangles (rects, nrects);
|
||||
|
||||
g_free (rects);
|
||||
}
|
||||
|
||||
out:
|
||||
window->opaque_region = opaque_region;
|
||||
meta_XFree (region);
|
||||
|
||||
if (window->display->compositor)
|
||||
meta_compositor_window_shape_changed (window->display->compositor, window);
|
||||
}
|
||||
|
||||
static void
|
||||
redraw_icon (MetaWindow *window)
|
||||
{
|
||||
@ -8526,7 +8800,7 @@ check_moveresize_frequency (MetaWindow *window,
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
if (!window->disable_sync &&
|
||||
window->display->grab_sync_request_alarm != None)
|
||||
window->sync_request_alarm != None)
|
||||
{
|
||||
if (window->sync_request_time.tv_sec != 0 ||
|
||||
window->sync_request_time.tv_usec != 0)
|
||||
@ -9097,8 +9371,7 @@ update_resize (MetaWindow *window,
|
||||
}
|
||||
|
||||
/* If we get here, it means the client should have redrawn itself */
|
||||
if (window->display->compositor)
|
||||
meta_compositor_set_updates (window->display->compositor, window, TRUE);
|
||||
meta_window_set_updates_frozen_for_resize (window, FALSE);
|
||||
|
||||
/* Remove any scheduled compensation events */
|
||||
if (window->display->grab_resize_timeout_id)
|
||||
@ -9291,13 +9564,26 @@ update_tile_mode (MetaWindow *window)
|
||||
#ifdef HAVE_XSYNC
|
||||
void
|
||||
meta_window_update_sync_request_counter (MetaWindow *window,
|
||||
guint64 new_counter_value)
|
||||
gint64 new_counter_value)
|
||||
{
|
||||
if (window->display->grab_op != META_GRAB_OP_NONE &&
|
||||
window == window->display->grab_window &&
|
||||
meta_grab_op_is_mouse (window->display->grab_op))
|
||||
{
|
||||
gboolean needs_frame_drawn = FALSE;
|
||||
gboolean no_delay_frame = FALSE;
|
||||
|
||||
if (window->extended_sync_request_counter && new_counter_value % 2 == 0)
|
||||
{
|
||||
needs_frame_drawn = TRUE;
|
||||
no_delay_frame = new_counter_value == window->sync_request_serial + 1;
|
||||
}
|
||||
|
||||
window->sync_request_serial = new_counter_value;
|
||||
meta_compositor_set_updates_frozen (window->display->compositor, window,
|
||||
meta_window_updates_are_frozen (window));
|
||||
|
||||
if (window == window->display->grab_window &&
|
||||
meta_grab_op_is_resizing (window->display->grab_op) &&
|
||||
new_counter_value >= window->display->grab_sync_counter_wait_serial &&
|
||||
(!window->extended_sync_request_counter || new_counter_value % 2 == 0))
|
||||
{
|
||||
meta_topic (META_DEBUG_RESIZING,
|
||||
"Alarm event received last motion x = %d y = %d\n",
|
||||
window->display->grab_latest_motion_x,
|
||||
@ -9311,37 +9597,18 @@ meta_window_update_sync_request_counter (MetaWindow *window,
|
||||
window->sync_request_time.tv_sec = 0;
|
||||
window->sync_request_time.tv_usec = 0;
|
||||
|
||||
/* This means we are ready for another configure. */
|
||||
switch (window->display->grab_op)
|
||||
{
|
||||
case META_GRAB_OP_RESIZING_E:
|
||||
case META_GRAB_OP_RESIZING_W:
|
||||
case META_GRAB_OP_RESIZING_S:
|
||||
case META_GRAB_OP_RESIZING_N:
|
||||
case META_GRAB_OP_RESIZING_SE:
|
||||
case META_GRAB_OP_RESIZING_SW:
|
||||
case META_GRAB_OP_RESIZING_NE:
|
||||
case META_GRAB_OP_RESIZING_NW:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_S:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_N:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_W:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_E:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_SE:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_NE:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_SW:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_NW:
|
||||
/* no pointer round trip here, to keep in sync */
|
||||
update_resize (window,
|
||||
window->display->grab_last_user_action_was_snap,
|
||||
window->display->grab_latest_motion_x,
|
||||
window->display->grab_latest_motion_y,
|
||||
TRUE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
/* This means we are ready for another configure;
|
||||
* no pointer round trip here, to keep in sync */
|
||||
update_resize (window,
|
||||
window->display->grab_last_user_action_was_snap,
|
||||
window->display->grab_latest_motion_x,
|
||||
window->display->grab_latest_motion_y,
|
||||
TRUE);
|
||||
}
|
||||
|
||||
if (needs_frame_drawn)
|
||||
meta_compositor_queue_frame_drawn (window->display->compositor, window,
|
||||
no_delay_frame);
|
||||
}
|
||||
#endif /* HAVE_XSYNC */
|
||||
|
||||
@ -9380,8 +9647,7 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
|
||||
xev->root_x,
|
||||
xev->root_y,
|
||||
TRUE);
|
||||
if (window->display->compositor)
|
||||
meta_compositor_set_updates (window->display->compositor, window, TRUE);
|
||||
meta_window_set_updates_frozen_for_resize (window, FALSE);
|
||||
|
||||
/* If a tiled window has been dragged free with a
|
||||
* mouse resize without snapping back to the tiled
|
||||
@ -9484,6 +9750,13 @@ get_work_area_monitor (MetaWindow *window,
|
||||
area->x, area->y, area->width, area->height);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_get_work_area_current_monitor:
|
||||
* @window: a #MetaWindow
|
||||
* @area: (out): a location to store the work area
|
||||
*
|
||||
* Get the work area for the monitor @window is currently on.
|
||||
*/
|
||||
void
|
||||
meta_window_get_work_area_current_monitor (MetaWindow *window,
|
||||
MetaRectangle *area)
|
||||
@ -9497,6 +9770,15 @@ meta_window_get_work_area_current_monitor (MetaWindow *window,
|
||||
area);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_get_work_area_for_monitor:
|
||||
* @window: a #MetaWindow
|
||||
* @which_monitor: a moniotr to get the work area for
|
||||
* @area: (out): a location to store the work area
|
||||
*
|
||||
* Get the work area for @window, given the monitor index
|
||||
* @which_monitor.
|
||||
*/
|
||||
void
|
||||
meta_window_get_work_area_for_monitor (MetaWindow *window,
|
||||
int which_monitor,
|
||||
@ -9509,6 +9791,13 @@ meta_window_get_work_area_for_monitor (MetaWindow *window,
|
||||
which_monitor);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_window_get_work_area_all_monitors:
|
||||
* @window: a #MetaWindow
|
||||
* @area: (out): a location to store the work area
|
||||
*
|
||||
* Get the work area for all monitors for @window.
|
||||
*/
|
||||
void
|
||||
meta_window_get_work_area_all_monitors (MetaWindow *window,
|
||||
MetaRectangle *area)
|
||||
|
@ -86,10 +86,6 @@ void meta_workspace_relocate_windows (MetaWorkspace *workspace,
|
||||
|
||||
void meta_workspace_invalidate_work_area (MetaWorkspace *workspace);
|
||||
|
||||
|
||||
void meta_workspace_get_work_area_for_monitor (MetaWorkspace *workspace,
|
||||
int which_monitor,
|
||||
MetaRectangle *area);
|
||||
GList* meta_workspace_get_onscreen_region (MetaWorkspace *workspace);
|
||||
GList* meta_workspace_get_onmonitor_region (MetaWorkspace *workspace,
|
||||
int which_monitor);
|
||||
@ -101,7 +97,3 @@ void meta_workspace_focus_default_window (MetaWorkspace *workspace,
|
||||
const char* meta_workspace_get_name (MetaWorkspace *workspace);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1043,6 +1043,15 @@ meta_workspace_set_builtin_struts (MetaWorkspace *workspace,
|
||||
meta_workspace_invalidate_work_area (workspace);
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_workspace_get_work_area_for_monitor:
|
||||
* @workspace: a #MetaWorkspace
|
||||
* @which_monitor: a monitor index
|
||||
* @area: (out): location to store the work area
|
||||
*
|
||||
* Stores the work area for @which_monitor on @workspace
|
||||
* in @area.
|
||||
*/
|
||||
void
|
||||
meta_workspace_get_work_area_for_monitor (MetaWorkspace *workspace,
|
||||
int which_monitor,
|
||||
|
@ -580,6 +580,23 @@ counter_from_results (GetPropertyResults *results,
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
counter_list_from_results (GetPropertyResults *results,
|
||||
XSyncCounter **counters_p,
|
||||
int *n_counters_p)
|
||||
{
|
||||
if (!validate_or_free_results (results, 32,
|
||||
XA_CARDINAL,
|
||||
FALSE))
|
||||
return FALSE;
|
||||
|
||||
*counters_p = (XSyncCounter*) results->prop;
|
||||
*n_counters_p = results->n_items;
|
||||
results->prop = NULL;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
gboolean
|
||||
@ -1015,6 +1032,7 @@ meta_prop_get_values (MetaDisplay *display,
|
||||
values[i].required_type = XA_WM_SIZE_HINTS;
|
||||
break;
|
||||
case META_PROP_VALUE_SYNC_COUNTER:
|
||||
case META_PROP_VALUE_SYNC_COUNTER_LIST:
|
||||
values[i].required_type = XA_CARDINAL;
|
||||
break;
|
||||
}
|
||||
@ -1165,20 +1183,29 @@ meta_prop_get_values (MetaDisplay *display,
|
||||
&values[i].v.size_hints.flags))
|
||||
values[i].type = META_PROP_VALUE_INVALID;
|
||||
break;
|
||||
case META_PROP_VALUE_SYNC_COUNTER:
|
||||
#ifdef HAVE_XSYNC
|
||||
case META_PROP_VALUE_SYNC_COUNTER:
|
||||
if (!counter_from_results (&results,
|
||||
&values[i].v.xcounter))
|
||||
values[i].type = META_PROP_VALUE_INVALID;
|
||||
break;
|
||||
case META_PROP_VALUE_SYNC_COUNTER_LIST:
|
||||
if (!counter_list_from_results (&results,
|
||||
&values[i].v.xcounter_list.counters,
|
||||
&values[i].v.xcounter_list.n_counters))
|
||||
values[i].type = META_PROP_VALUE_INVALID;
|
||||
break;
|
||||
#else
|
||||
case META_PROP_VALUE_SYNC_COUNTER:
|
||||
case META_PROP_VALUE_SYNC_COUNTER_LIST:
|
||||
values[i].type = META_PROP_VALUE_INVALID;
|
||||
if (results.prop)
|
||||
{
|
||||
XFree (results.prop);
|
||||
results.prop = NULL;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
next:
|
||||
@ -1231,6 +1258,9 @@ free_value (MetaPropValue *value)
|
||||
break;
|
||||
case META_PROP_VALUE_SYNC_COUNTER:
|
||||
break;
|
||||
case META_PROP_VALUE_SYNC_COUNTER_LIST:
|
||||
meta_XFree (value->v.xcounter_list.counters);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -157,7 +157,8 @@ typedef enum
|
||||
META_PROP_VALUE_WM_HINTS,
|
||||
META_PROP_VALUE_CLASS_HINT,
|
||||
META_PROP_VALUE_SIZE_HINTS,
|
||||
META_PROP_VALUE_SYNC_COUNTER /* comes back as CARDINAL */
|
||||
META_PROP_VALUE_SYNC_COUNTER, /* comes back as CARDINAL */
|
||||
META_PROP_VALUE_SYNC_COUNTER_LIST /* comes back as CARDINAL */
|
||||
} MetaPropValueType;
|
||||
|
||||
/* used to request/return/store property values */
|
||||
@ -177,6 +178,11 @@ typedef struct
|
||||
XClassHint class_hint;
|
||||
#ifdef HAVE_XSYNC
|
||||
XSyncCounter xcounter;
|
||||
struct
|
||||
{
|
||||
gulong *counters;
|
||||
int n_counters;
|
||||
} xcounter_list;
|
||||
#endif
|
||||
|
||||
struct
|
||||
|
@ -173,7 +173,9 @@ item(_NET_WM_STATE_STICKY)
|
||||
item(_NET_WM_FULLSCREEN_MONITORS)
|
||||
item(_NET_WM_STATE_FOCUSED)
|
||||
item(_NET_WM_BYPASS_COMPOSITOR)
|
||||
item(_NET_WM_DONT_BYPASS_COMPOSITOR)
|
||||
item(_NET_WM_OPAQUE_REGION)
|
||||
item(_NET_WM_FRAME_DRAWN)
|
||||
item(_NET_WM_FRAME_TIMINGS)
|
||||
|
||||
#if 0
|
||||
/* We apparently never use: */
|
||||
|
93
src/meta/barrier.h
Normal file
93
src/meta/barrier.h
Normal file
@ -0,0 +1,93 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
|
||||
|
||||
#ifndef __META_BARRIER_H__
|
||||
#define __META_BARRIER_H__
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
#include <meta/display.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define META_TYPE_BARRIER (meta_barrier_get_type ())
|
||||
#define META_BARRIER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_BARRIER, MetaBarrier))
|
||||
#define META_BARRIER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_BARRIER, MetaBarrierClass))
|
||||
#define META_IS_BARRIER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_BARRIER))
|
||||
#define META_IS_BARRIER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_BARRIER))
|
||||
#define META_BARRIER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_BARRIER, MetaBarrierClass))
|
||||
|
||||
typedef struct _MetaBarrier MetaBarrier;
|
||||
typedef struct _MetaBarrierClass MetaBarrierClass;
|
||||
typedef struct _MetaBarrierPrivate MetaBarrierPrivate;
|
||||
|
||||
typedef struct _MetaBarrierEvent MetaBarrierEvent;
|
||||
|
||||
struct _MetaBarrier
|
||||
{
|
||||
GObject parent;
|
||||
|
||||
MetaBarrierPrivate *priv;
|
||||
};
|
||||
|
||||
struct _MetaBarrierClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
GType meta_barrier_get_type (void) G_GNUC_CONST;
|
||||
|
||||
gboolean meta_barrier_is_active (MetaBarrier *barrier);
|
||||
void meta_barrier_destroy (MetaBarrier *barrier);
|
||||
void meta_barrier_release (MetaBarrier *barrier,
|
||||
MetaBarrierEvent *event);
|
||||
|
||||
/* Keep in sync with XFixes */
|
||||
typedef enum {
|
||||
META_BARRIER_DIRECTION_POSITIVE_X = 1 << 0,
|
||||
META_BARRIER_DIRECTION_POSITIVE_Y = 1 << 1,
|
||||
META_BARRIER_DIRECTION_NEGATIVE_X = 1 << 2,
|
||||
META_BARRIER_DIRECTION_NEGATIVE_Y = 1 << 3,
|
||||
} MetaBarrierDirection;
|
||||
|
||||
/**
|
||||
* MetaBarrierEvent:
|
||||
* @event_id: A unique integer ID identifying a
|
||||
* consecutive series of motions at or along the barrier
|
||||
* @time: Server time, in milliseconds
|
||||
* @dt: Server time, in milliseconds, since the last event
|
||||
* sent for this barrier
|
||||
* @x: The cursor X position in screen coordinates
|
||||
* @y: The cursor Y position in screen coordinates.
|
||||
* @dx: If the cursor hadn't been constrained, the delta
|
||||
* of X movement past the barrier, in screen coordinates
|
||||
* @dy: If the cursor hadn't been constrained, the delta
|
||||
* of X movement past the barrier, in screen coordinates
|
||||
* @released: A boolean flag, %TRUE if this event generated
|
||||
* by the pointer leaving the barrier as a result of a client
|
||||
* calling meta_barrier_release() (will be set only for
|
||||
* MetaBarrier::leave signals)
|
||||
* @grabbed: A boolean flag, %TRUE if the pointer was grabbed
|
||||
* at the time this event was sent
|
||||
*/
|
||||
struct _MetaBarrierEvent {
|
||||
/* < private > */
|
||||
volatile guint ref_count;
|
||||
|
||||
/* < public > */
|
||||
int event_id;
|
||||
int dt;
|
||||
guint32 time;
|
||||
double x;
|
||||
double y;
|
||||
double dx;
|
||||
double dy;
|
||||
gboolean released;
|
||||
gboolean grabbed;
|
||||
};
|
||||
|
||||
#define META_TYPE_BARRIER_EVENT (meta_barrier_event_get_type ())
|
||||
GType meta_barrier_event_get_type (void) G_GNUC_CONST;
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __META_BARRIER_H__ */
|
@ -39,11 +39,11 @@ ClutterActor *meta_get_overlay_group_for_screen (MetaScreen *screen);
|
||||
Window meta_get_overlay_window (MetaScreen *screen);
|
||||
GList *meta_get_window_actors (MetaScreen *screen);
|
||||
ClutterActor *meta_get_window_group_for_screen (MetaScreen *screen);
|
||||
ClutterActor *meta_get_top_window_group_for_screen (MetaScreen *screen);
|
||||
|
||||
void meta_disable_unredirect_for_screen (MetaScreen *screen);
|
||||
void meta_enable_unredirect_for_screen (MetaScreen *screen);
|
||||
|
||||
ClutterActor *meta_get_background_actor_for_screen (MetaScreen *screen);
|
||||
void meta_set_stage_input_region (MetaScreen *screen,
|
||||
XserverRegion region);
|
||||
void meta_empty_stage_input_region (MetaScreen *screen);
|
||||
|
@ -152,10 +152,14 @@ void meta_compositor_window_mapped (MetaCompositor *compositor,
|
||||
void meta_compositor_window_unmapped (MetaCompositor *compositor,
|
||||
MetaWindow *window);
|
||||
void meta_compositor_sync_window_geometry (MetaCompositor *compositor,
|
||||
MetaWindow *window);
|
||||
void meta_compositor_set_updates (MetaCompositor *compositor,
|
||||
MetaWindow *window,
|
||||
gboolean updates);
|
||||
gboolean did_placement);
|
||||
void meta_compositor_set_updates_frozen (MetaCompositor *compositor,
|
||||
MetaWindow *window,
|
||||
gboolean updates_frozen);
|
||||
void meta_compositor_queue_frame_drawn (MetaCompositor *compositor,
|
||||
MetaWindow *window,
|
||||
gboolean no_delay_frame);
|
||||
|
||||
void meta_compositor_sync_stack (MetaCompositor *compositor,
|
||||
MetaScreen *screen,
|
||||
|
@ -68,6 +68,7 @@ void meta_display_get_compositor_version (MetaDisplay *display,
|
||||
int *major,
|
||||
int *minor);
|
||||
int meta_display_get_xinput_opcode (MetaDisplay *display);
|
||||
gboolean meta_display_supports_extended_barriers (MetaDisplay *display);
|
||||
Display *meta_display_get_xdisplay (MetaDisplay *display);
|
||||
MetaCompositor *meta_display_get_compositor (MetaDisplay *display);
|
||||
GSList *meta_display_get_screens (MetaDisplay *display);
|
||||
|
@ -24,9 +24,13 @@
|
||||
#define META_BACKGROUND_ACTOR_H
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
#include <cogl/cogl.h>
|
||||
|
||||
#include <meta/gradient.h>
|
||||
#include <meta/screen.h>
|
||||
|
||||
#include <gsettings-desktop-schemas/gdesktop-enums.h>
|
||||
|
||||
/**
|
||||
* MetaBackgroundActor:
|
||||
*
|
||||
@ -60,41 +64,6 @@ struct _MetaBackgroundActor
|
||||
|
||||
GType meta_background_actor_get_type (void);
|
||||
|
||||
ClutterActor *meta_background_actor_new_for_screen (MetaScreen *screen);
|
||||
|
||||
/**
|
||||
* MetaSnippetHook:
|
||||
* Temporary hack to work around Cogl not exporting CoglSnippetHook in
|
||||
* the 1.0 API. Don't use.
|
||||
*/
|
||||
typedef enum {
|
||||
/* Per pipeline vertex hooks */
|
||||
META_SNIPPET_HOOK_VERTEX = 0,
|
||||
META_SNIPPET_HOOK_VERTEX_TRANSFORM,
|
||||
|
||||
/* Per pipeline fragment hooks */
|
||||
META_SNIPPET_HOOK_FRAGMENT = 2048,
|
||||
|
||||
/* Per layer vertex hooks */
|
||||
META_SNIPPET_HOOK_TEXTURE_COORD_TRANSFORM = 4096,
|
||||
|
||||
/* Per layer fragment hooks */
|
||||
META_SNIPPET_HOOK_LAYER_FRAGMENT = 6144,
|
||||
META_SNIPPET_HOOK_TEXTURE_LOOKUP
|
||||
} MetaSnippetHook;
|
||||
|
||||
|
||||
void meta_background_actor_add_glsl_snippet (MetaBackgroundActor *actor,
|
||||
MetaSnippetHook hook,
|
||||
const char *declarations,
|
||||
const char *code,
|
||||
gboolean is_replace);
|
||||
|
||||
void meta_background_actor_set_uniform_float (MetaBackgroundActor *actor,
|
||||
const char *uniform_name,
|
||||
int n_components,
|
||||
int count,
|
||||
const float *uniform,
|
||||
int uniform_length);
|
||||
ClutterActor *meta_background_actor_new (void);
|
||||
|
||||
#endif /* META_BACKGROUND_ACTOR_H */
|
||||
|
46
src/meta/meta-background-group.h
Normal file
46
src/meta/meta-background-group.h
Normal file
@ -0,0 +1,46 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#ifndef META_BACKGROUND_GROUP_H
|
||||
#define META_BACKGROUND_GROUP_H
|
||||
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
/**
|
||||
* MetaBackgroundGroup:
|
||||
*
|
||||
* This class is a subclass of ClutterGroup with special handling for
|
||||
* MetaBackgroundActor when painting the group. It makes sure to only
|
||||
* draw the parts of the backgrounds not occluded by opaque windows.
|
||||
*
|
||||
* See #MetaWindowGroup for more information behind the motivation,
|
||||
* and details on implementation.
|
||||
*/
|
||||
|
||||
#define META_TYPE_BACKGROUND_GROUP (meta_background_group_get_type ())
|
||||
#define META_BACKGROUND_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_BACKGROUND_GROUP, MetaBackgroundGroup))
|
||||
#define META_BACKGROUND_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_BACKGROUND_GROUP, MetaBackgroundGroupClass))
|
||||
#define META_IS_BACKGROUND_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_BACKGROUND_GROUP))
|
||||
#define META_IS_BACKGROUND_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_BACKGROUND_GROUP))
|
||||
#define META_BACKGROUND_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_BACKGROUND_GROUP, MetaBackgroundGroupClass))
|
||||
|
||||
typedef struct _MetaBackgroundGroup MetaBackgroundGroup;
|
||||
typedef struct _MetaBackgroundGroupClass MetaBackgroundGroupClass;
|
||||
typedef struct _MetaBackgroundGroupPrivate MetaBackgroundGroupPrivate;
|
||||
|
||||
struct _MetaBackgroundGroupClass
|
||||
{
|
||||
ClutterGroupClass parent_class;
|
||||
};
|
||||
|
||||
struct _MetaBackgroundGroup
|
||||
{
|
||||
ClutterGroup parent;
|
||||
|
||||
MetaBackgroundGroupPrivate *priv;
|
||||
};
|
||||
|
||||
GType meta_background_group_get_type (void);
|
||||
|
||||
ClutterActor *meta_background_group_new (void);
|
||||
|
||||
#endif /* META_BACKGROUND_GROUP_H */
|
110
src/meta/meta-background.h
Normal file
110
src/meta/meta-background.h
Normal file
@ -0,0 +1,110 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
/*
|
||||
* meta-background.h: CoglTexture for paintnig the system background
|
||||
*
|
||||
* Copyright 2013 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_BACKGROUND_H
|
||||
#define META_BACKGROUND_H
|
||||
|
||||
#include <cogl/cogl.h>
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
#include <meta/gradient.h>
|
||||
#include <meta/screen.h>
|
||||
|
||||
#include <gsettings-desktop-schemas/gdesktop-enums.h>
|
||||
|
||||
/**
|
||||
* MetaBackground:
|
||||
*
|
||||
* This class handles loading a background from file, screenshot, or
|
||||
* color scheme. The resulting object can be associated with one or
|
||||
* more #MetaBackgroundActor objects to handle loading the background.
|
||||
*/
|
||||
|
||||
#define META_TYPE_BACKGROUND (meta_background_get_type ())
|
||||
#define META_BACKGROUND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_BACKGROUND, MetaBackground))
|
||||
#define META_BACKGROUND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_BACKGROUND, MetaBackgroundClass))
|
||||
#define META_IS_BACKGROUND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_BACKGROUND))
|
||||
#define META_IS_BACKGROUND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_BACKGROUND))
|
||||
#define META_BACKGROUND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_BACKGROUND, MetaBackgroundClass))
|
||||
|
||||
typedef struct _MetaBackground MetaBackground;
|
||||
typedef struct _MetaBackgroundClass MetaBackgroundClass;
|
||||
typedef struct _MetaBackgroundPrivate MetaBackgroundPrivate;
|
||||
|
||||
/**
|
||||
* MetaBackgroundEffects:
|
||||
* Which effects to enable on the background
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_BACKGROUND_EFFECTS_NONE = 0,
|
||||
META_BACKGROUND_EFFECTS_DESATURATE = 1 << 0,
|
||||
META_BACKGROUND_EFFECTS_BLUR = 1 << 1,
|
||||
META_BACKGROUND_EFFECTS_VIGNETTE = 1 << 2,
|
||||
} MetaBackgroundEffects;
|
||||
|
||||
struct _MetaBackgroundClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
struct _MetaBackground
|
||||
{
|
||||
GObject parent;
|
||||
|
||||
MetaBackgroundPrivate *priv;
|
||||
};
|
||||
|
||||
GType meta_background_get_type (void);
|
||||
|
||||
MetaBackground *meta_background_new (MetaScreen *screen,
|
||||
int monitor,
|
||||
MetaBackgroundEffects effects);
|
||||
MetaBackground *meta_background_copy (MetaBackground *self,
|
||||
int monitor,
|
||||
MetaBackgroundEffects effects);
|
||||
|
||||
void meta_background_load_gradient (MetaBackground *self,
|
||||
GDesktopBackgroundShading shading_direction,
|
||||
ClutterColor *color,
|
||||
ClutterColor *second_color);
|
||||
void meta_background_load_color (MetaBackground *self,
|
||||
ClutterColor *color);
|
||||
void meta_background_load_still_frame (MetaBackground *self);
|
||||
void meta_background_load_file_async (MetaBackground *self,
|
||||
const char *filename,
|
||||
GDesktopBackgroundStyle style,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
gboolean meta_background_load_file_finish (MetaBackground *self,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
|
||||
const char *meta_background_get_filename (MetaBackground *self);
|
||||
GDesktopBackgroundStyle meta_background_get_style (MetaBackground *self);
|
||||
GDesktopBackgroundShading meta_background_get_shading (MetaBackground *self);
|
||||
const ClutterColor *meta_background_get_color (MetaBackground *self);
|
||||
const ClutterColor *meta_background_get_second_color (MetaBackground *self);
|
||||
|
||||
#endif /* META_BACKGROUND_H */
|
@ -70,10 +70,10 @@ void meta_shaped_texture_update_area (MetaShapedTexture *stex,
|
||||
void meta_shaped_texture_set_pixmap (MetaShapedTexture *stex,
|
||||
Pixmap pixmap);
|
||||
|
||||
CoglHandle meta_shaped_texture_get_texture (MetaShapedTexture *stex);
|
||||
CoglTexture * meta_shaped_texture_get_texture (MetaShapedTexture *stex);
|
||||
|
||||
void meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex,
|
||||
CoglHandle mask_texture);
|
||||
CoglTexture *mask_texture);
|
||||
|
||||
/* Assumes ownership of clip_region */
|
||||
void meta_shaped_texture_set_clip_region (MetaShapedTexture *stex,
|
||||
|
@ -81,6 +81,10 @@ int meta_screen_get_current_monitor (MetaScreen *screen);
|
||||
void meta_screen_get_monitor_geometry (MetaScreen *screen,
|
||||
int monitor,
|
||||
MetaRectangle *geometry);
|
||||
|
||||
int meta_screen_get_monitor_index_for_rect (MetaScreen *screen,
|
||||
MetaRectangle *rect);
|
||||
|
||||
void meta_screen_focus_default_window (MetaScreen *screen,
|
||||
guint32 timestamp);
|
||||
|
||||
|
@ -141,6 +141,8 @@ void meta_window_foreach_ancestor (MetaWindow *window,
|
||||
|
||||
MetaMaximizeFlags meta_window_get_maximized (MetaWindow *window);
|
||||
gboolean meta_window_is_fullscreen (MetaWindow *window);
|
||||
gboolean meta_window_is_screen_sized (MetaWindow *window);
|
||||
gboolean meta_window_is_monitor_sized (MetaWindow *window);
|
||||
gboolean meta_window_is_on_primary_monitor (MetaWindow *window);
|
||||
gboolean meta_window_requested_bypass_compositor (MetaWindow *window);
|
||||
gboolean meta_window_requested_dont_bypass_compositor (MetaWindow *window);
|
||||
@ -149,6 +151,8 @@ gboolean meta_window_is_mapped (MetaWindow *window);
|
||||
gboolean meta_window_toplevel_is_mapped (MetaWindow *window);
|
||||
gboolean meta_window_get_icon_geometry (MetaWindow *window,
|
||||
MetaRectangle *rect);
|
||||
void meta_window_set_icon_geometry (MetaWindow *window,
|
||||
MetaRectangle *rect);
|
||||
void meta_window_maximize (MetaWindow *window,
|
||||
MetaMaximizeFlags directions);
|
||||
void meta_window_unmaximize (MetaWindow *window,
|
||||
@ -195,6 +199,14 @@ void meta_window_focus (MetaWindow *window,
|
||||
void meta_window_check_alive (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_window_get_work_area_current_monitor (MetaWindow *window,
|
||||
MetaRectangle *area);
|
||||
void meta_window_get_work_area_for_monitor (MetaWindow *window,
|
||||
int which_monitor,
|
||||
MetaRectangle *area);
|
||||
void meta_window_get_work_area_all_monitors (MetaWindow *window,
|
||||
MetaRectangle *area);
|
||||
|
||||
void meta_window_begin_grab_op (MetaWindow *window,
|
||||
MetaGrabOp op,
|
||||
gboolean frame_action,
|
||||
|
@ -52,6 +52,9 @@ GType meta_workspace_get_type (void);
|
||||
int meta_workspace_index (MetaWorkspace *workspace);
|
||||
MetaScreen *meta_workspace_get_screen (MetaWorkspace *workspace);
|
||||
GList* meta_workspace_list_windows (MetaWorkspace *workspace);
|
||||
void meta_workspace_get_work_area_for_monitor (MetaWorkspace *workspace,
|
||||
int which_monitor,
|
||||
MetaRectangle *area);
|
||||
void meta_workspace_get_work_area_all_monitors (MetaWorkspace *workspace,
|
||||
MetaRectangle *area);
|
||||
void meta_workspace_activate (MetaWorkspace *workspace, guint32 timestamp);
|
||||
|
@ -88,8 +88,8 @@
|
||||
<default>true</default>
|
||||
<_summary>Auto maximize nearly monitor sized windows</_summary>
|
||||
<_description>
|
||||
If enabled, monitor nearly monitor sized windows automatically get
|
||||
maximized when mapped.
|
||||
If enabled, new windows that are initially the size of the monitor
|
||||
automatically get maximized.
|
||||
</_description>
|
||||
</key>
|
||||
|
||||
|
@ -67,35 +67,58 @@ meta_ui_resize_popup_free (MetaResizePopup *popup)
|
||||
g_free (popup);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
size_window_draw (GtkWidget *widget,
|
||||
cairo_t *cr,
|
||||
MetaResizePopup *popup)
|
||||
{
|
||||
GtkStyleContext *context;
|
||||
gint width, height;
|
||||
|
||||
context = gtk_widget_get_style_context (widget);
|
||||
width = gtk_widget_get_allocated_width (widget);
|
||||
height = gtk_widget_get_allocated_height (widget);
|
||||
|
||||
gtk_render_background (context, cr, 0, 0, width, height);
|
||||
gtk_render_frame (context, cr, 0, 0, width, height);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
ensure_size_window (MetaResizePopup *popup)
|
||||
{
|
||||
GtkWidget *frame;
|
||||
|
||||
GdkVisual *visual;
|
||||
GdkScreen *screen;
|
||||
|
||||
if (popup->size_window)
|
||||
return;
|
||||
|
||||
|
||||
popup->size_window = gtk_window_new (GTK_WINDOW_POPUP);
|
||||
screen = gdk_display_get_screen (gdk_x11_lookup_xdisplay (popup->display),
|
||||
popup->screen_number);
|
||||
visual = gdk_screen_get_rgba_visual (screen);
|
||||
|
||||
gtk_window_set_screen (GTK_WINDOW (popup->size_window),
|
||||
gdk_display_get_screen (gdk_x11_lookup_xdisplay (popup->display),
|
||||
popup->screen_number));
|
||||
|
||||
/* never shrink the size window */
|
||||
gtk_window_set_resizable (GTK_WINDOW (popup->size_window),
|
||||
TRUE);
|
||||
|
||||
frame = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
|
||||
gtk_window_set_screen (GTK_WINDOW (popup->size_window), screen);
|
||||
if (visual != NULL)
|
||||
gtk_widget_set_visual (popup->size_window, visual);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (popup->size_window), frame);
|
||||
gtk_window_set_type_hint (GTK_WINDOW (popup->size_window),
|
||||
GDK_WINDOW_TYPE_HINT_TOOLTIP);
|
||||
gtk_window_set_resizable (GTK_WINDOW (popup->size_window), FALSE);
|
||||
|
||||
gtk_widget_set_app_paintable (popup->size_window, TRUE);
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (popup->size_window),
|
||||
GTK_STYLE_CLASS_TOOLTIP);
|
||||
g_signal_connect (popup->size_window, "draw",
|
||||
G_CALLBACK (size_window_draw), popup);
|
||||
|
||||
popup->size_label = gtk_label_new ("");
|
||||
gtk_misc_set_padding (GTK_MISC (popup->size_label), 3, 3);
|
||||
g_object_set (popup->size_label, "margin", 6, NULL);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (frame), popup->size_label);
|
||||
gtk_container_add (GTK_CONTAINER (popup->size_window), popup->size_label);
|
||||
|
||||
gtk_widget_show_all (frame);
|
||||
gtk_widget_show (popup->size_label);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -485,8 +485,7 @@ preview_collection (int font_size,
|
||||
|
||||
eventbox = gtk_event_box_new ();
|
||||
gtk_container_add (GTK_CONTAINER (eventbox), box);
|
||||
|
||||
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), eventbox);
|
||||
gtk_container_add (GTK_CONTAINER (sw), eventbox);
|
||||
|
||||
desktop_color.red = 0.32;
|
||||
desktop_color.green = 0.46;
|
||||
@ -709,8 +708,7 @@ previews_of_button_layouts (void)
|
||||
|
||||
eventbox = gtk_event_box_new ();
|
||||
gtk_container_add (GTK_CONTAINER (eventbox), box);
|
||||
|
||||
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), eventbox);
|
||||
gtk_container_add (GTK_CONTAINER (sw), eventbox);
|
||||
|
||||
desktop_color.red = 0.32;
|
||||
desktop_color.green = 0.46;
|
||||
|
@ -151,7 +151,7 @@ maybe_redirect_mouse_event (XEvent *xevent)
|
||||
return FALSE;
|
||||
|
||||
gmanager = gdk_display_get_device_manager (gdisplay);
|
||||
gdevice = gdk_device_manager_get_client_pointer (gmanager);
|
||||
gdevice = gdk_x11_device_manager_lookup (gmanager, META_VIRTUAL_CORE_POINTER_ID);
|
||||
|
||||
/* If GDK already thinks it has a grab, we better let it see events; this
|
||||
* is the menu-navigation case and events need to get sent to the appropriate
|
||||
|
Reference in New Issue
Block a user