Compare commits

..

14 Commits

Author SHA1 Message Date
ac49259fc7 Bump version to 3.7.5
Update NEWS
2013-02-05 22:59:13 +01:00
12dbb90a5a [l10n] Updated Italian translation. 2013-02-05 22:15:05 +01:00
90f2a3ae4c mutter-window-actor: Improve unredirect heuristic
Currently we only unredirect monitor sized override redirect windows.
This was supposed to catch fullscreen opengl games and improve
their performance.

Newer games like fullscreen webgl games and SDL2 using games (like L4D) as well as wine based games do not use override redirect windows so we need a better
heuristic to catch them.

GLX windows always damage the whole window when calling glxSwapBuffers and
never damage sub regions. So we can use that to detect them.

The new heuristic unredirects windows fullscreen windows that have damaged the
whole window more then 100 times in a row.

https://bugzilla.gnome.org/show_bug.cgi?id=683786
2013-02-05 21:13:27 +01:00
867e10dbcc Updated Traditional Chinese translation(Hong Kong and Taiwan) 2013-02-04 06:50:11 +08:00
9a57626556 meta-window-actor: Change unredirection hints to match spec changes
Change the bypass / dont_bypass compositor code to match the latest
spec.

https://bugzilla.gnome.org/show_bug.cgi?id=693064
2013-02-03 14:29:45 +01:00
b9e21b76ae Updated Polish translation 2013-02-02 23:58:30 +01:00
2ecc50af53 meta-window-actor: Correctly create a new pixmap when redirecting a window again
We should call meta_window_actor_detach not
meta_window_actor_queue_create_pixmap to create a new pixmap when we redirect a
previously unredirected window again.

https://bugzilla.gnome.org/show_bug.cgi?id=693042
2013-02-02 11:02:49 +01:00
1cebe19bbe Updated Hebrew translation. 2013-02-02 11:23:49 +02:00
71055556ee display: Require XFixes 5.0
We want to put barrier wrappers in mutter, which requre XFixes 5.0.
XFixes 5.0 was released in March, 2011, which should be old enough
to mandate support for.

https://bugzilla.gnome.org/show_bug.cgi?id=677215
2013-02-01 13:13:51 -05:00
4d9d66da65 window: Add set_icon_geometry() method
Using a public method for setting the (cached) icon geometry rather
than accessing the struct members directly allows setting the icon
geometry from extensions.

https://bugzilla.gnome.org/show_bug.cgi?id=692997
2013-02-01 15:08:48 +01:00
30bdadb519 window: Cache _NET_WM_ICON_GEOMETRY
Rather than doing a server round trip each time when retrieving the
icon geometry, use the existing property mechanism to cache it.

https://bugzilla.gnome.org/show_bug.cgi?id=692997
2013-02-01 15:08:38 +01:00
c388ccf477 window: Fix get_icon_geometry() annotation
gjs has had support for (out) parameters for quite some time now ...

https://bugzilla.gnome.org/show_bug.cgi?id=692997
2013-02-01 15:08:36 +01:00
a2d54bb2ab build: Bump gsettings-desktop-schemas requirement
... as needed for the new 'switch-applications' keybinding.

https://bugzilla.gnome.org/show_bug.cgi?id=692952
2013-01-31 19:13:04 +01:00
cefadb55b1 display: Request XI2.3
This matches commit:

http://git.gnome.org/browse/clutter/commit/?h=clutter-1.14&id=3e1450ba17fce90a8034cc525c67a87ff3cdd53d

Since XIQueryVersion, the bad API that it is, chooses the first client
version that it gets, we need to ensure that we pass XIQueryVersion the
new XI2.3 version, knowing fully well that Clutter won't be confused
by the new features.

https://bugzilla.gnome.org/show_bug.cgi?id=692877
2013-01-31 04:22:10 -05:00
25 changed files with 1419 additions and 1862 deletions

21
NEWS
View File

@ -1,3 +1,24 @@
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]

View File

@ -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], [5])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])
@ -71,7 +71,7 @@ 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

185
po/he.po
View File

@ -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"

618
po/it.po

File diff suppressed because it is too large Load Diff

160
po/pl.po
View File

@ -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-02 23:57+0100\n"
"PO-Revision-Date: 2013-02-02 23:58+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"
@ -260,12 +260,12 @@ msgstr "_Czekaj"
msgid "_Force Quit"
msgstr "_Zakończ"
#: ../src/core/display.c:394
#: ../src/core/display.c:393
#, 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:489
#, 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,7 +374,7 @@ 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"
@ -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:7285
#, 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:7951
#, 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:1478
#, 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:1489
#, 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"
@ -925,49 +925,49 @@ msgstr "Mod5"
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"
@ -1748,23 +1748,23 @@ msgstr "Błąd podczas wczytywania motywu: %s\n"
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:871
msgid "Normal Title Font"
msgstr "Zwykła czcionka tytułu"
#: ../src/ui/theme-viewer.c:876
#: ../src/ui/theme-viewer.c:877
msgid "Small Title Font"
msgstr "Mała czcionka tytułu"
#: ../src/ui/theme-viewer.c:882
#: ../src/ui/theme-viewer.c:883
msgid "Large Title Font"
msgstr "Duża czcionka tytułu"
#: ../src/ui/theme-viewer.c:887
#: ../src/ui/theme-viewer.c:888
msgid "Button Layouts"
msgstr "Układy przycisków"
#: ../src/ui/theme-viewer.c:892
#: ../src/ui/theme-viewer.c:893
msgid "Benchmark"
msgstr "Test wydajności"
@ -1773,7 +1773,7 @@ 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:1055
#, 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:1275
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:1277
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:1281
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:1283
#, 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:1289
#, 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:1293
#, 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:1296
#, 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:1361
#, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr ""

View File

@ -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 "以逗號分隔的複合視窗外掛程式清單"

View File

@ -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 "以逗號分隔的複合視窗外掛程式清單"

View File

@ -6,8 +6,6 @@ lib_LTLIBRARIES = libmutter.la
SUBDIRS=wm-tester tools compositor/plugins
INCLUDES= \
-DCLUTTER_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_API \
$(MUTTER_CFLAGS) \
-I$(srcdir) \
-I$(srcdir)/core \

View File

@ -25,13 +25,9 @@ struct _MetaCompositor
MetaPlugin *modal_plugin;
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;
gboolean show_redraw : 1;
gboolean debug : 1;
gboolean no_mipmaps : 1;
};
struct _MetaCompScreen
@ -45,9 +41,6 @@ struct _MetaCompScreen
GHashTable *windows_by_xid;
Window output;
CoglOnscreen *onscreen;
CoglFrameClosure *frame_closure;
/* Used for unredirecting fullscreen windows */
guint disable_unredirect_count;
MetaWindowActor *unredirected_window;
@ -60,8 +53,6 @@ struct _MetaCompScreen
MetaPluginManager *plugin_mgr;
};
#define META_SYNC_DELAY 2
void meta_switch_workspace_completed (MetaScreen *screen);
gboolean meta_begin_modal_for_plugin (MetaScreen *screen,
@ -74,9 +65,6 @@ 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 */

View File

@ -467,16 +467,6 @@ 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)
@ -546,11 +536,6 @@ 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);
/* Wait 6-ms after vblank before starting to draw next frame */
clutter_stage_set_sync_delay (CLUTTER_STAGE (info->stage), META_SYNC_DELAY);
meta_screen_get_size (screen, &width, &height);
clutter_actor_realize (info->stage);
@ -731,18 +716,10 @@ meta_compositor_remove_window (MetaCompositor *compositor,
}
void
meta_compositor_set_updates_frozen (MetaCompositor *compositor,
MetaWindow *window,
gboolean updates_frozen)
meta_compositor_set_updates (MetaCompositor *compositor,
MetaWindow *window,
gboolean updates)
{
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);
}
static gboolean
@ -1205,39 +1182,6 @@ meta_compositor_sync_screen_size (MetaCompositor *compositor,
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)
{
CoglContext *context = cogl_framebuffer_get_context (COGL_FRAMEBUFFER (onscreen));
gint64 current_time_cogl = cogl_get_clock_time (context);
gint64 now = g_get_monotonic_time ();
presentation_time =
now + (presentation_time_cogl - current_time_cogl) / 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)
{
@ -1245,15 +1189,6 @@ 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;
@ -1456,51 +1391,3 @@ 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 + 10000000)) /* 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 - 1000000 &&
server_time_usec < current_monotonic_time + 1000000)
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;
}

View File

@ -25,8 +25,10 @@
#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>

View File

@ -27,6 +27,9 @@
#include <config.h>
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#define COGL_ENABLE_EXPERIMENTAL_API
#include <meta/meta-shaped-texture.h>
#include "meta-texture-tower.h"

View File

@ -25,6 +25,9 @@
#include <config.h>
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#define COGL_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
#include "meta-texture-rectangle.h"

View File

@ -28,10 +28,6 @@ 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);
@ -49,8 +45,6 @@ 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);
cairo_region_t *meta_window_actor_get_obscured_region (MetaWindowActor *self);

View File

@ -10,6 +10,7 @@
#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>
@ -96,9 +97,6 @@ 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;
@ -108,16 +106,11 @@ struct _MetaWindowActorPrivate
guint needs_damage_all : 1;
guint received_damage : 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;
@ -126,15 +119,10 @@ struct _MetaWindowActorPrivate
guint no_more_x_calls : 1;
guint unredirected : 1;
};
typedef struct _FrameData FrameData;
struct _FrameData
{
int64_t frame_counter;
guint64 sync_request_serial;
gint64 frame_drawn_time;
/* This is used to detect fullscreen windows that need to be unredirected */
guint full_damage_frames_count;
guint does_full_damage : 1;
};
enum
@ -167,16 +155,8 @@ 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);
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)
{
@ -687,7 +667,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_handle_updates (self);
meta_window_actor_pre_paint (self);
meta_window_actor_get_shape_bounds (self, &bounds);
@ -949,31 +929,12 @@ meta_window_actor_thaw (MetaWindowActor *self)
if (self->priv->freeze_count)
return;
/* We ignore moves and resizes on frozen windows */
meta_window_actor_sync_actor_position (self);
/* 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);
else if (self->priv->needs_frame_drawn != 0)
{
/* A frame was marked by the client without actually doing any damage;
* 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 (self->priv->mapped && !self->priv->needs_pixmap)
{
const cairo_rectangle_int_t clip = { 0, 0, 1, 1 };
clutter_actor_queue_redraw_with_clip (self->priv->actor, &clip);
}
}
}
gboolean
@ -1201,48 +1162,59 @@ 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;
gboolean occupies_full_monitors = FALSE;
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))
return TRUE;
if (priv->argb32 && !meta_window_requested_bypass_compositor (metaWindow))
return FALSE;
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)
return TRUE;
for (i = 0; i < num_monitors; i++)
if (meta_window_is_fullscreen (metaWindow))
occupies_full_monitors = TRUE;
else if (meta_window_is_override_redirect (metaWindow))
{
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;
MetaScreen *screen = meta_window_get_screen (metaWindow);
MetaRectangle window_rect, monitor_rect;
int num_monitors = meta_screen_get_n_monitors (screen);
int screen_width, screen_height, i;
meta_screen_get_size (screen, &screen_width, &screen_height);
if (window_rect.x == 0 && window_rect.y == 0 &&
window_rect.width == screen_width && window_rect.height == screen_height)
occupies_full_monitors = 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)
occupies_full_monitors = TRUE;
}
}
if (!occupies_full_monitors)
return FALSE;
if (meta_window_requested_bypass_compositor (metaWindow))
return TRUE;
if (meta_window_is_override_redirect (metaWindow))
return TRUE;
if (priv->does_full_damage)
return TRUE;
return FALSE;
}
@ -1260,7 +1232,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
@ -1322,12 +1294,6 @@ meta_window_actor_destroy (MetaWindowActor *self)
clutter_actor_destroy (CLUTTER_ACTOR (self));
}
static gboolean
is_frozen (MetaWindowActor *self)
{
return self->priv->freeze_count ? TRUE : FALSE;
}
void
meta_window_actor_sync_actor_position (MetaWindowActor *self)
{
@ -1336,9 +1302,6 @@ meta_window_actor_sync_actor_position (MetaWindowActor *self)
meta_window_get_input_rect (priv->window, &window_rect);
if (is_frozen (self))
return;
if (priv->last_width != window_rect.width ||
priv->last_height != window_rect.height)
{
@ -1535,9 +1498,6 @@ meta_window_actor_new (MetaWindow *window)
if (priv->mapped)
meta_window_actor_queue_create_pixmap (self);
meta_window_actor_set_updates_frozen (self,
meta_window_updates_are_frozen (priv->window));
meta_window_actor_sync_actor_position (self);
/* Hang our compositor window state off the MetaWindow for fast retrieval */
@ -1927,16 +1887,40 @@ check_needs_shadow (MetaWindowActor *self)
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))
@ -2291,8 +2275,8 @@ meta_window_actor_update_shape (MetaWindowActor *self)
clutter_actor_queue_redraw (priv->actor);
}
static void
meta_window_actor_handle_updates (MetaWindowActor *self)
void
meta_window_actor_pre_paint (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
MetaScreen *screen = priv->screen;
@ -2344,160 +2328,6 @@ meta_window_actor_handle_updates (MetaWindowActor *self)
check_needs_pixmap (self);
check_needs_reshape (self);
check_needs_shadow (self);
if (priv->window->needs_frame_drawn)
{
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);
priv->window->needs_frame_drawn = FALSE;
if (priv->window->no_delay_frame)
{
ClutterActor *stage = clutter_actor_get_stage (CLUTTER_ACTOR (self));
clutter_stage_skip_sync_delay (CLUTTER_STAGE (stage));
}
}
}
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;
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;
gint64 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);
if (refresh_rate != 0.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;
}
if (refresh_interval != 0 && (gint32)refresh_interval == refresh_interval)
{
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
@ -2532,21 +2362,3 @@ 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);
}
}

View File

@ -223,7 +223,8 @@ struct _MetaDisplay
guint32 last_bell_time;
#endif
#ifdef HAVE_XSYNC
gint64 grab_sync_counter_wait_serial;
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
XSyncAlarm grab_sync_request_alarm;
#endif
int grab_resize_timeout_id;
@ -314,10 +315,8 @@ 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)
};
struct _MetaDisplayClass
@ -369,16 +368,6 @@ 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);

View File

@ -388,13 +388,11 @@ enable_compositor (MetaDisplay *display,
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;
}
@ -531,6 +529,10 @@ 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;
@ -639,11 +641,8 @@ meta_display_open (void)
the_display->xsync_event_base = 0;
}
else
{
the_display->have_xsync = TRUE;
XSyncSetPriority (the_display->xdisplay, None, 10);
}
the_display->have_xsync = TRUE;
meta_verbose ("Attempted to init Xsync, found version %d.%d error base %d event base %d\n",
major, minor,
the_display->xsync_error_base,
@ -756,20 +755,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,
@ -777,7 +780,7 @@ meta_display_open (void)
}
{
int major = 2, minor = 2;
int major = 2, minor = 3;
gboolean has_xi = FALSE;
if (XQueryExtension (the_display->xdisplay,
@ -1938,20 +1941,15 @@ event_callback (XEvent *event,
}
#ifdef HAVE_XSYNC
if (META_DISPLAY_HAS_XSYNC (display) &&
event->type == (display->xsync_event_base + XSyncAlarmNotify))
if (META_DISPLAY_HAS_XSYNC (display) &&
event->type == (display->xsync_event_base + XSyncAlarmNotify) &&
((XSyncAlarmNotifyEvent*)event)->alarm == display->grab_sync_request_alarm)
{
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 */
}
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 */
}
#endif /* HAVE_XSYNC */
@ -3559,39 +3557,6 @@ meta_display_unregister_x_window (MetaDisplay *display,
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->window_ids, &alarm);
}
void
meta_display_register_sync_alarm (MetaDisplay *display,
XSyncAlarm *alarmp,
MetaWindow *window)
{
g_return_if_fail (g_hash_table_lookup (display->window_ids, alarmp) == NULL);
g_hash_table_insert (display->window_ids, alarmp, window);
}
void
meta_display_unregister_sync_alarm (MetaDisplay *display,
XSyncAlarm alarm)
{
g_return_if_fail (g_hash_table_lookup (display->window_ids, &alarm) != NULL);
g_hash_table_remove (display->window_ids, &alarm);
}
#endif /* HAVE_XSYNC */
void
meta_display_notify_window_created (MetaDisplay *display,
MetaWindow *window)
@ -3905,6 +3870,7 @@ 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;
@ -3925,11 +3891,55 @@ 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)
{
meta_window_create_sync_request_alarm (display->grab_window);
window->sync_request_time.tv_sec = 0;
window->sync_request_time.tv_usec = 0;
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);
}
#endif
}
@ -4042,6 +4052,14 @@ 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;

View File

@ -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;
@ -336,32 +346,14 @@ struct _MetaWindow
/* if non-NULL, the bounds of the window frame */
cairo_region_t *frame_bounds;
/* if TRUE, we are freezing updates during a resize */
guint updates_frozen_for_resize : 1;
/* if TRUE, the we have the new form of sync request counter which
* also handles application frames */
guint extended_sync_request_counter : 1;
/* if TRUE, we still need to send a _NET_WM_FRAME_DRAWN message for the
* last update the sync request counter */
guint needs_frame_drawn : 1;
/* if TRUE, the frame that was just drawn was drawn without any delay
* on the client's part and thus is high-priority - if we add delay
* we might cause the client to miss it's target frame rate */
guint no_delay_frame : 1;
/* Note: can be NULL */
GSList *struts;
#ifdef HAVE_XSYNC
/* XSync update counter */
XSyncCounter sync_request_counter;
gint64 sync_request_serial;
guint 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
@ -409,6 +401,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 */
@ -433,8 +428,7 @@ struct _MetaWindow
MetaWindow *tile_match;
/* Bypass compositor hints */
guint bypass_compositor : 1;
guint dont_bypass_compositor : 1;
guint bypass_compositor;
};
struct _MetaWindowClass
@ -605,7 +599,7 @@ void meta_window_set_gravity (MetaWindow *window,
#ifdef HAVE_XSYNC
void meta_window_update_sync_request_counter (MetaWindow *window,
gint64 new_counter_value);
guint64 new_counter_value);
#endif /* HAVE_XSYNC */
void meta_window_handle_mouse_grab_op_event (MetaWindow *window,
@ -641,8 +635,6 @@ 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);
@ -675,6 +667,4 @@ 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

View File

@ -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,
@ -882,32 +912,12 @@ reload_update_counter (MetaWindow *window,
{
if (value->type != META_PROP_VALUE_INVALID)
{
meta_window_destroy_sync_request_alarm (window);
window->sync_request_counter = None;
#ifdef HAVE_XSYNC
if (value->v.xcounter_list.n_counters == 0)
{
meta_warning ("_NET_WM_SYNC_REQUEST_COUNTER is empty\n");
return;
}
XSyncCounter counter = value->v.xcounter;
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);
window->sync_request_counter = counter;
meta_verbose ("Window has _NET_WM_SYNC_REQUEST_COUNTER 0x%lx\n",
window->sync_request_counter);
#endif
}
}
@ -1609,53 +1619,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, \
@ -1728,7 +1710,7 @@ meta_display_init_window_prop_hooks (MetaDisplay *display)
{ 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_LIST, reload_update_counter, TRUE, TRUE },
{ display->atom__NET_WM_SYNC_REQUEST_COUNTER, META_PROP_VALUE_SYNC_COUNTER, reload_update_counter, TRUE, FALSE },
{ 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 },
@ -1748,7 +1730,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 },
@ -1756,7 +1738,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 },
};

View File

@ -1015,7 +1015,6 @@ 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;
@ -1819,8 +1818,6 @@ 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);
@ -3659,7 +3656,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;
}
/**
@ -3670,7 +3667,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
@ -4434,112 +4431,16 @@ 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 old style, we're responsible for setting the initial
* value of the counter. In the new (extended style), the counter
* value is initialized by the client before mapping the window
*/
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;
/* 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 */
wait_serial = window->sync_request_serial + 240;
window->sync_request_serial++;
window->display->grab_sync_counter_wait_serial = wait_serial;
XSyncIntToValue (&value, window->sync_request_serial);
ev.type = ClientMessage;
ev.window = window->xwindow;
@ -4552,9 +4453,8 @@ 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] = wait_serial & G_GUINT64_CONSTANT(0xffffffff);
ev.data.l[3] = wait_serial >> 32;
ev.data.l[4] = window->extended_sync_request_counter ? 1 : 0;
ev.data.l[2] = XSyncValueLow32 (value);
ev.data.l[3] = XSyncValueHigh32 (value);
/* We don't need to trap errors here as we are already
* inside an error_trap_push()/pop() pair.
@ -4566,43 +4466,6 @@ 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)
@ -5051,28 +4914,12 @@ meta_window_move_resize_internal (MetaWindow *window,
* efficiently as possible
*/
/* 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.
/* configure frame first if we grow more than we shrink
*/
if (window->extended_sync_request_counter)
{
configure_frame_first = TRUE;
}
else
{
size_dx = w - window->rect.width;
size_dy = h - window->rect.height;
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);
@ -5113,15 +4960,14 @@ meta_window_move_resize_internal (MetaWindow *window,
meta_error_trap_push (window->display);
#ifdef HAVE_XSYNC
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 &&
if (window->sync_request_counter != None &&
window->display->grab_sync_request_alarm != None &&
window->sync_request_time.tv_usec == 0 &&
window->sync_request_time.tv_sec == 0)
{
/* turn off updating */
meta_window_set_updates_frozen_for_resize (window, TRUE);
if (window->display->compositor)
meta_compositor_set_updates (window->display->compositor, window, FALSE);
send_sync_request (window);
}
@ -7298,19 +7144,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.
*/
@ -7318,33 +7159,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;
}
@ -7352,6 +7172,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)
@ -8680,7 +8524,7 @@ check_moveresize_frequency (MetaWindow *window,
#ifdef HAVE_XSYNC
if (!window->disable_sync &&
window->sync_request_alarm != None)
window->display->grab_sync_request_alarm != None)
{
if (window->sync_request_time.tv_sec != 0 ||
window->sync_request_time.tv_usec != 0)
@ -9251,7 +9095,8 @@ update_resize (MetaWindow *window,
}
/* If we get here, it means the client should have redrawn itself */
meta_window_set_updates_frozen_for_resize (window, FALSE);
if (window->display->compositor)
meta_compositor_set_updates (window->display->compositor, window, TRUE);
/* Remove any scheduled compensation events */
if (window->display->grab_resize_timeout_id)
@ -9444,23 +9289,13 @@ update_tile_mode (MetaWindow *window)
#ifdef HAVE_XSYNC
void
meta_window_update_sync_request_counter (MetaWindow *window,
gint64 new_counter_value)
guint64 new_counter_value)
{
if (window->extended_sync_request_counter &&
new_counter_value % 2 == 0)
if (window->display->grab_op != META_GRAB_OP_NONE &&
window == window->display->grab_window &&
meta_grab_op_is_mouse (window->display->grab_op))
{
window->needs_frame_drawn = TRUE;
window->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)
{
meta_topic (META_DEBUG_RESIZING,
"Alarm event received last motion x = %d y = %d\n",
window->display->grab_latest_motion_x,
@ -9474,13 +9309,36 @@ 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;
* 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);
/* 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;
}
}
}
#endif /* HAVE_XSYNC */
@ -9520,7 +9378,8 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
xev->root_x,
xev->root_y,
TRUE);
meta_window_set_updates_frozen_for_resize (window, FALSE);
if (window->display->compositor)
meta_compositor_set_updates (window->display->compositor, window, TRUE);
/* If a tiled window has been dragged free with a
* mouse resize without snapping back to the tiled

View File

@ -580,23 +580,6 @@ 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
@ -1032,7 +1015,6 @@ 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;
}
@ -1183,29 +1165,20 @@ meta_prop_get_values (MetaDisplay *display,
&values[i].v.size_hints.flags))
values[i].type = META_PROP_VALUE_INVALID;
break;
#ifdef HAVE_XSYNC
case META_PROP_VALUE_SYNC_COUNTER:
#ifdef HAVE_XSYNC
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;
}
break;
#endif
break;
}
next:
@ -1258,9 +1231,6 @@ 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;
}
}

View File

@ -157,8 +157,7 @@ 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_LIST /* comes back as CARDINAL */
META_PROP_VALUE_SYNC_COUNTER /* comes back as CARDINAL */
} MetaPropValueType;
/* used to request/return/store property values */
@ -178,11 +177,6 @@ typedef struct
XClassHint class_hint;
#ifdef HAVE_XSYNC
XSyncCounter xcounter;
struct
{
gulong *counters;
int n_counters;
} xcounter_list;
#endif
struct

View File

@ -173,9 +173,6 @@ 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_FRAME_DRAWN)
item(_NET_WM_FRAME_TIMINGS)
#if 0
/* We apparently never use: */

View File

@ -153,9 +153,9 @@ void meta_compositor_window_unmapped (MetaCompositor *compositor,
MetaWindow *window);
void meta_compositor_sync_window_geometry (MetaCompositor *compositor,
MetaWindow *window);
void meta_compositor_set_updates_frozen (MetaCompositor *compositor,
void meta_compositor_set_updates (MetaCompositor *compositor,
MetaWindow *window,
gboolean updates_frozen);
gboolean updates);
void meta_compositor_sync_stack (MetaCompositor *compositor,
MetaScreen *screen,

View File

@ -149,6 +149,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,