Compare commits

..

30 Commits

Author SHA1 Message Date
d317c1c7e8 Consistently use meta_grab_op_is_resizing() for _NET_WM_SYNC_REQUEST
In different places we checked the grab op differently when determing
whether we are using _NET_WM_SYNC_REQUEST. This was somewhat covered
up previously by the fact that we only had a sync alarm when using
_NET_WM_SYNC_REQUEST, but that is no longer the case, so consistently
use meta_grab_op_is_resizing() everywhere.
2013-01-30 15:47:52 -05:00
cf72589635 Distinguish "no delay" frames from spontaneous drawing
When a client is drawing as hard as possible (without sleeping
between frames) we need to draw as soon possible, since sleeping
will decrease the effective frame rate shown to the user, and
can also result in the system never kicking out of power-saving
mode because it doesn't look fully utilized.

Use the amount the client increments the counter value by when
ending the frame to distinguish these cases:

 - Increment by 1: a no-delay frame
 - Increment by more than 1: a non-urgent frame, handle normally

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
3ae070720d Send _NET_WM_FRAME_TIMINGS messages
We previously had timestamp information stubbed out in
_NET_WM_FRAME_DRAWN. Instead of this, add a high-resolution timestamp
in _NET_WM_FRAME_DRAWN then send a _NET_WM_FRAME_TIMINGS message
after when we have complete frame timing information, representing
the "presentation time" of the frame as an offset from the timestamp
in _NET_WM_FRAME_DRAWN.

To provide maximum space in the messages,_NET_WM_FRAME_DRAWN and
_NET_WM_FRAME_TIMINGS are not done as WM_PROTOCOLS messages but
have their own message types.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
4b332640eb Add meta_compositor_monotonic_time_to_server_time()
Add a function to convert from g_get_monotonic_time() to a
"high-resolution server timestamp" with microsecond precision.
These timestamps will be used when communicating frame timing
information to the client.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
0d36f4f1dd Use XSyncSetPriority()
Use XSyncSetPriority() to prioritize the compositor above applications
for X server priority. In practice, this makes little difference because
the Xorg "smart scheduler" will schedule in a single application for
time slices that exceed the frame drawing time, but it's theoretically
right and might make a difference if the X server scheduler is improved.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
0c2491e3c9 Use clutter_stage_set_sync_delay()
Using a "sync delay" where we wait for 2 ms after the vblank before
starting to draw the next frame provides for much more predictable
latency for applications. An application can know that if it completes
a frame any time between 8ms before the vblank to the vblank,
it will reliably be drawn on the following vblank period, rather than
having an unpredictable latency depending on whether the compositor
is currently busy drawing a frame or not.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
6de7f4ce36 Enable CLUTTER / COGL_ENABLE_EXPERIMENTAL_API globally
Instead of defining CLUTTER_ENABLE_EXPERIMENTAL_API and
COGL_ENABLE_EXPERIMENTAL_API in individual source files, enable
them on the command line. We weren't tracking exactly what pieces of
experimental API we were using and we were using the experimental
API in most source files that used Clutter and Cogl, so the
local #defines were annoying rather than useful.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
5f77669ba8 Handle _NET_WM_SYNC_REQUEST_COUNTER updates without redraw
It's possible that a client might update the (extended)
_NET_WM_SYNC_REQUEST_COUNTER counter twice without actually drawing
anything. In that case, we still should send a _NET_WM_FRAME_DRAWN
message since it's hard for a client to know every case in which
no damage is generated. For now, do it the easy way by forcing a
stage repaint.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
7a9663500e MetaWindow: always resize the frame first when we have synchronization
Resizing the frame triggers creation of a new backing pixmap for the
window, so we should do that first before we resize the client window
and mess up the contents of the old backing pixmap.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
4f79c70002 Send _NET_WM_FRAME_DRAWN messages
When the application provides the extended second counter for
_NET_WM_SYNC_REQUEST, send a client message with completion
information after the next redraw after each counter update
by the application.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
81c42a8944 Add support for an extended style of _NET_WM_SYNC_REQUEST_COUNTER
If an application provides two values in _NET_WM_SYNC_REQUEST_COUNTER,
use that as a signal that the applications wants an extended behavior
where it can update the counter as well as the window manager. If the
application updates the counter to an odd value, updates of the
window are frozen until the counter is updated again to an even value.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
8d9c83ddcf Support properties with lists of XSyncCounter
Add META_PROP_VALUE_SYNC_COUNTER_LIST for a property that contains
multiple XSyncCounter values.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
5b6020e90d Move sync alarms to be per-window and permanent
Instead of creating a new alarm each time we resize a window
interactively, create an alarm the first time we resize a window
and keep it around permanently until we unmanage the window.
Doing it this way will be useful when we allow the application to
spontaneously generate sync request updates to indicate
frames it is drawing.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:52 -05:00
8b57ecebda Implement freezing of updates during resize
Replace the unused meta_compositor_set_updates() with
a reversed-meaning meta_compositor_set_updates_frozen(), and use
it to implement freezing application window updates during
interactive resizing. This avoids drawing new areas of the window
with blank content before the application has a chance to repaint.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:51 -05:00
f6c3e48aa5 MetaWindowActor: Use guint for bitfields
A 1-bit boolean (int) bitfield has the values 0 and -1. Use
guint instead for bitfield values.

https://bugzilla.gnome.org/show_bug.cgi?id=685463
2013-01-30 15:47:51 -05:00
06e31e4c03 Updated Norwegian bokmål translation 2013-01-29 19:34:12 +01:00
869a137c2f Updated Norwegian bokmål translation 2013-01-21 12:13:29 +01:00
f4e4a05a9e Updated Uyghur translation
Signed-off-by: Gheyret Kenji <gheyret@gmail.com>
2013-01-20 18:46:02 +09:00
df15843407 Use meta_window_located_on_workspace() in more places
https://bugzilla.gnome.org/show_bug.cgi?id=691744
2013-01-18 15:45:05 -05:00
d8eb47e2b7 window: Make meta_window_located_on_workspace() public
We have some code in gnome-shell that does the equivalent of:

    window.get_workspace() == workspace || window.is_on_all_workspaces();

which is a bit unwieldy. We already have a method in mutter,
so use that and document it.

https://bugzilla.gnome.org/show_bug.cgi?id=691744
2013-01-18 15:45:05 -05:00
e28a36affd window-actor: Merge two simple methods
With some recent changes to how mask textures are constructed from
shapes, a helper method we made was only called in one place, allowing
us to drop a reference/destroy, and remove a double clear.

https://bugzilla.gnome.org/show_bug.cgi?id=679901
2013-01-18 00:28:54 -05:00
53534b4ded window-actor: Remove custom region destruction methods with g_clear_pointer
https://bugzilla.gnome.org/show_bug.cgi?id=679901
2013-01-18 00:28:54 -05:00
079dd60e3d window-actor: Clean up finalization code with simple uses of g_clear_pointer
While not a massive change by itself, adding new code to use g_clear_pointer
without porting existing usage looks strange.

https://bugzilla.gnome.org/show_bug.cgi?id=679901
2013-01-18 00:28:54 -05:00
5d12f00b3b window-actor: Speed up mask creation
Due to a conditional error, meta_region_builder_add_rectangle was called
on every single blank pixel, rather than at the end of spans. With the new
rename, it's fairly clear to see the error. Fix the check to ensure that
we no longer make extraneous calls to meta_region_builder_add_rectangle.

https://bugzilla.gnome.org/show_bug.cgi?id=691874
2013-01-17 16:33:54 -05:00
95f3bb3b81 window-actor: Rename variable in scanning function
"w" usually stands for "width", but here it stands for the end X bound,
so we'll rename it to the more traditional "x2".

https://bugzilla.gnome.org/show_bug.cgi?id=691874
2013-01-17 16:33:53 -05:00
2bfe6d2da5 build: Bump Clutter requirement
We now rely on XInput being enabled by default, which has only been
the case since 1.13.2.
2013-01-17 13:22:39 +01:00
27e0e44d8b Don't allow multiline window titles
https://bugzilla.gnome.org/show_bug.cgi?id=683056
2013-01-16 14:25:11 -05:00
7e5fb3e1a0 Assamese translation updated 2013-01-16 14:25:59 +05:30
2ac17cc7ba Updated Belarusian translation. 2013-01-15 20:26:09 +03:00
7b32b7fcd1 Updated Spanish translation 2013-01-15 14:36:01 +01:00
27 changed files with 2310 additions and 1961 deletions

View File

@ -73,7 +73,7 @@ MUTTER_PC_MODULES="
cairo >= 1.10.0
gsettings-desktop-schemas >= 3.3.0
xcomposite >= 0.2 xfixes xrender xdamage xi >= 1.6.0
$CLUTTER_PACKAGE >= 1.9.10
$CLUTTER_PACKAGE >= 1.13.2
cogl-1.0 >= 1.9.6
"

150
po/as.po
View File

@ -4,14 +4,14 @@
#
# Amitakhya Phukan <amitakhya@svn.gnome.org>, 2008.
# Amitakhya Phukan <aphukan@fedoraproject.org>, 2009.
# Nilamdyuti Goswami <ngoswami@redhat.com>, 2011, 2012.
# Nilamdyuti Goswami <ngoswami@redhat.com>, 2011, 2012, 2013.
msgid ""
msgstr ""
"Project-Id-Version: as\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-12-25 12:35+0000\n"
"PO-Revision-Date: 2012-12-27 21:31+0530\n"
"POT-Creation-Date: 2013-01-11 15:23+0000\n"
"PO-Revision-Date: 2013-01-16 14:25+0530\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
"Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
"Language: as_IN\n"
@ -168,8 +168,9 @@ msgid "Close window"
msgstr "উইন্ডো বন্ধ কৰক"
#: ../src/50-mutter-windows.xml.in.h:9
msgid "Minimize window"
msgstr "উইন্ডো লুকাওক"
#| msgid "Resize window"
msgid "Hide window"
msgstr "উইন্ডোক লুকাওক"
#: ../src/50-mutter-windows.xml.in.h:10
msgid "Move window"
@ -298,12 +299,12 @@ msgstr "সংৰক্ষণ ফাইলৰ পৰা অধিবেশন
msgid "Make X calls synchronous"
msgstr "X কলসমূহ সংমিহলি কৰক"
#: ../src/core/main.c:496
#: ../src/core/main.c:494
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "থীমৰ ডাইৰেকটৰি স্কেন কৰিব পৰা নগল: %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"
@ -356,7 +357,7 @@ msgid ""
msgstr ""
"সংৰূপ ডাটাবেইচত উপস্থিত \"%s\" মাউছ বুটাম পৰিবৰ্তকৰ বাবে বৈধ মানে নহয়\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 "
@ -364,7 +365,7 @@ msgid ""
msgstr ""
"সংৰূপ ডাটাবেইচত উপলব্ধ \"%s\", \"%s\" কি-বাইন্ডিং ৰ ক্ষেত্ৰত বৈধ মান নহয়\n"
#: ../src/core/prefs.c:1865
#: ../src/core/prefs.c:1877
#, c-format
msgid "Workspace %d"
msgstr "কৰ্মস্থান %d"
@ -495,7 +496,7 @@ msgid "Window manager error: "
msgstr "উইন্ডো ব্যৱস্থাপক ত্ৰুটি: "
#. first time through
#: ../src/core/window.c:7275
#: ../src/core/window.c:7279
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -511,7 +512,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7941
#: ../src/core/window.c:7945
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@ -910,49 +911,49 @@ 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 ""
"ফ্ৰেইম জ্যামিতি দ্বাৰা \"%s\" পৰিমাপ \"%s\" প্ৰান্তৰ বাবে নিৰ্ধাৰিত নহয়"
#: ../src/ui/theme.c:324
#: ../src/ui/theme.c:325
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "বুটামৰ এচপেক্ট অনুপাত %g যথাযথ নহয়"
#: ../src/ui/theme.c:336
#: ../src/ui/theme.c:337
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "ফ্ৰেইম জ্যামিতি দ্বাৰা বুটামৰ মাপ নিৰ্ধাৰিত নহয়"
#: ../src/ui/theme.c:1049
#: ../src/ui/theme.c:1050
#, c-format
msgid "Gradients should have at least two colors"
msgstr "গ্ৰেডিয়েন্টৰ ক্ষেত্ৰত দুটা ৰঙ নিৰ্ধাৰিত হোৱা আবশ্যক"
#: ../src/ui/theme.c:1201
#: ../src/ui/theme.c:1202
#, c-format
msgid ""
"GTK custom color specification must have color name and fallback in "
@ -962,7 +963,7 @@ msgstr ""
"উদাহৰনস্বৰুপে "
"gtk:custom(foo,bar); \"%s\" ক বিশ্লেষণ কৰিব নোৱাৰে"
#: ../src/ui/theme.c:1217
#: ../src/ui/theme.c:1218
#, c-format
msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
@ -970,7 +971,7 @@ msgid ""
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 "
@ -980,7 +981,7 @@ msgstr ""
"খাপ "
"নাখায়"
#: ../src/ui/theme.c:1276
#: ../src/ui/theme.c:1277
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@ -990,7 +991,7 @@ msgstr ""
"যত "
"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:"
@ -1000,17 +1001,17 @@ msgstr ""
"gtk:fg"
"[NORMAL] যত NORMAL হল অৱস্থা; বিশ্লেষণ কৰিব নোৱাৰি \"%s\""
#: ../src/ui/theme.c:1301
#: ../src/ui/theme.c:1302
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "ৰঙ ধাৰ্যকৰণত অৱস্থা \"%s\" বোধগম্য নহয়"
#: ../src/ui/theme.c:1314
#: ../src/ui/theme.c:1315
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "ৰঙ ধাৰ্য্যকৰণত ৰঙৰ উপাদান \"%s\" বোধগম্য নহয়"
#: ../src/ui/theme.c:1343
#: ../src/ui/theme.c:1344
#, c-format
msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@ -1019,44 +1020,44 @@ msgstr ""
"ব্লেন্ড বিন্যাস \"blend/bg_color/fg_color/alpha\", \"%s\" বিন্যাসৰ সৈতে খাপ "
"নাখায়"
#: ../src/ui/theme.c:1354
#: ../src/ui/theme.c:1355
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "ব্লেন্ড কৰা ৰঙলে আল্ফা মান \"%s\" বিশ্লেষণ কৰিব পৰা নগল"
#: ../src/ui/theme.c:1364
#: ../src/ui/theme.c:1365
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "ব্লেন্ড কৰা ৰঙলে আল্ফা মান \"%s\" 0.0 আৰু 1.0 ৰ মাজত নহয়"
#: ../src/ui/theme.c:1411
#: ../src/ui/theme.c:1412
#, c-format
msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr ""
"ছায়াৰ বিন্যাস \"shade/base_color/factor\", \"%s\" বিন্যাসৰ সৈতে খাপ নাখায়"
#: ../src/ui/theme.c:1422
#: ../src/ui/theme.c:1423
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "ছায়াযুক্ত ৰঙৰ ক্ষেত্ৰত ছায়াৰ মাপ \"%s\" বিশ্লেষণ কৰিব পৰা নগল"
#: ../src/ui/theme.c:1432
#: ../src/ui/theme.c:1433
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "ছায়াযুক্ত ৰঙৰ ক্ষেত্ৰত ছায়াৰ মান \"%s\" ঋণাত্মক"
#: ../src/ui/theme.c:1461
#: ../src/ui/theme.c:1462
#, c-format
msgid "Could not parse color \"%s\""
msgstr "\"%s\" ৰঙ বিশ্লেষণ কৰিব পৰা নগল"
#: ../src/ui/theme.c:1778
#: ../src/ui/theme.c:1779
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "অক্ষ অভিব্যক্তিয়ে '%s' আখৰ অন্তৰ্ভুক্ত কৰে যাৰ ব্যৱহাৰ অনুমোদিত নহয়"
#: ../src/ui/theme.c:1805
#: ../src/ui/theme.c:1806
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
@ -1064,13 +1065,13 @@ msgid ""
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: "
@ -1079,40 +1080,40 @@ msgstr ""
"অক্ষ অভিব্যক্তিয়ে এই লিখনীৰ আৰম্ভণি স্থানত অজ্ঞাত অপাৰেটৰ অন্তৰ্ভুক্ত কৰিছিল: "
"\"%s\""
#: ../src/ui/theme.c:1997
#: ../src/ui/theme.c:1998
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "অক্ষ অভিব্যক্তি ৰিক্ত অথবা বোধগম্য নহয়"
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
#: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "অক্ষ অভিব্যক্তিয়ে শূণ্য দ্বাৰা ভাগ কৰাৰ অবস্থা উৎপন্ন কৰে"
#: ../src/ui/theme.c:2162
#: ../src/ui/theme.c:2163
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
msgstr ""
"অক্ষ অভিব্যক্তিয়ে এটা দশমিক সংখ্যাৰ ওপৰত mod অপাৰেটৰ ব্যৱহাৰ কৰাৰ চেষ্টা কৰে "
#: ../src/ui/theme.c:2218
#: ../src/ui/theme.c:2219
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "অক্ষ অভিব্যক্তিৰ এটা \"%s\" অপাৰেটৰ আছে যত এটা অপাৰেন্ডৰ আশা কৰা হৈছিল"
#: ../src/ui/theme.c:2227
#: ../src/ui/theme.c:2228
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "অক্ষ অভিব্যক্তিৰ এটা অপাৰেন্ড আছিল যত এটা অপোৰেটৰৰ আশা কৰা হৈছিল"
#: ../src/ui/theme.c:2235
#: ../src/ui/theme.c:2236
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "অক্ষ অভিব্যক্তি এটা অপাৰেন্ডেৰ পৰিবৰ্তে অপাৰেটৰ দি সমাপ্ত হৈছে"
#: ../src/ui/theme.c:2245
#: ../src/ui/theme.c:2246
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -1122,37 +1123,37 @@ msgstr ""
"মাজত "
"কোনো অপাৰেন্ড উপস্থিত নাই"
#: ../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 "
@ -1161,25 +1162,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 "
@ -1188,14 +1189,14 @@ msgstr ""
"থীম \"%s\" ত উইন্ডো ধৰণ \"%s\" ৰ বাবে কোনো ফ্ৰেইম শৈলী সংহিত নাই, এটা <window "
"type=\"%s\" style_set=\"whatever\"/> উপাদন যোগ কৰক"
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
#: ../src/ui/theme.c:5659 ../src/ui/theme.c:5721 ../src/ui/theme.c:5784
#, 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:5667 ../src/ui/theme.c:5729 ../src/ui/theme.c:5792
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "ধ্ৰুৱক \"%s\" ইতিমধ্যে বিৱৰিত"
@ -1709,23 +1710,23 @@ 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 "ধাপ"
@ -1733,7 +1734,7 @@ 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 "
@ -1746,43 +1747,46 @@ msgstr ""
"অকাঁ "
"হৈছিল\n"
#: ../src/ui/theme-viewer.c:1271
#: ../src/ui/theme-viewer.c:1275
msgid "position expression test returned TRUE but set error"
msgstr "অবস্থান অভিব্যক্তিৰ পৰীক্ষায়ে TRUE ঘুৰাই দিলেও ত্ৰুটি সংহিত হৈছে"
#: ../src/ui/theme-viewer.c:1273
#: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned FALSE but didn't set error"
msgstr "অবস্থান অভিব্যক্তিৰ পৰীক্ষায়ে FALSE ঘুৰাই দিলেও ত্ৰুটি সংহিত নাই হোৱা"
#: ../src/ui/theme-viewer.c:1277
#: ../src/ui/theme-viewer.c:1281
msgid "Error was expected but none given"
msgstr "ত্ৰুটি প্ৰত্যাশিত আছিল কিন্তু কোনো এটা দিয়া হোৱা নাই"
#: ../src/ui/theme-viewer.c:1279
#: ../src/ui/theme-viewer.c:1283
#, c-format
msgid "Error %d was expected but %d given"
msgstr "ত্ৰুটি %d প্ৰত্যাশিত আছিল কিন্তু %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 "ত্ৰুটি প্ৰত্যাশিত নহয় কিন্তু প্ৰাপ্ত: %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 ৰ মান %d, %d প্ৰত্যাশিত"
#: ../src/ui/theme-viewer.c:1292
#: ../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:1357
#: ../src/ui/theme-viewer.c:1361
#, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr "%d অক্ষ অভিব্যক্তিসমূহ %g ছেকেণ্ডত বিশ্লেষণ কৰা হৈছে (গড় %g ছেকেণ্ড)\n"
#~ msgid "Minimize window"
#~ msgstr "উইন্ডো লুকাওক"
#~ msgid "Comma-separated list of compositor plugins"
#~ msgstr "মিশ্ৰক প্লাগিনসমূহৰ কমা-পৃথকিত তালিকা"

580
po/be.po
View File

@ -4,33 +4,209 @@ msgstr ""
"Project-Id-Version: mutter.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-10-11 14:32+0000\n"
"POT-Creation-Date: 2013-01-11 15:23+0000\n"
"PO-Revision-Date: 2012-10-13 17:44+0300\n"
"Last-Translator: Ігар Грачышка <ihar.hrachyshka@gmail.com>\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
"Language: be\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Pootle 2.1.6\n"
#: ../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 "Падзяліць прагляд справа"
#. 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"
@ -47,42 +223,42 @@ msgstr "Падзея з сігналам"
msgid "Unknown window information request: %d"
msgstr "Невядомы запыт інфармацыі пра акно: %d"
#: ../src/core/delete.c:113
#: ../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:117
#: ../src/core/delete.c:113
msgid "Application is not responding."
msgstr "Праграма не адказвае на запыты."
#: ../src/core/delete.c:122
#: ../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:129
#: ../src/core/delete.c:125
msgid "_Wait"
msgstr "_Пачакаць"
#: ../src/core/delete.c:129
#: ../src/core/delete.c:125
msgid "_Force Quit"
msgstr "_Змусіць да выхаду"
#: ../src/core/display.c:396
#: ../src/core/display.c:394
#, c-format
msgid "Missing %s extension required for compositing"
msgstr ""
"Адсутнічае пашырэнне \"%s\", патрэбнае для ажыццяўлення кампазітнага вываду"
#: ../src/core/display.c:492
#: ../src/core/display.c:491
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Не ўдалося адкрыць X-дысплей аконнай сістэмы \"%s\"\n"
#: ../src/core/keybindings.c:853
#: ../src/core/keybindings.c:876
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@ -152,7 +328,7 @@ msgstr "Вывесці нумар версіі праграмы"
msgid "Mutter plugin to use"
msgstr "Патрэбны плугін Mutter"
#: ../src/core/prefs.c:1079
#: ../src/core/prefs.c:1087
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@ -160,12 +336,12 @@ msgstr ""
"Асаблівыя паводзіны для некаторых хібных праграм выключаныя. Некаторыя "
"праграмы могуць перастаць працаваць, як мае быць.\n"
#: ../src/core/prefs.c:1154
#: ../src/core/prefs.c:1162
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Не ўдалося разабраць азначэнне шрыфту \"%s\" з GSettings-ключа %s\n"
#: ../src/core/prefs.c:1220
#: ../src/core/prefs.c:1228
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@ -174,7 +350,7 @@ msgstr ""
"Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае "
"мадыфікатар мышынай кнопкі\n"
#: ../src/core/prefs.c:1747
#: ../src/core/prefs.c:1780
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@ -183,17 +359,17 @@ msgstr ""
"Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае "
"клавіятурны скарот \"%s\"\n"
#: ../src/core/prefs.c:1844
#: ../src/core/prefs.c:1877
#, c-format
msgid "Workspace %d"
msgstr "Прастора працы %d"
#: ../src/core/screen.c:652
#: ../src/core/screen.c:658
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Экран %d на дысплеі \"%s\" хібны\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 --"
@ -202,19 +378,19 @@ msgstr ""
"Экран %d на дысплеі \"%s\" ужо мае аконнага кіраўніка. Каб замяніць яго "
"новым, дадайце опцыю --replace.\n"
#: ../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 ""
"Не ўдалося пераняць вылучэнне кіраўніка вокнаў для экрана %d дысплея \"%s\"\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 "Экран %d на дысплеі \"%s\" ужо мае кіраўніка вокнаў\n"
#: ../src/core/screen.c:935
#: ../src/core/screen.c:955
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Не ўдалося вызваліць экран %d на дысплеі \"%s\"\n"
@ -314,7 +490,7 @@ msgid "Window manager error: "
msgstr "Памылка кіраўніка вокнаў: "
#. first time through
#: ../src/core/window.c:7237
#: ../src/core/window.c:7279
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -330,7 +506,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7902
#: ../src/core/window.c:7945
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@ -503,10 +679,20 @@ msgstr ""
"будуць дададзена дадатковая нябачная рамка, каб задаволіць гэту настройку."
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Auto maximize nearly monitor sized windows"
msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid ""
"If enabled, monitor nearly monitor sized windows automatically get maximized "
"when mapped."
msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:19
msgid "Select window from tab popup"
msgstr "Выбраць акно з выплыўнога акенца"
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
#: ../src/org.gnome.mutter.gschema.xml.in.h:20
msgid "Cancel tab popup"
msgstr "Закрыць выплыўное акенца"
@ -714,49 +900,49 @@ 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 ""
"апісанне геаметрыі рамкі акна не вызначае %s граніцу для аблямоўкі \"%s\""
#: ../src/ui/theme.c:324
#: ../src/ui/theme.c:325
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "Прапорцыі кнопкі %g не маюць сэнсу"
#: ../src/ui/theme.c:336
#: ../src/ui/theme.c:337
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "Апісанне геаметрыі рамкі акна не вызначае памер кнопак"
#: ../src/ui/theme.c:1049
#: ../src/ui/theme.c:1050
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Градыент мусіць мець прынамсі два колеры"
#: ../src/ui/theme.c:1201
#: ../src/ui/theme.c:1202
#, c-format
msgid ""
"GTK custom color specification must have color name and fallback in "
@ -765,7 +951,7 @@ 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-"
@ -774,7 +960,7 @@ msgstr ""
"Хібны знак \"%c\" у параметры color_name спецыфікацыі gtk:custom, дазволеныя "
"толькі A-Za-z0-9-_"
#: ../src/ui/theme.c:1231
#: ../src/ui/theme.c:1232
#, c-format
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
@ -783,7 +969,7 @@ msgstr ""
"Фармат gtk:custom: \"gtk:custom(назваолеруапасны_колер)\"; \"%s\" не "
"адпавядае фармату"
#: ../src/ui/theme.c:1276
#: ../src/ui/theme.c:1277
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@ -792,7 +978,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:"
@ -802,17 +988,17 @@ msgstr ""
"напрыклад, gtk:fg[NORMAL], дзе NORMAL - гэта стан. Не ўдалося разабраць \"%s"
"\""
#: ../src/ui/theme.c:1301
#: ../src/ui/theme.c:1302
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "Незразумелы стан \"%s\" у спецыфікацыі колеру"
#: ../src/ui/theme.c:1314
#: ../src/ui/theme.c:1315
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "Незразумелы складнік колеру \"%s\" у спецыфікацыі колеру"
#: ../src/ui/theme.c:1343
#: ../src/ui/theme.c:1344
#, c-format
msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@ -821,58 +1007,58 @@ msgstr ""
"Фармат змяшанага колеру - \"blend/bg_color/fg_color/alpha\". \"%s\" не "
"адпавядае фармату."
#: ../src/ui/theme.c:1354
#: ../src/ui/theme.c:1355
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Не ўдалося разабраць значэнне альфа \"%s\" ў змяшаным колеры"
#: ../src/ui/theme.c:1364
#: ../src/ui/theme.c:1365
#, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr ""
"Значэнне альфа \"%s\" у змяшаным колеры не ўваходзіць у дыяпазон ад 0.0 да "
"1.0"
#: ../src/ui/theme.c:1411
#: ../src/ui/theme.c:1412
#, c-format
msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr ""
"Фармат ценю - \"shade/base_color/factor\". \"%s\" не адпавядае фармату."
#: ../src/ui/theme.c:1422
#: ../src/ui/theme.c:1423
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Не ўдалося разабраць каэфіцыент ценю \"%s\" у зацененым колеры"
#: ../src/ui/theme.c:1432
#: ../src/ui/theme.c:1433
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Каэфіцыент ценю \"%s\" у зацененым колеры адмоўны"
#: ../src/ui/theme.c:1461
#: ../src/ui/theme.c:1462
#, c-format
msgid "Could not parse color \"%s\""
msgstr "Не ўдалося разабраць колер \"%s\""
#: ../src/ui/theme.c:1778
#: ../src/ui/theme.c:1779
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Каардынатны выраз змяшчае забаронены знак \"%s\""
#: ../src/ui/theme.c:1805
#: ../src/ui/theme.c:1806
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
"parsed"
msgstr "Каардынатны выраз змяшчае незразумелы лік з нефіксаванай коскай \"%s\""
#: ../src/ui/theme.c:1819
#: ../src/ui/theme.c:1820
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Каардынатны выраз змяшчае незразумелы цэлы лік \"%s\""
#: ../src/ui/theme.c:1940
#: ../src/ui/theme.c:1941
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
@ -880,17 +1066,17 @@ msgid ""
msgstr ""
"Каардынатны выраз змяшчае невядомы аператар у пачатку гэтага тэксту: \"%s\""
#: ../src/ui/theme.c:1997
#: ../src/ui/theme.c:1998
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "Каардынатны выраз пусты ці незразумелы"
#: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
#: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
#, c-format
msgid "Coordinate expression results in division by zero"
msgstr "Каардынатны выраз вымагае дзялення на нуль"
#: ../src/ui/theme.c:2162
#: ../src/ui/theme.c:2163
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
@ -898,24 +1084,24 @@ msgstr ""
"Каардынатны выраз спрабуе ўжыць аператар дзялення па модулі для ліку з "
"нефіксаванай коскай"
#: ../src/ui/theme.c:2218
#: ../src/ui/theme.c:2219
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr ""
"У каардынатным выразе ўжыты аператар \"%s\" там, дзе мусіў быць аперанд"
#: ../src/ui/theme.c:2227
#: ../src/ui/theme.c:2228
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "У каардынатным выразе ўжыты аперанд там, дзе мусіў быць аператар"
#: ../src/ui/theme.c:2235
#: ../src/ui/theme.c:2236
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Каардынатны выраз заканчваецца аператарам, а не аперандам"
#: ../src/ui/theme.c:2245
#: ../src/ui/theme.c:2246
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -924,41 +1110,41 @@ 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 "
@ -967,25 +1153,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=\"што-небудзь\"/>"
#: ../src/ui/theme.c:5082
#: ../src/ui/theme.c:5083
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Не ўдалося загрузіць матыў аздаблення \"%s\": %s\n"
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
#: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
#: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "Для матыву аздаблення \"%2$s\" не прызначана <%1$s>"
#: ../src/ui/theme.c:5254
#: ../src/ui/theme.c:5255
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@ -994,7 +1180,7 @@ msgstr ""
"Стыль рамкі не вызначаны для вокнаў тыпу \"%s\" для матыву аздаблення \"%s"
"\". Дадайце <window type=\"%s\" style_set=\"штосьці\"/>."
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
#: ../src/ui/theme.c:5659 ../src/ui/theme.c:5721 ../src/ui/theme.c:5784
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
@ -1002,7 +1188,7 @@ msgstr ""
"Назвы канстантаў, вызначаных карыстальнікам, мусяць пачынацца з вялікай "
"літары. \"%s\" не адпавядае гэтаму патрабаванню."
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
#: ../src/ui/theme.c:5667 ../src/ui/theme.c:5729 ../src/ui/theme.c:5792
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "Канстанта \"%s\" ужо азначана"
@ -1519,31 +1705,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 "
@ -1554,256 +1740,42 @@ msgstr ""
"і %g секунд каляндарнага часу, уключна з рэсурсамі X-сервера (%g мілісекунд "
"на рамку)\n"
#: ../src/ui/theme-viewer.c:1266
#: ../src/ui/theme-viewer.c:1275
msgid "position expression test returned TRUE but set error"
msgstr "выпрабаванне выразу пазіцыі вярнула TRUE, але паведаміла аб памылцы"
#: ../src/ui/theme-viewer.c:1268
#: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned FALSE but didn't set error"
msgstr ""
"выпрабаванне выразу пазіцыі вярнула FALSE, але не паведаміла аб памылцы"
#: ../src/ui/theme-viewer.c:1272
#: ../src/ui/theme-viewer.c:1281
msgid "Error was expected but none given"
msgstr "Чакалася памылка, але звесткі не атрыманыя"
#: ../src/ui/theme-viewer.c:1274
#: ../src/ui/theme-viewer.c:1283
#, c-format
msgid "Error %d was expected but %d given"
msgstr "Чакалася памылка %d, але атрымана %d"
#: ../src/ui/theme-viewer.c:1280
#: ../src/ui/theme-viewer.c:1289
#, c-format
msgid "Error not expected but one was returned: %s"
msgstr "Атрымана нечаканая памылка: %s"
#: ../src/ui/theme-viewer.c:1284
#: ../src/ui/theme-viewer.c:1293
#, c-format
msgid "x value was %d, %d was expected"
msgstr "X-значэнне было %d, а чакалася %d"
#: ../src/ui/theme-viewer.c:1287
#: ../src/ui/theme-viewer.c:1296
#, c-format
msgid "y value was %d, %d was expected"
msgstr "Y-значэнне было %d, а чакалася %d"
#: ../src/ui/theme-viewer.c:1352
#: ../src/ui/theme-viewer.c:1361
#, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr ""
"%d каардынатных выразаў разабраныя за %g секунд (у сярэднім %g секунд)\n"
#: ../src/50-mutter-navigation.xml.in.h:1
#, fuzzy
msgid "Navigation"
msgstr "Навігацыя"
#: ../src/50-mutter-navigation.xml.in.h:2
#, fuzzy
msgid "Move window to workspace 1"
msgstr "Перамясціць акно ў прастору 1"
#: ../src/50-mutter-navigation.xml.in.h:3
#, fuzzy
msgid "Move window to workspace 2"
msgstr "Перамясціць акно ў прастору 2"
#: ../src/50-mutter-navigation.xml.in.h:4
#, fuzzy
msgid "Move window to workspace 3"
msgstr "Перамясціць акно ў прастору 3"
#: ../src/50-mutter-navigation.xml.in.h:5
#, fuzzy
msgid "Move window to workspace 4"
msgstr "Перамясціць акно ў прастору 4"
#: ../src/50-mutter-navigation.xml.in.h:6
#, fuzzy
msgid "Move window one workspace to the left"
msgstr "Перамясціць акно ў прастору злева ад дзейнай"
#: ../src/50-mutter-navigation.xml.in.h:7
#, fuzzy
msgid "Move window one workspace to the right"
msgstr "Перамясціць акно ў прастору справа ад дзейнай"
#: ../src/50-mutter-navigation.xml.in.h:8
#, fuzzy
msgid "Move window one workspace up"
msgstr "Перамясціць акно ў прастору зверху ад дзейнай"
#: ../src/50-mutter-navigation.xml.in.h:9
#, fuzzy
msgid "Move window one workspace down"
msgstr "Перамясціць акно ў прастору знізу ад дзейнай"
#: ../src/50-mutter-navigation.xml.in.h:10
#, fuzzy
msgid "Switch applications"
msgstr "Перамяшчацца паміж праграмамі"
#: ../src/50-mutter-navigation.xml.in.h:11
#, fuzzy
msgid "Switch windows of an application"
msgstr "Перамяшчацца паміж вокнамі праграмы"
#: ../src/50-mutter-navigation.xml.in.h:12
#, fuzzy
msgid "Switch system controls"
msgstr "Перамяшчацца паміж сістэмнымі элементамі кіравання"
#: ../src/50-mutter-navigation.xml.in.h:13
#, fuzzy
msgid "Switch windows directly"
msgstr "Непасрэдна перамяшчацца паміж вокнамі"
#: ../src/50-mutter-navigation.xml.in.h:14
#, fuzzy
msgid "Switch windows of an app directly"
msgstr "Непасрэдна перамяшчацца паміж вокнамі праграмы"
#: ../src/50-mutter-navigation.xml.in.h:15
#, fuzzy
msgid "Switch system controls directly"
msgstr "Непасрэдна перамяшчацца паміж сістэмнымі элементамі кіравання"
#: ../src/50-mutter-navigation.xml.in.h:16
#, fuzzy
msgid "Hide all normal windows"
msgstr "Схаваць усе звычайныя вокны"
#: ../src/50-mutter-navigation.xml.in.h:17
#, fuzzy
msgid "Switch to workspace 1"
msgstr "Перайсці ў прастору працы 1"
#: ../src/50-mutter-navigation.xml.in.h:18
#, fuzzy
msgid "Switch to workspace 2"
msgstr "Перайсці ў прастору працы 2"
#: ../src/50-mutter-navigation.xml.in.h:19
#, fuzzy
msgid "Switch to workspace 3"
msgstr "Перайсці ў прастору працы 3"
#: ../src/50-mutter-navigation.xml.in.h:20
#, fuzzy
msgid "Switch to workspace 4"
msgstr "Перайсці ў прастору працы 4"
#: ../src/50-mutter-navigation.xml.in.h:21
#, fuzzy
msgid "Move to workspace left"
msgstr "Перамясціць на прастору працы з_лева"
#: ../src/50-mutter-navigation.xml.in.h:22
#, fuzzy
msgid "Move to workspace right"
msgstr "Перамясціць на прастору працы с_права"
#: ../src/50-mutter-navigation.xml.in.h:23
#, fuzzy
msgid "Move to workspace above"
msgstr "Перамясціць на прастору працы з_лева"
#: ../src/50-mutter-navigation.xml.in.h:24
#, fuzzy
msgid "Move to workspace below"
msgstr "Перамясціць на прастору працы з_нізу"
#: ../src/50-mutter-system.xml.in.h:1
#, fuzzy
msgid "System"
msgstr "Сістэма"
#: ../src/50-mutter-system.xml.in.h:2
#, fuzzy
msgid "Show the run command prompt"
msgstr "Паказаць акенца выкананняў загадаў"
#: ../src/50-mutter-system.xml.in.h:3
#, fuzzy
msgid "Show the activities overview"
msgstr "Паказаць агляд дзейнасцяў"
#: ../src/50-mutter-windows.xml.in.h:2
#, fuzzy
msgid "Activate the window menu"
msgstr "Адкрыць меню акна"
#: ../src/50-mutter-windows.xml.in.h:3
#, fuzzy
msgid "Toggle fullscreen mode"
msgstr "Перамяніць рэжым \"на ўвесь экран\""
#: ../src/50-mutter-windows.xml.in.h:4
#, fuzzy
msgid "Toggle maximization state"
msgstr "Перамяніць максімалізацыю акна"
#: ../src/50-mutter-windows.xml.in.h:5
#, fuzzy
msgid "Maximize window"
msgstr "Максімалізаваць акно"
#: ../src/50-mutter-windows.xml.in.h:6
#, fuzzy
msgid "Restore window"
msgstr "Аднавіць былы памер акна"
#: ../src/50-mutter-windows.xml.in.h:7
#, fuzzy
msgid "Toggle shaded state"
msgstr "Перамяніць скручанасць акна ў загаловак"
#: ../src/50-mutter-windows.xml.in.h:8
#, fuzzy
msgid "Close window"
msgstr "Закрыць акно"
#: ../src/50-mutter-windows.xml.in.h:9
#, fuzzy
msgid "Minimize window"
msgstr "Мінімалізаваць акно"
#: ../src/50-mutter-windows.xml.in.h:10
#, fuzzy
msgid "Move window"
msgstr "Перамясціць акно"
#: ../src/50-mutter-windows.xml.in.h:11
#, fuzzy
msgid "Resize window"
msgstr "Змяніць памер акна"
#: ../src/50-mutter-windows.xml.in.h:12
#, fuzzy
msgid "Toggle window on all workspaces or one"
msgstr "Перамяніць, ці бачнае акно на ўсіх прасторах працы"
#: ../src/50-mutter-windows.xml.in.h:13
#, fuzzy
msgid "Raise window if covered, otherwise lower it"
msgstr "Узняць акно, калі яно закрыта іншымі вокнамі, іначай апусціць яго"
#: ../src/50-mutter-windows.xml.in.h:14
#, fuzzy
msgid "Raise window above other windows"
msgstr "Узняць акно над астатнімі"
#: ../src/50-mutter-windows.xml.in.h:15
#, fuzzy
msgid "Lower window below other windows"
msgstr "Апусціць акно ніжэй за астатнія"
#: ../src/50-mutter-windows.xml.in.h:16
#, fuzzy
msgid "Maximize window vertically"
msgstr "Вертыкальна максімалізаваць акно"
#: ../src/50-mutter-windows.xml.in.h:17
#, fuzzy
msgid "Maximize window horizontally"
msgstr "Гарызантальна максімалізаваць акно"

150
po/es.po
View File

@ -7,15 +7,15 @@
# Pablo Gonzalo del Campo <pablodc@bigfoot.com>,2002,2003.
# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2004, 2005, 2006.
# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2009, 2010, 2011.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-12-25 12:35+0000\n"
"PO-Revision-Date: 2012-12-26 11:47+0100\n"
"POT-Creation-Date: 2013-01-11 15:23+0000\n"
"PO-Revision-Date: 2013-01-15 13:02+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: \n"
@ -170,8 +170,9 @@ msgid "Close window"
msgstr "Cerrar la ventana"
#: ../src/50-mutter-windows.xml.in.h:9
msgid "Minimize window"
msgstr "Minimizar la ventana"
#| msgid "Resize window"
msgid "Hide window"
msgstr "Ocultar la ventana"
#: ../src/50-mutter-windows.xml.in.h:10
msgid "Move window"
@ -301,12 +302,12 @@ msgstr "Inicializar sesión desde el archivo de salvaguarda"
msgid "Make X calls synchronous"
msgstr "Hacer que las llamadas a las X sean síncronas"
#: ../src/core/main.c:496
#: ../src/core/main.c:494
#, c-format
msgid "Failed to scan themes directory: %s\n"
msgstr "Falló al inspeccionar la carpeta de temas: %s\n"
#: ../src/core/main.c:512
#: ../src/core/main.c:510
#, c-format
msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@ -361,7 +362,7 @@ msgstr ""
"«%s» encontrado en la base de datos de configuración no es un valor válido "
"para el modificador del botón del ratón\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 "
@ -370,7 +371,7 @@ msgstr ""
"«%s» encontrado en la base de datos de configuración no es un valor válido "
"para la combinación de teclas «%s»\n"
#: ../src/core/prefs.c:1865
#: ../src/core/prefs.c:1877
#, c-format
msgid "Workspace %d"
msgstr "Área de trabajo %d"
@ -501,7 +502,7 @@ msgid "Window manager error: "
msgstr "Error del gestor de ventanas: "
#. first time through
#: ../src/core/window.c:7275
#: ../src/core/window.c:7279
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -517,7 +518,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7941
#: ../src/core/window.c:7945
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
@ -919,49 +920,49 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:234
#: ../src/ui/theme.c:235
msgid "top"
msgstr "superior"
#: ../src/ui/theme.c:236
#: ../src/ui/theme.c:237
msgid "bottom"
msgstr "inferior"
#: ../src/ui/theme.c:238
#: ../src/ui/theme.c:239
msgid "left"
msgstr "izquierda"
#: ../src/ui/theme.c:240
#: ../src/ui/theme.c:241
msgid "right"
msgstr "derecha"
#: ../src/ui/theme.c:268
#: ../src/ui/theme.c:269
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "La geometría del marco no especifica la dimensión «%s»"
#: ../src/ui/theme.c:287
#: ../src/ui/theme.c:288
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr ""
"La geometría del marco no especifica la dimensión «%s» para el borde «%s»"
#: ../src/ui/theme.c:324
#: ../src/ui/theme.c:325
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "La proporción del botón %g no es razonable"
#: ../src/ui/theme.c:336
#: ../src/ui/theme.c:337
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "La geometría del marco no especifica el tamaño de los botones"
#: ../src/ui/theme.c:1049
#: ../src/ui/theme.c:1050
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Los degradados deben tener al menos dos colores"
#: ../src/ui/theme.c:1201
#: ../src/ui/theme.c:1202
#, c-format
msgid ""
"GTK custom color specification must have color name and fallback in "
@ -971,7 +972,7 @@ msgstr ""
"alternativo entre paréntesis, ejemplo: gtk:custom(foo,bar); no se pudo "
"analizar «%s»"
#: ../src/ui/theme.c:1217
#: ../src/ui/theme.c:1218
#, c-format
msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
@ -980,7 +981,7 @@ msgstr ""
"Caracter «%c» no válido en el parámetro «color_name» de «gtk:custom», sólo «A-Za-"
"z0-9-_» son válidos"
#: ../src/ui/theme.c:1231
#: ../src/ui/theme.c:1232
#, c-format
msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
@ -989,7 +990,7 @@ msgstr ""
"El formato de «gtk:custom» es «gtk:custom(nombre_de_color,"
"nombre_alternativo)», «%s» no respeta el formato"
#: ../src/ui/theme.c:1276
#: ../src/ui/theme.c:1277
#, c-format
msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@ -999,7 +1000,7 @@ msgstr ""
"ejemplo. gtk:fg[NORMAL] donde NORMAL es el estado ; no se ha podido "
"interpretar «%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:"
@ -1009,18 +1010,18 @@ msgstr ""
"estado, ejemplo. gtk:fg[NORMAL] donde NORMAL es el estado ; no se ha podido "
"interpretar «%s»"
#: ../src/ui/theme.c:1301
#: ../src/ui/theme.c:1302
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "No se entiende el estado «%s» en la especificación del color"
#: ../src/ui/theme.c:1314
#: ../src/ui/theme.c:1315
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr ""
"No se entiende el componente de color «%s» en la especificación del color"
#: ../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 "
@ -1029,17 +1030,17 @@ msgstr ""
"El formato de blend es «blend/bg_color/fg_color/alfa», «%s» no cumple con el "
"formato"
#: ../src/ui/theme.c:1354
#: ../src/ui/theme.c:1355
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "No se ha podido interpretar el valor alfa «%s» en el color mezclado"
#: ../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 "El valor alfa «%s» en el color mezclado no está entre 0.0 y 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"
@ -1047,31 +1048,31 @@ msgstr ""
"El formato de sombreado es «shade/base_color/factor», «%s» no coincide con el "
"formato"
#: ../src/ui/theme.c:1422
#: ../src/ui/theme.c:1423
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr ""
"No se ha podido interpretar el factor de sombreado «%s» en el color del "
"sombreado"
#: ../src/ui/theme.c:1432
#: ../src/ui/theme.c:1433
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "El factor de sombreado «%s» en el color sombreado es negativo"
#: ../src/ui/theme.c:1461
#: ../src/ui/theme.c:1462
#, c-format
msgid "Could not parse color \"%s\""
msgstr "No se ha podido interpretar el 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 ""
"La expresión de coordenadas contenía un carácter «%s» en cual no está "
"permitido"
#: ../src/ui/theme.c:1805
#: ../src/ui/theme.c:1806
#, c-format
msgid ""
"Coordinate expression contains floating point number '%s' which could not be "
@ -1080,13 +1081,13 @@ msgstr ""
"La expresión de coordenadas contenía un número de coma flotante «%s» en cual "
"no pudo ser analizado"
#: ../src/ui/theme.c:1819
#: ../src/ui/theme.c:1820
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr ""
"La expresión de coordenadas contenía un entero «%s» que no pudo ser analizado"
#: ../src/ui/theme.c:1940
#: ../src/ui/theme.c:1941
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
@ -1095,17 +1096,17 @@ msgstr ""
"La expresión de coordenadas contenía un operador no válido al inicio de su "
"texto: «%s»"
#: ../src/ui/theme.c:1997
#: ../src/ui/theme.c:1998
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "La expresión de coordenadas estaba vacía o no fue entendida"
#: ../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 "La expresión de coordenadas resultó en un error de división por cero"
#: ../src/ui/theme.c:2162
#: ../src/ui/theme.c:2163
#, c-format
msgid ""
"Coordinate expression tries to use mod operator on a floating-point number"
@ -1113,7 +1114,7 @@ msgstr ""
"La expresión de coordenadas intentó usar un operador mod con un número de "
"coma flotante"
#: ../src/ui/theme.c:2218
#: ../src/ui/theme.c:2219
#, c-format
msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected"
@ -1121,19 +1122,19 @@ msgstr ""
"La expresión de coordenadas tiene un operador «%s» donde se esperaba un "
"operando"
#: ../src/ui/theme.c:2227
#: ../src/ui/theme.c:2228
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr ""
"La expresión de coordenadas tiene un operando donde se esperaba un operador"
#: ../src/ui/theme.c:2235
#: ../src/ui/theme.c:2236
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr ""
"La expresión de coordenadas termina con una operador en vez de un operando"
#: ../src/ui/theme.c:2245
#: ../src/ui/theme.c:2246
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -1142,42 +1143,42 @@ msgstr ""
"La expresión de coordenadas tiene el operador «%c» seguido del operador «%c» "
"sin un operando entre ellos"
#: ../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 ""
"La expresión de coordenadas tenía una variable o constante desconocida «%s»"
#: ../src/ui/theme.c:2495
#: ../src/ui/theme.c:2496
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "El parser de la expresión de coordenadas desbordó su búfer."
#: ../src/ui/theme.c:2524
#: ../src/ui/theme.c:2525
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr ""
"La expresión de coordenadas tenía un paréntesis cerrado sin un paréntesis "
"abierto"
#: ../src/ui/theme.c:2588
#: ../src/ui/theme.c:2589
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr ""
"La expresión de coordenadas tenía un paréntesis abierto sin un paréntesis "
"cerrado"
#: ../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 "La expresión de coordenadas no parece tener ni operadores ni operandos"
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
#: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "El tema contenía una expresión que ha resultado en un 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 "
@ -1186,25 +1187,25 @@ msgstr ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> debe ser "
"especificado para este estilo de marco"
#: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
#: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
#, c-format
msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr ""
"Falta <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
#: ../src/ui/theme.c:5082
#: ../src/ui/theme.c:5083
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Ocurrió un error al cargar el tema «%s»: %s\n"
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
#: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
#: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "No se configuró <%s> para el tema «%s»"
#: ../src/ui/theme.c:5254
#: ../src/ui/theme.c:5255
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@ -1213,7 +1214,7 @@ msgstr ""
"No hay un estilo de marco para el tipo de ventana «%s» en el tema «%s», añada "
"un elemento <window type=\"%s\" style_set=\"whatever\"/>"
#: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
#: ../src/ui/theme.c:5659 ../src/ui/theme.c:5721 ../src/ui/theme.c:5784
#, c-format
msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not"
@ -1221,7 +1222,7 @@ msgstr ""
"Las constantes definidas por el usuario deben comenzar con una letra "
"mayúscula; «%s» no lo hace"
#: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
#: ../src/ui/theme.c:5667 ../src/ui/theme.c:5729 ../src/ui/theme.c:5792
#, c-format
msgid "Constant \"%s\" has already been defined"
msgstr "La constante «%s» ya ha sido definida"
@ -1743,23 +1744,23 @@ msgstr "Ocurrió un error al cargar el tema:«%s»\n"
msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Se cargó el tema «%s» en %g segundos\n"
#: ../src/ui/theme-viewer.c:870
#: ../src/ui/theme-viewer.c:871
msgid "Normal Title Font"
msgstr "Tipografía de título normal"
#: ../src/ui/theme-viewer.c:876
#: ../src/ui/theme-viewer.c:877
msgid "Small Title Font"
msgstr "Tipografía de título pequeña"
#: ../src/ui/theme-viewer.c:882
#: ../src/ui/theme-viewer.c:883
msgid "Large Title Font"
msgstr "Tipografía de título grande"
#: ../src/ui/theme-viewer.c:887
#: ../src/ui/theme-viewer.c:888
msgid "Button Layouts"
msgstr "Distribución de botones"
#: ../src/ui/theme-viewer.c:892
#: ../src/ui/theme-viewer.c:893
msgid "Benchmark"
msgstr "Banco de pruebas"
@ -1767,7 +1768,7 @@ msgstr "Banco de pruebas"
msgid "Window Title Goes Here"
msgstr "El título de la ventana va aquí"
#: ../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 "
@ -1778,47 +1779,50 @@ msgstr ""
"marco) y %g segundos de tiempo estándar incluyendo recursos del servidor X (%"
"g milisegundos por marco)\n"
#: ../src/ui/theme-viewer.c:1271
#: ../src/ui/theme-viewer.c:1275
msgid "position expression test returned TRUE but set error"
msgstr ""
"prueba de expresión de la posición devolvió TRUE pero estableció un error"
#: ../src/ui/theme-viewer.c:1273
#: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned FALSE but didn't set error"
msgstr ""
"prueba de expresión de la posición devolvió FASE pero no estableció un error"
#: ../src/ui/theme-viewer.c:1277
#: ../src/ui/theme-viewer.c:1281
msgid "Error was expected but none given"
msgstr "Se esperaba un error, pero no se dio ninguno"
#: ../src/ui/theme-viewer.c:1279
#: ../src/ui/theme-viewer.c:1283
#, c-format
msgid "Error %d was expected but %d given"
msgstr "Se esperaba el error %d pero se dio el %d"
#: ../src/ui/theme-viewer.c:1285
#: ../src/ui/theme-viewer.c:1289
#, c-format
msgid "Error not expected but one was returned: %s"
msgstr "No se esperaba un error pero se devolvió uno: %s"
#: ../src/ui/theme-viewer.c:1289
#: ../src/ui/theme-viewer.c:1293
#, c-format
msgid "x value was %d, %d was expected"
msgstr "el valor x era %d, se esperaba %d"
#: ../src/ui/theme-viewer.c:1292
#: ../src/ui/theme-viewer.c:1296
#, c-format
msgid "y value was %d, %d was expected"
msgstr "el valor y era %d, se esperaba %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 ""
"%d expresiones de coordenadas interpretadas en %g segundos (%g segundos de "
"media)\n"
#~ msgid "Minimize window"
#~ msgstr "Minimizar la ventana"
#~ msgid "Comma-separated list of compositor plugins"
#~ msgstr "Lista de complementos del compositor separados por comas"

571
po/nb.po
View File

@ -1,13 +1,13 @@
# Norwegian bokmål translation of mutter.
# Copyright © 2002-2004 Free Software Foundation, Inc.
# Kjartan Maraas <kmaraas@gnome.org>, 2002-2012.
# Kjartan Maraas <kmaraas@gnome.org>, 2002-2013.
#
msgid ""
msgstr ""
"Project-Id-Version: mutter 3.6.x\n"
"Project-Id-Version: mutter 3.7.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-10-22 19:51+0200\n"
"PO-Revision-Date: 2012-10-22 19:52+0200\n"
"POT-Creation-Date: 2013-01-29 19:33+0100\n"
"PO-Revision-Date: 2013-01-29 19:34+0100\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
"Language: \n"
@ -15,21 +15,197 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/50-mutter-navigation.xml.in.h:1
msgid "Navigation"
msgstr "Navigering"
#: ../src/50-mutter-navigation.xml.in.h:2
msgid "Move window to workspace 1"
msgstr "Flytt vindu til arbeidsområde 1"
#: ../src/50-mutter-navigation.xml.in.h:3
msgid "Move window to workspace 2"
msgstr "Flytt vindu til arbeidsområde 2"
#: ../src/50-mutter-navigation.xml.in.h:4
msgid "Move window to workspace 3"
msgstr "Flytt vindu til arbeidsområde 3"
#: ../src/50-mutter-navigation.xml.in.h:5
msgid "Move window to workspace 4"
msgstr "Flytt vindu til arbeidsområde 4"
#: ../src/50-mutter-navigation.xml.in.h:6
msgid "Move window one workspace to the left"
msgstr "Flytt vindu ett arbeidsområde til venstre"
#: ../src/50-mutter-navigation.xml.in.h:7
msgid "Move window one workspace to the right"
msgstr "Flytt vindu ett arbeidsområde til høyre"
#: ../src/50-mutter-navigation.xml.in.h:8
msgid "Move window one workspace up"
msgstr "Flytt vindu ett arbeidsområde opp"
#: ../src/50-mutter-navigation.xml.in.h:9
msgid "Move window one workspace down"
msgstr "Flytt vindu ett arbeidsområde ned"
#: ../src/50-mutter-navigation.xml.in.h:10
msgid "Switch applications"
msgstr "Bytt programmer"
#: ../src/50-mutter-navigation.xml.in.h:11
msgid "Switch windows"
msgstr "Bytt vinduer"
#: ../src/50-mutter-navigation.xml.in.h:12
msgid "Switch windows of an application"
msgstr "Bytt mellom et programs vinduer"
#: ../src/50-mutter-navigation.xml.in.h:13
msgid "Switch system controls"
msgstr "Bytt systemkontroller"
#: ../src/50-mutter-navigation.xml.in.h:14
msgid "Switch windows directly"
msgstr "Bytt vinduer direkte"
#: ../src/50-mutter-navigation.xml.in.h:15
msgid "Switch windows of an app directly"
msgstr "Bytt mellom et programs vinduer direkte"
#: ../src/50-mutter-navigation.xml.in.h:16
msgid "Switch system controls directly"
msgstr "Bytt systemkontroller direkte"
#: ../src/50-mutter-navigation.xml.in.h:17
msgid "Hide all normal windows"
msgstr "Skjul alle normale vinduer"
#: ../src/50-mutter-navigation.xml.in.h:18
msgid "Switch to workspace 1"
msgstr "Bytt til arbeidsområde 1"
#: ../src/50-mutter-navigation.xml.in.h:19
msgid "Switch to workspace 2"
msgstr "Bytt til arbeidsområde 2"
#: ../src/50-mutter-navigation.xml.in.h:20
msgid "Switch to workspace 3"
msgstr "Bytt til arbeidsområde 3"
#: ../src/50-mutter-navigation.xml.in.h:21
msgid "Switch to workspace 4"
msgstr "Bytt til arbeidsområde 4"
#: ../src/50-mutter-navigation.xml.in.h:22
msgid "Move to workspace left"
msgstr "Flytt til arbeidsområdet til venstre"
#: ../src/50-mutter-navigation.xml.in.h:23
msgid "Move to workspace right"
msgstr "Flytt til arbeidsområdet til høyre"
#: ../src/50-mutter-navigation.xml.in.h:24
msgid "Move to workspace above"
msgstr "Flytt til arbeidsområdet over"
#: ../src/50-mutter-navigation.xml.in.h:25
msgid "Move to workspace below"
msgstr "Flytt til arbeidsområdet under"
#: ../src/50-mutter-system.xml.in.h:1
msgid "System"
msgstr "System"
#: ../src/50-mutter-system.xml.in.h:2
msgid "Show the run command prompt"
msgstr "Vis kommandolinje"
#: ../src/50-mutter-system.xml.in.h:3
msgid "Show the activities overview"
msgstr "Vis oversikt over aktiviteter"
#: ../src/50-mutter-windows.xml.in.h:1
msgid "Windows"
msgstr "Vinduer"
#: ../src/50-mutter-windows.xml.in.h:2
msgid "Activate the window menu"
msgstr "Aktiver vindumenyen"
#: ../src/50-mutter-windows.xml.in.h:3
msgid "Toggle fullscreen mode"
msgstr "Slå av/på fullskjermmodus"
#: ../src/50-mutter-windows.xml.in.h:4
msgid "Toggle maximization state"
msgstr "Endre tilstand for maksimering"
#: ../src/50-mutter-windows.xml.in.h:5
msgid "Maximize window"
msgstr "Maksimer vindu"
#: ../src/50-mutter-windows.xml.in.h:6
msgid "Restore window"
msgstr "Gjenopprett vindu"
#: ../src/50-mutter-windows.xml.in.h:7
msgid "Toggle shaded state"
msgstr "Endre tilstand for skyggelegging"
#: ../src/50-mutter-windows.xml.in.h:8
msgid "Close window"
msgstr "Lukk vindu"
#: ../src/50-mutter-windows.xml.in.h:9
msgid "Hide window"
msgstr "Skjul vindu"
#: ../src/50-mutter-windows.xml.in.h:10
msgid "Move window"
msgstr "Flytt vindu"
#: ../src/50-mutter-windows.xml.in.h:11
msgid "Resize window"
msgstr "Endre størrelse på vindu"
#: ../src/50-mutter-windows.xml.in.h:12
msgid "Toggle window on all workspaces or one"
msgstr "Slå av/på om vinduet skal vises på alle arbeidsområder eller bare ett"
#: ../src/50-mutter-windows.xml.in.h:13
msgid "Raise window if covered, otherwise lower it"
msgstr "Hev vindu hvis skjult av et annet vindu, senk det ellers"
#: ../src/50-mutter-windows.xml.in.h:14
msgid "Raise window above other windows"
msgstr "Hev vinduet over andre vinduer"
#: ../src/50-mutter-windows.xml.in.h:15
msgid "Lower window below other windows"
msgstr "Senk vinduet under andre vinduer"
#: ../src/50-mutter-windows.xml.in.h:16
msgid "Maximize window vertically"
msgstr "Maksimer vinduet vertikalt"
#: ../src/50-mutter-windows.xml.in.h:17
msgid "Maximize window horizontally"
msgstr "Maksimer vinduet horisontalt"
#: ../src/50-mutter-windows.xml.in.h:18
msgid "View split on left"
msgstr "Visning delt til venstre"
#: ../src/50-mutter-windows.xml.in.h:3
#: ../src/50-mutter-windows.xml.in.h:19
msgid "View split on right"
msgstr "Visning delt til høyre"
#. 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"
@ -70,17 +246,17 @@ msgstr "_Vent"
msgid "_Force Quit"
msgstr "_Tvungen nedstenging"
#: ../src/core/display.c:396
#: ../src/core/display.c:394
#, c-format
msgid "Missing %s extension required for compositing"
msgstr "Mangler utvidelsen %s som kreves for komposittfunksjon"
#: ../src/core/display.c:493
#: ../src/core/display.c:491
#, c-format
msgid "Failed to open X Window System display '%s'\n"
msgstr "Feil under åpning av X Window System skjerm «%s»\n"
#: ../src/core/keybindings.c:853
#: ../src/core/keybindings.c:876
#, c-format
msgid ""
"Some other program is already using the key %s with modifiers %x as a "
@ -148,7 +324,7 @@ msgstr "Skriv versjonsnummer"
msgid "Mutter plugin to use"
msgstr "Mutter-tillegg som skal brukes"
#: ../src/core/prefs.c:1079
#: ../src/core/prefs.c:1087
msgid ""
"Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n"
@ -156,12 +332,12 @@ msgstr ""
"Funksjonalitet for å gå rundt ødelagte programmer er deaktivert. Noen "
"programmer vil kanskje ikke oppføre seg korrekt.\n"
#: ../src/core/prefs.c:1154
#: ../src/core/prefs.c:1162
#, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Kunne ikke tolke skriftbeskrivelsen «%s» fra GSettings-nøkkel %s\n"
#: ../src/core/prefs.c:1220
#: ../src/core/prefs.c:1228
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button "
@ -170,7 +346,7 @@ msgstr ""
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for endring av "
"musknapp\n"
#: ../src/core/prefs.c:1747
#: ../src/core/prefs.c:1780
#, c-format
msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding "
@ -179,17 +355,17 @@ msgstr ""
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for "
"tastaturbinding «%s»\n"
#: ../src/core/prefs.c:1844
#: ../src/core/prefs.c:1877
#, c-format
msgid "Workspace %d"
msgstr "Arbeidsområde %d"
#: ../src/core/screen.c:652
#: ../src/core/screen.c:658
#, c-format
msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skjerm %d på display «%s» er ugyldig\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 --"
@ -198,19 +374,19 @@ msgstr ""
"Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke "
"flagget --replace for å erstatte aktiv vindushåndterer.\n"
#: ../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 ""
"Kunne ikke hente utvalg fra vinduhåndterer på skjerm %d, display «%s»\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 "Skjerm %d på display «%s» har allerede en vinduhåndterer\n"
#: ../src/core/screen.c:935
#: ../src/core/screen.c:955
#, c-format
msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Kunne ikke slippe skjerm %d på display «%s»\n"
@ -307,7 +483,7 @@ msgid "Window manager error: "
msgstr "Feil i vindushåndterer: "
#. first time through
#: ../src/core/window.c:7237
#: ../src/core/window.c:7287
#, c-format
msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@ -323,7 +499,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work.
#.
#: ../src/core/window.c:7902
#: ../src/core/window.c:7953
#, c-format
msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@ -492,10 +668,20 @@ msgstr ""
"kanter legges til for å imøtekomme denne verdien."
#: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Auto maximize nearly monitor sized windows"
msgstr "Maksimer vinduer automatisk hvis de er nesten like store som skjermen"
#: ../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 "Fjern vindu fra tabulatordialog"
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
#: ../src/org.gnome.mutter.gschema.xml.in.h:20
msgid "Cancel tab popup"
msgstr "Avbryt tabulatordialog"
@ -703,48 +889,48 @@ msgstr "Mod5"
msgid "%d x %d"
msgstr "%d x %d"
#: ../src/ui/theme.c:234
#: ../src/ui/theme.c:235
msgid "top"
msgstr "topp"
#: ../src/ui/theme.c:236
#: ../src/ui/theme.c:237
msgid "bottom"
msgstr "bunn"
#: ../src/ui/theme.c:238
#: ../src/ui/theme.c:239
msgid "left"
msgstr "venstre"
#: ../src/ui/theme.c:240
#: ../src/ui/theme.c:241
msgid "right"
msgstr "høyre"
#: ../src/ui/theme.c:268
#: ../src/ui/theme.c:269
#, c-format
msgid "frame geometry does not specify \"%s\" dimension"
msgstr "rammegeometrien spesifiserer ikke «%s»-dimensjon"
#: ../src/ui/theme.c:287
#: ../src/ui/theme.c:288
#, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "rammegeometri spesifiserer ikke dimensjon «%s» for kant «%s»"
#: ../src/ui/theme.c:324
#: ../src/ui/theme.c:325
#, c-format
msgid "Button aspect ratio %g is not reasonable"
msgstr "Aspektrate %g for knapp er ikke fornuftig"
#: ../src/ui/theme.c:336
#: ../src/ui/theme.c:337
#, c-format
msgid "Frame geometry does not specify size of buttons"
msgstr "Rammegeometrien spesifiserer ikke størrelse på knapper"
#: ../src/ui/theme.c:1049
#: ../src/ui/theme.c:1050
#, c-format
msgid "Gradients should have at least two colors"
msgstr "Gradienter må ha minst to farger"
#: ../src/ui/theme.c:1201
#: ../src/ui/theme.c:1202
#, c-format
msgid ""
"GTK custom color specification must have color name and fallback in "
@ -753,7 +939,7 @@ msgstr ""
"Egendefinert GTK-fargespesifikasjon må ha fargenavn og reserve i parantes, f."
"eks gtk:custom(foo,bar); kunne ikke lese «%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-"
@ -762,7 +948,7 @@ msgstr ""
"Ugyldig tegn «%c» i parameter color_name for gtk:custom, kun A-Za-z0-9-_ er "
"gyldig"
#: ../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 "
@ -771,7 +957,7 @@ msgstr ""
"Gtk:custom-format er «gtk:custom(color_name,fallback)», «%s» passer ikke i "
"formatet"
#: ../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] "
@ -780,7 +966,7 @@ msgstr ""
"GTK-fargespesifikasjon må ha tilstand i klammer, f.eks. gtk:fg[NORMAL], hvor "
"NORMAL er tilstanden; kunne ikke lese «%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:"
@ -789,17 +975,17 @@ msgstr ""
"GTK-fargespesifikasjon må ha en avsluttende klamme etter tilstanden, f.eks. "
"gtk:fg[NORMAL], hvor NORMAL er tilstanden; kunne ikke lese «%s»"
#: ../src/ui/theme.c:1301
#: ../src/ui/theme.c:1302
#, c-format
msgid "Did not understand state \"%s\" in color specification"
msgstr "Forsto ikke tilstand «%s» i fargespesifikasjonen"
#: ../src/ui/theme.c:1314
#: ../src/ui/theme.c:1315
#, c-format
msgid "Did not understand color component \"%s\" in color specification"
msgstr "Forsto ikke fargekomponent «%s» i fargespesifikasjonen"
#: ../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 "
@ -808,56 +994,56 @@ msgstr ""
"Blandingsformat er «blend/bg_color/fg_color/alpha», «%s» passer ikke i "
"formatet"
#: ../src/ui/theme.c:1354
#: ../src/ui/theme.c:1355
#, c-format
msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Kunne ikke lese alpha-verdi «%s» i blandet farge"
#: ../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-verdi «%s» i blandet farge er ikke mellom 0.0 og 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 ""
"Skyggeformatet er «shade/base_color/factor», «%s» passer ikke i formatet"
#: ../src/ui/theme.c:1422
#: ../src/ui/theme.c:1423
#, c-format
msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Kunne ikke lese skyggefaktor «%s» i skyggelagt farge"
#: ../src/ui/theme.c:1432
#: ../src/ui/theme.c:1433
#, c-format
msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Skyggefaktor «%s» i skyggelagt farge er negativ"
#: ../src/ui/theme.c:1461
#: ../src/ui/theme.c:1462
#, c-format
msgid "Could not parse color \"%s\""
msgstr "Kunne ikke lese farge «%s»"
#: ../src/ui/theme.c:1778
#: ../src/ui/theme.c:1779
#, c-format
msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Koordinatuttrykk inneholder tegn «%s» som ikke er tillatt"
#: ../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 "Koordinatuttrykk inneholder flyttall «%s» som ikke kunne tolkes"
#: ../src/ui/theme.c:1819
#: ../src/ui/theme.c:1820
#, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Koordinatuttrykk inneholder heltall «%s» som ikke kunne tolkes"
#: ../src/ui/theme.c:1940
#: ../src/ui/theme.c:1941
#, c-format
msgid ""
"Coordinate expression contained unknown operator at the start of this text: "
@ -866,39 +1052,39 @@ msgstr ""
"Koordinatuttrykket inneholdt en ukjent operator ved begynnelsen av denne "
"teksten: «%s»"
#: ../src/ui/theme.c:1997
#: ../src/ui/theme.c:1998
#, c-format
msgid "Coordinate expression was empty or not understood"
msgstr "Koordinatuttrykket var tomt eller ble ikke forstått"
#: ../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 "Koordinatuttrykket resulterer i divisjon med null"
#: ../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 "Koordinatuttrykket prøver å bruke mod-operator på et flyttall"
#: ../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 "Koordinatuttrykket har en operator «%s» hvor en operand var ventet"
#: ../src/ui/theme.c:2227
#: ../src/ui/theme.c:2228
#, c-format
msgid "Coordinate expression had an operand where an operator was expected"
msgstr "Koordinatuttrykket hadde en operand hvor en operator var ventet"
#: ../src/ui/theme.c:2235
#: ../src/ui/theme.c:2236
#, c-format
msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Koordinatuttrykket sluttet med en operator i stedet for en operand"
#: ../src/ui/theme.c:2245
#: ../src/ui/theme.c:2246
#, c-format
msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@ -907,38 +1093,38 @@ msgstr ""
"Koordinatuttrykket har en operator «%c» etter en operator «%c» og ingen "
"operand mellom dem."
#: ../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 "Koordinatuttrykket haddeen ukjent variabel eller konstant «%s»"
#: ../src/ui/theme.c:2495
#: ../src/ui/theme.c:2496
#, c-format
msgid "Coordinate expression parser overflowed its buffer."
msgstr "Tolkeren for koordinatuttrykk oversteg buffergrensen."
#: ../src/ui/theme.c:2524
#: ../src/ui/theme.c:2525
#, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "Koordinatuttrykket hadde en parantes slutt uten parantes start"
#: ../src/ui/theme.c:2588
#: ../src/ui/theme.c:2589
#, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "Koordinatuttrykket hadde en åpen parantes uten en avsluttende parantes"
#: ../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 ""
"Koordinatuttrykket ser ikke ut til å ha noen operatorer eller operander"
#: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
#: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
#, c-format
msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Tema inneholdt et uttrykk som resulterte i en feil: %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 "
@ -947,25 +1133,25 @@ msgstr ""
"<button function=«%s» state=«%s» draw_ops=«ett-eller-annet»/> må "
"spesifiseres for denne rammestilen"
#: ../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 ""
"Mangler <frame state=«%s» resize=«%s» focus=«%s» stil=«ett-eller-annet»/>"
#: ../src/ui/theme.c:5082
#: ../src/ui/theme.c:5083
#, c-format
msgid "Failed to load theme \"%s\": %s\n"
msgstr "Klarte ikke å laste tema «%s»: %s\n"
#: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
#: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
#: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
#, c-format
msgid "No <%s> set for theme \"%s\""
msgstr "<%s> er ikke satt for tema «%s»"
#: ../src/ui/theme.c:5254
#: ../src/ui/theme.c:5255
#, c-format
msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@ -974,14 +1160,14 @@ msgstr ""
"Ingen rammestil satt for vindutype «%s» i tema «%s», legg til et <window "
"type=«%s» style_set=«ett-eller-annet»/>-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 ""
"Brukerdefinerte konstanter må begynne med stor bokstav; «%s» gjør ikke det"
#: ../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 "Konstant «%s» er allerede definert"
@ -1493,31 +1679,31 @@ msgstr "Feil under lasting av tema: %s\n"
msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Lastet tema «%s» på %g sekunder\n"
#: ../src/ui/theme-viewer.c:870
#: ../src/ui/theme-viewer.c:871
msgid "Normal Title Font"
msgstr "Normal tittelskrift"
#: ../src/ui/theme-viewer.c:876
#: ../src/ui/theme-viewer.c:877
msgid "Small Title Font"
msgstr "Liten tittelskrift"
#: ../src/ui/theme-viewer.c:882
#: ../src/ui/theme-viewer.c:883
msgid "Large Title Font"
msgstr "Stor tittelskrift"
#: ../src/ui/theme-viewer.c:887
#: ../src/ui/theme-viewer.c:888
msgid "Button Layouts"
msgstr "Knappeplasseringer"
#: ../src/ui/theme-viewer.c:892
#: ../src/ui/theme-viewer.c:893
msgid "Benchmark"
msgstr "Ytelsestest"
#: ../src/ui/theme-viewer.c:944
#: ../src/ui/theme-viewer.c:949
msgid "Window Title Goes Here"
msgstr "Vindutittel skal her"
#: ../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 "
@ -1528,254 +1714,39 @@ msgstr ""
"%g sekunder på klokken inklusive ressurser på X-tjener (%g millisekunder per "
"ramme)\n"
#: ../src/ui/theme-viewer.c:1266
#: ../src/ui/theme-viewer.c:1275
msgid "position expression test returned TRUE but set error"
msgstr "test av posisjonsuttrykk returnerte TRUE, men satte en feilkode"
#: ../src/ui/theme-viewer.c:1268
#: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned FALSE but didn't set error"
msgstr "test av posisjonsuttrykk returnerte FALSE, men satte ikke en feilkode"
#: ../src/ui/theme-viewer.c:1272
#: ../src/ui/theme-viewer.c:1281
msgid "Error was expected but none given"
msgstr "Feil var ventet men ingen ble gitt"
#: ../src/ui/theme-viewer.c:1274
#: ../src/ui/theme-viewer.c:1283
#, c-format
msgid "Error %d was expected but %d given"
msgstr "Feil %d var ventet men %d ble gitt"
#: ../src/ui/theme-viewer.c:1280
#: ../src/ui/theme-viewer.c:1289
#, c-format
msgid "Error not expected but one was returned: %s"
msgstr "Feil ikke ventet men en ble returnert: %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-verdi var %d, %d var ventet"
#: ../src/ui/theme-viewer.c:1287
#: ../src/ui/theme-viewer.c:1296
#, c-format
msgid "y value was %d, %d was expected"
msgstr "y-verdi var %d, %d var ventet"
#: ../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 koordinatuttrykk lest på %g sekunder (%g sekunder i snitt)\n"
#: ../src/50-mutter-navigation.xml.in.h:1
#, fuzzy
msgid "Navigation"
msgstr "Navigering"
#: ../src/50-mutter-navigation.xml.in.h:2
#, fuzzy
msgid "Move window to workspace 1"
msgstr "Flytt vindu til arbeidsområde 1"
#: ../src/50-mutter-navigation.xml.in.h:3
#, fuzzy
msgid "Move window to workspace 2"
msgstr "Flytt vindu til arbeidsområde 2"
#: ../src/50-mutter-navigation.xml.in.h:4
#, fuzzy
msgid "Move window to workspace 3"
msgstr "Flytt vindu til arbeidsområde 3"
#: ../src/50-mutter-navigation.xml.in.h:5
#, fuzzy
msgid "Move window to workspace 4"
msgstr "Flytt vindu til arbeidsområde 4"
#: ../src/50-mutter-navigation.xml.in.h:6
#, fuzzy
msgid "Move window one workspace to the left"
msgstr "Flytt vindu et arbeidsområde til venstre"
#: ../src/50-mutter-navigation.xml.in.h:7
#, fuzzy
msgid "Move window one workspace to the right"
msgstr "Flytt vindu ett arbeidsområde til høyre"
#: ../src/50-mutter-navigation.xml.in.h:8
#, fuzzy
msgid "Move window one workspace up"
msgstr "Flytt vindu ett arbeidsområde opp"
#: ../src/50-mutter-navigation.xml.in.h:9
#, fuzzy
msgid "Move window one workspace down"
msgstr "Flytt vindu ett arbeidsområde ned"
#: ../src/50-mutter-navigation.xml.in.h:10
#, fuzzy
msgid "Switch applications"
msgstr "Bytt programmer"
#: ../src/50-mutter-navigation.xml.in.h:11
#, fuzzy
msgid "Switch windows of an application"
msgstr "Bytt mellom et programs vinduer"
#: ../src/50-mutter-navigation.xml.in.h:12
#, fuzzy
msgid "Switch system controls"
msgstr "Bytt systemkontroller"
#: ../src/50-mutter-navigation.xml.in.h:13
#, fuzzy
msgid "Switch windows directly"
msgstr "Bytt vinduer direkte"
#: ../src/50-mutter-navigation.xml.in.h:14
#, fuzzy
msgid "Switch windows of an app directly"
msgstr "Bla gjennom et programs vinduer direkte"
#: ../src/50-mutter-navigation.xml.in.h:15
#, fuzzy
msgid "Switch system controls directly"
msgstr "Bytt systemkontroller direkte"
#: ../src/50-mutter-navigation.xml.in.h:16
#, fuzzy
msgid "Hide all normal windows"
msgstr "Skjul alle normale vinduer"
#: ../src/50-mutter-navigation.xml.in.h:17
#, fuzzy
msgid "Switch to workspace 1"
msgstr "Bytt til arbeidsområde 1"
#: ../src/50-mutter-navigation.xml.in.h:18
#, fuzzy
msgid "Switch to workspace 2"
msgstr "Bytt til arbeidsområde 2"
#: ../src/50-mutter-navigation.xml.in.h:19
#, fuzzy
msgid "Switch to workspace 3"
msgstr "Bytt til arbeidsområde 3"
#: ../src/50-mutter-navigation.xml.in.h:20
#, fuzzy
msgid "Switch to workspace 4"
msgstr "Bytt til arbeidsområde 4"
#: ../src/50-mutter-navigation.xml.in.h:21
#, fuzzy
msgid "Move to workspace left"
msgstr "Flytt til arbeidsområdet til venstre"
#: ../src/50-mutter-navigation.xml.in.h:22
#, fuzzy
msgid "Move to workspace right"
msgstr "Flytt til arbeidsområdet til høyre"
#: ../src/50-mutter-navigation.xml.in.h:23
#, fuzzy
msgid "Move to workspace above"
msgstr "Flytt til arbeidsområdet over"
#: ../src/50-mutter-navigation.xml.in.h:24
#, fuzzy
msgid "Move to workspace below"
msgstr "Flytt til arbeidsområdet under"
#: ../src/50-mutter-system.xml.in.h:1
#, fuzzy
msgid "System"
msgstr "System"
#: ../src/50-mutter-system.xml.in.h:2
#, fuzzy
msgid "Show the run command prompt"
msgstr "Vis kommandolinje"
#: ../src/50-mutter-system.xml.in.h:3
#, fuzzy
msgid "Show the activities overview"
msgstr "Vis oversikt over aktiviteter"
#: ../src/50-mutter-windows.xml.in.h:2
#, fuzzy
msgid "Activate the window menu"
msgstr "Aktiver vindumenyen"
#: ../src/50-mutter-windows.xml.in.h:3
#, fuzzy
msgid "Toggle fullscreen mode"
msgstr "Slå av/på fullskjermmodus"
#: ../src/50-mutter-windows.xml.in.h:4
#, fuzzy
msgid "Toggle maximization state"
msgstr "Endre tilstand for maksimering"
#: ../src/50-mutter-windows.xml.in.h:5
#, fuzzy
msgid "Maximize window"
msgstr "Maksimer vindu"
#: ../src/50-mutter-windows.xml.in.h:6
#, fuzzy
msgid "Restore window"
msgstr "Gjenopprett vindu"
#: ../src/50-mutter-windows.xml.in.h:7
#, fuzzy
msgid "Toggle shaded state"
msgstr "Endre tilstand for skyggelegging"
#: ../src/50-mutter-windows.xml.in.h:8
#, fuzzy
msgid "Close window"
msgstr "Lukk vindu"
#: ../src/50-mutter-windows.xml.in.h:9
#, fuzzy
msgid "Minimize window"
msgstr "Minimer vindu"
#: ../src/50-mutter-windows.xml.in.h:10
#, fuzzy
msgid "Move window"
msgstr "Flytt vindu"
#: ../src/50-mutter-windows.xml.in.h:11
#, fuzzy
msgid "Resize window"
msgstr "Endre størrelse på vindu"
#: ../src/50-mutter-windows.xml.in.h:12
#, fuzzy
msgid "Toggle window on all workspaces or one"
msgstr "Slå av/på om vinduet skal vises på alle arbeidsområder eller bare ett"
#: ../src/50-mutter-windows.xml.in.h:13
#, fuzzy
msgid "Raise window if covered, otherwise lower it"
msgstr "Hev vindu hvis skjult av et annet vindu, senk det ellers"
#: ../src/50-mutter-windows.xml.in.h:14
#, fuzzy
msgid "Raise window above other windows"
msgstr "Hev vinduet over andre vinduer"
#: ../src/50-mutter-windows.xml.in.h:15
#, fuzzy
msgid "Lower window below other windows"
msgstr "Senk vinduet under andre vinduer"
#: ../src/50-mutter-windows.xml.in.h:16
#, fuzzy
msgid "Maximize window vertically"
msgstr "Maksimer vinduet vertikalt"
#: ../src/50-mutter-windows.xml.in.h:17
#, fuzzy
msgid "Maximize window horizontally"
msgstr "Maksimer vinduet horisontalt"

1760
po/ug.po

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,8 @@ 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,9 +25,13 @@ struct _MetaCompositor
MetaPlugin *modal_plugin;
gboolean show_redraw : 1;
gboolean debug : 1;
gboolean no_mipmaps : 1;
gint64 server_time_query_time;
gint64 server_time_offset;
guint server_time_is_monotonic_time : 1;
guint show_redraw : 1;
guint debug : 1;
guint no_mipmaps : 1;
};
struct _MetaCompScreen
@ -41,6 +45,9 @@ 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;
@ -53,6 +60,8 @@ 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,
@ -65,6 +74,9 @@ void meta_end_modal_for_plugin (MetaScreen *screen,
MetaPlugin *plugin,
guint32 timestamp);
gint64 meta_compositor_monotonic_time_to_server_time (MetaDisplay *display,
gint64 monotonic_time);
void meta_check_end_modal (MetaScreen *screen);
#endif /* META_COMPOSITOR_PRIVATE_H */

View File

@ -467,6 +467,16 @@ meta_check_end_modal (MetaScreen *screen)
}
}
static void
after_stage_paint (ClutterActor *stage,
MetaCompScreen *info)
{
GList *l;
for (l = info->windows; l; l = l->next)
meta_window_actor_post_paint (l->data);
}
void
meta_compositor_manage_screen (MetaCompositor *compositor,
MetaScreen *screen)
@ -536,6 +546,11 @@ 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);
@ -716,10 +731,18 @@ meta_compositor_remove_window (MetaCompositor *compositor,
}
void
meta_compositor_set_updates (MetaCompositor *compositor,
MetaWindow *window,
gboolean updates)
meta_compositor_set_updates_frozen (MetaCompositor *compositor,
MetaWindow *window,
gboolean updates_frozen)
{
MetaWindowActor *window_actor;
DEBUG_TRACE ("meta_compositor_set_updates_frozen\n");
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
if (!window_actor)
return;
meta_window_actor_set_updates_frozen (window_actor, updates_frozen);
}
static gboolean
@ -1182,6 +1205,39 @@ 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)
{
@ -1189,6 +1245,15 @@ pre_paint_windows (MetaCompScreen *info)
MetaWindowActor *top_window;
MetaWindowActor *expected_unredirected_window = NULL;
if (info->onscreen == NULL)
{
info->onscreen = COGL_ONSCREEN (cogl_get_draw_framebuffer ());
info->frame_closure = cogl_onscreen_add_frame_callback (info->onscreen,
frame_callback,
info,
NULL);
}
if (info->windows == NULL)
return;
@ -1391,3 +1456,51 @@ meta_compositor_flash_screen (MetaCompositor *compositor,
"signal-after::completed", flash_in_completed, flash,
NULL);
}
/**
* meta_compositor_monotonic_time_to_server_time:
* @display: a #MetaDisplay
* @monotonic_time: time in the units of g_get_monotonic_time()
*
* _NET_WM_FRAME_DRAWN and _NET_WM_FRAME_TIMINGS messages represent time
* as a "high resolution server time" - this is the server time interpolated
* to microsecond resolution. The advantage of this time representation
* is that if X server is running on the same computer as a client, and
* the Xserver uses 'clock_gettime(CLOCK_MONOTONIC, ...)' for the server
* time, the client can detect this, and all such clients will share a
* a time representation with high accuracy. If there is not a common
* time source, then the time synchronization will be less accurate.
*/
gint64
meta_compositor_monotonic_time_to_server_time (MetaDisplay *display,
gint64 monotonic_time)
{
MetaCompositor *compositor = display->compositor;
if (compositor->server_time_query_time == 0 ||
(!compositor->server_time_is_monotonic_time &&
monotonic_time > compositor->server_time_query_time + 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,10 +25,8 @@
#include <config.h>
#define COGL_ENABLE_EXPERIMENTAL_API
#include <cogl/cogl-texture-pixmap-x11.h>
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
#include <X11/Xatom.h>

View File

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

View File

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

View File

@ -28,6 +28,10 @@ void meta_window_actor_process_damage (MetaWindowActor *self,
XDamageNotifyEvent *event);
void meta_window_actor_pre_paint (MetaWindowActor *self);
void meta_window_actor_post_paint (MetaWindowActor *self);
void meta_window_actor_frame_complete (MetaWindowActor *self,
CoglFrameInfo *frame_info,
gint64 presentation_time);
void meta_window_actor_invalidate_shadow (MetaWindowActor *self);
@ -45,6 +49,8 @@ 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,7 +10,6 @@
#include <X11/extensions/Xrender.h>
#include <clutter/x11/clutter-x11.h>
#define COGL_ENABLE_EXPERIMENTAL_API
#include <cogl/cogl-texture-pixmap-x11.h>
#include <gdk/gdk.h> /* for gdk_rectangle_union() */
#include <string.h>
@ -97,6 +96,9 @@ struct _MetaWindowActorPrivate
gint map_in_progress;
gint destroy_in_progress;
/* List of FrameData for recent frames */
GList *frames;
guint visible : 1;
guint mapped : 1;
guint argb32 : 1;
@ -106,11 +108,16 @@ 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;
@ -121,6 +128,15 @@ struct _MetaWindowActorPrivate
guint unredirected : 1;
};
typedef struct _FrameData FrameData;
struct _FrameData
{
int64_t frame_counter;
guint64 sync_request_serial;
gint64 frame_drawn_time;
};
enum
{
PROP_META_WINDOW = 1,
@ -151,12 +167,16 @@ 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_clear_shape_region (MetaWindowActor *self);
static void meta_window_actor_clear_bounding_region (MetaWindowActor *self);
static void meta_window_actor_clear_shadow_clip (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)
{
@ -384,33 +404,14 @@ meta_window_actor_dispose (GObject *object)
meta_window_actor_detach (self);
meta_window_actor_clear_shape_region (self);
meta_window_actor_clear_bounding_region (self);
meta_window_actor_clear_shadow_clip (self);
g_clear_pointer (&priv->shape_region, cairo_region_destroy);
g_clear_pointer (&priv->bounding_region, cairo_region_destroy);
g_clear_pointer (&priv->shadow_clip, cairo_region_destroy);
if (priv->shadow_class != NULL)
{
g_free (priv->shadow_class);
priv->shadow_class = NULL;
}
if (priv->focused_shadow != NULL)
{
meta_shadow_unref (priv->focused_shadow);
priv->focused_shadow = NULL;
}
if (priv->unfocused_shadow != NULL)
{
meta_shadow_unref (priv->unfocused_shadow);
priv->unfocused_shadow = NULL;
}
if (priv->shadow_shape != NULL)
{
meta_window_shape_unref (priv->shadow_shape);
priv->shadow_shape = NULL;
}
g_clear_pointer (&priv->shadow_class, g_free);
g_clear_pointer (&priv->focused_shadow, meta_shadow_unref);
g_clear_pointer (&priv->unfocused_shadow, meta_shadow_unref);
g_clear_pointer (&priv->shadow_shape, meta_window_shape_unref);
if (priv->damage != None)
{
@ -423,17 +424,12 @@ meta_window_actor_dispose (GObject *object)
info->windows = g_list_remove (info->windows, (gconstpointer) self);
if (priv->window)
{
g_object_unref (priv->window);
priv->window = NULL;
}
g_clear_object (&priv->window);
/*
* Release the extra reference we took on the actor.
*/
g_object_unref (priv->actor);
priv->actor = NULL;
g_clear_object (&priv->actor);
G_OBJECT_CLASS (meta_window_actor_parent_class)->dispose (object);
}
@ -691,7 +687,7 @@ meta_window_actor_get_paint_volume (ClutterActor *actor,
/* The paint volume is computed before paint functions are called
* so our bounds might not be updated yet. Force an update. */
meta_window_actor_pre_paint (self);
meta_window_actor_handle_updates (self);
meta_window_actor_get_shape_bounds (self, &bounds);
@ -953,12 +949,31 @@ 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
@ -1307,6 +1322,12 @@ 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)
{
@ -1315,6 +1336,9 @@ 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)
{
@ -1511,6 +1535,9 @@ 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 */
@ -1556,42 +1583,6 @@ meta_window_actor_unmapped (MetaWindowActor *self)
priv->needs_pixmap = FALSE;
}
static void
meta_window_actor_clear_shape_region (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
if (priv->shape_region)
{
cairo_region_destroy (priv->shape_region);
priv->shape_region = NULL;
}
}
static void
meta_window_actor_clear_bounding_region (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
if (priv->bounding_region)
{
cairo_region_destroy (priv->bounding_region);
priv->bounding_region = NULL;
}
}
static void
meta_window_actor_clear_shadow_clip (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
if (priv->shadow_clip)
{
cairo_region_destroy (priv->shadow_clip);
priv->shadow_clip = NULL;
}
}
static void
meta_window_actor_update_bounding_region_and_borders (MetaWindowActor *self,
int width,
@ -1632,7 +1623,7 @@ meta_window_actor_update_bounding_region_and_borders (MetaWindowActor *self,
priv->last_borders = borders;
meta_window_actor_clear_bounding_region (self);
g_clear_pointer (&priv->bounding_region, cairo_region_destroy);
priv->bounding_region = cairo_region_create_rectangle (&bounding_rectangle);
@ -1641,33 +1632,6 @@ meta_window_actor_update_bounding_region_and_borders (MetaWindowActor *self,
g_signal_emit (self, signals[SIZE_CHANGED], 0);
}
static void
meta_window_actor_update_shape_region (MetaWindowActor *self,
cairo_region_t *region)
{
MetaWindowActorPrivate *priv = self->priv;
meta_window_actor_clear_shape_region (self);
/* region must be non-null */
priv->shape_region = region;
cairo_region_reference (region);
/* Our "shape_region" is called the "bounding region" in the X Shape
* Extension Documentation.
*
* Our "bounding_region" is called the "bounding rectangle", which defines
* the shape of the window as if it the window was unshaped.
*
* The X Shape extension requires that the "bounding region" can never
* extend outside the "bounding rectangle", and says it must be implicitly
* clipped before rendering. The region we get back hasn't been clipped.
* We explicitly clip the region here.
*/
if (priv->bounding_region != NULL)
cairo_region_intersect (priv->shape_region, priv->bounding_region);
}
/**
* meta_window_actor_get_obscured_region:
* @self: a #MetaWindowActor
@ -1776,7 +1740,7 @@ meta_window_actor_set_visible_region_beneath (MetaWindowActor *self,
if (appears_focused ? priv->focused_shadow : priv->unfocused_shadow)
{
meta_window_actor_clear_shadow_clip (self);
g_clear_pointer (&priv->shadow_clip, cairo_region_destroy);
priv->shadow_clip = cairo_region_copy (beneath_region);
if (clip_shadow_under_window (self))
@ -1801,7 +1765,7 @@ meta_window_actor_reset_visible_regions (MetaWindowActor *self)
meta_shaped_texture_set_clip_region (META_SHAPED_TEXTURE (priv->actor),
NULL);
meta_window_actor_clear_shadow_clip (self);
g_clear_pointer (&priv->shadow_clip, cairo_region_destroy);
}
static void
@ -1963,12 +1927,6 @@ 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)
@ -2113,14 +2071,14 @@ scan_visible_region (guchar *mask_data,
{
for (x = rect.x; x < (rect.x + rect.width); x++)
{
int w = x;
while (mask_data[y * stride + w] == 255 && w < (rect.x + rect.width))
w++;
int x2 = x;
while (mask_data[y * stride + x2] == 255 && x2 < (rect.x + rect.width))
x2++;
if (w > 0)
if (x2 > x)
{
meta_region_builder_add_rectangle (&builder, x, y, w - x, 1);
x = w;
meta_region_builder_add_rectangle (&builder, x, y, x2 - x, 1);
x = x2;
}
}
}
@ -2240,7 +2198,7 @@ check_needs_reshape (MetaWindowActor *self)
client_area.height = priv->window->rect.height;
meta_shaped_texture_set_mask_texture (META_SHAPED_TEXTURE (priv->actor), COGL_INVALID_HANDLE);
meta_window_actor_clear_shape_region (self);
g_clear_pointer (&priv->shape_region, cairo_region_destroy);
#ifdef HAVE_SHAPE
if (priv->window->has_shape)
@ -2298,8 +2256,21 @@ check_needs_reshape (MetaWindowActor *self)
build_and_scan_frame_mask (self, &borders, &client_area, region);
}
meta_window_actor_update_shape_region (self, region);
cairo_region_destroy (region);
priv->shape_region = region;
/* Our "shape_region" is called the "bounding region" in the X Shape
* Extension Documentation.
*
* Our "bounding_region" is called the "bounding rectangle", which defines
* the shape of the window as if it the window was unshaped.
*
* The X Shape extension requires that the "bounding region" can never
* extend outside the "bounding rectangle", and says it must be implicitly
* clipped before rendering. The region we get back hasn't been clipped.
* We explicitly clip the region here.
*/
if (priv->bounding_region != NULL)
cairo_region_intersect (priv->shape_region, priv->bounding_region);
priv->needs_reshape = FALSE;
meta_window_actor_invalidate_shadow (self);
@ -2320,8 +2291,8 @@ meta_window_actor_update_shape (MetaWindowActor *self)
clutter_actor_queue_redraw (priv->actor);
}
void
meta_window_actor_pre_paint (MetaWindowActor *self)
static void
meta_window_actor_handle_updates (MetaWindowActor *self)
{
MetaWindowActorPrivate *priv = self->priv;
MetaScreen *screen = priv->screen;
@ -2373,6 +2344,160 @@ meta_window_actor_pre_paint (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
@ -2407,3 +2532,21 @@ meta_window_actor_update_opacity (MetaWindowActor *self)
self->priv->opacity = opacity;
clutter_actor_set_opacity (self->priv->actor, opacity);
}
void
meta_window_actor_set_updates_frozen (MetaWindowActor *self,
gboolean updates_frozen)
{
MetaWindowActorPrivate *priv = self->priv;
updates_frozen = updates_frozen != FALSE;
if (priv->updates_frozen != updates_frozen)
{
priv->updates_frozen = updates_frozen;
if (updates_frozen)
meta_window_actor_freeze (self);
else
meta_window_actor_thaw (self);
}
}

View File

@ -223,8 +223,7 @@ struct _MetaDisplay
guint32 last_bell_time;
#endif
#ifdef HAVE_XSYNC
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
XSyncAlarm grab_sync_request_alarm;
gint64 grab_sync_counter_wait_serial;
#endif
int grab_resize_timeout_id;
@ -370,6 +369,16 @@ void meta_display_register_x_window (MetaDisplay *display,
void meta_display_unregister_x_window (MetaDisplay *display,
Window xwindow);
#ifdef HAVE_XSYNC
MetaWindow* meta_display_lookup_sync_alarm (MetaDisplay *display,
XSyncAlarm alarm);
void meta_display_register_sync_alarm (MetaDisplay *display,
XSyncAlarm *alarmp,
MetaWindow *window);
void meta_display_unregister_sync_alarm (MetaDisplay *display,
XSyncAlarm alarm);
#endif /* HAVE_XSYNC */
void meta_display_notify_window_created (MetaDisplay *display,
MetaWindow *window);

View File

@ -531,10 +531,6 @@ meta_display_open (void)
the_display->allow_terminal_deactivation = TRUE; /* Only relevant for when a
terminal has the focus */
#ifdef HAVE_XSYNC
the_display->grab_sync_request_alarm = None;
#endif
/* FIXME copy the checks from GDK probably */
the_display->static_gravity_works = g_getenv ("MUTTER_USE_STATIC_GRAVITY") != NULL;
@ -643,8 +639,11 @@ meta_display_open (void)
the_display->xsync_event_base = 0;
}
else
the_display->have_xsync = TRUE;
{
the_display->have_xsync = TRUE;
XSyncSetPriority (the_display->xdisplay, None, 10);
}
meta_verbose ("Attempted to init Xsync, found version %d.%d error base %d event base %d\n",
major, minor,
the_display->xsync_error_base,
@ -1939,15 +1938,20 @@ event_callback (XEvent *event,
}
#ifdef HAVE_XSYNC
if (META_DISPLAY_HAS_XSYNC (display) &&
event->type == (display->xsync_event_base + XSyncAlarmNotify) &&
((XSyncAlarmNotifyEvent*)event)->alarm == display->grab_sync_request_alarm)
if (META_DISPLAY_HAS_XSYNC (display) &&
event->type == (display->xsync_event_base + XSyncAlarmNotify))
{
XSyncValue value = ((XSyncAlarmNotifyEvent*)event)->counter_value;
guint64 new_counter_value;
new_counter_value = XSyncValueLow32 (value) + ((gint64)XSyncValueHigh32 (value) << 32);
meta_window_update_sync_request_counter (display->grab_window, new_counter_value);
filter_out_event = TRUE; /* GTK doesn't want to see this really */
MetaWindow *alarm_window = meta_display_lookup_sync_alarm (display,
((XSyncAlarmNotifyEvent*)event)->alarm);
if (alarm_window != NULL)
{
XSyncValue value = ((XSyncAlarmNotifyEvent*)event)->counter_value;
gint64 new_counter_value;
new_counter_value = XSyncValueLow32 (value) + ((gint64)XSyncValueHigh32 (value) << 32);
meta_window_update_sync_request_counter (alarm_window, new_counter_value);
filter_out_event = TRUE; /* GTK doesn't want to see this really */
}
}
#endif /* HAVE_XSYNC */
@ -3555,6 +3559,39 @@ 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)
@ -3868,7 +3905,6 @@ meta_display_begin_grab_op (MetaDisplay *display,
display->grab_motion_notify_time = 0;
display->grab_old_window_stacking = NULL;
#ifdef HAVE_XSYNC
display->grab_sync_request_alarm = None;
display->grab_last_user_action_was_snap = FALSE;
#endif
display->grab_frame_action = frame_action;
@ -3889,55 +3925,11 @@ meta_display_begin_grab_op (MetaDisplay *display,
#ifdef HAVE_XSYNC
if ( meta_grab_op_is_resizing (display->grab_op) &&
display->grab_window->sync_request_counter != None)
display->grab_window->sync_request_counter != None)
{
XSyncAlarmAttributes values;
XSyncValue init;
meta_error_trap_push_with_return (display);
/* Set the counter to 0, so we know that the application's
* responses to the client messages will always trigger
* a PositiveTransition
*/
XSyncIntToValue (&init, 0);
XSyncSetCounter (display->xdisplay,
display->grab_window->sync_request_counter, init);
display->grab_window->sync_request_serial = 0;
display->grab_window->sync_request_time.tv_sec = 0;
display->grab_window->sync_request_time.tv_usec = 0;
values.trigger.counter = display->grab_window->sync_request_counter;
values.trigger.value_type = XSyncAbsolute;
values.trigger.test_type = XSyncPositiveTransition;
XSyncIntToValue (&values.trigger.wait_value,
display->grab_window->sync_request_serial + 1);
/* After triggering, increment test_value by this.
* (NOT wait_value above)
*/
XSyncIntToValue (&values.delta, 1);
/* we want events (on by default anyway) */
values.events = True;
display->grab_sync_request_alarm = XSyncCreateAlarm (display->xdisplay,
XSyncCACounter |
XSyncCAValueType |
XSyncCAValue |
XSyncCATestType |
XSyncCADelta |
XSyncCAEvents,
&values);
if (meta_error_trap_pop_with_return (display) != Success)
display->grab_sync_request_alarm = None;
meta_topic (META_DEBUG_RESIZING,
"Created update alarm 0x%lx\n",
display->grab_sync_request_alarm);
meta_window_create_sync_request_alarm (display->grab_window);
window->sync_request_time.tv_sec = 0;
window->sync_request_time.tv_usec = 0;
}
#endif
}
@ -4050,14 +4042,6 @@ meta_display_end_grab_op (MetaDisplay *display,
meta_screen_ungrab_all_keys (display->grab_screen, timestamp);
}
#ifdef HAVE_XSYNC
if (display->grab_sync_request_alarm != None)
{
XSyncDestroyAlarm (display->xdisplay,
display->grab_sync_request_alarm);
display->grab_sync_request_alarm = None;
}
#endif /* HAVE_XSYNC */
display->grab_timestamp = 0;
display->grab_window = NULL;

View File

@ -847,10 +847,9 @@ meta_window_place (MetaWindow *window,
{
MetaWindow *w = tmp->data;
if (meta_window_showing_on_its_workspace (w) &&
w != window &&
(window->workspace == w->workspace ||
window->on_all_workspaces || w->on_all_workspaces))
if (w != window &&
meta_window_showing_on_its_workspace (w) &&
meta_window_located_on_workspace (w, window->workspace))
windows = g_list_prepend (windows, w);
tmp = tmp->next;

View File

@ -336,14 +336,32 @@ 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;
guint sync_request_serial;
gint64 sync_request_serial;
GTimeVal sync_request_time;
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
XSyncAlarm sync_request_alarm;
#endif
/* Number of UnmapNotify that are caused by us, if
@ -587,7 +605,7 @@ void meta_window_set_gravity (MetaWindow *window,
#ifdef HAVE_XSYNC
void meta_window_update_sync_request_counter (MetaWindow *window,
guint64 new_counter_value);
gint64 new_counter_value);
#endif /* HAVE_XSYNC */
void meta_window_handle_mouse_grab_op_event (MetaWindow *window,
@ -595,9 +613,6 @@ void meta_window_handle_mouse_grab_op_event (MetaWindow *window,
GList* meta_window_get_workspaces (MetaWindow *window);
gboolean meta_window_located_on_workspace (MetaWindow *window,
MetaWorkspace *workspace);
void meta_window_get_work_area_current_monitor (MetaWindow *window,
MetaRectangle *area);
void meta_window_get_work_area_for_monitor (MetaWindow *window,
@ -626,6 +641,8 @@ void meta_window_refresh_resize_popup (MetaWindow *window);
void meta_window_free_delete_dialog (MetaWindow *window);
void meta_window_create_sync_request_alarm (MetaWindow *window);
void meta_window_destroy_sync_request_alarm (MetaWindow *window);
void meta_window_update_keyboard_resize (MetaWindow *window,
gboolean update_cursor);
@ -658,4 +675,6 @@ gboolean meta_window_can_tile_side_by_side (MetaWindow *window);
void meta_window_compute_tile_match (MetaWindow *window);
gboolean meta_window_updates_are_frozen (MetaWindow *window);
#endif

View File

@ -882,12 +882,32 @@ reload_update_counter (MetaWindow *window,
{
if (value->type != META_PROP_VALUE_INVALID)
{
#ifdef HAVE_XSYNC
XSyncCounter counter = value->v.xcounter;
meta_window_destroy_sync_request_alarm (window);
window->sync_request_counter = None;
window->sync_request_counter = counter;
meta_verbose ("Window has _NET_WM_SYNC_REQUEST_COUNTER 0x%lx\n",
window->sync_request_counter);
#ifdef HAVE_XSYNC
if (value->v.xcounter_list.n_counters == 0)
{
meta_warning ("_NET_WM_SYNC_REQUEST_COUNTER is empty\n");
return;
}
if (value->v.xcounter_list.n_counters == 1)
{
window->sync_request_counter = value->v.xcounter_list.counters[0];
window->extended_sync_request_counter = FALSE;
}
else
{
window->sync_request_counter = value->v.xcounter_list.counters[1];
window->extended_sync_request_counter = TRUE;
}
meta_verbose ("Window has _NET_WM_SYNC_REQUEST_COUNTER 0x%lx (extended=%s)\n",
window->sync_request_counter,
window->extended_sync_request_counter ? "true" : "false");
if (window->extended_sync_request_counter)
meta_window_create_sync_request_alarm (window);
#endif
}
}
@ -1708,7 +1728,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, reload_update_counter, TRUE, FALSE },
{ display->atom__NET_WM_SYNC_REQUEST_COUNTER, META_PROP_VALUE_SYNC_COUNTER_LIST, reload_update_counter, TRUE, TRUE },
{ XA_WM_NORMAL_HINTS, META_PROP_VALUE_SIZE_HINTS, reload_normal_hints, TRUE, FALSE },
{ display->atom_WM_PROTOCOLS, META_PROP_VALUE_ATOM_LIST, reload_wm_protocols, TRUE, FALSE },
{ XA_WM_HINTS, META_PROP_VALUE_WM_HINTS, reload_wm_hints, TRUE, FALSE },

View File

@ -1015,6 +1015,7 @@ meta_window_new_with_attrs (MetaDisplay *display,
window->sync_request_serial = 0;
window->sync_request_time.tv_sec = 0;
window->sync_request_time.tv_usec = 0;
window->sync_request_alarm = None;
#endif
window->screen = screen;
@ -1818,6 +1819,8 @@ meta_window_unmanage (MetaWindow *window,
if (!window->override_redirect)
meta_stack_remove (window->screen->stack, window);
meta_window_destroy_sync_request_alarm (window);
if (window->frame)
meta_window_destroy_frame (window);
@ -2109,6 +2112,14 @@ set_net_wm_state (MetaWindow *window)
}
}
/**
* meta_window_located_on_workspace:
* @window: a #MetaWindow
* @workspace: a #MetaWorkspace
*
* Returns whether @window is displayed on @workspace, or whether it
* will be displayed on all workspaces.
*/
gboolean
meta_window_located_on_workspace (MetaWindow *window,
MetaWorkspace *workspace)
@ -4423,16 +4434,112 @@ 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;
window->sync_request_serial++;
/* For the old style of _NET_WM_SYNC_REQUEST_COUNTER, we just have to
* increase the value, but for the new "extended" style we need to
* pick an even (unfrozen) value sufficiently ahead of the last serial
* that we received from the client; the same code still works
* for the old style */
wait_serial = window->sync_request_serial + 240;
XSyncIntToValue (&value, window->sync_request_serial);
window->display->grab_sync_counter_wait_serial = wait_serial;
ev.type = ClientMessage;
ev.window = window->xwindow;
@ -4445,8 +4552,9 @@ send_sync_request (MetaWindow *window)
* want to use _roundtrip, though?
*/
ev.data.l[1] = meta_display_get_current_time (window->display);
ev.data.l[2] = XSyncValueLow32 (value);
ev.data.l[3] = XSyncValueHigh32 (value);
ev.data.l[2] = wait_serial & G_GUINT64_CONSTANT(0xffffffff);
ev.data.l[3] = wait_serial >> 32;
ev.data.l[4] = window->extended_sync_request_counter ? 1 : 0;
/* We don't need to trap errors here as we are already
* inside an error_trap_push()/pop() pair.
@ -4458,6 +4566,43 @@ send_sync_request (MetaWindow *window)
}
#endif
/**
* meta_window_updates_are_frozen:
* @window: a #MetaWindow
*
* Gets whether the compositor should be updating the window contents;
* window content updates may be frozen at client request by setting
* an odd value in the extended _NET_WM_SYNC_REQUEST_COUNTER counter r
* by the window manager during a resize operation while waiting for
* the client to redraw.
*
* Return value: %TRUE if updates are currently frozen
*/
gboolean
meta_window_updates_are_frozen (MetaWindow *window)
{
#ifdef HAVE_XSYNC
if (window->extended_sync_request_counter &&
window->sync_request_serial % 2 == 1)
return TRUE;
#endif
return window->updates_frozen_for_resize;
}
static void
meta_window_set_updates_frozen_for_resize (MetaWindow *window,
gboolean updates_frozen)
{
if (updates_frozen != window->updates_frozen_for_resize)
{
window->updates_frozen_for_resize = updates_frozen;
if (window->display->compositor)
meta_compositor_set_updates_frozen (window->display->compositor, window,
meta_window_updates_are_frozen (window));
}
}
static gboolean
maybe_move_attached_dialog (MetaWindow *window,
void *data)
@ -4906,12 +5051,28 @@ meta_window_move_resize_internal (MetaWindow *window,
* efficiently as possible
*/
/* configure frame first if we grow more than we shrink
/* Normally, we configure the frame first depending on whether
* we grow the frame more than we shrink. The idea is to avoid
* messing up the window contents by having a temporary situation
* where the frame is smaller than the window. However, if we're
* cooperating with the client to create an atomic frame upate,
* and the window is redirected, then we should always update
* the frame first, since updating the frame will force a new
* backing pixmap to be allocated, and the old backing pixmap
* will be left undisturbed for us to paint to the screen until
* the client finishes redrawing.
*/
size_dx = w - window->rect.width;
size_dy = h - window->rect.height;
if (window->extended_sync_request_counter)
{
configure_frame_first = TRUE;
}
else
{
size_dx = w - window->rect.width;
size_dy = h - window->rect.height;
configure_frame_first = (size_dx + size_dy >= 0);
configure_frame_first = size_dx + size_dy >= 0;
}
if (use_static_gravity)
meta_window_set_gravity (window, StaticGravity);
@ -4952,14 +5113,15 @@ meta_window_move_resize_internal (MetaWindow *window,
meta_error_trap_push (window->display);
#ifdef HAVE_XSYNC
if (window->sync_request_counter != None &&
window->display->grab_sync_request_alarm != None &&
if (window == window->display->grab_window &&
meta_grab_op_is_resizing (window->display->grab_op) &&
window->sync_request_counter != None &&
window->sync_request_alarm != None &&
window->sync_request_time.tv_usec == 0 &&
window->sync_request_time.tv_sec == 0)
{
/* turn off updating */
if (window->display->compositor)
meta_compositor_set_updates (window->display->compositor, window, FALSE);
meta_window_set_updates_frozen_for_resize (window, TRUE);
send_sync_request (window);
}
@ -8518,7 +8680,7 @@ check_moveresize_frequency (MetaWindow *window,
#ifdef HAVE_XSYNC
if (!window->disable_sync &&
window->display->grab_sync_request_alarm != None)
window->sync_request_alarm != None)
{
if (window->sync_request_time.tv_sec != 0 ||
window->sync_request_time.tv_usec != 0)
@ -9089,8 +9251,7 @@ update_resize (MetaWindow *window,
}
/* If we get here, it means the client should have redrawn itself */
if (window->display->compositor)
meta_compositor_set_updates (window->display->compositor, window, TRUE);
meta_window_set_updates_frozen_for_resize (window, FALSE);
/* Remove any scheduled compensation events */
if (window->display->grab_resize_timeout_id)
@ -9283,13 +9444,23 @@ update_tile_mode (MetaWindow *window)
#ifdef HAVE_XSYNC
void
meta_window_update_sync_request_counter (MetaWindow *window,
guint64 new_counter_value)
gint64 new_counter_value)
{
if (window->display->grab_op != META_GRAB_OP_NONE &&
window == window->display->grab_window &&
meta_grab_op_is_mouse (window->display->grab_op))
if (window->extended_sync_request_counter &&
new_counter_value % 2 == 0)
{
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,
@ -9303,36 +9474,13 @@ meta_window_update_sync_request_counter (MetaWindow *window,
window->sync_request_time.tv_sec = 0;
window->sync_request_time.tv_usec = 0;
/* This means we are ready for another configure. */
switch (window->display->grab_op)
{
case META_GRAB_OP_RESIZING_E:
case META_GRAB_OP_RESIZING_W:
case META_GRAB_OP_RESIZING_S:
case META_GRAB_OP_RESIZING_N:
case META_GRAB_OP_RESIZING_SE:
case META_GRAB_OP_RESIZING_SW:
case META_GRAB_OP_RESIZING_NE:
case META_GRAB_OP_RESIZING_NW:
case META_GRAB_OP_KEYBOARD_RESIZING_S:
case META_GRAB_OP_KEYBOARD_RESIZING_N:
case META_GRAB_OP_KEYBOARD_RESIZING_W:
case META_GRAB_OP_KEYBOARD_RESIZING_E:
case META_GRAB_OP_KEYBOARD_RESIZING_SE:
case META_GRAB_OP_KEYBOARD_RESIZING_NE:
case META_GRAB_OP_KEYBOARD_RESIZING_SW:
case META_GRAB_OP_KEYBOARD_RESIZING_NW:
/* no pointer round trip here, to keep in sync */
update_resize (window,
window->display->grab_last_user_action_was_snap,
window->display->grab_latest_motion_x,
window->display->grab_latest_motion_y,
TRUE);
break;
default:
break;
}
/* This means we are ready for another configure;
* no pointer round trip here, to keep in sync */
update_resize (window,
window->display->grab_last_user_action_was_snap,
window->display->grab_latest_motion_x,
window->display->grab_latest_motion_y,
TRUE);
}
}
#endif /* HAVE_XSYNC */
@ -9372,8 +9520,7 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
xev->root_x,
xev->root_y,
TRUE);
if (window->display->compositor)
meta_compositor_set_updates (window->display->compositor, window, TRUE);
meta_window_set_updates_frozen_for_resize (window, FALSE);
/* If a tiled window has been dragged free with a
* mouse resize without snapping back to the tiled
@ -10121,9 +10268,7 @@ meta_window_set_demands_attention (MetaWindow *window)
other_window = stack->data;
stack = stack->next;
if (other_window->on_all_workspaces ||
window->on_all_workspaces ||
other_window->workspace == window->workspace)
if (meta_window_located_on_workspace (other_window, window->workspace))
{
meta_window_get_outer_rect (other_window, &other_rect);

View File

@ -1292,8 +1292,7 @@ focus_ancestor_or_top_window (MetaWorkspace *workspace,
ancestor = NULL;
meta_window_foreach_ancestor (not_this_one, record_ancestor, &ancestor);
if (ancestor != NULL &&
(ancestor->on_all_workspaces ||
ancestor->workspace == workspace) &&
meta_window_located_on_workspace (ancestor, workspace) &&
meta_window_showing_on_its_workspace (ancestor))
{
meta_topic (META_DEBUG_FOCUS,

View File

@ -580,6 +580,23 @@ counter_from_results (GetPropertyResults *results,
return TRUE;
}
static gboolean
counter_list_from_results (GetPropertyResults *results,
XSyncCounter **counters_p,
int *n_counters_p)
{
if (!validate_or_free_results (results, 32,
XA_CARDINAL,
FALSE))
return FALSE;
*counters_p = (XSyncCounter*) results->prop;
*n_counters_p = results->n_items;
results->prop = NULL;
return TRUE;
}
#endif
gboolean
@ -1015,6 +1032,7 @@ meta_prop_get_values (MetaDisplay *display,
values[i].required_type = XA_WM_SIZE_HINTS;
break;
case META_PROP_VALUE_SYNC_COUNTER:
case META_PROP_VALUE_SYNC_COUNTER_LIST:
values[i].required_type = XA_CARDINAL;
break;
}
@ -1165,20 +1183,29 @@ meta_prop_get_values (MetaDisplay *display,
&values[i].v.size_hints.flags))
values[i].type = META_PROP_VALUE_INVALID;
break;
case META_PROP_VALUE_SYNC_COUNTER:
#ifdef HAVE_XSYNC
case META_PROP_VALUE_SYNC_COUNTER:
if (!counter_from_results (&results,
&values[i].v.xcounter))
values[i].type = META_PROP_VALUE_INVALID;
break;
case META_PROP_VALUE_SYNC_COUNTER_LIST:
if (!counter_list_from_results (&results,
&values[i].v.xcounter_list.counters,
&values[i].v.xcounter_list.n_counters))
values[i].type = META_PROP_VALUE_INVALID;
break;
#else
case META_PROP_VALUE_SYNC_COUNTER:
case META_PROP_VALUE_SYNC_COUNTER_LIST:
values[i].type = META_PROP_VALUE_INVALID;
if (results.prop)
{
XFree (results.prop);
results.prop = NULL;
}
#endif
break;
#endif
}
next:
@ -1231,6 +1258,9 @@ free_value (MetaPropValue *value)
break;
case META_PROP_VALUE_SYNC_COUNTER:
break;
case META_PROP_VALUE_SYNC_COUNTER_LIST:
meta_XFree (value->v.xcounter_list.counters);
break;
}
}

View File

@ -157,7 +157,8 @@ typedef enum
META_PROP_VALUE_WM_HINTS,
META_PROP_VALUE_CLASS_HINT,
META_PROP_VALUE_SIZE_HINTS,
META_PROP_VALUE_SYNC_COUNTER /* comes back as CARDINAL */
META_PROP_VALUE_SYNC_COUNTER, /* comes back as CARDINAL */
META_PROP_VALUE_SYNC_COUNTER_LIST /* comes back as CARDINAL */
} MetaPropValueType;
/* used to request/return/store property values */
@ -177,6 +178,11 @@ typedef struct
XClassHint class_hint;
#ifdef HAVE_XSYNC
XSyncCounter xcounter;
struct
{
gulong *counters;
int n_counters;
} xcounter_list;
#endif
struct

View File

@ -174,6 +174,8 @@ 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 (MetaCompositor *compositor,
void meta_compositor_set_updates_frozen (MetaCompositor *compositor,
MetaWindow *window,
gboolean updates);
gboolean updates_frozen);
void meta_compositor_sync_stack (MetaCompositor *compositor,
MetaScreen *screen,

View File

@ -85,6 +85,8 @@ Atom meta_window_get_window_type_atom (MetaWindow *window);
MetaWorkspace *meta_window_get_workspace (MetaWindow *window);
int meta_window_get_monitor (MetaWindow *window);
gboolean meta_window_is_on_all_workspaces (MetaWindow *window);
gboolean meta_window_located_on_workspace (MetaWindow *window,
MetaWorkspace *workspace);
gboolean meta_window_is_hidden (MetaWindow *window);
void meta_window_activate (MetaWindow *window,guint32 current_time);
void meta_window_activate_with_workspace (MetaWindow *window,

View File

@ -455,7 +455,8 @@ meta_frames_ensure_layout (MetaFrames *frames,
pango_layout_set_ellipsize (frame->layout, PANGO_ELLIPSIZE_END);
pango_layout_set_auto_dir (frame->layout, FALSE);
pango_layout_set_single_paragraph_mode (frame->layout, TRUE);
font_desc = meta_gtk_widget_get_font_desc (widget, scale,
meta_prefs_get_titlebar_font ());