Compare commits

..

15 Commits

Author SHA1 Message Date
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
Owen W. Taylor
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
200 changed files with 39704 additions and 40266 deletions

22
.gitignore vendored
View File

@@ -46,6 +46,7 @@ POTFILES
po/*.pot po/*.pot
50-metacity-desktop-key.xml 50-metacity-desktop-key.xml
50-metacity-key.xml 50-metacity-key.xml
inlinepixbufs.h
libmutter.pc libmutter.pc
mutter mutter
mutter-theme-viewer mutter-theme-viewer
@@ -55,14 +56,12 @@ org.gnome.mutter.gschema.xml
testasyncgetprop testasyncgetprop
testboxes testboxes
testgradient testgradient
m4/*
mutter-grayscale mutter-grayscale
mutter-mag mutter-mag
mutter-message mutter-message
mutter-window-demo mutter-window-demo
focus-window focus-window
test-attached test-attached
test-focus
test-gravity test-gravity
test-resizing test-resizing
test-size-hints test-size-hints
@@ -75,23 +74,4 @@ src/mutter-enum-types.[ch]
src/stamp-mutter-enum-types.h src/stamp-mutter-enum-types.h
src/mutter-marshal.[ch] src/mutter-marshal.[ch]
src/stamp-mutter-marshal.h src/stamp-mutter-marshal.h
src/meta-dbus-xrandr.[ch]
src/meta-dbus-idle-monitor.[ch]
src/mutter-plugins.pc src/mutter-plugins.pc
doc/reference/*.args
doc/reference/*.bak
doc/reference/*.hierarchy
doc/reference/*.interfaces
doc/reference/*.prerequisites
doc/reference/*.signals
doc/reference/*.stamp
doc/reference/html/
doc/reference/xml/
doc/reference/meta-decl-list.txt
doc/reference/meta-decl.txt
doc/reference/meta-overrides.txt
doc/reference/meta-undeclared.txt
doc/reference/meta-undocumented.txt
doc/reference/meta-unused.txt
doc/reference/meta-docs.sgml
doc/reference/meta.types

View File

@@ -1,12 +1,6 @@
SUBDIRS=src po doc SUBDIRS=src po doc
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
EXTRA_DIST = HACKING MAINTAINERS rationales.txt EXTRA_DIST = HACKING MAINTAINERS rationales.txt
DISTCLEANFILES = intltool-extract intltool-merge intltool-update po/stamp-it po/.intltool-merge-cache DISTCLEANFILES = intltool-extract intltool-merge intltool-update po/stamp-it po/.intltool-merge-cache
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}

296
NEWS
View File

@@ -1,299 +1,3 @@
3.11.2
======
* Fix resize operations using mouse-button-modifier [Lionel; #710251]
* Misc. fixes and cleanups [Jasper, Rico, Florian; #711731]
Contributors:
Lionel Landwerlin, Florian Müllner, Jasper St. Pierre, Rico Tzschichholz
3.11.1
======
* Don't require at least one output device to be connected [Giovanni; #709009]
* Name the guard window [Andrew; #710346]
* Use new UPower API [Bastien]
* Expose min-backlight-step [Asad; #710380]
* Don't focus the no-focus-window for globally active windows [Jasper; #710296]
* Misc. fixes and cleanups [Jasper, Rico, Olav, Magdalen; #709776]
Contributors:
Magdalen Berns, Giovanni Campagna, Asad Mehmood, Bastien Nocera,
Jasper St. Pierre, Rico Tzschichholz, Olav Vitters, Andrew Walton
Translations:
Reinout van Schouwen [nl]
3.10.1
======
* Don't apply fullscreen workarounds to CSD windows [Giovanni; #708718]
* Fix hangs during DND operations [Adel; #709340]
* Use nearest-pixel interpolation when possible [Hans; #708389]
* Fix tile previews getting stuck on right click during drags [Lionel; #704759]
* Misc bug fixes [Giovanni, Jasper; #708420]
Contributors:
Giovanni Campagna, Adel Gadllah, Lionel Landwerlin, Hans Petter Jansson,
Jasper St. Pierre
Translations:
Khaled Hosny [ar], Reinout van Schouwen [nl], Carles Ferrando [ca@valencia]
3.10.0.1
========
* Fix bug when a window changed size twice in a single frame - this
can happen with GTK+ client-side decorations [Giovanni, Owen; #708367]
Contributors:
Giovanni Campagna, Owen Taylor
3.10.0
======
Translations:
Ask H. Larsen [da], Gabor Kelemen [hu], Duarte Loreto [pt],
Yosef Or Boczko [he]
3.9.92
======
* Don't create a dummy texture for the texture pipeline template [Neil; #707458]
* Remove holes generated by disabling the laptop lid [Giovanni; #707473]
* https://bugzilla.gnome.org/show_bug.cgi?id=707474 [Giovanni; #707474]
* Don't require plugins to pass event to Clutter [Giovanni; #707482]
* Add support for more cursor types [Giovanni; #707919]
* Immediately fire idle watches that are already expired [Giovanni; #707302]
* Misc bug fixes [Giovanni, Colin, Pavel; #707649, #707563, #708070]
Contributors:
Giovanni Campagna, Adel Gadllah, Colin Guthrie, Neil Roberts,
Jasper St. Pierre, Ray Strode, Pavel Vasin
Translations:
Мирослав Николић po/sr, sr@latin.po, Мирослав Николић [sr, sr@latin],
Chao-Hsiung Liao [zh_HK, zh_TW], Yuri Myasoedov [ru],
Ville-Pekka Vainio [fi], Changwoo Ryu [ko], A S Alam [pa],
Mattias Põldaru [et], Rūdolfs Mazurs [lv], Ihar Hrachyshka [be],
Nilamdyuti Goswami [as], Andika Triwidada [id], Baurzhan Muftakhidinov [kk],
Benjamin Steinwender [de]
3.9.91
======
* Drop man pages for removed utilities [Kalev; #706579]
* Add support for idle tracking [Giovanni; #706005]
* Skip CRTC reconfigurations that have no effect [Giovanni; #706672]
* Ignore skip-taskbar hints on parentless dialogs [Giovanni; #673399]
* Don't save pixbuf data in user data [Tim; #706777]
* Don't queue redraws for obscured regions [Adel; #703332]
* Turn blending off when drawing entirely opaque regions [Jasper; #706930]
* Check event timestamps before reconfiguring [Giovanni; #706735]
* Misc bug fixes [Giovanni, Colin, Seán, Jasper, Cosimo; #706582, #706598,
#706787, #706729, #706825, #707081, #707090, #707250, #707267]
Contributors:
Giovanni Campagna, Cosimo Cecchi, Adel Gadllah, Colin Guthrie, Kalev Lember,
Tim Lunn, Jasper St. Pierre, Rico Tzschichholz, Seán de Búrca
Translations:
Piotr Drąg [pl], Alexandre Franke [fr], Kjartan Maraas [nb],
Milo Casagrande [it], Balázs Úr [hu], Seán de Búrca [ga], Fran Diéguez [gl],
Daniel Mustieles [es], Aurimas Černius [lt], Gil Forcada [ca]
3.9.90
======
* Add support for _GTK_FRAME_EXTENTS [Jasper; #705766]
* Fix quick consecutive <super> presses breaking keyboard input [Alban; #666101]
* Work towards running as wayland compositor [Giovanni]
- Add DBus API for display configuration
[#705670, #706231, #706233, #706322, #706382]
- Add abstraction layer for cursor tracking [#705911]
- Add support for plugin modality under wayland [#705917]
* Disable GTK+ scaling [Alexander; #706388]
* Disable blending while updating tower [Robert]
* Misc bug fixes and cleanups [Adel, Jasper, Giovanni, Colin, Rico, Florian;
#703332, #704437, #706207]
Contributors:
Robert Bragg, Giovanni Campagna, Alban Crequy, Adel Gadllah,
Alexander Larsson, Florian Müllner, Jasper St. Pierre, Rico Tzschichholz,
Colin Walters
Translations:
Jiro Matsuzawa [ja], Kjartan Maraas [nb], Matej Urbančič [sl],
Marek Černocký [cs], Daniel Mustieles [es], Rafael Ferreira [pt_BR],
Yaron Shahrabani [he], Ján Kyselica [sk]
3.9.5
=====
* Don't select for touch events on the stage [Jasper; #697192]
* Don't queue redraws for obscured regions [Adel; #703332]
* Export timestamp of global keybinding events [Bastien; #704858]
* Misc bug fixes and cleanups [Jasper, Rico; #703970]
Contributors:
Adel Gadllah, Bastien Nocera, Jasper St. Pierre, Rico Tzschichholz
3.9.4
=====
* Tweak window shadows [Allan; #702141]
* Ignore our own focus events for focus prediction [Jasper; #701017]
* Add API to query if the stage is focused [Jasper; #700735]
* Add API to query the monitor for a given position [Adel]
* Don't force attached dialogs to be border-only [Florian; #702764]
* Allow slicing of backgrounds to avoid texture size limits [Ray; #702283]
* Miscellaneous bug fixes and cleanups [Adel; #701224, #702564]
Contributors:
Allan Day, Adel Gadllah, Florian Müllner, Jasper St. Pierre, Ray Strode
3.9.3
=====
* Ensure events are always reported to the grab window [Rui; #701219]
* Use new clutter_stage_set_paint_callback() function to prevent dropping
frames with frame synced toolkits [Owen; #698794]
Contributors:
Rui Matos, Owen W. Taylor
3.9.2
=====
* Add meta_window_can_close() function [Jasper; #699269]
* Add support for string-array preferences [Florian; #700223]
* Fix a potential race condition with _NET_WM_MOVERESIZE [Jasper; #699777]
* Fix shade window action [Stef; #693714]
* Remove overlay_group [Giovanni; #700735]
* Improve tracking of the focus window [Dan, Jasper; #647706]
* Add API to freeze/unfreeze the keyboard [Rui; #697001]
* Grab and emit a signal when XK_ISO_Next_Group is pressed [Rui; #697002]
* Misc bug fixes and cleanups [Dieter, Jasper, Rui; #699636, #700735, #697000]
Contributors:
Giovanni Campagna, Rui Matos, Florian Müllner, Jasper St. Pierre,
Dieter Verfaillie, Stef Walter, Dan Winship
Translations:
Kjartan Maraas [nb], Ján Kyselica [sk]
3.9.1
=====
* Fix miscellaneous memory leaks [Pavel; #698710]
* Misc fixes and cleanups [Stef, Simon; #698179, #697758]
Contributors:
Simon McVittie, Pavel Vasin, Stef Walter
3.8.1
=====
* Fix crash when getting default font [Bastien; #696814]
* Fix ungrabbing of keybindings [Rui; #697003]
* Misc fixes and cleanups [Jasper, Simon; #697758]
Contributors:
Jasper Lievisse Adriaanse, Rui Matos, Simon McVittie, Bastien Nocera
Translations:
Guillaume Desmottes [fr], Shankar Prasad [kn], Bruce Cowan [en_GB],
Andika Triwidada [id], Yaron Shahrabani [he], Kjartan Maraas [nb],
Gheyret Kenji [ug]
3.8.0
=====
* Address major memory leak when changing backgrounds [Ray; #696157]
Contributors:
Ray Strode
Translations:
Sandeep Sheshrao Shedmake [mr], Victor Ibragimov [tg], Gabor Kelemen [hu],
Ville-Pekka Vainio [fi], Rajesh Ranjan [hi], Dr.T.Vasudevan [ta],
ManojKumar Giri [or], Yuri Myasoedov [ru], Petr Kovar [cs],
Jiro Matsuzawa [ja], Krishnababu Krothapalli [te], Ani Peter [ml],
Inaki Larranaga Murgoitio [eu]
3.7.92
======
* Build and improve reference docs [Tomeu; #676856, #695641, #695935]
* Add tracking of whether there are fullscreen windows [Owen; 649748]
* Misc bug fixes and cleanups [Adel, Giovanni, Owen, Jasper, Florian; #695269,
#695711, #694046, #695813, #695881, #676856, #696053, #682779, #696089,
#696091, #696087]
Contributors:
Giovanni Campagna, Adel Gadllah, Florian Müllner, Jasper St. Pierre,
Tomeu Vizoso, Owen W. Taylor
Translations:
Chao-Hsiung Liao [zh_HK, zh_TW], Rafael Ferreira [pt_BR],
Ihar Hrachyshka [be], Nilamdyuti Goswami [as], Matej Urbančič [sl],
Dimitris Spingos [el], Jan Kyselica [sk], Khaled Hosny [ar],
Мирослав Николић [sr, sr@latin], Duarte Loreto [pt], Sweta Kothari [gu],
Milo Casagrande [it], Changwoo Ryu [ko], Gil Forcada [ca],
Carles Ferrando [ca@valencia], Mattias Põldaru [et], Alexandre Franke [fr],
Ask H. Larsen [da], Rūdolfs Mazurs [lv], Nguyễn Thái Ngọc Duy [vi]
3.7.91
======
* Fix windows being treated as remote after hostname changes [Ray; #688716]
* Add meta_window_get_all_monitors() method [Adel; #646861]
* Add grab API for externally defined accelerators [Florian; #643111]
* Make session registration an explicit step [Ray; #694876]
* Avoid unnecessary stage redraws [Adel; #694988, #695006]
* Misc fixes [Giovanni, Ray, Jasper, Rui, Pavel, Owen; #694801, #694725,
#694641, #694393, #678917, #695093, #694837, #695135, #694771, #694321]
Contributors:
Giovanni Campagna, Adel Gadllah, Rui Matos, Florian Müllner,
Jasper St. Pierre, Ray Strode, Owen Taylor, Pavel Vasin
Translations:
Daniel Mustieles [es], Yaron Shahrabani [he], A S Alam [pa], Piotr Drąg [pl],
Gheyret Kenji [ug], Alexandre Franke [fr], Milo Casagrande [it],
Fran Diéguez [gl], Dimitris Spingos [el], Мирослав Николић [sr, sr@latin],
Chao-Hsiung Liao [zh_HK, zh_TW], Nguyễn Thái Ngọc Duy [vi],
Aurimas Černius [lt], Mario Blättermann [de], Kjartan Maraas [nb]
3.7.90
======
* Support _NET_WM_OPAQUE_REGION [Jasper, Adel; #679901]
* Add wrapper for XI2.3 pointer barriers [Jasper; #677215]
* Update style of resize popups [Cosimo; #692741]
* Implement compositor <-> application frame synchronization [Owen; #685463]
* Handle animated backgrounds [Ray; #682427]
* Add a new window group for override-redirect windows [Gayan; #633620]
* Pass on pointer events on guard window to Clutter [Jasper; #681540]
* Show correct shortcut in window menus [Giovanni; #694045]
* Don't put minimized windows at the back of alt-tab [Jasper; #693991]
* Misc bug fixes and cleanups [Jasper, Rico, Adel, Florian, Rui, Giovanni,
Owen; #692679, #693354, #690581, #693439, #692718, #693475, #693482, #693540,
#690580, #680990, #693833, #693922, #693854, #694224]
Contributors:
Giovanni Campagna, Cosimo Cecchi, Adel Gadllah, Rui Matos, Florian Müllner,
Gayan Perera, Jasper St. Pierre, Ray Strode, Owen Taylor, Rico Tzschichholz
Translations:
Fran Diéguez [gl], A S Alam [pa], Alexandre Franke [fr], Aurimas Černius [lt],
Мирослав Николић [sr, sr@latin], Fran Diéguez [gl], Piotr Drąg [pl],
Luca Ferretti [it], Daniel Mustieles [es]
3.7.5
=====
* Don't allow multiline window titles [Jon; #683056]
* Make meta_window_located_on_workspace() public [Jasper; #691744]
* Request XI2.3 [Colin; #692877]
* Add meta_window_set_icon_geometry() method [Florian; #692997]
* Require XFixes 5.0 [Jasper; #677215]
* Change unredirection hints to match spec changes [Adel; #693064]
* Improve unredict heuristicts [Adel; #683786]
* Misc bug fixes and cleanups [Florian, Jasper, Adel; #691874, #679901,
#692952, #693042]
Contributors:
Adel Gadllah, William Jon McCann, Florian Müllner, Jasper St. Pierre,
Colin Walters
Translations:
Daniel Mustieles [es], Ihar Hrachyshka [be], Nilamdyuti Goswami [as],
Gheyret Kenji [ug], Kjartan Maraas [nb], Yaron Shahrabani [he],
Piotr Drąg [pl], Chao-Hsiung Liao [zh_HK,zh_TW], Milo Casagrande [it]
3.7.4 3.7.4
===== =====
* Add support for bypass compositor hints [Adel; #683020] * Add support for bypass compositor hints [Adel; #683020]

View File

@@ -1,9 +1,8 @@
AC_PREREQ(2.50) AC_PREREQ(2.50)
AC_CONFIG_MACRO_DIR([m4])
m4_define([mutter_major_version], [3]) m4_define([mutter_major_version], [3])
m4_define([mutter_minor_version], [11]) m4_define([mutter_minor_version], [7])
m4_define([mutter_micro_version], [2]) m4_define([mutter_micro_version], [4])
m4_define([mutter_version], m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version]) [mutter_major_version.mutter_minor_version.mutter_micro_version])
@@ -13,7 +12,6 @@ m4_define([mutter_plugin_api_version], [3])
AC_INIT([mutter], [mutter_version], AC_INIT([mutter], [mutter_version],
[http://bugzilla.gnome.org/enter_bug.cgi?product=mutter]) [http://bugzilla.gnome.org/enter_bug.cgi?product=mutter])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR(src/core/display.c) AC_CONFIG_SRCDIR(src/core/display.c)
AC_CONFIG_HEADERS(config.h) AC_CONFIG_HEADERS(config.h)
@@ -69,16 +67,14 @@ CANBERRA_GTK_VERSION=0.26
CLUTTER_PACKAGE=clutter-1.0 CLUTTER_PACKAGE=clutter-1.0
MUTTER_PC_MODULES=" MUTTER_PC_MODULES="
gtk+-3.0 >= 3.9.11 gtk+-3.0 >= 3.3.7
gio-2.0 >= 2.25.10 gio-2.0 >= 2.25.10
pango >= 1.2.0 pango >= 1.2.0
cairo >= 1.10.0 cairo >= 1.10.0
gsettings-desktop-schemas >= 3.7.3 gsettings-desktop-schemas >= 3.3.0
xcomposite >= 0.2 xfixes xrender xdamage xi >= 1.6.0 xcomposite >= 0.2 xfixes xrender xdamage xi >= 1.6.0
$CLUTTER_PACKAGE >= 1.15.90 $CLUTTER_PACKAGE >= 1.13.2
cogl-1.0 >= 1.15.6 cogl-1.0 >= 1.9.6
upower-glib >= 0.99.0
gnome-desktop-3.0
" "
GLIB_GSETTINGS GLIB_GSETTINGS
@@ -122,6 +118,9 @@ AM_GLIB_GNU_GETTEXT
## here we get the flags we'll actually use ## here we get the flags we'll actually use
# GRegex requires Glib-2.14.0 # GRegex requires Glib-2.14.0
PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.14.0) PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.14.0)
# gtk_window_set_icon_name requires gtk2+-2.6.0
PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-3.0)
PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-3.0)
# Unconditionally use this dir to avoid a circular dep with gnomecc # Unconditionally use this dir to avoid a circular dep with gnomecc
GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings" GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings"
@@ -202,9 +201,6 @@ fi
PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES) PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES)
PKG_CHECK_EXISTS([xi >= 1.6.99.1],
AC_DEFINE([HAVE_XI23],[1],[Define if you have support for XInput 2.3 or greater]))
# This is used for plugins # This is used for plugins
AC_SUBST(CLUTTER_PACKAGE) AC_SUBST(CLUTTER_PACKAGE)
PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE) PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE)
@@ -308,6 +304,9 @@ if test "x$found_xsync" = "xyes"; then
fi fi
MUTTER_LIBS="$MUTTER_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm" MUTTER_LIBS="$MUTTER_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm"
MUTTER_MESSAGE_LIBS="$MUTTER_MESSAGE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
MUTTER_WINDOW_DEMO_LIBS="$MUTTER_WINDOW_DEMO_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm"
MUTTER_PROPS_LIBS="$MUTTER_PROPS_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
found_sm=no found_sm=no
case "$MUTTER_LIBS" in case "$MUTTER_LIBS" in
@@ -362,8 +361,6 @@ if test "x$enable_debug" = "xyes"; then
CFLAGS="$CFLAGS -g -O" CFLAGS="$CFLAGS -g -O"
fi fi
GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
#### Warnings (last since -Werror can disturb other tests) #### Warnings (last since -Werror can disturb other tests)
# Stay command-line compatible with the gnome-common configure option. Here # Stay command-line compatible with the gnome-common configure option. Here
@@ -434,11 +431,11 @@ AC_CONFIG_FILES([
Makefile Makefile
doc/Makefile doc/Makefile
doc/man/Makefile doc/man/Makefile
doc/reference/Makefile
doc/reference/meta-docs.sgml
src/Makefile src/Makefile
src/wm-tester/Makefile
src/libmutter.pc src/libmutter.pc
src/mutter-plugins.pc src/mutter-plugins.pc
src/tools/Makefile
src/compositor/plugins/Makefile src/compositor/plugins/Makefile
po/Makefile.in po/Makefile.in
]) ])

View File

@@ -1,4 +1,4 @@
SUBDIRS = man reference SUBDIRS = man
EXTRA_DIST=theme-format.txt dialogs.txt code-overview.txt \ EXTRA_DIST=theme-format.txt dialogs.txt code-overview.txt \
how-to-get-focus-right.txt how-to-get-focus-right.txt

View File

@@ -1,3 +1,4 @@
man_MANS = mutter.1 man_MANS = mutter.1 mutter-theme-viewer.1 \
mutter-window-demo.1 mutter-message.1
EXTRA_DIST = $(man_MANS) EXTRA_DIST = $(man_MANS)

60
doc/man/mutter-message.1 Normal file
View File

@@ -0,0 +1,60 @@
.\" Hey, EMACS: -*- nroff -*-
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.\" -----
.\" This file was confirmed to be licenced under the GPL
.\" by its author and copyright holder, Akira TAGOH, on June 1st 2008:
.\"
.\" > I'm comfortable with DFSG-free. that sounds great if you think it's
.\" > useful and worth containing it in upstream.
.\" ...
.\" > Right I know. any licenses that is DFSG-free, I'm ok with whatever,
.\" > since I have contributed that for Debian. so GPL is no problem for me.
.\" -----
.TH MUTTER\-MESSAGE 1 "28 August 2002"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
MUTTER\-MESSAGE \- a command to send a message to Mutter
.SH SYNOPSIS
.B MUTTER\-MESSAGE
[restart|reload\-theme|enable\-keybindings|disable\-keybindings]
.SH DESCRIPTION
This manual page documents briefly the
.B mutter\-message\fP.
This manual page was written for the Debian distribution
because the original program does not have a manual page.
.PP
.\" TeX users may be more comfortable with the \fB<whatever>\fP and
.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
.\" respectively.
\fBmutter\-message\fP send a specified message to \fBmutter\fP(1).
.SH OPTIONS
.TP
.B restart
Restart \fBmutter\fP(1) which is running.
.TP
.B reload-theme
Reload a theme which is specified on gsettings database.
.TP
.B enable-keybindings
Enable all of keybindings which is specified on gsettings database.
.TP
.B disable-keybindings
Disable all of keybindings which is specified on gsettings database.
.SH SEE ALSO
.BR mutter (1)
.SH AUTHOR
This manual page was written by Akira TAGOH <tagoh@debian.org>,
for the Debian GNU/Linux system (but may be used by others).

View File

@@ -0,0 +1,43 @@
.\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection
.\" other parms are allowed: see man(7), man(1)
.\"
.\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>.
.\"
.TH MUTTER-THEME-VIEWER 1 "1 June 2004"
.SH NAME
mutter-theme-viewer \- view mutter themes
.SH SYNOPSIS
.B mutter-theme-viewer
[
.I THEMENAME
]
.SH DESCRIPTION
.\" Putting a newline after each sentence can generate better output.
.B mutter-theme-viewer
allows you to preview any installed Mutter theme.
.PP
When designing a new Mutter theme, you can use
.B mutter-theme-viewer
to measure the performance of a window frame option, and to preview
the option.
.SH OPTIONS
.TP
.I THEMENAME
Name of the theme to be shown (\fIAtlanta\fR by default).
It is case-sensitive.
.SH FILES
.br
.nf
.TP
.I /usr/share/themes
system themes directory
.TP
.I /usr/share/themes/*/mutter-1/mutter-theme-1.xml
theme specification file
.SH AUTHOR
This manual page was written by Jose M. Moya <josem@die.upm.es>, for
the Debian GNU/Linux system (but may be used by others).
.SH "SEE ALSO"
.\" Always quote multiple words for .SH
.BR mutter (1),
.BR mutter-window-demo (1).

View File

@@ -0,0 +1,25 @@
.\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection
.\" other parms are allowed: see man(7), man(1)
.\"
.\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>.
.\"
.TH MUTTER-WINDOW-DEMO 1 "1 June 2004"
.SH NAME
mutter-window-demo \- demo of window features
.SH SYNOPSIS
.B mutter-window-demo
.SH DESCRIPTION
.\" Putting a newline after each sentence can generate better output.
This program demonstrates various kinds of windows that window
managers and window manager themes should handle.
.PP
Be sure to tear off the menu and toolbar, those are also a special
kind of window.
.SH AUTHOR
This manual page was written by Jose M. Moya <josem@die.upm.es>, for
the Debian GNU/Linux system (but may be used by others).
.SH "SEE ALSO"
.\" Always quote multiple words for .SH
.BR x-window-manager (1),
.BR mutter (1),
.BR mutter-theme-viewer (1).

View File

@@ -1,166 +0,0 @@
## Process this file with automake to produce Makefile.in
# We require automake 1.6 at least.
AUTOMAKE_OPTIONS = 1.6
# This is a blank Makefile.am for using gtk-doc.
# Copy this to your project's API docs directory and modify the variables to
# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
# of using the various options.
# The name of the module, e.g. 'glib'.
DOC_MODULE=meta
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
#DOC_MODULE_VERSION=2
# The top-level SGML file. You can change this if you want to.
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
# Directories containing the source code, relative to $(srcdir).
# gtk-doc will search all .c and .h files beneath these paths
# for inline comments documenting functions and macros.
# e.g. DOC_SOURCE_DIR=../../../gtk ../../../gdk
DOC_SOURCE_DIR=../../src/
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
SCANGOBJ_OPTIONS=
# Extra options to supply to gtkdoc-scan.
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
SCAN_OPTIONS=--rebuild-types
# Extra options to supply to gtkdoc-mkdb.
# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
MKDB_OPTIONS=--xml-mode --output-format=xml
# Extra options to supply to gtkdoc-mktmpl
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
MKTMPL_OPTIONS=
# Extra options to supply to gtkdoc-mkhtml
MKHTML_OPTIONS=
# Extra options to supply to gtkdoc-fixref. Not normally needed.
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
FIXXREF_OPTIONS=
# Used for dependencies. The docs will be rebuilt if any of these change.
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
HFILE_GLOB=$(top_srcdir)/src/*/*.h
CFILE_GLOB=$(top_srcdir)/src/*/*.c
# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
EXTRA_HFILES=
# Header files or dirs to ignore when scanning. Use base file/dir names
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
IGNORE_HFILES= \
async-getprop.h \
atoms.h \
bell.h \
boxes-private.h \
clutter-utils.h \
cogl-utils.h \
compositor-private.h \
constraints.h \
core.h \
display-private.h \
draw-workspace.h \
edge-resistance.h \
eventqueue.h \
frame.h \
frames.h \
group-private.h \
group-props.h \
iconcache.h \
inlinepixbufs.h \
keybindings-private.h \
menu.h \
metaaccellabel.h \
meta-background-actor-private.h \
meta-background-group-private.h \
meta-module.h \
meta-plugin-manager.h \
meta-shadow-factory-private.h \
meta-texture-rectangle.h \
meta-texture-tower.h \
meta-window-actor-private.h \
meta-window-group.h \
meta-window-shape.h \
mutter-enum-types.h \
mutter-Xatomtype.h \
place.h \
preview-widget.h \
region-utils.h \
resizepopup.h \
screen-private.h \
session.h \
stack.h \
stack-tracker.h \
stamp-mutter-enum-types.h \
tabpopup.h \
theme.h \
theme-private.h \
tile-preview.h \
ui.h \
window-private.h \
window-props.h \
workspace-private.h \
xprops.h \
$(NULL)
MKDB_OPTIONS+=--ignore-files="$(IGNORE_HFILES)"
# Images to copy into HTML directory.
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
HTML_IMAGES=
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
content_files= \
mutter-overview.xml \
running-mutter.xml \
$(NULL)
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
# These files must be listed here *and* in content_files
# e.g. expand_content_files=running.sgml
expand_content_files= \
mutter-overview.xml \
running-mutter.xml \
$(NULL)
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
# Only needed if you are using gtkdoc-scangobj to dynamically query widget
# signals and properties.
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
GTKDOC_CFLAGS=$(MUTTER_CFLAGS)
GTKDOC_LIBS=$(MUTTER_LIBS) $(top_builddir)/src/libmutter.la
# This includes the standard gtk-doc make rules, copied by gtkdocize.
include $(top_srcdir)/gtk-doc.make
# Other files to distribute
# e.g. EXTRA_DIST += version.xml.in
EXTRA_DIST +=
# Files not to distribute
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
DISTCLEANFILES = $(DOC_MODULES).types
# Comment this out if you want 'make check' to test you doc status
# and run some sanity checks
if ENABLE_GTK_DOC
TESTS_ENVIRONMENT = cd $(srcdir) && \
DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
#TESTS = $(GTKDOC_CHECK)
endif
-include $(top_srcdir)/git.mk

View File

@@ -1,59 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
[
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
<!ENTITY version "@VERSION@">
]>
<book id="index">
<bookinfo>
<title>Mutter Reference Manual</title>
<releaseinfo>
This document is for Mutter &version;.
The latest version of this documentation can be found on-line at
<ulink role="online-location" url="http://developer.gnome.org/meta/">http://developer.gnome.org/meta/</ulink>.
</releaseinfo>
</bookinfo>
<xi:include href="xml/mutter-overview.xml"/>
<xi:include href="xml/running-mutter.xml"/>
<part id="core-reference">
<title>Mutter Core Reference</title>
<xi:include href="xml/main.xml"/>
<xi:include href="xml/common.xml"/>
<xi:include href="xml/gradient.xml"/>
<xi:include href="xml/prefs.xml"/>
<xi:include href="xml/util.xml"/>
<xi:include href="xml/errors.xml"/>
<xi:include href="xml/meta-plugin.xml"/>
<xi:include href="xml/barrier.xml"/>
<xi:include href="xml/boxes.xml"/>
<xi:include href="xml/compositor.xml"/>
<xi:include href="xml/display.xml"/>
<xi:include href="xml/group.xml"/>
<xi:include href="xml/keybindings.xml"/>
<xi:include href="xml/meta-background-actor.xml"/>
<xi:include href="xml/meta-shadow-factory.xml"/>
<xi:include href="xml/meta-shaped-texture.xml"/>
<xi:include href="xml/meta-window-actor.xml"/>
<xi:include href="xml/screen.xml"/>
<xi:include href="xml/window.xml"/>
<xi:include href="xml/workspace.xml"/>
</part>
<chapter id="object-tree">
<title>Object Hierarchy</title>
<xi:include href="xml/tree_index.sgml"/>
</chapter>
<index id="api-index-full">
<title>API Index</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
<index id="deprecated-api-index" role="deprecated">
<title>Index of deprecated API</title>
<xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
</index>
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
</book>

View File

@@ -1,683 +0,0 @@
<SECTION>
<FILE>barrier</FILE>
<TITLE>MetaBarrier</TITLE>
MetaBarrier
MetaBarrierClass
meta_barrier_is_active
meta_barrier_destroy
meta_barrier_release
MetaBarrierDirection
MetaBarrierEvent
<SUBSECTION Standard>
META_BARRIER
META_BARRIER_CLASS
META_BARRIER_GET_CLASS
META_IS_BARRIER
META_IS_BARRIER_CLASS
META_TYPE_BARRIER
META_TYPE_BARRIER_EVENT
MetaBarrierPrivate
meta_barrier_event_get_type
meta_barrier_get_type
</SECTION>
<SECTION>
<FILE>boxes</FILE>
MetaRectangle
MetaStrut
MetaEdgeType
MetaEdge
meta_rectangle_copy
meta_rectangle_free
meta_rect
meta_rectangle_area
meta_rectangle_intersect
meta_rectangle_equal
meta_rectangle_union
meta_rectangle_overlap
meta_rectangle_vert_overlap
meta_rectangle_horiz_overlap
meta_rectangle_could_fit_rect
meta_rectangle_contains_rect
<SUBSECTION Standard>
META_TYPE_RECTANGLE
meta_rectangle_get_type
</SECTION>
<SECTION>
<FILE>common</FILE>
META_VIRTUAL_CORE_POINTER_ID
META_VIRTUAL_CORE_KEYBOARD_ID
MetaFrameFlags
MetaMenuOp
MetaWindowMenuFunc
MetaGrabOp
MetaCursor
MetaFrameType
MetaVirtualModifier
MetaDirection
MetaMotionDirection
MetaSide
MetaButtonFunction
MAX_BUTTONS_PER_CORNER
MetaButtonLayout
MetaFrameBorders
meta_frame_borders_clear
META_ICON_WIDTH
META_ICON_HEIGHT
META_MINI_ICON_WIDTH
META_MINI_ICON_HEIGHT
META_DEFAULT_ICON_NAME
META_PRIORITY_RESIZE
META_PRIORITY_BEFORE_REDRAW
META_PRIORITY_REDRAW
META_PRIORITY_PREFS_NOTIFY
POINT_IN_RECT
MetaStackLayer
MetaWindowMenu
MetaResizePopup
</SECTION>
<SECTION>
<FILE>compositor</FILE>
MetaCompEffect
MetaCompositor
meta_compositor_new
meta_compositor_destroy
meta_compositor_manage_screen
meta_compositor_unmanage_screen
meta_compositor_window_shape_changed
meta_compositor_process_event
meta_compositor_filter_keybinding
meta_compositor_add_window
meta_compositor_remove_window
meta_compositor_show_window
meta_compositor_hide_window
meta_compositor_switch_workspace
meta_compositor_maximize_window
meta_compositor_unmaximize_window
meta_compositor_sync_window_geometry
meta_compositor_set_updates_frozen
meta_compositor_queue_frame_drawn
meta_compositor_sync_stack
meta_compositor_sync_screen_size
meta_compositor_flash_screen
meta_get_stage_for_screen
meta_get_overlay_group_for_screen
meta_get_overlay_window
meta_get_window_actors
meta_get_window_group_for_screen
meta_get_top_window_group_for_screen
meta_disable_unredirect_for_screen
meta_enable_unredirect_for_screen
meta_set_stage_input_region
meta_empty_stage_input_region
</SECTION>
<SECTION>
<FILE>display</FILE>
MetaTabList
MetaTabShowType
meta_XFree
meta_display_get_compositor_version
meta_display_get_xinput_opcode
meta_display_supports_extended_barriers
meta_display_get_xdisplay
meta_display_get_compositor
meta_display_get_screens
meta_display_has_shape
meta_display_screen_for_root
meta_display_get_focus_window
meta_display_xwindow_is_a_no_focus_window
meta_display_get_damage_event_base
meta_display_get_shape_event_base
meta_display_xserver_time_is_before
meta_display_get_last_user_time
meta_display_get_current_time
meta_display_get_current_time_roundtrip
meta_display_get_ignored_modifier_mask
meta_display_get_tab_list
meta_display_get_tab_next
meta_display_get_tab_current
meta_display_begin_grab_op
meta_display_end_grab_op
meta_display_get_grab_op
meta_display_add_keybinding
meta_display_remove_keybinding
meta_display_get_keybinding_action
meta_display_set_input_focus_window
meta_display_focus_the_no_focus_window
meta_display_sort_windows_by_stacking
meta_display_get_leader_window
meta_display_add_ignored_crossing_serial
meta_display_unmanage_screen
meta_display_clear_mouse_mode
MetaDisplay
MetaDisplayClass
<SUBSECTION Standard>
META_DISPLAY
META_DISPLAY_CLASS
META_DISPLAY_GET_CLASS
META_IS_DISPLAY
META_IS_DISPLAY_CLASS
META_TYPE_DISPLAY
meta_display_get_type
</SECTION>
<SECTION>
<FILE>errors</FILE>
meta_error_trap_push
meta_error_trap_pop
meta_error_trap_push_with_return
meta_error_trap_pop_with_return
</SECTION>
<SECTION>
<FILE>gradient</FILE>
MetaGradientType
meta_gradient_create_simple
meta_gradient_create_multi
meta_gradient_create_interwoven
meta_gradient_add_alpha
</SECTION>
<SECTION>
<FILE>group</FILE>
MetaGroup
meta_window_get_group
meta_window_compute_group
meta_window_shutdown_group
meta_window_group_leader_changed
meta_display_lookup_group
meta_group_list_windows
meta_group_update_layers
meta_group_get_startup_id
meta_group_get_size
meta_group_property_notify
</SECTION>
<SECTION>
<FILE>keybindings</FILE>
MetaKeyBinding
META_TYPE_KEY_BINDING
meta_key_binding_get_name
meta_key_binding_get_modifiers
meta_key_binding_get_mask
meta_key_binding_is_builtin
meta_keybindings_set_custom_handler
meta_screen_ungrab_all_keys
meta_screen_grab_all_keys
</SECTION>
<SECTION>
<FILE>main</FILE>
meta_get_option_context
meta_init
meta_run
meta_get_replace_current_wm
meta_set_wm_name
meta_set_gnome_wm_keybindings
MetaExitCode
meta_exit
meta_quit
</SECTION>
<SECTION>
<FILE>meta-background</FILE>
<TITLE>MetaBackground</TITLE>
MetaBackgroundEffects
MetaBackground
MetaBackgroundClass
meta_background_new
meta_background_copy
meta_background_load_gradient
meta_background_load_color
meta_background_load_still_frame
meta_background_load_file_async
meta_background_load_file_finish
meta_background_get_filename
meta_background_get_style
meta_background_get_shading
meta_background_get_color
meta_background_get_second_color
<SUBSECTION Standard>
META_BACKGROUND
META_BACKGROUND_CLASS
META_BACKGROUND_GET_CLASS
META_IS_BACKGROUND
META_IS_BACKGROUND_CLASS
META_TYPE_BACKGROUND
MetaBackgroundPrivate
meta_background_get_type
</SECTION>
<SECTION>
<FILE>meta-background-actor</FILE>
<TITLE>MetaBackgroundActor</TITLE>
MetaBackgroundActor
MetaBackgroundActorClass
meta_background_actor_new_for_screen
MetaSnippetHook
meta_background_actor_add_glsl_snippet
meta_background_actor_set_uniform_float
<SUBSECTION Standard>
META_BACKGROUND_ACTOR
META_BACKGROUND_ACTOR_CLASS
META_BACKGROUND_ACTOR_GET_CLASS
META_IS_BACKGROUND_ACTOR
META_IS_BACKGROUND_ACTOR_CLASS
META_TYPE_BACKGROUND_ACTOR
MetaBackgroundActorPrivate
meta_background_actor_get_type
</SECTION>
<SECTION>
<FILE>meta-background-group</FILE>
<TITLE>MetaBackgroundGroup</TITLE>
MetaBackgroundGroupClass
meta_background_group_new
<SUBSECTION Standard>
META_BACKGROUND_GROUP
META_BACKGROUND_GROUP_CLASS
META_BACKGROUND_GROUP_GET_CLASS
META_IS_BACKGROUND_GROUP
META_IS_BACKGROUND_GROUP_CLASS
META_TYPE_BACKGROUND_GROUP
MetaBackgroundGroupPrivate
meta_background_group_get_type
</SECTION>
<SECTION>
<FILE>meta-plugin</FILE>
<TITLE>MetaPlugin</TITLE>
MetaPlugin
MetaPluginClass
MetaPluginInfo
meta_plugin_running
meta_plugin_debug_mode
meta_plugin_get_info
MetaPluginVersion
META_PLUGIN_DECLARE
meta_plugin_switch_workspace_completed
meta_plugin_minimize_completed
meta_plugin_maximize_completed
meta_plugin_unmaximize_completed
meta_plugin_map_completed
meta_plugin_destroy_completed
MetaModalOptions
meta_plugin_begin_modal
meta_plugin_end_modal
meta_plugin_get_screen
meta_plugin_manager_set_plugin_type
<SUBSECTION Standard>
META_IS_PLUGIN
META_IS_PLUGIN_CLASS
META_PLUGIN
META_PLUGIN_CLASS
META_PLUGIN_GET_CLASS
META_TYPE_PLUGIN
MetaPluginPrivate
meta_plugin_get_type
</SECTION>
<SECTION>
<FILE>meta-shadow-factory</FILE>
MetaShadowParams
meta_shadow_factory_get_default
meta_shadow_factory_set_params
meta_shadow_factory_get_params
MetaShadowFactory
MetaShadowFactoryClass
<SUBSECTION Standard>
META_IS_SHADOW_FACTORY
META_IS_SHADOW_FACTORY_CLASS
META_SHADOW_FACTORY
META_SHADOW_FACTORY_CLASS
META_SHADOW_FACTORY_GET_CLASS
META_TYPE_SHADOW_FACTORY
meta_shadow_factory_get_type
</SECTION>
<SECTION>
<FILE>meta-shaped-texture</FILE>
<TITLE>MetaShapedTexture</TITLE>
MetaShapedTexture
MetaShapedTextureClass
meta_shaped_texture_new
meta_shaped_texture_set_create_mipmaps
meta_shaped_texture_update_area
meta_shaped_texture_set_pixmap
meta_shaped_texture_get_texture
meta_shaped_texture_set_mask_texture
meta_shaped_texture_set_clip_region
meta_shaped_texture_get_image
<SUBSECTION Standard>
META_IS_SHAPED_TEXTURE
META_IS_SHAPED_TEXTURE_CLASS
META_SHAPED_TEXTURE
META_SHAPED_TEXTURE_CLASS
META_SHAPED_TEXTURE_GET_CLASS
META_TYPE_SHAPED_TEXTURE
MetaShapedTexturePrivate
meta_shaped_texture_get_type
</SECTION>
<SECTION>
<FILE>meta-window-actor</FILE>
<TITLE>MetaWindowActor</TITLE>
MetaWindowActor
MetaWindowActorClass
meta_window_actor_get_x_window
meta_window_actor_get_workspace
meta_window_actor_get_meta_window
meta_window_actor_get_texture
meta_window_actor_is_override_redirect
meta_window_actor_get_description
meta_window_actor_showing_on_its_workspace
meta_window_actor_is_destroyed
<SUBSECTION Standard>
META_IS_WINDOW_ACTOR
META_IS_WINDOW_ACTOR_CLASS
META_TYPE_WINDOW_ACTOR
META_WINDOW_ACTOR
META_WINDOW_ACTOR_CLASS
META_WINDOW_ACTOR_GET_CLASS
MetaWindowActorPrivate
meta_window_actor_get_type
</SECTION>
<SECTION>
<FILE>meta-cullable</FILE>
<TITLE>MetaCullable</TITLE>
MetaCullable
MetaCullableInterface
meta_cullable_cull_out
meta_cullable_reset_culling
meta_cullable_cull_out_children
meta_cullable_reset_culling_children
<SUBSECTION Standard>
META_TYPE_CULLABLE
META_CULLABLE
META_IS_CULLABLE
META_CULLABLE_GET_IFACE
meta_cullable_get_type
</SECTION>
<SECTION>
<FILE>prefs</FILE>
MetaPreference
MetaPrefsChangedFunc
meta_prefs_add_listener
meta_prefs_remove_listener
meta_prefs_init
meta_prefs_override_preference_schema
meta_preference_to_string
meta_prefs_get_mouse_button_mods
meta_prefs_get_mouse_button_resize
meta_prefs_get_mouse_button_menu
meta_prefs_get_focus_mode
meta_prefs_get_focus_new_windows
meta_prefs_get_attach_modal_dialogs
meta_prefs_get_raise_on_click
meta_prefs_get_theme
meta_prefs_get_titlebar_font
meta_prefs_get_num_workspaces
meta_prefs_get_dynamic_workspaces
meta_prefs_get_disable_workarounds
meta_prefs_get_auto_raise
meta_prefs_get_auto_raise_delay
meta_prefs_get_focus_change_on_pointer_rest
meta_prefs_get_gnome_accessibility
meta_prefs_get_gnome_animations
meta_prefs_get_edge_tiling
meta_prefs_get_auto_maximize
meta_prefs_get_button_layout
meta_prefs_get_action_double_click_titlebar
meta_prefs_get_action_middle_click_titlebar
meta_prefs_get_action_right_click_titlebar
meta_prefs_set_num_workspaces
meta_prefs_get_workspace_name
meta_prefs_change_workspace_name
meta_prefs_get_cursor_theme
meta_prefs_get_cursor_size
meta_prefs_get_compositing_manager
meta_prefs_get_force_fullscreen
meta_prefs_set_force_fullscreen
meta_prefs_get_workspaces_only_on_primary
meta_prefs_get_no_tab_popup
meta_prefs_set_no_tab_popup
meta_prefs_get_draggable_border_width
meta_prefs_get_ignore_request_hide_titlebar
meta_prefs_set_ignore_request_hide_titlebar
MetaKeyBindingAction
MetaKeyBindingFlags
MetaKeyCombo
MetaKeyHandlerFunc
meta_prefs_get_keybindings
meta_prefs_get_keybinding_action
meta_prefs_get_window_binding
meta_prefs_get_overlay_binding
meta_prefs_get_visual_bell
meta_prefs_bell_is_audible
meta_prefs_get_visual_bell_type
MetaKeyHandler
<SUBSECTION Standard>
meta_key_binding_get_type
</SECTION>
<SECTION>
<FILE>screen</FILE>
MetaScreen
MetaScreenClass
meta_screen_get_screen_number
meta_screen_get_display
meta_screen_get_xroot
meta_screen_get_size
meta_screen_get_compositor_data
meta_screen_set_compositor_data
meta_screen_for_x_screen
meta_screen_set_cm_selection
meta_screen_unset_cm_selection
meta_screen_get_startup_sequences
meta_screen_get_workspaces
meta_screen_get_n_workspaces
meta_screen_get_workspace_by_index
meta_screen_remove_workspace
meta_screen_append_new_workspace
meta_screen_get_active_workspace_index
meta_screen_get_active_workspace
meta_screen_get_n_monitors
meta_screen_get_primary_monitor
meta_screen_get_current_monitor
meta_screen_get_monitor_geometry
meta_screen_get_monitor_index_for_rect
meta_screen_focus_default_window
MetaScreenCorner
meta_screen_override_workspace_layout
<SUBSECTION Standard>
META_IS_SCREEN
META_IS_SCREEN_CLASS
META_SCREEN
META_SCREEN_CLASS
META_SCREEN_GET_CLASS
META_TYPE_SCREEN
meta_screen_get_type
</SECTION>
<SECTION>
<FILE>util</FILE>
meta_is_verbose
meta_set_verbose
meta_is_debugging
meta_set_debugging
meta_is_syncing
meta_set_syncing
meta_set_replace_current_wm
meta_debug_spew_real
meta_verbose_real
meta_bug
meta_warning
meta_fatal
MetaDebugTopic
meta_topic_real
meta_add_verbose_topic
meta_remove_verbose_topic
meta_push_no_msg_prefix
meta_pop_no_msg_prefix
meta_unsigned_long_equal
meta_unsigned_long_hash
meta_frame_type_to_string
meta_gravity_to_string
_
N_
meta_g_utf8_strndup
meta_free_gslist_and_elements
meta_show_dialog
meta_debug_spew
meta_verbose
meta_topic
MetaLaterType
meta_later_add
meta_later_remove
</SECTION>
<SECTION>
<FILE>window</FILE>
MetaWindow
MetaWindowClass
MetaWindowType
MetaMaximizeFlags
meta_window_get_frame
meta_window_has_focus
meta_window_appears_focused
meta_window_is_shaded
meta_window_is_monitor_sized
meta_window_is_override_redirect
meta_window_is_skip_taskbar
meta_window_get_rect
meta_window_get_input_rect
meta_window_get_frame_rect
meta_window_get_outer_rect
meta_window_client_rect_to_frame_rect
meta_window_frame_rect_to_client_rect
meta_window_get_screen
meta_window_get_display
meta_window_get_xwindow
meta_window_get_window_type
meta_window_get_window_type_atom
meta_window_get_workspace
meta_window_get_monitor
meta_window_is_on_all_workspaces
meta_window_located_on_workspace
meta_window_is_hidden
meta_window_activate
meta_window_activate_with_workspace
meta_window_get_description
meta_window_get_wm_class
meta_window_get_wm_class_instance
meta_window_showing_on_its_workspace
meta_window_get_gtk_application_id
meta_window_get_gtk_unique_bus_name
meta_window_get_gtk_application_object_path
meta_window_get_gtk_window_object_path
meta_window_get_gtk_app_menu_object_path
meta_window_get_gtk_menubar_object_path
meta_window_move
meta_window_move_frame
meta_window_move_resize_frame
meta_window_move_to_monitor
meta_window_resize
meta_window_set_demands_attention
meta_window_unset_demands_attention
meta_window_get_startup_id
meta_window_change_workspace_by_index
meta_window_change_workspace
meta_window_get_compositor_private
meta_window_set_compositor_private
meta_window_configure_notify
meta_window_get_role
meta_window_get_layer
meta_window_find_root_ancestor
meta_window_is_ancestor_of_transient
MetaWindowForeachFunc
meta_window_foreach_transient
meta_window_foreach_ancestor
meta_window_get_maximized
meta_window_is_fullscreen
meta_window_is_on_primary_monitor
meta_window_requested_bypass_compositor
meta_window_requested_dont_bypass_compositor
meta_window_is_mapped
meta_window_toplevel_is_mapped
meta_window_get_icon_geometry
meta_window_set_icon_geometry
meta_window_maximize
meta_window_unmaximize
meta_window_minimize
meta_window_unminimize
meta_window_raise
meta_window_lower
meta_window_get_title
meta_window_get_transient_for
meta_window_get_transient_for_as_xid
meta_window_delete
meta_window_get_stable_sequence
meta_window_get_user_time
meta_window_get_pid
meta_window_get_client_machine
meta_window_is_remote
meta_window_is_modal
meta_window_is_attached_dialog
meta_window_get_mutter_hints
meta_window_get_frame_type
meta_window_get_frame_bounds
meta_window_get_tile_match
meta_window_make_fullscreen
meta_window_unmake_fullscreen
meta_window_make_above
meta_window_unmake_above
meta_window_shade
meta_window_unshade
meta_window_stick
meta_window_unstick
meta_window_kill
meta_window_focus
meta_window_check_alive
meta_window_get_work_area_current_monitor
meta_window_get_work_area_for_monitor
meta_window_get_work_area_all_monitors
meta_window_begin_grab_op
<SUBSECTION Standard>
META_IS_WINDOW
META_IS_WINDOW_CLASS
META_TYPE_WINDOW
META_WINDOW
META_WINDOW_CLASS
META_WINDOW_GET_CLASS
meta_window_get_type
</SECTION>
<SECTION>
<FILE>workspace</FILE>
MetaWorkspace
MetaWorkspaceClass
meta_workspace_index
meta_workspace_get_screen
meta_workspace_list_windows
meta_workspace_get_work_area_for_monitor
meta_workspace_get_work_area_all_monitors
meta_workspace_activate
meta_workspace_activate_with_focus
meta_workspace_update_window_hints
meta_workspace_set_builtin_struts
meta_workspace_get_neighbor
<SUBSECTION Standard>
META_IS_WORKSPACE
META_IS_WORKSPACE_CLASS
META_TYPE_WORKSPACE
META_WORKSPACE
META_WORKSPACE_CLASS
META_WORKSPACE_GET_CLASS
meta_workspace_get_type
</SECTION>

View File

@@ -1,15 +0,0 @@
<part id="mutter-overview">
<title>Overview</title>
<partintro>
<para>Mutter is a GObject-based library for creating compositing window managers.</para>
<para>Compositors that wish to use Mutter must implement a subclass of #MetaPlugin and register it with meta_plugin_manager_set_plugin_type() before calling meta_init() but after g_type_init().</para>
<para>#MetaPlugin provides virtual functions that allow to override default behavior in the window management code, such as the effect to perform when a window is created or when switching workspaces.</para>
</partintro>
</part>

View File

@@ -1,100 +0,0 @@
<part id="running-mutter">
<title>Running Mutter</title>
<partintro>
<section id="environment-variables">
<title>Environment Variables</title>
<para>
Mutter automatically checks environment variables during
its initialization. These environment variables are meant
as debug tools or overrides for default behaviours:
</para>
<variablelist>
<varlistentry>
<term>MUTTER_VERBOSE</term>
<listitem>
<para>Enable verbose mode, in which more information is printed to the console. Mutter needs to be built with the --enable-verbose-mode option (enabled by default). For more fine-grained control of the output, see meta_add_verbose_topic().</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_DEBUG</term>
<listitem>
<para>Traps and prints X errors to the console.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_G_FATAL_WARNINGS</term>
<listitem>
<para>Causes any logging from the domains Mutter, Gtk, Gdk, Pango or GLib to terminate the process (only when using the log functions in GLib).</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_USE_LOGFILE</term>
<listitem>
<para>Log all messages to a temporary file.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_DEBUG_XINERAMA</term>
<listitem>
<para>Log extra information about support of the XINERAMA extension.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_DEBUG_SM</term>
<listitem>
<para>Log extra information about session management.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_DEBUG_BUTTON_GRABS</term>
<listitem>
<para>Log extra information about button grabs.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_SYNC</term>
<listitem>
<para>Call XSync after each X call.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_DISPLAY</term>
<listitem>
<para>Name of the X11 display to use.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>META_DISABLE_MIPMAPS</term>
<listitem>
<para>Disable use of mipmaps for the textures that back window pixmaps.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_USE_STATIC_GRAVITY</term>
<listitem>
<para>Enable support for clients with static bit-gravity.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_WM_CLASS_FILTER</term>
<listitem>
<para>Comma-separated list of WM_CLASS names to which to restrict Mutter to.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>MUTTER_DISABLE_FALLBACK_COLOR</term>
<listitem>
<para>Disable fallback for themed colors, for easier detection of typographical errors.</para>
</listitem>
</varlistentry>
</variablelist>
</section>
</partintro>
</part>

View File

@@ -21,7 +21,6 @@ environment.</description>
--> -->
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gnome-shell-list" /> <mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gnome-shell-list" />
<download-page rdf:resource="http://download.gnome.org/sources/mutter/" /> <download-page rdf:resource="http://download.gnome.org/sources/mutter/" />
<download-page rdf:resource="http://download.gnome.org/sources/mutter-wayland/" />
<bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=mutter" /> <bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=mutter" />
<category rdf:resource="http://api.gnome.org/doap-extensions#desktop" /> <category rdf:resource="http://api.gnome.org/doap-extensions#desktop" />

View File

@@ -44,7 +44,6 @@ is
it it
ja ja
ka ka
kk
kn kn
ko ko
ku ku
@@ -81,7 +80,6 @@ sr@latin
sv sv
ta ta
te te
tg
th th
tk tk
tr tr

View File

@@ -4,7 +4,6 @@ src/50-mutter-navigation.xml.in
src/50-mutter-system.xml.in src/50-mutter-system.xml.in
src/50-mutter-windows.xml.in src/50-mutter-windows.xml.in
src/compositor/compositor.c src/compositor/compositor.c
src/compositor/meta-background.c
src/core/bell.c src/core/bell.c
src/core/core.c src/core/core.c
src/core/delete.c src/core/delete.c
@@ -12,7 +11,6 @@ src/core/display.c
src/core/errors.c src/core/errors.c
src/core/keybindings.c src/core/keybindings.c
src/core/main.c src/core/main.c
src/core/monitor.c
src/core/mutter.c src/core/mutter.c
src/core/prefs.c src/core/prefs.c
src/core/screen.c src/core/screen.c
@@ -24,9 +22,12 @@ src/core/xprops.c
src/mutter.desktop.in src/mutter.desktop.in
src/mutter-wm.desktop.in src/mutter-wm.desktop.in
src/org.gnome.mutter.gschema.xml.in src/org.gnome.mutter.gschema.xml.in
src/tools/mutter-message.c
src/ui/frames.c src/ui/frames.c
src/ui/menu.c src/ui/menu.c
src/ui/metaaccellabel.c src/ui/metaaccellabel.c
src/ui/resizepopup.c src/ui/resizepopup.c
src/ui/theme.c src/ui/theme.c
src/ui/theme-parser.c src/ui/theme-parser.c
src/ui/theme-viewer.c

676
po/ar.po

File diff suppressed because it is too large Load Diff

512
po/as.po

File diff suppressed because it is too large Load Diff

453
po/be.po
View File

@@ -1,10 +1,10 @@
# Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2011, 2013. # Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, 2011.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter.master\n" "Project-Id-Version: mutter.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-08-18 20:03+0000\n" "POT-Creation-Date: 2013-01-11 15:23+0000\n"
"PO-Revision-Date: 2012-10-13 17:44+0300\n" "PO-Revision-Date: 2012-10-13 17:44+0300\n"
"Last-Translator: Ігар Грачышка <ihar.hrachyshka@gmail.com>\n" "Last-Translator: Ігар Грачышка <ihar.hrachyshka@gmail.com>\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n" "Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
@@ -206,7 +206,7 @@ msgstr "Падзяліць прагляд справа"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:589 #: ../src/compositor/compositor.c:512
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display \"%s" "Another compositing manager is already running on screen %i on display \"%s"
@@ -214,11 +214,7 @@ msgid ""
msgstr "" msgstr ""
"Іншы кампазітны кіраўнік вокнаў ужо абслугоўвае экран %i дысплея \"%s\"." "Іншы кампазітны кіраўнік вокнаў ужо абслугоўвае экран %i дысплея \"%s\"."
#: ../src/compositor/meta-background.c:1076 #: ../src/core/bell.c:320
msgid "background texture could not be created from file"
msgstr "не ўдалося стварыць фонавую тэкстуру з файла"
#: ../src/core/bell.c:322
msgid "Bell event" msgid "Bell event"
msgstr "Падзея з сігналам" msgstr "Падзея з сігналам"
@@ -251,18 +247,18 @@ msgstr "_Пачакаць"
msgid "_Force Quit" msgid "_Force Quit"
msgstr "_Змусіць да выхаду" msgstr "_Змусіць да выхаду"
#: ../src/core/display.c:421 #: ../src/core/display.c:394
#, c-format #, c-format
msgid "Missing %s extension required for compositing" msgid "Missing %s extension required for compositing"
msgstr "" msgstr ""
"Адсутнічае пашырэнне \"%s\", патрэбнае для ажыццяўлення кампазітнага вываду" "Адсутнічае пашырэнне \"%s\", патрэбнае для ажыццяўлення кампазітнага вываду"
#: ../src/core/display.c:513 #: ../src/core/display.c:491
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" msgid "Failed to open X Window System display '%s'\n"
msgstr "Не ўдалося адкрыць X-дысплей аконнай сістэмы \"%s\"\n" msgstr "Не ўдалося адкрыць X-дысплей аконнай сістэмы \"%s\"\n"
#: ../src/core/keybindings.c:1136 #: ../src/core/keybindings.c:876
#, c-format #, c-format
msgid "" msgid ""
"Some other program is already using the key %s with modifiers %x as a " "Some other program is already using the key %s with modifiers %x as a "
@@ -271,41 +267,36 @@ msgstr ""
"Нейкая іншая праграма ўжо выкарыстоўвае як скарот клавішу %s з " "Нейкая іншая праграма ўжо выкарыстоўвае як скарот клавішу %s з "
"мадыфікатарамі %x\n" "мадыфікатарамі %x\n"
#: ../src/core/keybindings.c:1333 #: ../src/core/main.c:196
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "\"%s\" - гэта хібны клавіятурны скарот\n"
#: ../src/core/main.c:197
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
msgstr "Выключыць злучэнне з кіраўніком сеансаў" msgstr "Выключыць злучэнне з кіраўніком сеансаў"
#: ../src/core/main.c:203 #: ../src/core/main.c:202
msgid "Replace the running window manager" msgid "Replace the running window manager"
msgstr "Замяніць дзейнага кіраўніка вокнаў" msgstr "Замяніць дзейнага кіраўніка вокнаў"
#: ../src/core/main.c:209 #: ../src/core/main.c:208
msgid "Specify session management ID" msgid "Specify session management ID"
msgstr "Вызначыць ідэнтыфікатар для кіравання сеансам" msgstr "Вызначыць ідэнтыфікатар для кіравання сеансам"
#: ../src/core/main.c:214 #: ../src/core/main.c:213
msgid "X Display to use" msgid "X Display to use"
msgstr "Патрэбны X-дысплей" msgstr "Патрэбны X-дысплей"
#: ../src/core/main.c:220 #: ../src/core/main.c:219
msgid "Initialize session from savefile" msgid "Initialize session from savefile"
msgstr "Ініцыяваць сеанс з файла" msgstr "Ініцыяваць сеанс з файла"
#: ../src/core/main.c:226 #: ../src/core/main.c:225
msgid "Make X calls synchronous" msgid "Make X calls synchronous"
msgstr "Сінхронна выконваць выклікі X-сістэмы" msgstr "Сінхронна выконваць выклікі X-сістэмы"
#: ../src/core/main.c:534 #: ../src/core/main.c:494
#, c-format #, c-format
msgid "Failed to scan themes directory: %s\n" msgid "Failed to scan themes directory: %s\n"
msgstr "Не ўдалося праглядзець каталог з матывамі аздаблення: %s\n" msgstr "Не ўдалося праглядзець каталог з матывамі аздаблення: %s\n"
#: ../src/core/main.c:550 #: ../src/core/main.c:510
#, c-format #, c-format
msgid "" msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n" "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -313,19 +304,6 @@ msgstr ""
"Не ўдалося адшукаць матыў аздаблення! Праверце, каб каталог %s існаваў і " "Не ўдалося адшукаць матыў аздаблення! Праверце, каб каталог %s існаваў і "
"змяшчаў звычайныя матывы.\n" "змяшчаў звычайныя матывы.\n"
#: ../src/core/monitor.c:711
msgid "Built-in display"
msgstr "Убудаваны дысплей"
#. TRANSLATORS: this is a monitor name (in case we don't know
#. the vendor), it's Unknown followed by a size in inches,
#. like 'Unknown 15"'
#.
#: ../src/core/monitor.c:739
#, c-format
msgid "Unknown %s"
msgstr "Невядомы %s"
#: ../src/core/mutter.c:40 #: ../src/core/mutter.c:40
#, c-format #, c-format
msgid "" msgid ""
@@ -350,7 +328,7 @@ msgstr "Вывесці нумар версіі праграмы"
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "Патрэбны плугін Mutter" msgstr "Патрэбны плугін Mutter"
#: ../src/core/prefs.c:1202 #: ../src/core/prefs.c:1087
msgid "" msgid ""
"Workarounds for broken applications disabled. Some applications may not " "Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n" "behave properly.\n"
@@ -358,12 +336,12 @@ msgstr ""
"Асаблівыя паводзіны для некаторых хібных праграм выключаныя. Некаторыя " "Асаблівыя паводзіны для некаторых хібных праграм выключаныя. Некаторыя "
"праграмы могуць перастаць працаваць, як мае быць.\n" "праграмы могуць перастаць працаваць, як мае быць.\n"
#: ../src/core/prefs.c:1277 #: ../src/core/prefs.c:1162
#, c-format #, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n" msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Не ўдалося разабраць азначэнне шрыфту \"%s\" з GSettings-ключа %s\n" msgstr "Не ўдалося разабраць азначэнне шрыфту \"%s\" з GSettings-ключа %s\n"
#: ../src/core/prefs.c:1343 #: ../src/core/prefs.c:1228
#, c-format #, c-format
msgid "" msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button " "\"%s\" found in configuration database is not a valid value for mouse button "
@@ -372,7 +350,7 @@ msgstr ""
"Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае " "Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае "
"мадыфікатар мышынай кнопкі\n" "мадыфікатар мышынай кнопкі\n"
#: ../src/core/prefs.c:1909 #: ../src/core/prefs.c:1780
#, c-format #, c-format
msgid "" msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding " "\"%s\" found in configuration database is not a valid value for keybinding "
@@ -381,17 +359,17 @@ msgstr ""
"Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае " "Значэнне \"%s\", знойдзенае ў базе канфігурацыйных даных, не азначае "
"клавіятурны скарот \"%s\"\n" "клавіятурны скарот \"%s\"\n"
#: ../src/core/prefs.c:1999 #: ../src/core/prefs.c:1877
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Прастора працы %d" msgstr "Прастора працы %d"
#: ../src/core/screen.c:534 #: ../src/core/screen.c:658
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "Экран %d на дысплеі \"%s\" хібны\n" msgstr "Экран %d на дысплеі \"%s\" хібны\n"
#: ../src/core/screen.c:550 #: ../src/core/screen.c:674
#, c-format #, c-format
msgid "" msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --" "Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -400,19 +378,19 @@ msgstr ""
"Экран %d на дысплеі \"%s\" ужо мае аконнага кіраўніка. Каб замяніць яго " "Экран %d на дысплеі \"%s\" ужо мае аконнага кіраўніка. Каб замяніць яго "
"новым, дадайце опцыю --replace.\n" "новым, дадайце опцыю --replace.\n"
#: ../src/core/screen.c:577 #: ../src/core/screen.c:701
#, c-format #, c-format
msgid "" msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n" "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "" msgstr ""
"Не ўдалося пераняць вылучэнне кіраўніка вокнаў для экрана %d дысплея \"%s\"\n" "Не ўдалося пераняць вылучэнне кіраўніка вокнаў для экрана %d дысплея \"%s\"\n"
#: ../src/core/screen.c:655 #: ../src/core/screen.c:770
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Экран %d на дысплеі \"%s\" ужо мае кіраўніка вокнаў\n" msgstr "Экран %d на дысплеі \"%s\" ужо мае кіраўніка вокнаў\n"
#: ../src/core/screen.c:846 #: ../src/core/screen.c:955
#, c-format #, c-format
msgid "Could not release screen %d on display \"%s\"\n" msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Не ўдалося вызваліць экран %d на дысплеі \"%s\"\n" msgstr "Не ўдалося вызваліць экран %d на дысплеі \"%s\"\n"
@@ -473,45 +451,46 @@ msgstr ""
"Гэтыя вокны не падтрымліваюць функцыі захавання дзейнага ладу працы, і таму " "Гэтыя вокны не падтрымліваюць функцыі захавання дзейнага ладу працы, і таму "
"іх прыйдзецца запусціць уручную пасля наступнага ўваходу ў сістэму." "іх прыйдзецца запусціць уручную пасля наступнага ўваходу ў сістэму."
#: ../src/core/util.c:84 #: ../src/core/util.c:80
#, c-format #, c-format
msgid "Failed to open debug log: %s\n" msgid "Failed to open debug log: %s\n"
msgstr "Не ўдалося адкрыць адладачны журнал: %s\n" msgstr "Не ўдалося адкрыць адладачны журнал: %s\n"
#: ../src/core/util.c:94 #: ../src/core/util.c:90
#, c-format #, c-format
msgid "Failed to fdopen() log file %s: %s\n" msgid "Failed to fdopen() log file %s: %s\n"
msgstr "Не ўдалося выканаць fdopen() для журнальнага файла %s: %s\n" msgstr "Не ўдалося выканаць fdopen() для журнальнага файла %s: %s\n"
#: ../src/core/util.c:100 #: ../src/core/util.c:96
#, c-format #, c-format
msgid "Opened log file %s\n" msgid "Opened log file %s\n"
msgstr "Журнальны файл %s адкрыты\n" msgstr "Журнальны файл %s адкрыты\n"
#: ../src/core/util.c:119 #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
#, c-format
msgid "Mutter was compiled without support for verbose mode\n" msgid "Mutter was compiled without support for verbose mode\n"
msgstr "" msgstr ""
"Праграма \"Mutter\" была скампіляваная без падтрымкі падрабязнага " "Праграма \"Mutter\" была скампіляваная без падтрымкі падрабязнага "
"пратакаліравання\n" "пратакаліравання\n"
#: ../src/core/util.c:264 #: ../src/core/util.c:259
msgid "Window manager: " msgid "Window manager: "
msgstr "Кіраўнік вокнаў: " msgstr "Кіраўнік вокнаў: "
#: ../src/core/util.c:414 #: ../src/core/util.c:407
msgid "Bug in window manager: " msgid "Bug in window manager: "
msgstr "Хіба ў кіраўніку вокнаў: " msgstr "Хіба ў кіраўніку вокнаў: "
#: ../src/core/util.c:445 #: ../src/core/util.c:438
msgid "Window manager warning: " msgid "Window manager warning: "
msgstr "Перасцярога ад кіраўніка вокнаў: " msgstr "Перасцярога ад кіраўніка вокнаў: "
#: ../src/core/util.c:473 #: ../src/core/util.c:466
msgid "Window manager error: " msgid "Window manager error: "
msgstr "Памылка кіраўніка вокнаў: " msgstr "Памылка кіраўніка вокнаў: "
#. first time through #. first time through
#: ../src/core/window.c:7533 #: ../src/core/window.c:7279
#, c-format #, c-format
msgid "" msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -527,7 +506,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work. #. * about these apps but make them work.
#. #.
#: ../src/core/window.c:8257 #: ../src/core/window.c:7945
#, c-format #, c-format
msgid "" msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size " "Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -537,22 +516,22 @@ msgstr ""
"памеру, але разам з гэтым прызначыла для сябе мінімальны памер %d x %d і " "памеру, але разам з гэтым прызначыла для сябе мінімальны памер %d x %d і "
"максімальны памер %d x %d. Такія паводзіны не маюць сэнсу.\n" "максімальны памер %d x %d. Такія паводзіны не маюць сэнсу.\n"
#: ../src/core/window-props.c:347 #: ../src/core/window-props.c:274
#, c-format #, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n" msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Праграма прызначыла памылковае значэнне _NET_WM_PID %lu\n" msgstr "Праграма прызначыла памылковае значэнне _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:463 #: ../src/core/window-props.c:393
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (на %s)" msgstr "%s (на %s)"
#: ../src/core/window-props.c:1546 #: ../src/core/window-props.c:1448
#, c-format #, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Для %2$s вызначана хібнае акно WM_TRANSIENT_FOR 0x%1$lx.\n" msgstr "Для %2$s вызначана хібнае акно WM_TRANSIENT_FOR 0x%1$lx.\n"
#: ../src/core/window-props.c:1557 #: ../src/core/window-props.c:1459
#, c-format #, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR акно 0x%lx для %s стварыла б цыкл.\n" msgstr "WM_TRANSIENT_FOR акно 0x%lx для %s стварыла б цыкл.\n"
@@ -702,15 +681,12 @@ msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:17 #: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Auto maximize nearly monitor sized windows" msgid "Auto maximize nearly monitor sized windows"
msgstr "" msgstr ""
"Аўтаматычна максімалізаваць вокны, якія расцягнутыя амаль на ўвесь экран"
#: ../src/org.gnome.mutter.gschema.xml.in.h:18 #: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "" msgid ""
"If enabled, new windows that are initially the size of the monitor " "If enabled, monitor nearly monitor sized windows automatically get maximized "
"automatically get maximized." "when mapped."
msgstr "" msgstr ""
"Калі ўключана, новыя вокны з памерам, блізкім да памераў манітора, будуць "
"аўтаматычна максімалізавацца."
#: ../src/org.gnome.mutter.gschema.xml.in.h:19 #: ../src/org.gnome.mutter.gschema.xml.in.h:19
msgid "Select window from tab popup" msgid "Select window from tab popup"
@@ -720,104 +696,109 @@ msgstr "Выбраць акно з выплыўнога акенца"
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Закрыць выплыўное акенца" msgstr "Закрыць выплыўное акенца"
#: ../src/tools/mutter-message.c:123
#, c-format
msgid "Usage: %s\n"
msgstr "Правілы выкарыстання: %s\n"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:67 #: ../src/ui/menu.c:69
msgid "Mi_nimize" msgid "Mi_nimize"
msgstr "_Мінімалізаваць" msgstr "_Мінімалізаваць"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:69 #: ../src/ui/menu.c:71
msgid "Ma_ximize" msgid "Ma_ximize"
msgstr "Масімалізаваць" msgstr "Масімалізаваць"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:71 #: ../src/ui/menu.c:73
msgid "Unma_ximize" msgid "Unma_ximize"
msgstr "Скасаваць масімалізацыю" msgstr "Скасаваць масімалізацыю"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:73 #: ../src/ui/menu.c:75
msgid "Roll _Up" msgid "Roll _Up"
msgstr "_Скруціць акно ў загаловак" msgstr "_Скруціць акно ў загаловак"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:75 #: ../src/ui/menu.c:77
msgid "_Unroll" msgid "_Unroll"
msgstr "Расруціць акно з загалоўка" msgstr "Расруціць акно з загалоўка"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:77 #: ../src/ui/menu.c:79
msgid "_Move" msgid "_Move"
msgstr "_Перамясціць акно" msgstr "_Перамясціць акно"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:79 #: ../src/ui/menu.c:81
msgid "_Resize" msgid "_Resize"
msgstr "_Змяніць памер акна" msgstr "_Змяніць памер акна"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:81 #: ../src/ui/menu.c:83
msgid "Move Titlebar On_screen" msgid "Move Titlebar On_screen"
msgstr "Перамясціць загаловак акна па _экране" msgstr "Перамясціць загаловак акна па _экране"
#. separator #. separator
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:84 ../src/ui/menu.c:86 #: ../src/ui/menu.c:86 ../src/ui/menu.c:88
msgid "Always on _Top" msgid "Always on _Top"
msgstr "Заўсёды _наверсе" msgstr "Заўсёды _наверсе"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:88 #: ../src/ui/menu.c:90
msgid "_Always on Visible Workspace" msgid "_Always on Visible Workspace"
msgstr "Заўсёды на _бачнай прасторы працы" msgstr "Заўсёды на _бачнай прасторы працы"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:90 #: ../src/ui/menu.c:92
msgid "_Only on This Workspace" msgid "_Only on This Workspace"
msgstr "_Толькі на гэтай прасторы працы" msgstr "_Толькі на гэтай прасторы працы"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:92 #: ../src/ui/menu.c:94
msgid "Move to Workspace _Left" msgid "Move to Workspace _Left"
msgstr "Перамясціць на прастору працы з_лева" msgstr "Перамясціць на прастору працы з_лева"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:94 #: ../src/ui/menu.c:96
msgid "Move to Workspace R_ight" msgid "Move to Workspace R_ight"
msgstr "Перамясціць на прастору працы с_права" msgstr "Перамясціць на прастору працы с_права"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:96 #: ../src/ui/menu.c:98
msgid "Move to Workspace _Up" msgid "Move to Workspace _Up"
msgstr "Перамясціць на прастору працы з_верху" msgstr "Перамясціць на прастору працы з_верху"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:98 #: ../src/ui/menu.c:100
msgid "Move to Workspace _Down" msgid "Move to Workspace _Down"
msgstr "Перамясціць на прастору працы з_нізу" msgstr "Перамясціць на прастору працы з_нізу"
#. separator #. separator
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:102 #: ../src/ui/menu.c:104
msgid "_Close" msgid "_Close"
msgstr "_Закрыць акно" msgstr "_Закрыць акно"
#: ../src/ui/menu.c:202 #: ../src/ui/menu.c:204
#, c-format #, c-format
msgid "Workspace %d%n" msgid "Workspace %d%n"
msgstr "Прастора працы %d%n" msgstr "Прастора працы %d%n"
#: ../src/ui/menu.c:212 #: ../src/ui/menu.c:214
#, c-format #, c-format
msgid "Workspace 1_0" msgid "Workspace 1_0"
msgstr "Прастора працы 1_0" msgstr "Прастора працы 1_0"
#: ../src/ui/menu.c:214 #: ../src/ui/menu.c:216
#, c-format #, c-format
msgid "Workspace %s%d" msgid "Workspace %s%d"
msgstr "Прастора працы %s%d" msgstr "Прастора працы %s%d"
#: ../src/ui/menu.c:384 #: ../src/ui/menu.c:397
msgid "Move to Another _Workspace" msgid "Move to Another _Workspace"
msgstr "П_ерамясціць на іншую прастору працы" msgstr "П_ерамясціць на іншую прастору працы"
@@ -914,54 +895,54 @@ msgstr "Mod5"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#. #.
#: ../src/ui/resizepopup.c:136 #: ../src/ui/resizepopup.c:113
#, c-format #, c-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
#: ../src/ui/theme.c:236 #: ../src/ui/theme.c:235
msgid "top" msgid "top"
msgstr "верхнюю" msgstr "верхнюю"
#: ../src/ui/theme.c:238 #: ../src/ui/theme.c:237
msgid "bottom" msgid "bottom"
msgstr "ніжнюю" msgstr "ніжнюю"
#: ../src/ui/theme.c:240 #: ../src/ui/theme.c:239
msgid "left" msgid "left"
msgstr "левую" msgstr "левую"
#: ../src/ui/theme.c:242 #: ../src/ui/theme.c:241
msgid "right" msgid "right"
msgstr "правую" msgstr "правую"
#: ../src/ui/theme.c:270 #: ../src/ui/theme.c:269
#, c-format #, c-format
msgid "frame geometry does not specify \"%s\" dimension" msgid "frame geometry does not specify \"%s\" dimension"
msgstr "апісанне геаметрыі рамкі акна не вызначае %s граніцу" msgstr "апісанне геаметрыі рамкі акна не вызначае %s граніцу"
#: ../src/ui/theme.c:289 #: ../src/ui/theme.c:288
#, c-format #, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "" msgstr ""
"апісанне геаметрыі рамкі акна не вызначае %s граніцу для аблямоўкі \"%s\"" "апісанне геаметрыі рамкі акна не вызначае %s граніцу для аблямоўкі \"%s\""
#: ../src/ui/theme.c:326 #: ../src/ui/theme.c:325
#, c-format #, c-format
msgid "Button aspect ratio %g is not reasonable" msgid "Button aspect ratio %g is not reasonable"
msgstr "Прапорцыі кнопкі %g не маюць сэнсу" msgstr "Прапорцыі кнопкі %g не маюць сэнсу"
#: ../src/ui/theme.c:338 #: ../src/ui/theme.c:337
#, c-format #, c-format
msgid "Frame geometry does not specify size of buttons" msgid "Frame geometry does not specify size of buttons"
msgstr "Апісанне геаметрыі рамкі акна не вызначае памер кнопак" msgstr "Апісанне геаметрыі рамкі акна не вызначае памер кнопак"
#: ../src/ui/theme.c:1051 #: ../src/ui/theme.c:1050
#, c-format #, c-format
msgid "Gradients should have at least two colors" msgid "Gradients should have at least two colors"
msgstr "Градыент мусіць мець прынамсі два колеры" msgstr "Градыент мусіць мець прынамсі два колеры"
#: ../src/ui/theme.c:1203 #: ../src/ui/theme.c:1202
#, c-format #, c-format
msgid "" msgid ""
"GTK custom color specification must have color name and fallback in " "GTK custom color specification must have color name and fallback in "
@@ -970,7 +951,7 @@ msgstr ""
"Уласная спецыфікацыя колеру GTK мусіць змяшчаць назвы асноўнага і запаснога " "Уласная спецыфікацыя колеру GTK мусіць змяшчаць назвы асноўнага і запаснога "
"колераў у дужках, напрыклад, gtk:custom(foo,bar). Не ўдалося разабраць \"%s\"" "колераў у дужках, напрыклад, gtk:custom(foo,bar). Не ўдалося разабраць \"%s\""
#: ../src/ui/theme.c:1219 #: ../src/ui/theme.c:1218
#, c-format #, c-format
msgid "" msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
@@ -979,7 +960,7 @@ msgstr ""
"Хібны знак \"%c\" у параметры color_name спецыфікацыі gtk:custom, дазволеныя " "Хібны знак \"%c\" у параметры color_name спецыфікацыі gtk:custom, дазволеныя "
"толькі A-Za-z0-9-_" "толькі A-Za-z0-9-_"
#: ../src/ui/theme.c:1233 #: ../src/ui/theme.c:1232
#, c-format #, c-format
msgid "" msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
@@ -988,7 +969,7 @@ msgstr ""
"Фармат gtk:custom: \"gtk:custom(назваолеруапасны_колер)\"; \"%s\" не " "Фармат gtk:custom: \"gtk:custom(назваолеруапасны_колер)\"; \"%s\" не "
"адпавядае фармату" "адпавядае фармату"
#: ../src/ui/theme.c:1278 #: ../src/ui/theme.c:1277
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@@ -997,7 +978,7 @@ msgstr ""
"Спецыфікацыя колеру GTK мусіць мець стан у квадратных дужках, напрыклад, gtk:" "Спецыфікацыя колеру GTK мусіць мець стан у квадратных дужках, напрыклад, gtk:"
"fg[NORMAL], дзе NORMAL - гэта стан. Не ўдалося разабраць \"%s\"" "fg[NORMAL], дзе NORMAL - гэта стан. Не ўдалося разабраць \"%s\""
#: ../src/ui/theme.c:1292 #: ../src/ui/theme.c:1291
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:" "GTK color specification must have a close bracket after the state, e.g. gtk:"
@@ -1007,17 +988,17 @@ msgstr ""
"напрыклад, gtk:fg[NORMAL], дзе NORMAL - гэта стан. Не ўдалося разабраць \"%s" "напрыклад, gtk:fg[NORMAL], дзе NORMAL - гэта стан. Не ўдалося разабраць \"%s"
"\"" "\""
#: ../src/ui/theme.c:1303 #: ../src/ui/theme.c:1302
#, c-format #, c-format
msgid "Did not understand state \"%s\" in color specification" msgid "Did not understand state \"%s\" in color specification"
msgstr "Незразумелы стан \"%s\" у спецыфікацыі колеру" msgstr "Незразумелы стан \"%s\" у спецыфікацыі колеру"
#: ../src/ui/theme.c:1316 #: ../src/ui/theme.c:1315
#, c-format #, c-format
msgid "Did not understand color component \"%s\" in color specification" msgid "Did not understand color component \"%s\" in color specification"
msgstr "Незразумелы складнік колеру \"%s\" у спецыфікацыі колеру" msgstr "Незразумелы складнік колеру \"%s\" у спецыфікацыі колеру"
#: ../src/ui/theme.c:1345 #: ../src/ui/theme.c:1344
#, c-format #, c-format
msgid "" msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@@ -1026,58 +1007,58 @@ msgstr ""
"Фармат змяшанага колеру - \"blend/bg_color/fg_color/alpha\". \"%s\" не " "Фармат змяшанага колеру - \"blend/bg_color/fg_color/alpha\". \"%s\" не "
"адпавядае фармату." "адпавядае фармату."
#: ../src/ui/theme.c:1356 #: ../src/ui/theme.c:1355
#, c-format #, c-format
msgid "Could not parse alpha value \"%s\" in blended color" msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Не ўдалося разабраць значэнне альфа \"%s\" ў змяшаным колеры" msgstr "Не ўдалося разабраць значэнне альфа \"%s\" ў змяшаным колеры"
#: ../src/ui/theme.c:1366 #: ../src/ui/theme.c:1365
#, c-format #, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "" msgstr ""
"Значэнне альфа \"%s\" у змяшаным колеры не ўваходзіць у дыяпазон ад 0.0 да " "Значэнне альфа \"%s\" у змяшаным колеры не ўваходзіць у дыяпазон ад 0.0 да "
"1.0" "1.0"
#: ../src/ui/theme.c:1413 #: ../src/ui/theme.c:1412
#, c-format #, c-format
msgid "" msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr "" msgstr ""
"Фармат ценю - \"shade/base_color/factor\". \"%s\" не адпавядае фармату." "Фармат ценю - \"shade/base_color/factor\". \"%s\" не адпавядае фармату."
#: ../src/ui/theme.c:1424 #: ../src/ui/theme.c:1423
#, c-format #, c-format
msgid "Could not parse shade factor \"%s\" in shaded color" msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Не ўдалося разабраць каэфіцыент ценю \"%s\" у зацененым колеры" msgstr "Не ўдалося разабраць каэфіцыент ценю \"%s\" у зацененым колеры"
#: ../src/ui/theme.c:1434 #: ../src/ui/theme.c:1433
#, c-format #, c-format
msgid "Shade factor \"%s\" in shaded color is negative" msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Каэфіцыент ценю \"%s\" у зацененым колеры адмоўны" msgstr "Каэфіцыент ценю \"%s\" у зацененым колеры адмоўны"
#: ../src/ui/theme.c:1463 #: ../src/ui/theme.c:1462
#, c-format #, c-format
msgid "Could not parse color \"%s\"" msgid "Could not parse color \"%s\""
msgstr "Не ўдалося разабраць колер \"%s\"" msgstr "Не ўдалося разабраць колер \"%s\""
#: ../src/ui/theme.c:1780 #: ../src/ui/theme.c:1779
#, c-format #, c-format
msgid "Coordinate expression contains character '%s' which is not allowed" msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Каардынатны выраз змяшчае забаронены знак \"%s\"" msgstr "Каардынатны выраз змяшчае забаронены знак \"%s\""
#: ../src/ui/theme.c:1807 #: ../src/ui/theme.c:1806
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contains floating point number '%s' which could not be " "Coordinate expression contains floating point number '%s' which could not be "
"parsed" "parsed"
msgstr "Каардынатны выраз змяшчае незразумелы лік з нефіксаванай коскай \"%s\"" msgstr "Каардынатны выраз змяшчае незразумелы лік з нефіксаванай коскай \"%s\""
#: ../src/ui/theme.c:1821 #: ../src/ui/theme.c:1820
#, c-format #, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed" msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Каардынатны выраз змяшчае незразумелы цэлы лік \"%s\"" msgstr "Каардынатны выраз змяшчае незразумелы цэлы лік \"%s\""
#: ../src/ui/theme.c:1942 #: ../src/ui/theme.c:1941
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contained unknown operator at the start of this text: " "Coordinate expression contained unknown operator at the start of this text: "
@@ -1085,17 +1066,17 @@ msgid ""
msgstr "" msgstr ""
"Каардынатны выраз змяшчае невядомы аператар у пачатку гэтага тэксту: \"%s\"" "Каардынатны выраз змяшчае невядомы аператар у пачатку гэтага тэксту: \"%s\""
#: ../src/ui/theme.c:1999 #: ../src/ui/theme.c:1998
#, c-format #, c-format
msgid "Coordinate expression was empty or not understood" msgid "Coordinate expression was empty or not understood"
msgstr "Каардынатны выраз пусты ці незразумелы" msgstr "Каардынатны выраз пусты ці незразумелы"
#: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
#, c-format #, c-format
msgid "Coordinate expression results in division by zero" msgid "Coordinate expression results in division by zero"
msgstr "Каардынатны выраз вымагае дзялення на нуль" msgstr "Каардынатны выраз вымагае дзялення на нуль"
#: ../src/ui/theme.c:2164 #: ../src/ui/theme.c:2163
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression tries to use mod operator on a floating-point number" "Coordinate expression tries to use mod operator on a floating-point number"
@@ -1103,24 +1084,24 @@ msgstr ""
"Каардынатны выраз спрабуе ўжыць аператар дзялення па модулі для ліку з " "Каардынатны выраз спрабуе ўжыць аператар дзялення па модулі для ліку з "
"нефіксаванай коскай" "нефіксаванай коскай"
#: ../src/ui/theme.c:2220 #: ../src/ui/theme.c:2219
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected" "Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "" msgstr ""
"У каардынатным выразе ўжыты аператар \"%s\" там, дзе мусіў быць аперанд" "У каардынатным выразе ўжыты аператар \"%s\" там, дзе мусіў быць аперанд"
#: ../src/ui/theme.c:2229 #: ../src/ui/theme.c:2228
#, c-format #, c-format
msgid "Coordinate expression had an operand where an operator was expected" msgid "Coordinate expression had an operand where an operator was expected"
msgstr "У каардынатным выразе ўжыты аперанд там, дзе мусіў быць аператар" msgstr "У каардынатным выразе ўжыты аперанд там, дзе мусіў быць аператар"
#: ../src/ui/theme.c:2237 #: ../src/ui/theme.c:2236
#, c-format #, c-format
msgid "Coordinate expression ended with an operator instead of an operand" msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Каардынатны выраз заканчваецца аператарам, а не аперандам" msgstr "Каардынатны выраз заканчваецца аператарам, а не аперандам"
#: ../src/ui/theme.c:2247 #: ../src/ui/theme.c:2246
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no " "Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@@ -1129,41 +1110,41 @@ msgstr ""
"У каардынатным выразе за аператарам \"%c\" ідзе аператар \"%c\", але паміж " "У каардынатным выразе за аператарам \"%c\" ідзе аператар \"%c\", але паміж "
"імі няма аперанда" "імі няма аперанда"
#: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442
#, c-format #, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\"" msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "У каардынатным выразе невядомая зменная альбо канстанта \"%s\"" msgstr "У каардынатным выразе невядомая зменная альбо канстанта \"%s\""
#: ../src/ui/theme.c:2497 #: ../src/ui/theme.c:2496
#, c-format #, c-format
msgid "Coordinate expression parser overflowed its buffer." msgid "Coordinate expression parser overflowed its buffer."
msgstr "Прылада для разбору каардынатных выразаў перапоўніла свой буфер." msgstr "Прылада для разбору каардынатных выразаў перапоўніла свой буфер."
#: ../src/ui/theme.c:2526 #: ../src/ui/theme.c:2525
#, c-format #, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis" msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "" msgstr ""
"У каардынатным выразе ўжытыя дужкі, якія закрываюцца, але няма тых, якія б " "У каардынатным выразе ўжытыя дужкі, якія закрываюцца, але няма тых, якія б "
"адкрываліся" "адкрываліся"
#: ../src/ui/theme.c:2590 #: ../src/ui/theme.c:2589
#, c-format #, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis" msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "" msgstr ""
"У каардынатным выразе ўжытыя дужкі, якія адкрываюцца, але няма тых, якія б " "У каардынатным выразе ўжытыя дужкі, якія адкрываюцца, але няма тых, якія б "
"закрываліся" "закрываліся"
#: ../src/ui/theme.c:2601 #: ../src/ui/theme.c:2600
#, c-format #, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands" msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "У каардынатным выразе няма ні аператараў, ні аперандаў" msgstr "У каардынатным выразе няма ні аператараў, ні аперандаў"
#: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
#, c-format #, c-format
msgid "Theme contained an expression that resulted in an error: %s\n" msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Матыў аздаблення змяшчае выраз, які стаў прычынай памылкі: %s\n" msgstr "Матыў аздаблення змяшчае выраз, які стаў прычынай памылкі: %s\n"
#: ../src/ui/theme.c:4500 #: ../src/ui/theme.c:4499
#, c-format #, c-format
msgid "" msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@@ -1172,25 +1153,25 @@ msgstr ""
"Для гэтага стылю рамкі трэба вызначыць <button function=\"%s\" state=\"%s\" " "Для гэтага стылю рамкі трэба вызначыць <button function=\"%s\" state=\"%s\" "
"draw_ops=\"whatever\"/>" "draw_ops=\"whatever\"/>"
#: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
#, c-format #, c-format
msgid "" msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr "" msgstr ""
"Няма <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"што-небудзь\"/>" "Няма <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"што-небудзь\"/>"
#: ../src/ui/theme.c:5082 #: ../src/ui/theme.c:5083
#, c-format #, c-format
msgid "Failed to load theme \"%s\": %s\n" msgid "Failed to load theme \"%s\": %s\n"
msgstr "Не ўдалося загрузіць матыў аздаблення \"%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:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
#, c-format #, c-format
msgid "No <%s> set for theme \"%s\"" msgid "No <%s> set for theme \"%s\""
msgstr "Для матыву аздаблення \"%2$s\" не прызначана <%1$s>" msgstr "Для матыву аздаблення \"%2$s\" не прызначана <%1$s>"
#: ../src/ui/theme.c:5254 #: ../src/ui/theme.c:5255
#, c-format #, c-format
msgid "" msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window " "No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@@ -1199,7 +1180,7 @@ msgstr ""
"Стыль рамкі не вызначаны для вокнаў тыпу \"%s\" для матыву аздаблення \"%s" "Стыль рамкі не вызначаны для вокнаў тыпу \"%s\" для матыву аздаблення \"%s"
"\". Дадайце <window type=\"%s\" style_set=\"штосьці\"/>." "\". Дадайце <window type=\"%s\" style_set=\"штосьці\"/>."
#: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 #: ../src/ui/theme.c:5659 ../src/ui/theme.c:5721 ../src/ui/theme.c:5784
#, c-format #, c-format
msgid "" msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not" "User-defined constants must begin with a capital letter; \"%s\" does not"
@@ -1207,7 +1188,7 @@ msgstr ""
"Назвы канстантаў, вызначаных карыстальнікам, мусяць пачынацца з вялікай " "Назвы канстантаў, вызначаных карыстальнікам, мусяць пачынацца з вялікай "
"літары. \"%s\" не адпавядае гэтаму патрабаванню." "літары. \"%s\" не адпавядае гэтаму патрабаванню."
#: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 #: ../src/ui/theme.c:5667 ../src/ui/theme.c:5729 ../src/ui/theme.c:5792
#, c-format #, c-format
msgid "Constant \"%s\" has already been defined" msgid "Constant \"%s\" has already been defined"
msgstr "Канстанта \"%s\" ужо азначана" msgstr "Канстанта \"%s\" ужо азначана"
@@ -1593,8 +1574,208 @@ msgstr "Выкарыстанне тэксту ўнутры элемента <%s>
msgid "<%s> specified twice for this theme" msgid "<%s> specified twice for this theme"
msgstr "<%s> двойчы вызначаны для гэтага матыву аздаблення" msgstr "<%s> двойчы вызначаны для гэтага матыву аздаблення"
#: ../src/ui/theme-parser.c:4336 #: ../src/ui/theme-parser.c:4334
#, c-format #, c-format
msgid "Failed to find a valid file for theme %s\n" msgid "Failed to find a valid file for theme %s\n"
msgstr "Памылка пошуку правільнага файла для матыву аздаблення %s\n" msgstr "Памылка пошуку правільнага файла для матыву аздаблення %s\n"
#: ../src/ui/theme-viewer.c:99
msgid "_Windows"
msgstr "_Вокны"
#: ../src/ui/theme-viewer.c:100
msgid "_Dialog"
msgstr "_Дыялогавае акенца"
#: ../src/ui/theme-viewer.c:101
msgid "_Modal dialog"
msgstr "_Мадальнае дыялогавае акенца"
#: ../src/ui/theme-viewer.c:102
msgid "_Utility"
msgstr "_Дапаможная праграма"
#: ../src/ui/theme-viewer.c:103
msgid "_Splashscreen"
msgstr "_Экранная застаўка"
#: ../src/ui/theme-viewer.c:104
msgid "_Top dock"
msgstr "_Верхняя ўбудова"
#: ../src/ui/theme-viewer.c:105
msgid "_Bottom dock"
msgstr "_Ніжняя ўбудова"
#: ../src/ui/theme-viewer.c:106
msgid "_Left dock"
msgstr "_Левая ўбудова"
#: ../src/ui/theme-viewer.c:107
msgid "_Right dock"
msgstr "_Правая ўбудова"
#: ../src/ui/theme-viewer.c:108
msgid "_All docks"
msgstr "_Усе ўбудовы"
#: ../src/ui/theme-viewer.c:109
msgid "Des_ktop"
msgstr "_Стол"
#: ../src/ui/theme-viewer.c:115
msgid "Open another one of these windows"
msgstr "Адкрыць чарговае з гэтых вокнаў"
#: ../src/ui/theme-viewer.c:117
msgid "This is a demo button with an 'open' icon"
msgstr "Гэта дэманстрацыйная кнопка са значком \"Адкрыць\""
#: ../src/ui/theme-viewer.c:119
msgid "This is a demo button with a 'quit' icon"
msgstr "Гэта дэманстрацыйная кнопка са значком \"Выйсці\""
#: ../src/ui/theme-viewer.c:248
msgid "This is a sample message in a sample dialog"
msgstr "Гэта ўзорнае паведамленне ва ўзорным дыялогавым акенцы"
#: ../src/ui/theme-viewer.c:328
#, c-format
msgid "Fake menu item %d\n"
msgstr "Несапраўдны пункт меню %d\n"
#: ../src/ui/theme-viewer.c:363
msgid "Border-only window"
msgstr "Акно толькі з аблямоўкай"
#: ../src/ui/theme-viewer.c:365
msgid "Bar"
msgstr "Стужка"
#: ../src/ui/theme-viewer.c:382
msgid "Normal Application Window"
msgstr "Звычайнае акно праграмы"
#: ../src/ui/theme-viewer.c:386
msgid "Dialog Box"
msgstr "Дыялогавае акенца"
#: ../src/ui/theme-viewer.c:390
msgid "Modal Dialog Box"
msgstr "Мадальнае дыялогавае акенца"
#: ../src/ui/theme-viewer.c:394
msgid "Utility Palette"
msgstr "Дапаможная палітра"
#: ../src/ui/theme-viewer.c:398
msgid "Torn-off Menu"
msgstr "Адчэпленае меню"
#: ../src/ui/theme-viewer.c:402
msgid "Border"
msgstr "Аблямоўка"
#: ../src/ui/theme-viewer.c:406
msgid "Attached Modal Dialog"
msgstr "Прычапленае мадальнае дыялогавае акенца"
#: ../src/ui/theme-viewer.c:739
#, c-format
msgid "Button layout test %d"
msgstr "Выпрабаванне размяшчэння кнопак %d"
#: ../src/ui/theme-viewer.c:768
#, c-format
msgid "%g milliseconds to draw one window frame"
msgstr "%g мілісекунд, каб намаляваць адну рамку акна"
#: ../src/ui/theme-viewer.c:813
#, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "Правілы карыстання: metacity-theme-viewer [НАЗВА_МАТЫВУ]\n"
#: ../src/ui/theme-viewer.c:820
#, c-format
msgid "Error loading theme: %s\n"
msgstr "Памылка загрузкі матыву аздаблення: %s\n"
#: ../src/ui/theme-viewer.c:826
#, c-format
msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Матыў аздаблення \"%s\" загружаны за %g секунд\n"
#: ../src/ui/theme-viewer.c:871
msgid "Normal Title Font"
msgstr "Звычайны шрыфт загалоўка"
#: ../src/ui/theme-viewer.c:877
msgid "Small Title Font"
msgstr "Маленькі шрыфт загалоўка"
#: ../src/ui/theme-viewer.c:883
msgid "Large Title Font"
msgstr "Вялікі шрыфт загалоўка"
#: ../src/ui/theme-viewer.c:888
msgid "Button Layouts"
msgstr "Размяшчэнне кнопак"
#: ../src/ui/theme-viewer.c:893
msgid "Benchmark"
msgstr "Выпрабаванне"
#: ../src/ui/theme-viewer.c:949
msgid "Window Title Goes Here"
msgstr "Месца для загалоўка акна"
#: ../src/ui/theme-viewer.c:1055
#, c-format
msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
"seconds wall clock time including X server resources (%g milliseconds per "
"frame)\n"
msgstr ""
"Намалявана %d рамак цягам %g секунд кліенцкага часу (%g мілісекунд на рамку) "
"і %g секунд каляндарнага часу, уключна з рэсурсамі X-сервера (%g мілісекунд "
"на рамку)\n"
#: ../src/ui/theme-viewer.c:1275
msgid "position expression test returned TRUE but set error"
msgstr "выпрабаванне выразу пазіцыі вярнула TRUE, але паведаміла аб памылцы"
#: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned FALSE but didn't set error"
msgstr ""
"выпрабаванне выразу пазіцыі вярнула FALSE, але не паведаміла аб памылцы"
#: ../src/ui/theme-viewer.c:1281
msgid "Error was expected but none given"
msgstr "Чакалася памылка, але звесткі не атрыманыя"
#: ../src/ui/theme-viewer.c:1283
#, c-format
msgid "Error %d was expected but %d given"
msgstr "Чакалася памылка %d, але атрымана %d"
#: ../src/ui/theme-viewer.c:1289
#, c-format
msgid "Error not expected but one was returned: %s"
msgstr "Атрымана нечаканая памылка: %s"
#: ../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:1296
#, c-format
msgid "y value was %d, %d was expected"
msgstr "Y-значэнне было %d, а чакалася %d"
#: ../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"

3108
po/ca.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

861
po/cs.po

File diff suppressed because it is too large Load Diff

1080
po/da.po

File diff suppressed because it is too large Load Diff

929
po/de.po

File diff suppressed because it is too large Load Diff

820
po/el.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

982
po/es.po

File diff suppressed because it is too large Load Diff

257
po/et.po
View File

@@ -7,15 +7,15 @@
# #
# Tõivo Leedjärv <toivo linux ee>, 2004. # Tõivo Leedjärv <toivo linux ee>, 2004.
# Ivar Smolin <okul linux ee>, 2005, 2006, 20092011. # Ivar Smolin <okul linux ee>, 2005, 2006, 20092011.
# Mattias Põldaru <mahfiaz@gmail.com>, 20082011, 2012, 2013. # Mattias Põldaru <mahfiaz@gmail.com>, 20082011, 2012.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter MASTER\n" "Project-Id-Version: mutter MASTER\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=mutter&keywords=I18N+L10N&component=general\n" "product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-09-10 15:25+0000\n" "POT-Creation-Date: 2012-12-18 22:30+0000\n"
"PO-Revision-Date: 2013-09-11 23:20+0300\n" "PO-Revision-Date: 2012-12-19 18:06+0300\n"
"Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n" "Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n"
"Language-Team: Estonian <>\n" "Language-Team: Estonian <>\n"
"Language: et\n" "Language: et\n"
@@ -23,7 +23,6 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Poedit 1.5.4\n"
msgid "Navigation" msgid "Navigation"
msgstr "Navigeerimine" msgstr "Navigeerimine"
@@ -133,8 +132,8 @@ msgstr "Varjatud oleku vahetamine"
msgid "Close window" msgid "Close window"
msgstr "Akna sulgemine" msgstr "Akna sulgemine"
msgid "Hide window" msgid "Minimize window"
msgstr "Peida aken" msgstr "Akna minimeerimine"
msgid "Move window" msgid "Move window"
msgstr "Akna liigutamine" msgstr "Akna liigutamine"
@@ -174,9 +173,6 @@ msgid ""
"\"." "\"."
msgstr "Teine komposiithaldur juba töötab ekraani %i kuval \"%s\"." msgstr "Teine komposiithaldur juba töötab ekraani %i kuval \"%s\"."
msgid "background texture could not be created from file"
msgstr "failist polnud võimalik taustatekstuuri luua"
msgid "Bell event" msgid "Bell event"
msgstr "Helina sündmus" msgstr "Helina sündmus"
@@ -218,10 +214,6 @@ msgstr ""
"Mõni teine programm juba kasutab klahvi %s koos muuteklahvidega %x " "Mõni teine programm juba kasutab klahvi %s koos muuteklahvidega %x "
"kiirklahvina\n" "kiirklahvina\n"
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "\"%s\" pole sobiv kiirklahv\n"
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
msgstr "Seansihalduriga ühendumise keelamine" msgstr "Seansihalduriga ühendumise keelamine"
@@ -250,17 +242,6 @@ msgid ""
msgstr "" msgstr ""
"Teemat ei leitud! Veendu, et %s on olemas ja sisaldab harilikke teemasid.\n" "Teemat ei leitud! Veendu, et %s on olemas ja sisaldab harilikke teemasid.\n"
msgid "Built-in display"
msgstr "Sisseehitatud kuva"
#. TRANSLATORS: this is a monitor name (in case we don't know
#. the vendor), it's Unknown followed by a size in inches,
#. like 'Unknown 15"'
#.
#, c-format
msgid "Unknown %s"
msgstr "Tundmatu %s"
#, c-format #, c-format
msgid "" msgid ""
"mutter %s\n" "mutter %s\n"
@@ -393,6 +374,7 @@ msgstr "Tõrge logifaili %s avamisel funktsiooniga fdopen(): %s\n"
msgid "Opened log file %s\n" msgid "Opened log file %s\n"
msgstr "Avati logifail %s\n" msgstr "Avati logifail %s\n"
#, c-format
msgid "Mutter was compiled without support for verbose mode\n" msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter kompileeriti ilma jutuka režiimi toeta\n" msgstr "Mutter kompileeriti ilma jutuka režiimi toeta\n"
@@ -567,22 +549,16 @@ msgstr ""
"Lohistatava äärise laius. Kui kujunduse nähtavatest ääristest ei piisa, " "Lohistatava äärise laius. Kui kujunduse nähtavatest ääristest ei piisa, "
"lisatakse puuduoleva osa jaoks nähtamatu ääris." "lisatakse puuduoleva osa jaoks nähtamatu ääris."
msgid "Auto maximize nearly monitor sized windows"
msgstr "Peaaegu monitori suurused ekraanid maksimeeritakse automaatselt"
msgid ""
"If enabled, new windows that are initially the size of the monitor "
"automatically get maximized."
msgstr ""
"Kui lubatud, maksimeeritakse automaatselt aknad, mis on avanedes monitori "
"suurused."
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "Akna valimine tabulaatori hüpikaknalt" msgstr "Akna valimine tabulaatori hüpikaknalt"
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Tabulaatori hüpikakna katkestamine" msgstr "Tabulaatori hüpikakna katkestamine"
#, c-format
msgid "Usage: %s\n"
msgstr "Kasutamine: %s\n"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
msgid "Mi_nimize" msgid "Mi_nimize"
msgstr "_Minimeeri" msgstr "_Minimeeri"
@@ -1288,151 +1264,156 @@ msgstr "Selle teema jaoks on <%s> määratud kaks korda"
msgid "Failed to find a valid file for theme %s\n" msgid "Failed to find a valid file for theme %s\n"
msgstr "Tõrge %s teema jaoks korrektse faili leidmisel\n" msgstr "Tõrge %s teema jaoks korrektse faili leidmisel\n"
#~ msgid "Usage: %s\n" msgid "_Windows"
#~ msgstr "Kasutamine: %s\n" msgstr "_Aknad"
#~ msgid "_Windows" msgid "_Dialog"
#~ msgstr "_Aknad" msgstr "_Dialoog"
#~ msgid "_Dialog" msgid "_Modal dialog"
#~ msgstr "_Dialoog" msgstr "_Modaaldialoog"
#~ msgid "_Modal dialog" msgid "_Utility"
#~ msgstr "_Modaaldialoog" msgstr "_Utiliit"
#~ msgid "_Utility" msgid "_Splashscreen"
#~ msgstr "_Utiliit" msgstr "_Käivitusekraan"
#~ msgid "_Splashscreen" msgid "_Top dock"
#~ msgstr "_Käivitusekraan" msgstr "Ü_lemine dokk"
#~ msgid "_Top dock" msgid "_Bottom dock"
#~ msgstr "Ü_lemine dokk" msgstr "_Alumine dokk"
#~ msgid "_Bottom dock" msgid "_Left dock"
#~ msgstr "_Alumine dokk" msgstr "_Vasak dokk"
#~ msgid "_Left dock" msgid "_Right dock"
#~ msgstr "_Vasak dokk" msgstr "_Parem dokk"
#~ msgid "_Right dock" msgid "_All docks"
#~ msgstr "_Parem dokk" msgstr "_Kõik dokid"
#~ msgid "_All docks" msgid "Des_ktop"
#~ msgstr "_Kõik dokid" msgstr "_Töölaud"
#~ msgid "Des_ktop" msgid "Open another one of these windows"
#~ msgstr "_Töölaud" msgstr "Ava neist akendest järgmine"
#~ msgid "Open another one of these windows" msgid "This is a demo button with an 'open' icon"
#~ msgstr "Ava neist akendest järgmine" msgstr "See on näidisnupp koos 'ava' ikooniga"
#~ msgid "This is a demo button with an 'open' icon" msgid "This is a demo button with a 'quit' icon"
#~ msgstr "See on näidisnupp koos 'ava' ikooniga" msgstr "See on näidisnupp koos 'lõpeta' ikooniga"
#~ msgid "This is a demo button with a 'quit' icon" msgid "This is a sample message in a sample dialog"
#~ msgstr "See on näidisnupp koos 'lõpeta' ikooniga" msgstr "See on näidisteade näidisdialoogis"
#~ msgid "This is a sample message in a sample dialog" #, c-format
#~ msgstr "See on näidisteade näidisdialoogis" msgid "Fake menu item %d\n"
msgstr "Võltsitud menüüpunkt %d\n"
#~ msgid "Fake menu item %d\n" msgid "Border-only window"
#~ msgstr "Võltsitud menüüpunkt %d\n" msgstr "Ainult raamiga aken"
#~ msgid "Border-only window" msgid "Bar"
#~ msgstr "Ainult raamiga aken" msgstr "Riba"
#~ msgid "Bar" msgid "Normal Application Window"
#~ msgstr "Riba" msgstr "Tavaline rakenduseaken"
#~ msgid "Normal Application Window" msgid "Dialog Box"
#~ msgstr "Tavaline rakenduseaken" msgstr "Dialoogikast"
#~ msgid "Dialog Box" msgid "Modal Dialog Box"
#~ msgstr "Dialoogikast" msgstr "Modaalne dialoogikast"
#~ msgid "Modal Dialog Box" msgid "Utility Palette"
#~ msgstr "Modaalne dialoogikast" msgstr "Rakendite palett"
#~ msgid "Utility Palette" msgid "Torn-off Menu"
#~ msgstr "Rakendite palett" msgstr "Ärarebitav menüü"
#~ msgid "Torn-off Menu" msgid "Border"
#~ msgstr "Ärarebitav menüü" msgstr "Raam"
#~ msgid "Border" msgid "Attached Modal Dialog"
#~ msgstr "Raam" msgstr "Kinnistatud modaaldialoog"
#~ msgid "Attached Modal Dialog" #, c-format
#~ msgstr "Kinnistatud modaaldialoog" msgid "Button layout test %d"
msgstr "Nuppude paigutuse test %d"
#~ msgid "Button layout test %d" #, c-format
#~ msgstr "Nuppude paigutuse test %d" msgid "%g milliseconds to draw one window frame"
msgstr "%g millisekundit kulub ühe akna raami joonistamiseks"
#~ msgid "%g milliseconds to draw one window frame" #, c-format
#~ msgstr "%g millisekundit kulub ühe akna raami joonistamiseks" msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "Kasutamine: metacity-theme-viewer [TEEMANIMI]\n"
#~ msgid "Usage: metacity-theme-viewer [THEMENAME]\n" #, c-format
#~ msgstr "Kasutamine: metacity-theme-viewer [TEEMANIMI]\n" msgid "Error loading theme: %s\n"
msgstr "Viga teema laadimisel: %s\n"
#~ msgid "Error loading theme: %s\n" #, c-format
#~ msgstr "Viga teema laadimisel: %s\n" msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Teema \"%s\" laaditi %g sekundiga\n"
#~ msgid "Loaded theme \"%s\" in %g seconds\n" msgid "Normal Title Font"
#~ msgstr "Teema \"%s\" laaditi %g sekundiga\n" msgstr "Tiitli tavasuurusega kirjatüüp"
#~ msgid "Normal Title Font" msgid "Small Title Font"
#~ msgstr "Tiitli tavasuurusega kirjatüüp" msgstr "Tiitli väike kirjatüüp"
#~ msgid "Small Title Font" msgid "Large Title Font"
#~ msgstr "Tiitli väike kirjatüüp" msgstr "Tiitli suur kirjatüüp"
#~ msgid "Large Title Font" msgid "Button Layouts"
#~ msgstr "Tiitli suur kirjatüüp" msgstr "Nuppude paigutus"
#~ msgid "Button Layouts" msgid "Benchmark"
#~ msgstr "Nuppude paigutus" msgstr "Jõudlus"
#~ msgid "Benchmark" msgid "Window Title Goes Here"
#~ msgstr "Jõudlus" msgstr "Siia tuleb akna pealkiri"
#~ msgid "Window Title Goes Here" #, c-format
#~ msgstr "Siia tuleb akna pealkiri" msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
"seconds wall clock time including X server resources (%g milliseconds per "
"frame)\n"
msgstr ""
"Joonistati %d kaadrit %g kliendi-kella sekundiga (%g millisekundit kaadrile) "
"ja %g sekundiga seinakella järgi, millesse on kaasatud X-serveri "
"ressursikasutus (%g millisekundit kaadrile)\n"
#~ msgid "" msgid "position expression test returned TRUE but set error"
#~ "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and " msgstr "asukoha avaldise kontroll tagastas TÕENE, aga määras vea"
#~ "%g seconds wall clock time including X server resources (%g milliseconds "
#~ "per frame)\n"
#~ msgstr ""
#~ "Joonistati %d kaadrit %g kliendi-kella sekundiga (%g millisekundit "
#~ "kaadrile) ja %g sekundiga seinakella järgi, millesse on kaasatud X-"
#~ "serveri ressursikasutus (%g millisekundit kaadrile)\n"
#~ msgid "position expression test returned TRUE but set error" msgid "position expression test returned FALSE but didn't set error"
#~ msgstr "asukoha avaldise kontroll tagastas TÕENE, aga määras vea" msgstr "asukoha avaldise kontroll tagastas VÄÄR, aga ei määranud viga"
#~ msgid "position expression test returned FALSE but didn't set error" msgid "Error was expected but none given"
#~ msgstr "asukoha avaldise kontroll tagastas VÄÄR, aga ei määranud viga" msgstr "Oodati viga, aga ühtegi ei edastatud"
#~ msgid "Error was expected but none given" #, c-format
#~ msgstr "Oodati viga, aga ühtegi ei edastatud" msgid "Error %d was expected but %d given"
msgstr "Oodati viga %d, aga edastati viga %d"
#~ msgid "Error %d was expected but %d given" #, c-format
#~ msgstr "Oodati viga %d, aga edastati viga %d" msgid "Error not expected but one was returned: %s"
msgstr "Viga ei oodatud, aga üks edastati: %s"
#~ msgid "Error not expected but one was returned: %s" #, c-format
#~ msgstr "Viga ei oodatud, aga üks edastati: %s" msgid "x value was %d, %d was expected"
msgstr "x väärtus oli %d, oodati väärtust %d"
#~ msgid "x value was %d, %d was expected" #, c-format
#~ msgstr "x väärtus oli %d, oodati väärtust %d" msgid "y value was %d, %d was expected"
msgstr "y väärtus oli %d, oodati väärtust %d"
#~ msgid "y value was %d, %d was expected" #, c-format
#~ msgstr "y väärtus oli %d, oodati väärtust %d" msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr ""
#~ msgid "" "%d koordinaatide avaldis töödeldi %g sekundiga (keskmine %g sekundit)\n"
#~ "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
#~ msgstr ""
#~ "%d koordinaatide avaldis töödeldi %g sekundiga (keskmine %g sekundit)\n"
#~ msgid "Minimize window"
#~ msgstr "Akna minimeerimine"

933
po/eu.po

File diff suppressed because it is too large Load Diff

948
po/fi.po

File diff suppressed because it is too large Load Diff

945
po/fr.po

File diff suppressed because it is too large Load Diff

3214
po/ga.po

File diff suppressed because it is too large Load Diff

523
po/gl.po

File diff suppressed because it is too large Load Diff

588
po/gu.po

File diff suppressed because it is too large Load Diff

1107
po/he.po

File diff suppressed because it is too large Load Diff

849
po/hi.po

File diff suppressed because it is too large Load Diff

950
po/hu.po

File diff suppressed because it is too large Load Diff

846
po/id.po

File diff suppressed because it is too large Load Diff

887
po/it.po

File diff suppressed because it is too large Load Diff

905
po/ja.po

File diff suppressed because it is too large Load Diff

1477
po/kk.po

File diff suppressed because it is too large Load Diff

536
po/kn.po

File diff suppressed because it is too large Load Diff

884
po/ko.po

File diff suppressed because it is too large Load Diff

1383
po/lt.po

File diff suppressed because it is too large Load Diff

935
po/lv.po

File diff suppressed because it is too large Load Diff

563
po/ml.po

File diff suppressed because it is too large Load Diff

731
po/mr.po

File diff suppressed because it is too large Load Diff

452
po/nb.po
View File

@@ -4,10 +4,10 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter 3.9.x\n" "Project-Id-Version: mutter 3.7.x\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-08-22 16:11+0200\n" "POT-Creation-Date: 2013-01-29 19:33+0100\n"
"PO-Revision-Date: 2013-08-22 16:12+0200\n" "PO-Revision-Date: 2013-01-29 19:34+0100\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n" "Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
"Language: \n" "Language: \n"
@@ -205,18 +205,14 @@ msgstr "Visning delt til høyre"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:596 #: ../src/compositor/compositor.c:512
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display \"%s" "Another compositing manager is already running on screen %i on display \"%s"
"\"." "\"."
msgstr "En annen compositing manager kjører skjerm %i på display «%s»." msgstr "En annen compositing manager kjører skjerm %i på display «%s»."
#: ../src/compositor/meta-background.c:1076 #: ../src/core/bell.c:320
msgid "background texture could not be created from file"
msgstr "bakgrunnstekstur kunne ikke lages fra fil"
#: ../src/core/bell.c:322
msgid "Bell event" msgid "Bell event"
msgstr "Klokkehendelse" msgstr "Klokkehendelse"
@@ -250,17 +246,17 @@ msgstr "_Vent"
msgid "_Force Quit" msgid "_Force Quit"
msgstr "_Tvungen nedstenging" msgstr "_Tvungen nedstenging"
#: ../src/core/display.c:421 #: ../src/core/display.c:394
#, c-format #, c-format
msgid "Missing %s extension required for compositing" msgid "Missing %s extension required for compositing"
msgstr "Mangler utvidelsen %s som kreves for komposittfunksjon" msgstr "Mangler utvidelsen %s som kreves for komposittfunksjon"
#: ../src/core/display.c:513 #: ../src/core/display.c:491
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" msgid "Failed to open X Window System display '%s'\n"
msgstr "Feil under åpning av X Window System skjerm «%s»\n" msgstr "Feil under åpning av X Window System skjerm «%s»\n"
#: ../src/core/keybindings.c:1136 #: ../src/core/keybindings.c:876
#, c-format #, c-format
msgid "" msgid ""
"Some other program is already using the key %s with modifiers %x as a " "Some other program is already using the key %s with modifiers %x as a "
@@ -269,41 +265,36 @@ msgstr ""
"Et annet program bruker allerede nøkkelen %s med modifikatorer %x som " "Et annet program bruker allerede nøkkelen %s med modifikatorer %x som "
"binding\n" "binding\n"
#: ../src/core/keybindings.c:1333 #: ../src/core/main.c:196
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "«%s» er ikke en gyldig aksellerator\n"
#: ../src/core/main.c:197
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
msgstr "Deaktiver tilkobling til sesjonshåndtereren" msgstr "Deaktiver tilkobling til sesjonshåndtereren"
#: ../src/core/main.c:203 #: ../src/core/main.c:202
msgid "Replace the running window manager" msgid "Replace the running window manager"
msgstr "Erstatt kjørende vindushåndterer" msgstr "Erstatt kjørende vindushåndterer"
#: ../src/core/main.c:209 #: ../src/core/main.c:208
msgid "Specify session management ID" msgid "Specify session management ID"
msgstr "Oppgi sesjonshåndterings-ID" msgstr "Oppgi sesjonshåndterings-ID"
#: ../src/core/main.c:214 #: ../src/core/main.c:213
msgid "X Display to use" msgid "X Display to use"
msgstr "X-skjerm som skal brukes" msgstr "X-skjerm som skal brukes"
#: ../src/core/main.c:220 #: ../src/core/main.c:219
msgid "Initialize session from savefile" msgid "Initialize session from savefile"
msgstr "Initier sesjonen fra en lagret fil" msgstr "Initier sesjonen fra en lagret fil"
#: ../src/core/main.c:226 #: ../src/core/main.c:225
msgid "Make X calls synchronous" msgid "Make X calls synchronous"
msgstr "Gjør X-kall synkrone" msgstr "Gjør X-kall synkrone"
#: ../src/core/main.c:534 #: ../src/core/main.c:494
#, c-format #, c-format
msgid "Failed to scan themes directory: %s\n" msgid "Failed to scan themes directory: %s\n"
msgstr "Feil under søk i temakatalog: %s\n" msgstr "Feil under søk i temakatalog: %s\n"
#: ../src/core/main.c:550 #: ../src/core/main.c:510
#, c-format #, c-format
msgid "" msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n" "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -311,19 +302,6 @@ msgstr ""
"Kunne ikke finne et tema! Sjekk at %s eksisterer og inneholder de vanlige " "Kunne ikke finne et tema! Sjekk at %s eksisterer og inneholder de vanlige "
"temaene.\n" "temaene.\n"
#: ../src/core/monitor.c:702
msgid "Built-in display"
msgstr "Innebygget skjerm"
#. TRANSLATORS: this is a monitor name (in case we don't know
#. the vendor), it's Unknown followed by a size in inches,
#. like 'Unknown 15"'
#.
#: ../src/core/monitor.c:730
#, c-format
msgid "Unknown %s"
msgstr "Ukjent %s"
#: ../src/core/mutter.c:40 #: ../src/core/mutter.c:40
#, c-format #, c-format
msgid "" msgid ""
@@ -346,7 +324,7 @@ msgstr "Skriv versjonsnummer"
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "Mutter-tillegg som skal brukes" msgstr "Mutter-tillegg som skal brukes"
#: ../src/core/prefs.c:1202 #: ../src/core/prefs.c:1087
msgid "" msgid ""
"Workarounds for broken applications disabled. Some applications may not " "Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n" "behave properly.\n"
@@ -354,12 +332,12 @@ msgstr ""
"Funksjonalitet for å gå rundt ødelagte programmer er deaktivert. Noen " "Funksjonalitet for å gå rundt ødelagte programmer er deaktivert. Noen "
"programmer vil kanskje ikke oppføre seg korrekt.\n" "programmer vil kanskje ikke oppføre seg korrekt.\n"
#: ../src/core/prefs.c:1277 #: ../src/core/prefs.c:1162
#, c-format #, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n" msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "Kunne ikke tolke skriftbeskrivelsen «%s» fra GSettings-nøkkel %s\n" msgstr "Kunne ikke tolke skriftbeskrivelsen «%s» fra GSettings-nøkkel %s\n"
#: ../src/core/prefs.c:1343 #: ../src/core/prefs.c:1228
#, c-format #, c-format
msgid "" msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button " "\"%s\" found in configuration database is not a valid value for mouse button "
@@ -368,7 +346,7 @@ msgstr ""
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for endring av " "«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for endring av "
"musknapp\n" "musknapp\n"
#: ../src/core/prefs.c:1909 #: ../src/core/prefs.c:1780
#, c-format #, c-format
msgid "" msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding " "\"%s\" found in configuration database is not a valid value for keybinding "
@@ -377,17 +355,17 @@ msgstr ""
"«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for " "«%s» funnet i konfigurasjonsdatabasen er ikke en gyldig verdi for "
"tastaturbinding «%s»\n" "tastaturbinding «%s»\n"
#: ../src/core/prefs.c:1999 #: ../src/core/prefs.c:1877
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Arbeidsområde %d" msgstr "Arbeidsområde %d"
#: ../src/core/screen.c:537 #: ../src/core/screen.c:658
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "Skjerm %d på display «%s» er ugyldig\n" msgstr "Skjerm %d på display «%s» er ugyldig\n"
#: ../src/core/screen.c:553 #: ../src/core/screen.c:674
#, c-format #, c-format
msgid "" msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --" "Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -396,19 +374,19 @@ msgstr ""
"Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke " "Skjerm %d på display «%s» har allerede en vindushåndterer; prøv å bruke "
"flagget --replace for å erstatte aktiv vindushåndterer.\n" "flagget --replace for å erstatte aktiv vindushåndterer.\n"
#: ../src/core/screen.c:580 #: ../src/core/screen.c:701
#, c-format #, c-format
msgid "" msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n" "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "" msgstr ""
"Kunne ikke hente utvalg fra vinduhåndterer på skjerm %d, display «%s»\n" "Kunne ikke hente utvalg fra vinduhåndterer på skjerm %d, display «%s»\n"
#: ../src/core/screen.c:658 #: ../src/core/screen.c:770
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n" msgstr "Skjerm %d på display «%s» har allerede en vinduhåndterer\n"
#: ../src/core/screen.c:850 #: ../src/core/screen.c:955
#, c-format #, c-format
msgid "Could not release screen %d on display \"%s\"\n" msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Kunne ikke slippe skjerm %d på display «%s»\n" msgstr "Kunne ikke slippe skjerm %d på display «%s»\n"
@@ -468,43 +446,44 @@ msgstr ""
"Disse vinduene støtter ikke &quot;lagre aktiv konfigurasjon&quot;og vil " "Disse vinduene støtter ikke &quot;lagre aktiv konfigurasjon&quot;og vil "
"måtte startes på nytt manuelt neste gang du logger inn." "måtte startes på nytt manuelt neste gang du logger inn."
#: ../src/core/util.c:84 #: ../src/core/util.c:80
#, c-format #, c-format
msgid "Failed to open debug log: %s\n" msgid "Failed to open debug log: %s\n"
msgstr "Feil under åpning av feilsøkingslogg: %s\n" msgstr "Feil under åpning av feilsøkingslogg: %s\n"
#: ../src/core/util.c:94 #: ../src/core/util.c:90
#, c-format #, c-format
msgid "Failed to fdopen() log file %s: %s\n" msgid "Failed to fdopen() log file %s: %s\n"
msgstr "Feil under fdopen() av loggfil %s: %s\n" msgstr "Feil under fdopen() av loggfil %s: %s\n"
#: ../src/core/util.c:100 #: ../src/core/util.c:96
#, c-format #, c-format
msgid "Opened log file %s\n" msgid "Opened log file %s\n"
msgstr "Åpnet loggfil %s\n" msgstr "Åpnet loggfil %s\n"
#: ../src/core/util.c:119 #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
#, c-format
msgid "Mutter was compiled without support for verbose mode\n" msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter er kompilert uten støtte for «verbose» modus\n" msgstr "Mutter er kompilert uten støtte for «verbose» modus\n"
#: ../src/core/util.c:264 #: ../src/core/util.c:259
msgid "Window manager: " msgid "Window manager: "
msgstr "Vindushåndterer: " msgstr "Vindushåndterer: "
#: ../src/core/util.c:414 #: ../src/core/util.c:407
msgid "Bug in window manager: " msgid "Bug in window manager: "
msgstr "Feil i vindushåndterer: " msgstr "Feil i vindushåndterer: "
#: ../src/core/util.c:445 #: ../src/core/util.c:438
msgid "Window manager warning: " msgid "Window manager warning: "
msgstr "Advarsel fra vindushåndterer: " msgstr "Advarsel fra vindushåndterer: "
#: ../src/core/util.c:473 #: ../src/core/util.c:466
msgid "Window manager error: " msgid "Window manager error: "
msgstr "Feil i vindushåndterer: " msgstr "Feil i vindushåndterer: "
#. first time through #. first time through
#: ../src/core/window.c:7533 #: ../src/core/window.c:7287
#, c-format #, c-format
msgid "" msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -520,7 +499,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work. #. * about these apps but make them work.
#. #.
#: ../src/core/window.c:8257 #: ../src/core/window.c:7953
#, c-format #, c-format
msgid "" msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size " "Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -530,22 +509,22 @@ msgstr ""
"men setter minste størrelse %d x %d og maks størrelse %d x %d; dette virker " "men setter minste størrelse %d x %d og maks størrelse %d x %d; dette virker "
"ikke fornuftig.\n" "ikke fornuftig.\n"
#: ../src/core/window-props.c:347 #: ../src/core/window-props.c:274
#, c-format #, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n" msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Programmet satte en feil _NET_WM_PID %lu\n" msgstr "Programmet satte en feil _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:463 #: ../src/core/window-props.c:393
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (på %s)" msgstr "%s (på %s)"
#: ../src/core/window-props.c:1546 #: ../src/core/window-props.c:1448
#, c-format #, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "Ugyldig WM_TRANSIENT_FOR vindu 0x%lx oppgitt for %s.\n" msgstr "Ugyldig WM_TRANSIENT_FOR vindu 0x%lx oppgitt for %s.\n"
#: ../src/core/window-props.c:1557 #: ../src/core/window-props.c:1459
#, c-format #, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR vindu 0x%lx for %s ville skapt en løkke.\n" msgstr "WM_TRANSIENT_FOR vindu 0x%lx for %s ville skapt en løkke.\n"
@@ -694,11 +673,9 @@ msgstr "Maksimer vinduer automatisk hvis de er nesten like store som skjermen"
#: ../src/org.gnome.mutter.gschema.xml.in.h:18 #: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "" msgid ""
"If enabled, new windows that are initially the size of the monitor " "If enabled, monitor nearly monitor sized windows automatically get maximized "
"automatically get maximized." "when mapped."
msgstr "" msgstr ""
"Nye vinduer som i utgangspunktet er samme størrelse som skjermen vil "
"automatisk bli maksimert hvis denne slås på."
#: ../src/org.gnome.mutter.gschema.xml.in.h:19 #: ../src/org.gnome.mutter.gschema.xml.in.h:19
msgid "Select window from tab popup" msgid "Select window from tab popup"
@@ -708,104 +685,109 @@ msgstr "Fjern vindu fra tabulatordialog"
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Avbryt tabulatordialog" msgstr "Avbryt tabulatordialog"
#: ../src/tools/mutter-message.c:123
#, c-format
msgid "Usage: %s\n"
msgstr " Bruk: %s\n"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:67 #: ../src/ui/menu.c:69
msgid "Mi_nimize" msgid "Mi_nimize"
msgstr "Mi_nimer" msgstr "Mi_nimer"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:69 #: ../src/ui/menu.c:71
msgid "Ma_ximize" msgid "Ma_ximize"
msgstr "Ma_ksimer" msgstr "Ma_ksimer"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:71 #: ../src/ui/menu.c:73
msgid "Unma_ximize" msgid "Unma_ximize"
msgstr "G_jenopprett" msgstr "G_jenopprett"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:73 #: ../src/ui/menu.c:75
msgid "Roll _Up" msgid "Roll _Up"
msgstr "Rull _opp" msgstr "Rull _opp"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:75 #: ../src/ui/menu.c:77
msgid "_Unroll" msgid "_Unroll"
msgstr "R_ull ned" msgstr "R_ull ned"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:77 #: ../src/ui/menu.c:79
msgid "_Move" msgid "_Move"
msgstr "_Flytt" msgstr "_Flytt"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:79 #: ../src/ui/menu.c:81
msgid "_Resize" msgid "_Resize"
msgstr "End_re størrelse" msgstr "End_re størrelse"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:81 #: ../src/ui/menu.c:83
msgid "Move Titlebar On_screen" msgid "Move Titlebar On_screen"
msgstr "Flytt tittellinje på _skjermen" msgstr "Flytt tittellinje på _skjermen"
#. separator #. separator
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:84 ../src/ui/menu.c:86 #: ../src/ui/menu.c:86 ../src/ui/menu.c:88
msgid "Always on _Top" msgid "Always on _Top"
msgstr "All_tid øverst" msgstr "All_tid øverst"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:88 #: ../src/ui/menu.c:90
msgid "_Always on Visible Workspace" msgid "_Always on Visible Workspace"
msgstr "_Alltid på synlig arbeidsområde" msgstr "_Alltid på synlig arbeidsområde"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:90 #: ../src/ui/menu.c:92
msgid "_Only on This Workspace" msgid "_Only on This Workspace"
msgstr "K_un på dette arbeidsområdet" msgstr "K_un på dette arbeidsområdet"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:92 #: ../src/ui/menu.c:94
msgid "Move to Workspace _Left" msgid "Move to Workspace _Left"
msgstr "Flytt til arbeidsområdet ti_l venstre" msgstr "Flytt til arbeidsområdet ti_l venstre"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:94 #: ../src/ui/menu.c:96
msgid "Move to Workspace R_ight" msgid "Move to Workspace R_ight"
msgstr "Flytt til a_rbeidsområdet til høyre" msgstr "Flytt til a_rbeidsområdet til høyre"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:96 #: ../src/ui/menu.c:98
msgid "Move to Workspace _Up" msgid "Move to Workspace _Up"
msgstr "Flytt til arbeidsområdet _over" msgstr "Flytt til arbeidsområdet _over"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:98 #: ../src/ui/menu.c:100
msgid "Move to Workspace _Down" msgid "Move to Workspace _Down"
msgstr "Flytt til arbeidsområdet ne_denfor" msgstr "Flytt til arbeidsområdet ne_denfor"
#. separator #. separator
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:102 #: ../src/ui/menu.c:104
msgid "_Close" msgid "_Close"
msgstr "_Lukk" msgstr "_Lukk"
#: ../src/ui/menu.c:202 #: ../src/ui/menu.c:204
#, c-format #, c-format
msgid "Workspace %d%n" msgid "Workspace %d%n"
msgstr "Arbeidsområde %d%n" msgstr "Arbeidsområde %d%n"
#: ../src/ui/menu.c:212 #: ../src/ui/menu.c:214
#, c-format #, c-format
msgid "Workspace 1_0" msgid "Workspace 1_0"
msgstr "Arbeidsområde 1_0" msgstr "Arbeidsområde 1_0"
#: ../src/ui/menu.c:214 #: ../src/ui/menu.c:216
#, c-format #, c-format
msgid "Workspace %s%d" msgid "Workspace %s%d"
msgstr "Arbeidsområde %s%d" msgstr "Arbeidsområde %s%d"
#: ../src/ui/menu.c:384 #: ../src/ui/menu.c:397
msgid "Move to Another _Workspace" msgid "Move to Another _Workspace"
msgstr "Flytt til et annet ar_beidsområde" msgstr "Flytt til et annet ar_beidsområde"
@@ -902,53 +884,53 @@ msgstr "Mod5"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#. #.
#: ../src/ui/resizepopup.c:136 #: ../src/ui/resizepopup.c:113
#, c-format #, c-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
#: ../src/ui/theme.c:236 #: ../src/ui/theme.c:235
msgid "top" msgid "top"
msgstr "topp" msgstr "topp"
#: ../src/ui/theme.c:238 #: ../src/ui/theme.c:237
msgid "bottom" msgid "bottom"
msgstr "bunn" msgstr "bunn"
#: ../src/ui/theme.c:240 #: ../src/ui/theme.c:239
msgid "left" msgid "left"
msgstr "venstre" msgstr "venstre"
#: ../src/ui/theme.c:242 #: ../src/ui/theme.c:241
msgid "right" msgid "right"
msgstr "høyre" msgstr "høyre"
#: ../src/ui/theme.c:270 #: ../src/ui/theme.c:269
#, c-format #, c-format
msgid "frame geometry does not specify \"%s\" dimension" msgid "frame geometry does not specify \"%s\" dimension"
msgstr "rammegeometrien spesifiserer ikke «%s»-dimensjon" msgstr "rammegeometrien spesifiserer ikke «%s»-dimensjon"
#: ../src/ui/theme.c:289 #: ../src/ui/theme.c:288
#, c-format #, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "rammegeometri spesifiserer ikke dimensjon «%s» for kant «%s»" msgstr "rammegeometri spesifiserer ikke dimensjon «%s» for kant «%s»"
#: ../src/ui/theme.c:326 #: ../src/ui/theme.c:325
#, c-format #, c-format
msgid "Button aspect ratio %g is not reasonable" msgid "Button aspect ratio %g is not reasonable"
msgstr "Aspektrate %g for knapp er ikke fornuftig" msgstr "Aspektrate %g for knapp er ikke fornuftig"
#: ../src/ui/theme.c:338 #: ../src/ui/theme.c:337
#, c-format #, c-format
msgid "Frame geometry does not specify size of buttons" msgid "Frame geometry does not specify size of buttons"
msgstr "Rammegeometrien spesifiserer ikke størrelse på knapper" msgstr "Rammegeometrien spesifiserer ikke størrelse på knapper"
#: ../src/ui/theme.c:1051 #: ../src/ui/theme.c:1050
#, c-format #, c-format
msgid "Gradients should have at least two colors" msgid "Gradients should have at least two colors"
msgstr "Gradienter må ha minst to farger" msgstr "Gradienter må ha minst to farger"
#: ../src/ui/theme.c:1203 #: ../src/ui/theme.c:1202
#, c-format #, c-format
msgid "" msgid ""
"GTK custom color specification must have color name and fallback in " "GTK custom color specification must have color name and fallback in "
@@ -957,7 +939,7 @@ msgstr ""
"Egendefinert GTK-fargespesifikasjon må ha fargenavn og reserve i parantes, f." "Egendefinert GTK-fargespesifikasjon må ha fargenavn og reserve i parantes, f."
"eks gtk:custom(foo,bar); kunne ikke lese «%s»" "eks gtk:custom(foo,bar); kunne ikke lese «%s»"
#: ../src/ui/theme.c:1219 #: ../src/ui/theme.c:1218
#, c-format #, c-format
msgid "" msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
@@ -966,7 +948,7 @@ msgstr ""
"Ugyldig tegn «%c» i parameter color_name for gtk:custom, kun A-Za-z0-9-_ er " "Ugyldig tegn «%c» i parameter color_name for gtk:custom, kun A-Za-z0-9-_ er "
"gyldig" "gyldig"
#: ../src/ui/theme.c:1233 #: ../src/ui/theme.c:1232
#, c-format #, c-format
msgid "" msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
@@ -975,7 +957,7 @@ msgstr ""
"Gtk:custom-format er «gtk:custom(color_name,fallback)», «%s» passer ikke i " "Gtk:custom-format er «gtk:custom(color_name,fallback)», «%s» passer ikke i "
"formatet" "formatet"
#: ../src/ui/theme.c:1278 #: ../src/ui/theme.c:1277
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@@ -984,7 +966,7 @@ msgstr ""
"GTK-fargespesifikasjon må ha tilstand i klammer, f.eks. gtk:fg[NORMAL], hvor " "GTK-fargespesifikasjon må ha tilstand i klammer, f.eks. gtk:fg[NORMAL], hvor "
"NORMAL er tilstanden; kunne ikke lese «%s»" "NORMAL er tilstanden; kunne ikke lese «%s»"
#: ../src/ui/theme.c:1292 #: ../src/ui/theme.c:1291
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:" "GTK color specification must have a close bracket after the state, e.g. gtk:"
@@ -993,17 +975,17 @@ msgstr ""
"GTK-fargespesifikasjon må ha en avsluttende klamme etter tilstanden, f.eks. " "GTK-fargespesifikasjon må ha en avsluttende klamme etter tilstanden, f.eks. "
"gtk:fg[NORMAL], hvor NORMAL er tilstanden; kunne ikke lese «%s»" "gtk:fg[NORMAL], hvor NORMAL er tilstanden; kunne ikke lese «%s»"
#: ../src/ui/theme.c:1303 #: ../src/ui/theme.c:1302
#, c-format #, c-format
msgid "Did not understand state \"%s\" in color specification" msgid "Did not understand state \"%s\" in color specification"
msgstr "Forsto ikke tilstand «%s» i fargespesifikasjonen" msgstr "Forsto ikke tilstand «%s» i fargespesifikasjonen"
#: ../src/ui/theme.c:1316 #: ../src/ui/theme.c:1315
#, c-format #, c-format
msgid "Did not understand color component \"%s\" in color specification" msgid "Did not understand color component \"%s\" in color specification"
msgstr "Forsto ikke fargekomponent «%s» i fargespesifikasjonen" msgstr "Forsto ikke fargekomponent «%s» i fargespesifikasjonen"
#: ../src/ui/theme.c:1345 #: ../src/ui/theme.c:1344
#, c-format #, c-format
msgid "" msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@@ -1012,56 +994,56 @@ msgstr ""
"Blandingsformat er «blend/bg_color/fg_color/alpha», «%s» passer ikke i " "Blandingsformat er «blend/bg_color/fg_color/alpha», «%s» passer ikke i "
"formatet" "formatet"
#: ../src/ui/theme.c:1356 #: ../src/ui/theme.c:1355
#, c-format #, c-format
msgid "Could not parse alpha value \"%s\" in blended color" msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Kunne ikke lese alpha-verdi «%s» i blandet farge" msgstr "Kunne ikke lese alpha-verdi «%s» i blandet farge"
#: ../src/ui/theme.c:1366 #: ../src/ui/theme.c:1365
#, c-format #, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" 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" msgstr "Alpha-verdi «%s» i blandet farge er ikke mellom 0.0 og 1.0"
#: ../src/ui/theme.c:1413 #: ../src/ui/theme.c:1412
#, c-format #, c-format
msgid "" msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr "" msgstr ""
"Skyggeformatet er «shade/base_color/factor», «%s» passer ikke i formatet" "Skyggeformatet er «shade/base_color/factor», «%s» passer ikke i formatet"
#: ../src/ui/theme.c:1424 #: ../src/ui/theme.c:1423
#, c-format #, c-format
msgid "Could not parse shade factor \"%s\" in shaded color" msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "Kunne ikke lese skyggefaktor «%s» i skyggelagt farge" msgstr "Kunne ikke lese skyggefaktor «%s» i skyggelagt farge"
#: ../src/ui/theme.c:1434 #: ../src/ui/theme.c:1433
#, c-format #, c-format
msgid "Shade factor \"%s\" in shaded color is negative" msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Skyggefaktor «%s» i skyggelagt farge er negativ" msgstr "Skyggefaktor «%s» i skyggelagt farge er negativ"
#: ../src/ui/theme.c:1463 #: ../src/ui/theme.c:1462
#, c-format #, c-format
msgid "Could not parse color \"%s\"" msgid "Could not parse color \"%s\""
msgstr "Kunne ikke lese farge «%s»" msgstr "Kunne ikke lese farge «%s»"
#: ../src/ui/theme.c:1780 #: ../src/ui/theme.c:1779
#, c-format #, c-format
msgid "Coordinate expression contains character '%s' which is not allowed" msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Koordinatuttrykk inneholder tegn «%s» som ikke er tillatt" msgstr "Koordinatuttrykk inneholder tegn «%s» som ikke er tillatt"
#: ../src/ui/theme.c:1807 #: ../src/ui/theme.c:1806
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contains floating point number '%s' which could not be " "Coordinate expression contains floating point number '%s' which could not be "
"parsed" "parsed"
msgstr "Koordinatuttrykk inneholder flyttall «%s» som ikke kunne tolkes" msgstr "Koordinatuttrykk inneholder flyttall «%s» som ikke kunne tolkes"
#: ../src/ui/theme.c:1821 #: ../src/ui/theme.c:1820
#, c-format #, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed" msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "Koordinatuttrykk inneholder heltall «%s» som ikke kunne tolkes" msgstr "Koordinatuttrykk inneholder heltall «%s» som ikke kunne tolkes"
#: ../src/ui/theme.c:1942 #: ../src/ui/theme.c:1941
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contained unknown operator at the start of this text: " "Coordinate expression contained unknown operator at the start of this text: "
@@ -1070,39 +1052,39 @@ msgstr ""
"Koordinatuttrykket inneholdt en ukjent operator ved begynnelsen av denne " "Koordinatuttrykket inneholdt en ukjent operator ved begynnelsen av denne "
"teksten: «%s»" "teksten: «%s»"
#: ../src/ui/theme.c:1999 #: ../src/ui/theme.c:1998
#, c-format #, c-format
msgid "Coordinate expression was empty or not understood" msgid "Coordinate expression was empty or not understood"
msgstr "Koordinatuttrykket var tomt eller ble ikke forstått" msgstr "Koordinatuttrykket var tomt eller ble ikke forstått"
#: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
#, c-format #, c-format
msgid "Coordinate expression results in division by zero" msgid "Coordinate expression results in division by zero"
msgstr "Koordinatuttrykket resulterer i divisjon med null" msgstr "Koordinatuttrykket resulterer i divisjon med null"
#: ../src/ui/theme.c:2164 #: ../src/ui/theme.c:2163
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression tries to use mod operator on a floating-point number" "Coordinate expression tries to use mod operator on a floating-point number"
msgstr "Koordinatuttrykket prøver å bruke mod-operator på et flyttall" msgstr "Koordinatuttrykket prøver å bruke mod-operator på et flyttall"
#: ../src/ui/theme.c:2220 #: ../src/ui/theme.c:2219
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected" "Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "Koordinatuttrykket har en operator «%s» hvor en operand var ventet" msgstr "Koordinatuttrykket har en operator «%s» hvor en operand var ventet"
#: ../src/ui/theme.c:2229 #: ../src/ui/theme.c:2228
#, c-format #, c-format
msgid "Coordinate expression had an operand where an operator was expected" msgid "Coordinate expression had an operand where an operator was expected"
msgstr "Koordinatuttrykket hadde en operand hvor en operator var ventet" msgstr "Koordinatuttrykket hadde en operand hvor en operator var ventet"
#: ../src/ui/theme.c:2237 #: ../src/ui/theme.c:2236
#, c-format #, c-format
msgid "Coordinate expression ended with an operator instead of an operand" msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Koordinatuttrykket sluttet med en operator i stedet for en operand" msgstr "Koordinatuttrykket sluttet med en operator i stedet for en operand"
#: ../src/ui/theme.c:2247 #: ../src/ui/theme.c:2246
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no " "Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@@ -1111,38 +1093,38 @@ msgstr ""
"Koordinatuttrykket har en operator «%c» etter en operator «%c» og ingen " "Koordinatuttrykket har en operator «%c» etter en operator «%c» og ingen "
"operand mellom dem." "operand mellom dem."
#: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442
#, c-format #, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\"" msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "Koordinatuttrykket haddeen ukjent variabel eller konstant «%s»" msgstr "Koordinatuttrykket haddeen ukjent variabel eller konstant «%s»"
#: ../src/ui/theme.c:2497 #: ../src/ui/theme.c:2496
#, c-format #, c-format
msgid "Coordinate expression parser overflowed its buffer." msgid "Coordinate expression parser overflowed its buffer."
msgstr "Tolkeren for koordinatuttrykk oversteg buffergrensen." msgstr "Tolkeren for koordinatuttrykk oversteg buffergrensen."
#: ../src/ui/theme.c:2526 #: ../src/ui/theme.c:2525
#, c-format #, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis" msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "Koordinatuttrykket hadde en parantes slutt uten parantes start" msgstr "Koordinatuttrykket hadde en parantes slutt uten parantes start"
#: ../src/ui/theme.c:2590 #: ../src/ui/theme.c:2589
#, c-format #, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis" msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "Koordinatuttrykket hadde en åpen parantes uten en avsluttende parantes" msgstr "Koordinatuttrykket hadde en åpen parantes uten en avsluttende parantes"
#: ../src/ui/theme.c:2601 #: ../src/ui/theme.c:2600
#, c-format #, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands" msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "" msgstr ""
"Koordinatuttrykket ser ikke ut til å ha noen operatorer eller operander" "Koordinatuttrykket ser ikke ut til å ha noen operatorer eller operander"
#: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
#, c-format #, c-format
msgid "Theme contained an expression that resulted in an error: %s\n" msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Tema inneholdt et uttrykk som resulterte i en feil: %s\n" msgstr "Tema inneholdt et uttrykk som resulterte i en feil: %s\n"
#: ../src/ui/theme.c:4500 #: ../src/ui/theme.c:4499
#, c-format #, c-format
msgid "" msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@@ -1151,25 +1133,25 @@ msgstr ""
"<button function=«%s» state=«%s» draw_ops=«ett-eller-annet»/> må " "<button function=«%s» state=«%s» draw_ops=«ett-eller-annet»/> må "
"spesifiseres for denne rammestilen" "spesifiseres for denne rammestilen"
#: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
#, c-format #, c-format
msgid "" msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr "" msgstr ""
"Mangler <frame state=«%s» resize=«%s» focus=«%s» stil=«ett-eller-annet»/>" "Mangler <frame state=«%s» resize=«%s» focus=«%s» stil=«ett-eller-annet»/>"
#: ../src/ui/theme.c:5082 #: ../src/ui/theme.c:5083
#, c-format #, c-format
msgid "Failed to load theme \"%s\": %s\n" msgid "Failed to load theme \"%s\": %s\n"
msgstr "Klarte ikke å laste tema «%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:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
#: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246 #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
#, c-format #, c-format
msgid "No <%s> set for theme \"%s\"" msgid "No <%s> set for theme \"%s\""
msgstr "<%s> er ikke satt for tema «%s»" msgstr "<%s> er ikke satt for tema «%s»"
#: ../src/ui/theme.c:5254 #: ../src/ui/theme.c:5255
#, c-format #, c-format
msgid "" msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window " "No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@@ -1178,14 +1160,14 @@ msgstr ""
"Ingen rammestil satt for vindutype «%s» i tema «%s», legg til et <window " "Ingen rammestil satt for vindutype «%s» i tema «%s», legg til et <window "
"type=«%s» style_set=«ett-eller-annet»/>-element" "type=«%s» style_set=«ett-eller-annet»/>-element"
#: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 #: ../src/ui/theme.c:5662 ../src/ui/theme.c:5724 ../src/ui/theme.c:5787
#, c-format #, c-format
msgid "" msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not" "User-defined constants must begin with a capital letter; \"%s\" does not"
msgstr "" msgstr ""
"Brukerdefinerte konstanter må begynne med stor bokstav; «%s» gjør ikke det" "Brukerdefinerte konstanter må begynne med stor bokstav; «%s» gjør ikke det"
#: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 #: ../src/ui/theme.c:5670 ../src/ui/theme.c:5732 ../src/ui/theme.c:5795
#, c-format #, c-format
msgid "Constant \"%s\" has already been defined" msgid "Constant \"%s\" has already been defined"
msgstr "Konstant «%s» er allerede definert" msgstr "Konstant «%s» er allerede definert"
@@ -1566,7 +1548,205 @@ msgstr "Ingen tekst er tillatt inne i element <%s>"
msgid "<%s> specified twice for this theme" msgid "<%s> specified twice for this theme"
msgstr "<%s> spesifisert to ganger for dette temaet" msgstr "<%s> spesifisert to ganger for dette temaet"
#: ../src/ui/theme-parser.c:4336 #: ../src/ui/theme-parser.c:4334
#, c-format #, c-format
msgid "Failed to find a valid file for theme %s\n" msgid "Failed to find a valid file for theme %s\n"
msgstr "Fant ikke en gyldig fil for tema %s\n" msgstr "Fant ikke en gyldig fil for tema %s\n"
#: ../src/ui/theme-viewer.c:99
msgid "_Windows"
msgstr "_Vinduer"
#: ../src/ui/theme-viewer.c:100
msgid "_Dialog"
msgstr "_Dialog"
#: ../src/ui/theme-viewer.c:101
msgid "_Modal dialog"
msgstr "_Modal dialog"
#: ../src/ui/theme-viewer.c:102
msgid "_Utility"
msgstr "_Verktøy"
#: ../src/ui/theme-viewer.c:103
msgid "_Splashscreen"
msgstr "Opp_startskjerm"
#: ../src/ui/theme-viewer.c:104
msgid "_Top dock"
msgstr "_Toppdokk"
#: ../src/ui/theme-viewer.c:105
msgid "_Bottom dock"
msgstr "_Bunndokk"
#: ../src/ui/theme-viewer.c:106
msgid "_Left dock"
msgstr "_Venstre dokk"
#: ../src/ui/theme-viewer.c:107
msgid "_Right dock"
msgstr "Høy_re dokk"
#: ../src/ui/theme-viewer.c:108
msgid "_All docks"
msgstr "_Alle dokker"
#: ../src/ui/theme-viewer.c:109
msgid "Des_ktop"
msgstr "S_krivebord"
#: ../src/ui/theme-viewer.c:115
msgid "Open another one of these windows"
msgstr "Åpne et til av disse vinduene"
#: ../src/ui/theme-viewer.c:117
msgid "This is a demo button with an 'open' icon"
msgstr "Dette er en demoknapp med et «åpne»-ikon"
#: ../src/ui/theme-viewer.c:119
msgid "This is a demo button with a 'quit' icon"
msgstr "Dette er en demoknapp med et «avslutt»-ikon"
#: ../src/ui/theme-viewer.c:248
msgid "This is a sample message in a sample dialog"
msgstr "Dette er en eksempelbeskjed i en eksempeldialog"
#: ../src/ui/theme-viewer.c:328
#, c-format
msgid "Fake menu item %d\n"
msgstr "Falsk menyoppføring %d\n"
#: ../src/ui/theme-viewer.c:363
msgid "Border-only window"
msgstr "Vindu uten innhold"
#: ../src/ui/theme-viewer.c:365
msgid "Bar"
msgstr "Linje"
#: ../src/ui/theme-viewer.c:382
msgid "Normal Application Window"
msgstr "Normalt programvindu"
#: ../src/ui/theme-viewer.c:386
msgid "Dialog Box"
msgstr "Dialogboks"
#: ../src/ui/theme-viewer.c:390
msgid "Modal Dialog Box"
msgstr "Modal dialogboks"
#: ../src/ui/theme-viewer.c:394
msgid "Utility Palette"
msgstr "Verktøypalett"
#: ../src/ui/theme-viewer.c:398
msgid "Torn-off Menu"
msgstr "Avrevet meny"
#: ../src/ui/theme-viewer.c:402
msgid "Border"
msgstr "Kant"
#: ../src/ui/theme-viewer.c:406
msgid "Attached Modal Dialog"
msgstr "Festet modal dialog"
#: ../src/ui/theme-viewer.c:739
#, c-format
msgid "Button layout test %d"
msgstr "Test av knappeplassering %d"
#: ../src/ui/theme-viewer.c:768
#, c-format
msgid "%g milliseconds to draw one window frame"
msgstr "%g millisekunder for å tegne en vindusramme"
#: ../src/ui/theme-viewer.c:813
#, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "Bruk: metacity-theme-viewer [TEMANAVN]\n"
#: ../src/ui/theme-viewer.c:820
#, c-format
msgid "Error loading theme: %s\n"
msgstr "Feil under lasting av tema: %s\n"
#: ../src/ui/theme-viewer.c:826
#, c-format
msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Lastet tema «%s» på %g sekunder\n"
#: ../src/ui/theme-viewer.c:871
msgid "Normal Title Font"
msgstr "Normal tittelskrift"
#: ../src/ui/theme-viewer.c:877
msgid "Small Title Font"
msgstr "Liten tittelskrift"
#: ../src/ui/theme-viewer.c:883
msgid "Large Title Font"
msgstr "Stor tittelskrift"
#: ../src/ui/theme-viewer.c:888
msgid "Button Layouts"
msgstr "Knappeplasseringer"
#: ../src/ui/theme-viewer.c:893
msgid "Benchmark"
msgstr "Ytelsestest"
#: ../src/ui/theme-viewer.c:949
msgid "Window Title Goes Here"
msgstr "Vindutittel skal her"
#: ../src/ui/theme-viewer.c:1055
#, c-format
msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
"seconds wall clock time including X server resources (%g milliseconds per "
"frame)\n"
msgstr ""
"Tegnet %d rammer på %g sekunder hos klienten (%g millisekunder per ramme) og "
"%g sekunder på klokken inklusive ressurser på X-tjener (%g millisekunder per "
"ramme)\n"
#: ../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: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:1281
msgid "Error was expected but none given"
msgstr "Feil var ventet men ingen ble gitt"
#: ../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: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:1293
#, c-format
msgid "x value was %d, %d was expected"
msgstr "x-verdi var %d, %d var ventet"
#: ../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: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"

1194
po/nl.po

File diff suppressed because it is too large Load Diff

620
po/or.po

File diff suppressed because it is too large Load Diff

523
po/pa.po

File diff suppressed because it is too large Load Diff

461
po/pl.po
View File

@@ -9,14 +9,14 @@
# Marek Stępień <marcoos@aviary.pl>, 2007. # Marek Stępień <marcoos@aviary.pl>, 2007.
# Wadim Dziedzic <wdziedzic@aviary.pl>, 2007. # Wadim Dziedzic <wdziedzic@aviary.pl>, 2007.
# Tomasz Dominikowski <dominikowski@gmail.com>, 2008-2009. # Tomasz Dominikowski <dominikowski@gmail.com>, 2008-2009.
# Piotr Drąg <piotrdrag@gmail.com>, 2010-2013. # Piotr Drąg <piotrdrag@gmail.com>, 2010-2012.
# Aviary.pl <gnomepl@aviary.pl>, 2007-2013. # Aviary.pl <gnomepl@aviary.pl>, 2007-2012.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-08-22 01:49+0200\n" "POT-Creation-Date: 2012-12-26 21:39+0100\n"
"PO-Revision-Date: 2013-08-22 01:50+0200\n" "PO-Revision-Date: 2012-12-26 21:40+0100\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n" "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <gnomepl@aviary.pl>\n" "Language-Team: Polish <gnomepl@aviary.pl>\n"
"Language: pl\n" "Language: pl\n"
@@ -173,8 +173,8 @@ msgid "Close window"
msgstr "Zamknięcie okna" msgstr "Zamknięcie okna"
#: ../src/50-mutter-windows.xml.in.h:9 #: ../src/50-mutter-windows.xml.in.h:9
msgid "Hide window" msgid "Minimize window"
msgstr "Ukrycie okna" msgstr "Minimalizacja okna"
#: ../src/50-mutter-windows.xml.in.h:10 #: ../src/50-mutter-windows.xml.in.h:10
msgid "Move window" msgid "Move window"
@@ -187,7 +187,7 @@ msgstr "Zmiana rozmiaru okna"
#: ../src/50-mutter-windows.xml.in.h:12 #: ../src/50-mutter-windows.xml.in.h:12
msgid "Toggle window on all workspaces or one" msgid "Toggle window on all workspaces or one"
msgstr "" msgstr ""
"Przełączenie obecności okna na wszystkich obszarach roboczych lub jednym" "Przełączenie obecności okna na wszystkich obszarach roboczych lub jednym "
#: ../src/50-mutter-windows.xml.in.h:13 #: ../src/50-mutter-windows.xml.in.h:13
msgid "Raise window if covered, otherwise lower it" msgid "Raise window if covered, otherwise lower it"
@@ -220,7 +220,7 @@ msgstr "Podział widoku po prawej"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:596 #: ../src/compositor/compositor.c:512
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display \"%s" "Another compositing manager is already running on screen %i on display \"%s"
@@ -228,11 +228,7 @@ msgid ""
msgstr "" msgstr ""
"Inny menedżer składania jest już uruchomiony na podekranie %i ekranu \"%s\"." "Inny menedżer składania jest już uruchomiony na podekranie %i ekranu \"%s\"."
#: ../src/compositor/meta-background.c:1076 #: ../src/core/bell.c:320
msgid "background texture could not be created from file"
msgstr "nie można utworzyć tekstury tła z pliku"
#: ../src/core/bell.c:322
msgid "Bell event" msgid "Bell event"
msgstr "Zdarzenie sygnału dźwiękowego" msgstr "Zdarzenie sygnału dźwiękowego"
@@ -264,18 +260,18 @@ msgstr "_Czekaj"
msgid "_Force Quit" msgid "_Force Quit"
msgstr "_Zakończ" msgstr "_Zakończ"
#: ../src/core/display.c:421 #: ../src/core/display.c:394
#, c-format #, c-format
msgid "Missing %s extension required for compositing" msgid "Missing %s extension required for compositing"
msgstr "Brak rozszerzenia %s, wymaganego przez składanie" msgstr "Brak rozszerzenia %s, wymaganego przez składanie"
#: ../src/core/display.c:513 #: ../src/core/display.c:491
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" msgid "Failed to open X Window System display '%s'\n"
msgstr "" msgstr ""
"Otwarcie połączenia z ekranem \"%s\" systemu X Window się nie powiodło\n" "Otwarcie połączenia z ekranem \"%s\" systemu X Window się nie powiodło\n"
#: ../src/core/keybindings.c:1136 #: ../src/core/keybindings.c:876
#, c-format #, c-format
msgid "" msgid ""
"Some other program is already using the key %s with modifiers %x as a " "Some other program is already using the key %s with modifiers %x as a "
@@ -284,41 +280,36 @@ msgstr ""
"Skrótu klawiszowego z klawiszem %s i modyfikatorami %x używa już inny " "Skrótu klawiszowego z klawiszem %s i modyfikatorami %x używa już inny "
"program\n" "program\n"
#: ../src/core/keybindings.c:1333 #: ../src/core/main.c:196
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "\"%s\" nie jest prawidłowym skrótem\n"
#: ../src/core/main.c:197
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
msgstr "Rozłącza połączenie z menedżerem sesji" msgstr "Wyłącza połączenie z menedżerem sesji"
#: ../src/core/main.c:203 #: ../src/core/main.c:202
msgid "Replace the running window manager" msgid "Replace the running window manager"
msgstr "Zastępuje uruchomionego menedżera okien" msgstr "Zastępuje uruchomionego menedżera okien"
#: ../src/core/main.c:209 #: ../src/core/main.c:208
msgid "Specify session management ID" msgid "Specify session management ID"
msgstr "Podaje identyfikator zarządzania sesją" msgstr "Określa identyfikator zarządzania sesją"
#: ../src/core/main.c:214 #: ../src/core/main.c:213
msgid "X Display to use" msgid "X Display to use"
msgstr "Używany ekran X" msgstr "Używany ekran X"
#: ../src/core/main.c:220 #: ../src/core/main.c:219
msgid "Initialize session from savefile" msgid "Initialize session from savefile"
msgstr "Inicjuje sesję z zapisanego pliku" msgstr "Inicjuje sesję z zapisanego pliku"
#: ../src/core/main.c:226 #: ../src/core/main.c:225
msgid "Make X calls synchronous" msgid "Make X calls synchronous"
msgstr "Synchroniczne wywołania X" msgstr "Synchroniczne wywołania X"
#: ../src/core/main.c:534 #: ../src/core/main.c:496
#, c-format #, c-format
msgid "Failed to scan themes directory: %s\n" msgid "Failed to scan themes directory: %s\n"
msgstr "Przejrzenie katalogu z motywami się nie powiodło: %s\n" msgstr "Przejrzenie katalogu z motywami się nie powiodło: %s\n"
#: ../src/core/main.c:550 #: ../src/core/main.c:512
#, c-format #, c-format
msgid "" msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n" "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -326,19 +317,6 @@ msgstr ""
"Nie można odnaleźć żadnego motywu. Proszę sprawdzić, czy katalog %s istnieje " "Nie można odnaleźć żadnego motywu. Proszę sprawdzić, czy katalog %s istnieje "
"i zawiera standardowe motywy.\n" "i zawiera standardowe motywy.\n"
#: ../src/core/monitor.c:702
msgid "Built-in display"
msgstr "Wbudowany ekran"
#. TRANSLATORS: this is a monitor name (in case we don't know
#. the vendor), it's Unknown followed by a size in inches,
#. like 'Unknown 15"'
#.
#: ../src/core/monitor.c:730
#, c-format
msgid "Unknown %s"
msgstr "Nieznany %s"
#: ../src/core/mutter.c:40 #: ../src/core/mutter.c:40
#, c-format #, c-format
msgid "" msgid ""
@@ -363,7 +341,7 @@ msgstr "Wyświetla wersję"
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "Używana wtyczka programu Mutter" msgstr "Używana wtyczka programu Mutter"
#: ../src/core/prefs.c:1202 #: ../src/core/prefs.c:1087
msgid "" msgid ""
"Workarounds for broken applications disabled. Some applications may not " "Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n" "behave properly.\n"
@@ -371,14 +349,14 @@ msgstr ""
"Obejścia dla błędnie działających programów są wyłączone. Niektóre z nich " "Obejścia dla błędnie działających programów są wyłączone. Niektóre z nich "
"mogą się zachowywać w sposób nieprzewidywalny.\n" "mogą się zachowywać w sposób nieprzewidywalny.\n"
#: ../src/core/prefs.c:1277 #: ../src/core/prefs.c:1162
#, c-format #, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n" msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "" msgstr ""
"Nie można przetworzyć opisu czcionki \"%s\", powiązanego z kluczem GSettings " "Nie można przetworzyć opisu czcionki \"%s\", powiązanego z kluczem GSettings "
"%s\n" "%s\n"
#: ../src/core/prefs.c:1343 #: ../src/core/prefs.c:1228
#, c-format #, c-format
msgid "" msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button " "\"%s\" found in configuration database is not a valid value for mouse button "
@@ -387,7 +365,7 @@ msgstr ""
"Wartość \"%s\", odnaleziona w bazie danych konfiguracji nie opisuje " "Wartość \"%s\", odnaleziona w bazie danych konfiguracji nie opisuje "
"prawidłowo modyfikatora przycisku myszy\n" "prawidłowo modyfikatora przycisku myszy\n"
#: ../src/core/prefs.c:1909 #: ../src/core/prefs.c:1768
#, c-format #, c-format
msgid "" msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding " "\"%s\" found in configuration database is not a valid value for keybinding "
@@ -396,17 +374,17 @@ msgstr ""
"Wartość \"%s\", odnaleziona w bazie danych konfiguracji nie opisuje " "Wartość \"%s\", odnaleziona w bazie danych konfiguracji nie opisuje "
"prawidłowo skrótu klawiszowego \"%s\"\n" "prawidłowo skrótu klawiszowego \"%s\"\n"
#: ../src/core/prefs.c:1999 #: ../src/core/prefs.c:1865
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Obszar roboczy %d" msgstr "Obszar roboczy %d"
#: ../src/core/screen.c:537 #: ../src/core/screen.c:658
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "Podekran %d ekranu \"%s\" jest nieprawidłowy\n" msgstr "Podekran %d ekranu \"%s\" jest nieprawidłowy\n"
#: ../src/core/screen.c:553 #: ../src/core/screen.c:674
#, c-format #, c-format
msgid "" msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --" "Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -415,7 +393,7 @@ msgstr ""
"Na podekranie %d ekranu \"%s\" działa już menedżer okien. Aby zastąpić " "Na podekranie %d ekranu \"%s\" działa już menedżer okien. Aby zastąpić "
"działającego menedżera okien, proszę spróbować użyć opcji --replace.\n" "działającego menedżera okien, proszę spróbować użyć opcji --replace.\n"
#: ../src/core/screen.c:580 #: ../src/core/screen.c:701
#, c-format #, c-format
msgid "" msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n" "Could not acquire window manager selection on screen %d display \"%s\"\n"
@@ -423,12 +401,12 @@ msgstr ""
"Nie można uzyskać zaznaczenia menedżera okien na podekranie %d ekranu \"%s" "Nie można uzyskać zaznaczenia menedżera okien na podekranie %d ekranu \"%s"
"\"\n" "\"\n"
#: ../src/core/screen.c:658 #: ../src/core/screen.c:770
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "Na podekranie %d ekranu \"%s\" działa już menedżer okien\n" msgstr "Na podekranie %d ekranu \"%s\" działa już menedżer okien\n"
#: ../src/core/screen.c:850 #: ../src/core/screen.c:955
#, c-format #, c-format
msgid "Could not release screen %d on display \"%s\"\n" msgid "Could not release screen %d on display \"%s\"\n"
msgstr "Nie można zwolnić podekranu %d ekranu \"%s\"\n" msgstr "Nie można zwolnić podekranu %d ekranu \"%s\"\n"
@@ -490,44 +468,45 @@ msgstr ""
"Te okna nie obsługują opcji zapisu aktualnego stanu (\"save current setup" "Te okna nie obsługują opcji zapisu aktualnego stanu (\"save current setup"
"\"), więc przy następnym zalogowaniu będą musiały zostać uruchomione ręcznie." "\"), więc przy następnym zalogowaniu będą musiały zostać uruchomione ręcznie."
#: ../src/core/util.c:84 #: ../src/core/util.c:80
#, c-format #, c-format
msgid "Failed to open debug log: %s\n" msgid "Failed to open debug log: %s\n"
msgstr "Otwarcie dziennika z zapisem wykonania się nie powiodło: %s\n" msgstr "Otwarcie dziennika z zapisem wykonania się nie powiodło: %s\n"
#: ../src/core/util.c:94 #: ../src/core/util.c:90
#, c-format #, c-format
msgid "Failed to fdopen() log file %s: %s\n" msgid "Failed to fdopen() log file %s: %s\n"
msgstr "Wykonać fdopen() na pliku dziennika %s się nie powiodło: %s\n" msgstr "Wykonać fdopen() na pliku dziennika %s się nie powiodło: %s\n"
#: ../src/core/util.c:100 #: ../src/core/util.c:96
#, c-format #, c-format
msgid "Opened log file %s\n" msgid "Opened log file %s\n"
msgstr "Otwarty plik dziennika %s\n" msgstr "Otwarty plik dziennika %s\n"
#: ../src/core/util.c:119 #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
#, c-format
msgid "Mutter was compiled without support for verbose mode\n" msgid "Mutter was compiled without support for verbose mode\n"
msgstr "" msgstr ""
"Program Mutter został skompilowany bez obsługi trybu z obszerną informacją\n" "Program Mutter został skompilowany bez obsługi trybu z obszerną informacją\n"
#: ../src/core/util.c:264 #: ../src/core/util.c:259
msgid "Window manager: " msgid "Window manager: "
msgstr "Menedżer okien: " msgstr "Menedżer okien: "
#: ../src/core/util.c:414 #: ../src/core/util.c:407
msgid "Bug in window manager: " msgid "Bug in window manager: "
msgstr "Błąd w programie menedżera okien: " msgstr "Błąd w programie menedżera okien: "
#: ../src/core/util.c:445 #: ../src/core/util.c:438
msgid "Window manager warning: " msgid "Window manager warning: "
msgstr "Ostrzeżenie menedżera okien: " msgstr "Ostrzeżenie menedżera okien: "
#: ../src/core/util.c:473 #: ../src/core/util.c:466
msgid "Window manager error: " msgid "Window manager error: "
msgstr "Błąd menedżera okien: " msgstr "Błąd menedżera okien: "
#. first time through #. first time through
#: ../src/core/window.c:7533 #: ../src/core/window.c:7277
#, c-format #, c-format
msgid "" msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -543,7 +522,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work. #. * about these apps but make them work.
#. #.
#: ../src/core/window.c:8257 #: ../src/core/window.c:7943
#, c-format #, c-format
msgid "" msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size " "Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -553,23 +532,23 @@ msgstr ""
"niezmienny, lecz jednocześnie ustawia minimalny rozmiar na %d x %d, a " "niezmienny, lecz jednocześnie ustawia minimalny rozmiar na %d x %d, a "
"maksymalny rozmiar na %d x %d. To nie ma żadnego sensu.\n" "maksymalny rozmiar na %d x %d. To nie ma żadnego sensu.\n"
#: ../src/core/window-props.c:347 #: ../src/core/window-props.c:274
#, c-format #, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n" msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "Program ustawił błędną wartość _NET_WM_PID %lu\n" msgstr "Program ustawił błędną wartość _NET_WM_PID %lu\n"
#: ../src/core/window-props.c:463 #: ../src/core/window-props.c:393
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (na %s)" msgstr "%s (na %s)"
#: ../src/core/window-props.c:1546 #: ../src/core/window-props.c:1448
#, c-format #, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "" msgstr ""
"Nieprawidłowa wartość WM_TRANSIENT_FOR dla okna 0x%lx określona w %s.\n" "Nieprawidłowa wartość WM_TRANSIENT_FOR dla okna 0x%lx określona w %s.\n"
#: ../src/core/window-props.c:1557 #: ../src/core/window-props.c:1459
#, c-format #, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR okna 0x%lx dla %s utworzyłoby pętlę.\n" msgstr "WM_TRANSIENT_FOR okna 0x%lx dla %s utworzyłoby pętlę.\n"
@@ -728,11 +707,11 @@ msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:18 #: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "" msgid ""
"If enabled, new windows that are initially the size of the monitor " "If enabled, monitor nearly monitor sized windows automatically get maximized "
"automatically get maximized." "when mapped."
msgstr "" msgstr ""
"Jeśli jest włączone, to nowe okna o początkowym rozmiarze zbliżonym do " "Jeśli jest włączone, to okna o rozmiarze zbliżonym do rozmiaru monitora "
"rozmiaru monitora zostają automatycznie maksymalizowane." "zostają automatycznie maksymalizowane podczas mapowania."
#: ../src/org.gnome.mutter.gschema.xml.in.h:19 #: ../src/org.gnome.mutter.gschema.xml.in.h:19
msgid "Select window from tab popup" msgid "Select window from tab popup"
@@ -742,104 +721,109 @@ msgstr "Wybór okna z wyskakującego okna dla tabulacji"
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "Anulowanie wyskakującego okna dla tabulacji" msgstr "Anulowanie wyskakującego okna dla tabulacji"
#: ../src/tools/mutter-message.c:123
#, c-format
msgid "Usage: %s\n"
msgstr "Użycie: %s\n"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:67 #: ../src/ui/menu.c:69
msgid "Mi_nimize" msgid "Mi_nimize"
msgstr "Zm_inimalizuj" msgstr "Zm_inimalizuj"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:69 #: ../src/ui/menu.c:71
msgid "Ma_ximize" msgid "Ma_ximize"
msgstr "Zm_aksymalizuj" msgstr "Zm_aksymalizuj"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:71 #: ../src/ui/menu.c:73
msgid "Unma_ximize" msgid "Unma_ximize"
msgstr "Cofnij m_aksymalizację" msgstr "Cofnij m_aksymalizację"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:73 #: ../src/ui/menu.c:75
msgid "Roll _Up" msgid "Roll _Up"
msgstr "_Zwiń" msgstr "_Zwiń"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:75 #: ../src/ui/menu.c:77
msgid "_Unroll" msgid "_Unroll"
msgstr "Ro_zwiń" msgstr "Ro_zwiń"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:77 #: ../src/ui/menu.c:79
msgid "_Move" msgid "_Move"
msgstr "Prz_esuń" msgstr "Prz_esuń"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:79 #: ../src/ui/menu.c:81
msgid "_Resize" msgid "_Resize"
msgstr "Zmień _rozmiar" msgstr "Zmień _rozmiar"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:81 #: ../src/ui/menu.c:83
msgid "Move Titlebar On_screen" msgid "Move Titlebar On_screen"
msgstr "Przeno_szenie paska tytułowego na ekranie" msgstr "Przeno_szenie paska tytułowego na ekranie"
#. separator #. separator
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:84 ../src/ui/menu.c:86 #: ../src/ui/menu.c:86 ../src/ui/menu.c:88
msgid "Always on _Top" msgid "Always on _Top"
msgstr "Zawsze na _wierzchu" msgstr "Zawsze na _wierzchu"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:88 #: ../src/ui/menu.c:90
msgid "_Always on Visible Workspace" msgid "_Always on Visible Workspace"
msgstr "_Zawsze na widocznym obszarze roboczym" msgstr "_Zawsze na widocznym obszarze roboczym"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:90 #: ../src/ui/menu.c:92
msgid "_Only on This Workspace" msgid "_Only on This Workspace"
msgstr "_Tylko na tym obszarze roboczym" msgstr "_Tylko na tym obszarze roboczym"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:92 #: ../src/ui/menu.c:94
msgid "Move to Workspace _Left" msgid "Move to Workspace _Left"
msgstr "Przenieś na _lewy obszar roboczy" msgstr "Przenieś na _lewy obszar roboczy"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:94 #: ../src/ui/menu.c:96
msgid "Move to Workspace R_ight" msgid "Move to Workspace R_ight"
msgstr "Przen_ieś na prawy obszar roboczy" msgstr "Przen_ieś na prawy obszar roboczy"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:96 #: ../src/ui/menu.c:98
msgid "Move to Workspace _Up" msgid "Move to Workspace _Up"
msgstr "_Przenieś na górny obszar roboczy" msgstr "_Przenieś na górny obszar roboczy"
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:98 #: ../src/ui/menu.c:100
msgid "Move to Workspace _Down" msgid "Move to Workspace _Down"
msgstr "Przenieś na _dolny obszar roboczy" msgstr "Przenieś na _dolny obszar roboczy"
#. separator #. separator
#. Translators: Translate this string the same way as you do in libwnck! #. Translators: Translate this string the same way as you do in libwnck!
#: ../src/ui/menu.c:102 #: ../src/ui/menu.c:104
msgid "_Close" msgid "_Close"
msgstr "Za_mknij" msgstr "Za_mknij"
#: ../src/ui/menu.c:202 #: ../src/ui/menu.c:204
#, c-format #, c-format
msgid "Workspace %d%n" msgid "Workspace %d%n"
msgstr "Obszar roboczy %d%n" msgstr "Obszar roboczy %d%n"
#: ../src/ui/menu.c:212 #: ../src/ui/menu.c:214
#, c-format #, c-format
msgid "Workspace 1_0" msgid "Workspace 1_0"
msgstr "Obszar roboczy 1_0" msgstr "Obszar roboczy 1_0"
#: ../src/ui/menu.c:214 #: ../src/ui/menu.c:216
#, c-format #, c-format
msgid "Workspace %s%d" msgid "Workspace %s%d"
msgstr "Obszar roboczy %s%d" msgstr "Obszar roboczy %s%d"
#: ../src/ui/menu.c:384 #: ../src/ui/menu.c:397
msgid "Move to Another _Workspace" msgid "Move to Another _Workspace"
msgstr "Przeniesienie na inny _obszar roboczy" msgstr "Przeniesienie na inny _obszar roboczy"
@@ -936,54 +920,54 @@ msgstr "Mod5"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#. #.
#: ../src/ui/resizepopup.c:136 #: ../src/ui/resizepopup.c:113
#, c-format #, c-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
#: ../src/ui/theme.c:236 #: ../src/ui/theme.c:234
msgid "top" msgid "top"
msgstr "góra" msgstr "góra"
#: ../src/ui/theme.c:238 #: ../src/ui/theme.c:236
msgid "bottom" msgid "bottom"
msgstr "dół" msgstr "dół"
#: ../src/ui/theme.c:240 #: ../src/ui/theme.c:238
msgid "left" msgid "left"
msgstr "lewa" msgstr "lewa"
#: ../src/ui/theme.c:242 #: ../src/ui/theme.c:240
msgid "right" msgid "right"
msgstr "prawa" msgstr "prawa"
#: ../src/ui/theme.c:270 #: ../src/ui/theme.c:268
#, c-format #, c-format
msgid "frame geometry does not specify \"%s\" dimension" msgid "frame geometry does not specify \"%s\" dimension"
msgstr "Rozmiar ramki nie określa wymiaru \"%s\"" msgstr "Rozmiar ramki nie określa wymiaru \"%s\""
#: ../src/ui/theme.c:289 #: ../src/ui/theme.c:287
#, c-format #, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "Rozmiar ramki nie określa wymiaru \"%s\" dla krawędzi \"%s\"" msgstr "Rozmiar ramki nie określa wymiaru \"%s\" dla krawędzi \"%s\""
#: ../src/ui/theme.c:326 #: ../src/ui/theme.c:324
#, c-format #, c-format
msgid "Button aspect ratio %g is not reasonable" msgid "Button aspect ratio %g is not reasonable"
msgstr "" msgstr ""
"Współczynnik proporcji przycisku %g nie mieści się w rozsądnych granicach" "Współczynnik proporcji przycisku %g nie mieści się w rozsądnych granicach"
#: ../src/ui/theme.c:338 #: ../src/ui/theme.c:336
#, c-format #, c-format
msgid "Frame geometry does not specify size of buttons" msgid "Frame geometry does not specify size of buttons"
msgstr "Rozmiar ramki nie określa liczby przycisków" msgstr "Rozmiar ramki nie określa liczby przycisków"
#: ../src/ui/theme.c:1051 #: ../src/ui/theme.c:1049
#, c-format #, c-format
msgid "Gradients should have at least two colors" msgid "Gradients should have at least two colors"
msgstr "Gradienty powinny się składać co najmniej z dwóch kolorów" msgstr "Gradienty powinny się składać co najmniej z dwóch kolorów"
#: ../src/ui/theme.c:1203 #: ../src/ui/theme.c:1201
#, c-format #, c-format
msgid "" msgid ""
"GTK custom color specification must have color name and fallback in " "GTK custom color specification must have color name and fallback in "
@@ -993,7 +977,7 @@ msgstr ""
"kolor zastępczy w nawiasach, np. gtk:custom(foo,bar); nie można przetworzyć " "kolor zastępczy w nawiasach, np. gtk:custom(foo,bar); nie można przetworzyć "
"\"%s\"" "\"%s\""
#: ../src/ui/theme.c:1219 #: ../src/ui/theme.c:1217
#, c-format #, c-format
msgid "" msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
@@ -1002,7 +986,7 @@ msgstr ""
"Nieprawidłowy znak \"%c\" w parametrze nazwa_koloru opcji gtk:custom, tylko " "Nieprawidłowy znak \"%c\" w parametrze nazwa_koloru opcji gtk:custom, tylko "
"znaki A-Za-z0-9-_ są prawidłowe" "znaki A-Za-z0-9-_ są prawidłowe"
#: ../src/ui/theme.c:1233 #: ../src/ui/theme.c:1231
#, c-format #, c-format
msgid "" msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
@@ -1011,7 +995,7 @@ msgstr ""
"Formatem Gtk:custom jest \"gtk:custom(nazwa_koloru,kolor_zastępczy)\", \"%s" "Formatem Gtk:custom jest \"gtk:custom(nazwa_koloru,kolor_zastępczy)\", \"%s"
"\" nie pasuje do formatu" "\" nie pasuje do formatu"
#: ../src/ui/theme.c:1278 #: ../src/ui/theme.c:1276
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@@ -1021,7 +1005,7 @@ msgstr ""
"kwadratowych, np. gtk:fg[NORMAL], gdzie NORMAL jest nazwą stanu; nie można " "kwadratowych, np. gtk:fg[NORMAL], gdzie NORMAL jest nazwą stanu; nie można "
"przetworzyć \"%s\"" "przetworzyć \"%s\""
#: ../src/ui/theme.c:1292 #: ../src/ui/theme.c:1290
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:" "GTK color specification must have a close bracket after the state, e.g. gtk:"
@@ -1031,17 +1015,17 @@ msgstr ""
"nawias kwadratowy, np. gtk:fg[NORMAL], gdzie NORMAL jest nazwą stanu; nie " "nawias kwadratowy, np. gtk:fg[NORMAL], gdzie NORMAL jest nazwą stanu; nie "
"można przetworzyć \"%s\"" "można przetworzyć \"%s\""
#: ../src/ui/theme.c:1303 #: ../src/ui/theme.c:1301
#, c-format #, c-format
msgid "Did not understand state \"%s\" in color specification" msgid "Did not understand state \"%s\" in color specification"
msgstr "Niezrozumiały stan \"%s\" w specyfikacji koloru" msgstr "Niezrozumiały stan \"%s\" w specyfikacji koloru"
#: ../src/ui/theme.c:1316 #: ../src/ui/theme.c:1314
#, c-format #, c-format
msgid "Did not understand color component \"%s\" in color specification" msgid "Did not understand color component \"%s\" in color specification"
msgstr "Niezrozumiała definicja koloru \"%s\" w specyfikacji koloru" msgstr "Niezrozumiała definicja koloru \"%s\" w specyfikacji koloru"
#: ../src/ui/theme.c:1345 #: ../src/ui/theme.c:1343
#, c-format #, c-format
msgid "" msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@@ -1050,19 +1034,19 @@ msgstr ""
"Formatem przenikania jest \"blend/bg_color/fg_color/alpha\", \"%s\" nie " "Formatem przenikania jest \"blend/bg_color/fg_color/alpha\", \"%s\" nie "
"pasuje do formatu" "pasuje do formatu"
#: ../src/ui/theme.c:1356 #: ../src/ui/theme.c:1354
#, c-format #, c-format
msgid "Could not parse alpha value \"%s\" in blended color" msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "Nie można przetworzyć wartości alfa \"%s\" w przenikającym kolorze" msgstr "Nie można przetworzyć wartości alfa \"%s\" w przenikającym kolorze"
#: ../src/ui/theme.c:1366 #: ../src/ui/theme.c:1364
#, c-format #, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "" msgstr ""
"Wartość alfa \"%s\" w przenikającym kolorze nie zawiera się pomiędzy 0,0 i " "Wartość alfa \"%s\" w przenikającym kolorze nie zawiera się pomiędzy 0,0 i "
"1,0" "1,0"
#: ../src/ui/theme.c:1413 #: ../src/ui/theme.c:1411
#, c-format #, c-format
msgid "" msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
@@ -1070,29 +1054,29 @@ msgstr ""
"Formatem przenikania jest \"shade/base_color/factor\", \"%s\" nie pasuje do " "Formatem przenikania jest \"shade/base_color/factor\", \"%s\" nie pasuje do "
"formatu" "formatu"
#: ../src/ui/theme.c:1424 #: ../src/ui/theme.c:1422
#, c-format #, c-format
msgid "Could not parse shade factor \"%s\" in shaded color" msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "" msgstr ""
"Nie można przetworzyć współczynnika przenikania \"%s\" w przenikającym " "Nie można przetworzyć współczynnika przenikania \"%s\" w przenikającym "
"kolorze" "kolorze"
#: ../src/ui/theme.c:1434 #: ../src/ui/theme.c:1432
#, c-format #, c-format
msgid "Shade factor \"%s\" in shaded color is negative" msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "Współczynnik przenikania \"%s\" w przenikającym kolorze jest ujemny" msgstr "Współczynnik przenikania \"%s\" w przenikającym kolorze jest ujemny"
#: ../src/ui/theme.c:1463 #: ../src/ui/theme.c:1461
#, c-format #, c-format
msgid "Could not parse color \"%s\"" msgid "Could not parse color \"%s\""
msgstr "Nie można przetworzyć koloru \"%s\"" msgstr "Nie można przetworzyć koloru \"%s\""
#: ../src/ui/theme.c:1780 #: ../src/ui/theme.c:1778
#, c-format #, c-format
msgid "Coordinate expression contains character '%s' which is not allowed" msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "Wyrażenie określające współrzędne zawiera niedozwolony znak \"%s\"" msgstr "Wyrażenie określające współrzędne zawiera niedozwolony znak \"%s\""
#: ../src/ui/theme.c:1807 #: ../src/ui/theme.c:1805
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contains floating point number '%s' which could not be " "Coordinate expression contains floating point number '%s' which could not be "
@@ -1101,14 +1085,14 @@ msgstr ""
"Wyrażenie określające współrzędne zawiera liczbę zmiennoprzecinkową \"%s\", " "Wyrażenie określające współrzędne zawiera liczbę zmiennoprzecinkową \"%s\", "
"której nie można przetworzyć" "której nie można przetworzyć"
#: ../src/ui/theme.c:1821 #: ../src/ui/theme.c:1819
#, c-format #, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed" msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "" msgstr ""
"Wyrażenie określające współrzędne zawiera liczbę całkowitą \"%s\", której " "Wyrażenie określające współrzędne zawiera liczbę całkowitą \"%s\", której "
"nie można przetworzyć" "nie można przetworzyć"
#: ../src/ui/theme.c:1942 #: ../src/ui/theme.c:1940
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contained unknown operator at the start of this text: " "Coordinate expression contained unknown operator at the start of this text: "
@@ -1117,18 +1101,18 @@ msgstr ""
"Wyrażenie określające współrzędne zawiera nieznany operator na początku " "Wyrażenie określające współrzędne zawiera nieznany operator na początku "
"tekstu: \"%s\"" "tekstu: \"%s\""
#: ../src/ui/theme.c:1999 #: ../src/ui/theme.c:1997
#, c-format #, c-format
msgid "Coordinate expression was empty or not understood" msgid "Coordinate expression was empty or not understood"
msgstr "" msgstr ""
"Wyrażenie określające współrzędne jest puste lub nie można go rozpoznać" "Wyrażenie określające współrzędne jest puste lub nie można go rozpoznać"
#: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 #: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
#, c-format #, c-format
msgid "Coordinate expression results in division by zero" msgid "Coordinate expression results in division by zero"
msgstr "Wyrażenie opisujące położenie zawiera dzielenie przez zero" msgstr "Wyrażenie opisujące położenie zawiera dzielenie przez zero"
#: ../src/ui/theme.c:2164 #: ../src/ui/theme.c:2162
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression tries to use mod operator on a floating-point number" "Coordinate expression tries to use mod operator on a floating-point number"
@@ -1136,7 +1120,7 @@ msgstr ""
"Wyrażenie opisujące położenie używa operatora dzielenia modulo z liczbą " "Wyrażenie opisujące położenie używa operatora dzielenia modulo z liczbą "
"zmiennoprzecinkową" "zmiennoprzecinkową"
#: ../src/ui/theme.c:2220 #: ../src/ui/theme.c:2218
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected" "Coordinate expression has an operator \"%s\" where an operand was expected"
@@ -1144,19 +1128,19 @@ msgstr ""
"Wyrażenie opisujące położenie zawiera operator \"%s\" w miejscu, w którym " "Wyrażenie opisujące położenie zawiera operator \"%s\" w miejscu, w którym "
"oczekiwano operandu" "oczekiwano operandu"
#: ../src/ui/theme.c:2229 #: ../src/ui/theme.c:2227
#, c-format #, c-format
msgid "Coordinate expression had an operand where an operator was expected" msgid "Coordinate expression had an operand where an operator was expected"
msgstr "" msgstr ""
"Wyrażenie opisujące położenie zawiera operand w miejscu, w którym oczekiwano " "Wyrażenie opisujące położenie zawiera operand w miejscu, w którym oczekiwano "
"operatora" "operatora"
#: ../src/ui/theme.c:2237 #: ../src/ui/theme.c:2235
#, c-format #, c-format
msgid "Coordinate expression ended with an operator instead of an operand" msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "Wyrażenie opisujące położenie kończy się operatorem zamiast operandem" msgstr "Wyrażenie opisujące położenie kończy się operatorem zamiast operandem"
#: ../src/ui/theme.c:2247 #: ../src/ui/theme.c:2245
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no " "Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@@ -1165,43 +1149,43 @@ msgstr ""
"Wyrażenie opisujące położenie zawiera operator \"%c\" bezpośrednio po " "Wyrażenie opisujące położenie zawiera operator \"%c\" bezpośrednio po "
"operatorze \"%c\" bez rozdzielającego ich operandu" "operatorze \"%c\" bez rozdzielającego ich operandu"
#: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 #: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
#, c-format #, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\"" msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "" msgstr ""
"Wyrażenie opisujące położenie zawiera nieznaną zmienną lub stałą \"%s\"" "Wyrażenie opisujące położenie zawiera nieznaną zmienną lub stałą \"%s\""
#: ../src/ui/theme.c:2497 #: ../src/ui/theme.c:2495
#, c-format #, c-format
msgid "Coordinate expression parser overflowed its buffer." msgid "Coordinate expression parser overflowed its buffer."
msgstr "Parser wyrażeń określających współrzędne przepełnił swój bufor." msgstr "Parser wyrażeń określających współrzędne przepełnił swój bufor."
#: ../src/ui/theme.c:2526 #: ../src/ui/theme.c:2524
#, c-format #, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis" msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "" msgstr ""
"Wyrażenie opisujące położenie zawiera nawias zamykający bez odpowiadającego " "Wyrażenie opisujące położenie zawiera nawias zamykający bez odpowiadającego "
"mu nawiasu otwierającego" "mu nawiasu otwierającego"
#: ../src/ui/theme.c:2590 #: ../src/ui/theme.c:2588
#, c-format #, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis" msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "" msgstr ""
"Wyrażenie opisujące położenie zawiera nawias otwierający bez odpowiadającego " "Wyrażenie opisujące położenie zawiera nawias otwierający bez odpowiadającego "
"mu nawiasu zamykającego" "mu nawiasu zamykającego"
#: ../src/ui/theme.c:2601 #: ../src/ui/theme.c:2599
#, c-format #, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands" msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "" msgstr ""
"Wyrażenie opisujące położenie nie zawiera żadnych operatorów ani operandów" "Wyrażenie opisujące położenie nie zawiera żadnych operatorów ani operandów"
#: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 #: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
#, c-format #, c-format
msgid "Theme contained an expression that resulted in an error: %s\n" msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "Motyw zawiera wyrażenie, przy którego obliczaniu wystąpił błąd: %s\n" msgstr "Motyw zawiera wyrażenie, przy którego obliczaniu wystąpił błąd: %s\n"
#: ../src/ui/theme.c:4500 #: ../src/ui/theme.c:4498
#, c-format #, c-format
msgid "" msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@@ -1210,7 +1194,7 @@ msgstr ""
"Przy tym stylu ramki należy podać <button function=\"%s\" state=\"%s\" " "Przy tym stylu ramki należy podać <button function=\"%s\" state=\"%s\" "
"draw_ops=\"cokolwiek\"/>" "draw_ops=\"cokolwiek\"/>"
#: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 #: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
#, c-format #, c-format
msgid "" msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
@@ -1237,7 +1221,7 @@ msgstr ""
"Przy typie okna \"%s\" w motywie \"%s\" nie ustawiono stylu ramki. Należy " "Przy typie okna \"%s\" w motywie \"%s\" nie ustawiono stylu ramki. Należy "
"dodać element <window type=\"%s\" style_set=\"cokolwiek\"/>" "dodać element <window type=\"%s\" style_set=\"cokolwiek\"/>"
#: ../src/ui/theme.c:5661 ../src/ui/theme.c:5723 ../src/ui/theme.c:5786 #: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
#, c-format #, c-format
msgid "" msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not" "User-defined constants must begin with a capital letter; \"%s\" does not"
@@ -1245,7 +1229,7 @@ msgstr ""
"Stałe definiowane przez użytkownika powinny rozpoczynać się wielką literą, " "Stałe definiowane przez użytkownika powinny rozpoczynać się wielką literą, "
"natomiast \"%s\" nie spełnia tego warunku" "natomiast \"%s\" nie spełnia tego warunku"
#: ../src/ui/theme.c:5669 ../src/ui/theme.c:5731 ../src/ui/theme.c:5794 #: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
#, c-format #, c-format
msgid "Constant \"%s\" has already been defined" msgid "Constant \"%s\" has already been defined"
msgstr "Stała \"%s\" została już określona" msgstr "Stała \"%s\" została już określona"
@@ -1633,7 +1617,208 @@ msgstr "Wewnątrz elementu <%s> nie jest dopuszczalny tekst"
msgid "<%s> specified twice for this theme" msgid "<%s> specified twice for this theme"
msgstr "<%s> określono dwukrotnie dla tego motywu" msgstr "<%s> określono dwukrotnie dla tego motywu"
#: ../src/ui/theme-parser.c:4336 #: ../src/ui/theme-parser.c:4334
#, c-format #, c-format
msgid "Failed to find a valid file for theme %s\n" msgid "Failed to find a valid file for theme %s\n"
msgstr "Odnalezienie prawidłowego pliku dla motywu %s się nie powiodło\n" msgstr "Odnalezienie prawidłowego pliku dla motywu %s się nie powiodło\n"
#: ../src/ui/theme-viewer.c:99
msgid "_Windows"
msgstr "_Okna"
#: ../src/ui/theme-viewer.c:100
msgid "_Dialog"
msgstr "Okno _dialogowe"
#: ../src/ui/theme-viewer.c:101
msgid "_Modal dialog"
msgstr "_Modalne okno dialogowe"
#: ../src/ui/theme-viewer.c:102
msgid "_Utility"
msgstr "_Narzędzie"
#: ../src/ui/theme-viewer.c:103
msgid "_Splashscreen"
msgstr "_Ekran powitalny"
#: ../src/ui/theme-viewer.c:104
msgid "_Top dock"
msgstr "_Górny dok"
#: ../src/ui/theme-viewer.c:105
msgid "_Bottom dock"
msgstr "_Dolny dok"
#: ../src/ui/theme-viewer.c:106
msgid "_Left dock"
msgstr "_Lewy dok"
#: ../src/ui/theme-viewer.c:107
msgid "_Right dock"
msgstr "_Prawy dok"
#: ../src/ui/theme-viewer.c:108
msgid "_All docks"
msgstr "_Wszystkie doki"
#: ../src/ui/theme-viewer.c:109
msgid "Des_ktop"
msgstr "Pu_lpit"
#: ../src/ui/theme-viewer.c:115
msgid "Open another one of these windows"
msgstr "Otwiera kolejne okno tego typu"
#: ../src/ui/theme-viewer.c:117
msgid "This is a demo button with an 'open' icon"
msgstr "To jest przycisk demonstracyjny z ikoną \"otwórz\""
#: ../src/ui/theme-viewer.c:119
msgid "This is a demo button with a 'quit' icon"
msgstr "To jest przycisk demonstracyjny z ikoną \"zakończ\""
#: ../src/ui/theme-viewer.c:248
msgid "This is a sample message in a sample dialog"
msgstr "To jest przykładowy komunikat w prostym oknie dialogowym"
#: ../src/ui/theme-viewer.c:328
#, c-format
msgid "Fake menu item %d\n"
msgstr "Imitacja elementu menu %d\n"
#: ../src/ui/theme-viewer.c:363
msgid "Border-only window"
msgstr "Okno zawierające tylko krawędzie"
#: ../src/ui/theme-viewer.c:365
msgid "Bar"
msgstr "Pasek"
#: ../src/ui/theme-viewer.c:382
msgid "Normal Application Window"
msgstr "Zwykłe okno programu"
#: ../src/ui/theme-viewer.c:386
msgid "Dialog Box"
msgstr "Okno dialogowe"
#: ../src/ui/theme-viewer.c:390
msgid "Modal Dialog Box"
msgstr "Modalne okno dialogowe"
#: ../src/ui/theme-viewer.c:394
msgid "Utility Palette"
msgstr "Paleta narzędziowa"
#: ../src/ui/theme-viewer.c:398
msgid "Torn-off Menu"
msgstr "Menu oderwane"
#: ../src/ui/theme-viewer.c:402
msgid "Border"
msgstr "Krawędź"
#: ../src/ui/theme-viewer.c:406
msgid "Attached Modal Dialog"
msgstr "Dołączone modalne okno dialogowe"
#: ../src/ui/theme-viewer.c:739
#, c-format
msgid "Button layout test %d"
msgstr "Test układu przycisków %d"
#: ../src/ui/theme-viewer.c:768
#, c-format
msgid "%g milliseconds to draw one window frame"
msgstr "%g milisekundy do narysowania jednej ramki okna"
#: ../src/ui/theme-viewer.c:813
#, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "Użycie: metacity-theme-viewer [NAZWA_MOTYWU]\n"
#: ../src/ui/theme-viewer.c:820
#, c-format
msgid "Error loading theme: %s\n"
msgstr "Błąd podczas wczytywania motywu: %s\n"
#: ../src/ui/theme-viewer.c:826
#, c-format
msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "Wczytano motyw \"%s\" w ciągu %g sekund\n"
#: ../src/ui/theme-viewer.c:870
msgid "Normal Title Font"
msgstr "Zwykła czcionka tytułu"
#: ../src/ui/theme-viewer.c:876
msgid "Small Title Font"
msgstr "Mała czcionka tytułu"
#: ../src/ui/theme-viewer.c:882
msgid "Large Title Font"
msgstr "Duża czcionka tytułu"
#: ../src/ui/theme-viewer.c:887
msgid "Button Layouts"
msgstr "Układy przycisków"
#: ../src/ui/theme-viewer.c:892
msgid "Benchmark"
msgstr "Test wydajności"
#: ../src/ui/theme-viewer.c:949
msgid "Window Title Goes Here"
msgstr "Tutaj znajduje się tytuł okna"
# FIXME - bełkot
#: ../src/ui/theme-viewer.c:1052
#, c-format
msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
"seconds wall clock time including X server resources (%g milliseconds per "
"frame)\n"
msgstr ""
"Narysowano %d ramek w ciągu %g sekund klienta (%g milisekund na ramkę) oraz "
"%g sekund rzeczywistych, włączając w to zasoby serwera X (%g milisekund na "
"ramkę)\n"
#: ../src/ui/theme-viewer.c:1271
msgid "position expression test returned TRUE but set error"
msgstr "Test wyrażenia pozycji zwrócił wartość PRAWDA, lecz ustawił błąd"
#: ../src/ui/theme-viewer.c:1273
msgid "position expression test returned FALSE but didn't set error"
msgstr "Test wyrażenia pozycji zwrócił wartość FAŁSZ, lecz nie ustawił błędu"
#: ../src/ui/theme-viewer.c:1277
msgid "Error was expected but none given"
msgstr "Oczekiwano błędu, lecz nie otrzymano żadnego"
#: ../src/ui/theme-viewer.c:1279
#, c-format
msgid "Error %d was expected but %d given"
msgstr "Oczekiwano błędu %d, lecz otrzymano %d"
#: ../src/ui/theme-viewer.c:1285
#, c-format
msgid "Error not expected but one was returned: %s"
msgstr "Nie oczekiwano błędu, lecz został on zwrócony: %s"
#: ../src/ui/theme-viewer.c:1289
#, c-format
msgid "x value was %d, %d was expected"
msgstr "Wartością X było %d, oczekiwano wartości %d"
#: ../src/ui/theme-viewer.c:1292
#, c-format
msgid "y value was %d, %d was expected"
msgstr "Wartością Y było %d, oczekiwano wartości %d"
#: ../src/ui/theme-viewer.c:1357
#, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr ""
"Wyrażenia współrzędnych %d zostało przetworzone w %g sekund (średnio %g "
"sekund)\n"

1457
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1445
po/ru.po

File diff suppressed because it is too large Load Diff

4011
po/sk.po

File diff suppressed because it is too large Load Diff

516
po/sl.po

File diff suppressed because it is too large Load Diff

810
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

282
po/ta.po
View File

@@ -7,17 +7,17 @@
# Dinesh Nadarajah <n_dinesh@yahoo.com>, 2003. # Dinesh Nadarajah <n_dinesh@yahoo.com>, 2003.
# Jayaradha N <jaya@pune.redhat.com>, 2004. # Jayaradha N <jaya@pune.redhat.com>, 2004.
# Felix <ifelix@redhat.com>, 2006. # Felix <ifelix@redhat.com>, 2006.
# Dr.T.Vasudevan <agnihot3@gmail.com>, 2007, 2010, 2011, 2012, 2013. # Dr.T.Vasudevan <agnihot3@gmail.com>, 2007, 2010, 2011, 2012.
# Dr.T.vasudevan <agnihot3@gmail.com>, 2009. # Dr.T.vasudevan <agnihot3@gmail.com>, 2009.
# I. Felix <ifelix@redhat.com>, 2009, 2011. # I. Felix <ifelix@redhat.com>, 2009, 2011.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: metacity.gnome-2-26.ta\n" "Project-Id-Version: metacity.gnome-2-26.ta\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-23 14:03+0530\n" "POT-Creation-Date: 2012-12-02 17:25+0530\n"
"PO-Revision-Date: 2013-03-23 14:11+0530\n" "PO-Revision-Date: 2012-12-02 18:58+0530\n"
"Last-Translator: Dr.T.Vasudevan <drtvasudevan@gmail.com>\n" "Last-Translator: Dr.T.Vasudevan <drtvasudevan@gmail.com>\n"
"Language-Team: American English <<gnome-tamil-translation@googlegroups.com>>\n" "Language-Team: American English <gnome-tamil-translation@googlegroups.com>\n"
"Language: en_US\n" "Language: en_US\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -70,62 +70,58 @@ msgid "Switch applications"
msgstr "பயன்பாடுகளுக்கிடையே மாறவும்" msgstr "பயன்பாடுகளுக்கிடையே மாறவும்"
#: ../src/50-mutter-navigation.xml.in.h:11 #: ../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" msgid "Switch windows of an application"
msgstr "ஒரு பயன்பாட்டின் சாளரங்களிடையே மாறவும்" msgstr "ஒரு பயன்பாட்டின் சாளரங்களிடையே மாறவும்"
#: ../src/50-mutter-navigation.xml.in.h:13 #: ../src/50-mutter-navigation.xml.in.h:12
msgid "Switch system controls" msgid "Switch system controls"
msgstr "கணினி கட்டுப்பாடுகளை மாற்றவும்" msgstr "கணினி கட்டுப்பாடுகளை மாற்றவும்"
#: ../src/50-mutter-navigation.xml.in.h:14 #: ../src/50-mutter-navigation.xml.in.h:13
msgid "Switch windows directly" msgid "Switch windows directly"
msgstr "சாளரங்களிடையே உடனடியாக நகரவும்" msgstr "சாளரங்களிடையே உடனடியாக நகரவும்"
#: ../src/50-mutter-navigation.xml.in.h:15 #: ../src/50-mutter-navigation.xml.in.h:14
msgid "Switch windows of an app directly" msgid "Switch windows of an app directly"
msgstr "ஒரு பயன்பாட்டின் சாளரங்களிடையே நேரடியாக நகரவும்" msgstr "ஒரு பயன்பாட்டின் சாளரங்களிடையே நேரடியாக நகரவும்"
#: ../src/50-mutter-navigation.xml.in.h:16 #: ../src/50-mutter-navigation.xml.in.h:15
msgid "Switch system controls directly" msgid "Switch system controls directly"
msgstr "கணினி கட்டுப்பாடுகளை நேரடியாக மாற்றவும்" msgstr "கணினி கட்டுப்பாடுகளை நேரடியாக மாற்றவும்"
#: ../src/50-mutter-navigation.xml.in.h:17 #: ../src/50-mutter-navigation.xml.in.h:16
msgid "Hide all normal windows" msgid "Hide all normal windows"
msgstr "எல்லா வழக்கமான சாளரங்களையும் மறை" msgstr "எல்லா வழக்கமான சாளரங்களையும் மறை"
#: ../src/50-mutter-navigation.xml.in.h:18 #: ../src/50-mutter-navigation.xml.in.h:17
msgid "Switch to workspace 1" msgid "Switch to workspace 1"
msgstr "பணியிடம் 1க்கு மாறு" msgstr "பணியிடம் 1க்கு மாறு"
#: ../src/50-mutter-navigation.xml.in.h:19 #: ../src/50-mutter-navigation.xml.in.h:18
msgid "Switch to workspace 2" msgid "Switch to workspace 2"
msgstr "பணியிடம் 2 க்கு மாறு" msgstr "பணியிடம் 2 க்கு மாறு"
#: ../src/50-mutter-navigation.xml.in.h:20 #: ../src/50-mutter-navigation.xml.in.h:19
msgid "Switch to workspace 3" msgid "Switch to workspace 3"
msgstr "பணியிடம் 3 க்கு மாறு" msgstr "பணியிடம் 3 க்கு மாறு"
#: ../src/50-mutter-navigation.xml.in.h:21 #: ../src/50-mutter-navigation.xml.in.h:20
msgid "Switch to workspace 4" msgid "Switch to workspace 4"
msgstr "பணியிடம் 4 க்கு மாறு" msgstr "பணியிடம் 4 க்கு மாறு"
#: ../src/50-mutter-navigation.xml.in.h:22 #: ../src/50-mutter-navigation.xml.in.h:21
msgid "Move to workspace left" msgid "Move to workspace left"
msgstr "வேலையிடத்தை இடப்பக்கத்திற்கு நகர்த்தவும்" msgstr "வேலையிடத்தை இடப்பக்கத்திற்கு நகர்த்தவும்"
#: ../src/50-mutter-navigation.xml.in.h:23 #: ../src/50-mutter-navigation.xml.in.h:22
msgid "Move to workspace right" msgid "Move to workspace right"
msgstr "வேலையிடத்தை வலப்பக்கத்திற்கு நகர்த்தவும்" msgstr "வேலையிடத்தை வலப்பக்கத்திற்கு நகர்த்தவும்"
#: ../src/50-mutter-navigation.xml.in.h:24 #: ../src/50-mutter-navigation.xml.in.h:23
msgid "Move to workspace above" msgid "Move to workspace above"
msgstr "வேலையிடத்தை மேல்பக்கத்திற்கு நகர்த்தவும்" msgstr "வேலையிடத்தை மேல்பக்கத்திற்கு நகர்த்தவும்"
#: ../src/50-mutter-navigation.xml.in.h:25 #: ../src/50-mutter-navigation.xml.in.h:24
msgid "Move to workspace below" msgid "Move to workspace below"
msgstr "வேலையிடத்தை கீழே நகர்த்தவும் " msgstr "வேலையிடத்தை கீழே நகர்த்தவும் "
@@ -174,8 +170,8 @@ msgid "Close window"
msgstr "சாளரம் மூடவும்" msgstr "சாளரம் மூடவும்"
#: ../src/50-mutter-windows.xml.in.h:9 #: ../src/50-mutter-windows.xml.in.h:9
msgid "Hide window" msgid "Minimize window"
msgstr "சாளரத்தை மறை " msgstr "சாளரத்தை சிறிதாக்கு"
#: ../src/50-mutter-windows.xml.in.h:10 #: ../src/50-mutter-windows.xml.in.h:10
msgid "Move window" msgid "Move window"
@@ -221,7 +217,7 @@ msgstr "வலது பக்கத்தில் பிளந்து பா
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:568 #: ../src/compositor/compositor.c:492
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display \"%s" "Another compositing manager is already running on screen %i on display \"%s"
@@ -229,11 +225,7 @@ msgid ""
msgstr "" msgstr ""
" %i திரையில் காட்சி \"%s\" இல் இன்னொரு சாளர மேலாளர் இயங்கிக்கொண்டு இருக்கிறது." " %i திரையில் காட்சி \"%s\" இல் இன்னொரு சாளர மேலாளர் இயங்கிக்கொண்டு இருக்கிறது."
#: ../src/compositor/meta-background.c:1191 #: ../src/core/bell.c:320
msgid "background texture could not be created from file"
msgstr "கோப்பிலிருந்து பின் புல இழை நய அமைப்பை உருவாக்க முடியவில்லை."
#: ../src/core/bell.c:322
msgid "Bell event" msgid "Bell event"
msgstr "மணி நிகழ்ச்சி" msgstr "மணி நிகழ்ச்சி"
@@ -268,17 +260,17 @@ msgstr "_காத்திரு"
msgid "_Force Quit" msgid "_Force Quit"
msgstr "கட்டாய வெளியேற்றம் (_F)" msgstr "கட்டாய வெளியேற்றம் (_F)"
#: ../src/core/display.c:401 #: ../src/core/display.c:397
#, c-format #, c-format
msgid "Missing %s extension required for compositing" msgid "Missing %s extension required for compositing"
msgstr "நீட்சி %s காணப்படவில்லை பவின் ஆக்கத்துக்கு அது அவசியம்" msgstr "நீட்சி %s காணப்படவில்லை பவின் ஆக்கத்துக்கு அது அவசியம்"
#: ../src/core/display.c:493 #: ../src/core/display.c:494
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" msgid "Failed to open X Window System display '%s'\n"
msgstr "X சாளர காட்சியை திறப்பதில் தோல்வி '%s'\n" msgstr "X சாளர காட்சியை திறப்பதில் தோல்வி '%s'\n"
#: ../src/core/keybindings.c:935 #: ../src/core/keybindings.c:860
#, c-format #, c-format
msgid "" msgid ""
"Some other program is already using the key %s with modifiers %x as a " "Some other program is already using the key %s with modifiers %x as a "
@@ -286,41 +278,36 @@ msgid ""
msgstr "" msgstr ""
"விசை %s ஐ மாற்றி %x ஓடு இணைத்து வேறு நிரல் பயன்படுத்திக்கொண்டிருக்கிறது\n" "விசை %s ஐ மாற்றி %x ஓடு இணைத்து வேறு நிரல் பயன்படுத்திக்கொண்டிருக்கிறது\n"
#: ../src/core/keybindings.c:1135 #: ../src/core/main.c:196
#, c-format
msgid "\"%s\" is not a valid accelerator\n"
msgstr "\"%s\" செல்லாத முடுக்கி\n"
#: ../src/core/main.c:197
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
msgstr "அமர்வு மேலாளருடன் இருக்கும் இணைப்பை முடக்கு" msgstr "அமர்வு மேலாளருடன் இருக்கும் இணைப்பை முடக்கு"
#: ../src/core/main.c:203 #: ../src/core/main.c:202
msgid "Replace the running window manager" msgid "Replace the running window manager"
msgstr "இயங்கும் சாளர மேலாளரை மாற்றுக" msgstr "இயங்கும் சாளர மேலாளரை மாற்றுக"
#: ../src/core/main.c:209 #: ../src/core/main.c:208
msgid "Specify session management ID" msgid "Specify session management ID"
msgstr "அமர்வு மேலாண் எண்ணை குறிப்பிடு" msgstr "அமர்வு மேலாண் எண்ணை குறிப்பிடு"
#: ../src/core/main.c:214 #: ../src/core/main.c:213
msgid "X Display to use" msgid "X Display to use"
msgstr "பயன்படுத்த வேண்டிய X காட்சி" msgstr "பயன்படுத்த வேண்டிய X காட்சி"
#: ../src/core/main.c:220 #: ../src/core/main.c:219
msgid "Initialize session from savefile" msgid "Initialize session from savefile"
msgstr "அமர்வை சேவ்பைல் இலிருந்து துவக்கு " msgstr "அமர்வை சேவ்பைல் இலிருந்து துவக்கு "
#: ../src/core/main.c:226 #: ../src/core/main.c:225
msgid "Make X calls synchronous" msgid "Make X calls synchronous"
msgstr "எக்ஸ் அழைப்புகளை ஒத்திசை." msgstr "எக்ஸ் அழைப்புகளை ஒத்திசை."
#: ../src/core/main.c:534 #: ../src/core/main.c:494
#, c-format #, c-format
msgid "Failed to scan themes directory: %s\n" msgid "Failed to scan themes directory: %s\n"
msgstr "கருப்பொருள் அடைவை வருடுவதில் தோல்வி: %s\n" msgstr "கருப்பொருள் அடைவை வருடுவதில் தோல்வி: %s\n"
#: ../src/core/main.c:550 #: ../src/core/main.c:510
#, c-format #, c-format
msgid "" msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n" "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -354,7 +341,7 @@ msgstr "அச்சு பதிப்பு"
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "பயன்படுத்த க்ளட்டர் செருகிகள்" msgstr "பயன்படுத்த க்ளட்டர் செருகிகள்"
#: ../src/core/prefs.c:1095 #: ../src/core/prefs.c:1079
msgid "" msgid ""
"Workarounds for broken applications disabled. Some applications may not " "Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n" "behave properly.\n"
@@ -362,14 +349,14 @@ msgstr ""
"உடைந்த பயன்பாடுகளின் செயல்பாடு தடைசெய்யப்பட்டது, சில பயன்பாடுகள் சரியாக வேலை " "உடைந்த பயன்பாடுகளின் செயல்பாடு தடைசெய்யப்பட்டது, சில பயன்பாடுகள் சரியாக வேலை "
"செய்யாது.\n" "செய்யாது.\n"
#: ../src/core/prefs.c:1170 #: ../src/core/prefs.c:1154
#, c-format #, c-format
msgid "Could not parse font description \"%s\" from GSettings key %s\n" msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "" msgstr ""
"எழுத்துரு விளக்கம் \"%s\" ஐ ஜிசெட்டிங்க்ஸ் விசையிலிருந்து பகுக்க முடியவில்லை %" "எழுத்துரு விளக்கம் \"%s\" ஐ ஜிசெட்டிங்க்ஸ் விசையிலிருந்து பகுக்க முடியவில்லை %"
"s\n" "s\n"
#: ../src/core/prefs.c:1236 #: ../src/core/prefs.c:1220
#, c-format #, c-format
msgid "" msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button " "\"%s\" found in configuration database is not a valid value for mouse button "
@@ -377,24 +364,24 @@ msgid ""
msgstr "" msgstr ""
"அமைப்பு பாங்கில் உள்ள \"%s\" சுட்டி பட்டன் மாற்றியில் செல்லாத மதிப்பு\n" "அமைப்பு பாங்கில் உள்ள \"%s\" சுட்டி பட்டன் மாற்றியில் செல்லாத மதிப்பு\n"
#: ../src/core/prefs.c:1788 #: ../src/core/prefs.c:1757
#, c-format #, c-format
msgid "" msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding " "\"%s\" found in configuration database is not a valid value for keybinding "
"\"%s\"\n" "\"%s\"\n"
msgstr "\"%s\" அமைப்பு தரவுத்தளத்தில் உள்ள மதிப்பு செல்லாத கீபைன்டிங்\"%s\"\n" msgstr "\"%s\" அமைப்பு தரவுத்தளத்தில் உள்ள மதிப்பு செல்லாத கீபைன்டிங்\"%s\"\n"
#: ../src/core/prefs.c:1887 #: ../src/core/prefs.c:1854
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "வேலையிடம் %d" msgstr "வேலையிடம் %d"
#: ../src/core/screen.c:691 #: ../src/core/screen.c:652
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "திரை %d காட்சி '%s' இல் செல்லாது\n" msgstr "திரை %d காட்சி '%s' இல் செல்லாது\n"
#: ../src/core/screen.c:707 #: ../src/core/screen.c:668
#, c-format #, c-format
msgid "" msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --" "Screen %d on display \"%s\" already has a window manager; try using the --"
@@ -403,18 +390,18 @@ msgstr ""
"திரை %d காட்சி \"%s\" க்கு சாளர மேலாளர் உள்ளது; --replace தேர்வை பயன்படுத்தி " "திரை %d காட்சி \"%s\" க்கு சாளர மேலாளர் உள்ளது; --replace தேர்வை பயன்படுத்தி "
"தற்போதைய சாளரத்தை மாற்றவும்.\n" "தற்போதைய சாளரத்தை மாற்றவும்.\n"
#: ../src/core/screen.c:734 #: ../src/core/screen.c:695
#, c-format #, c-format
msgid "" msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n" "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "திரையில் சாளர மேலாளர் தேர்வை பெறமுடியவில்லை %d காட்சி \"%s\"\n" msgstr "திரையில் சாளர மேலாளர் தேர்வை பெறமுடியவில்லை %d காட்சி \"%s\"\n"
#: ../src/core/screen.c:812 #: ../src/core/screen.c:750
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "திரை %d யின் காட்சி \"%s\" க்கு சாளர மேலாளர் ஏற்கெனவே உள்ளது\n" msgstr "திரை %d யின் காட்சி \"%s\" க்கு சாளர மேலாளர் ஏற்கெனவே உள்ளது\n"
#: ../src/core/screen.c:998 #: ../src/core/screen.c:935
#, c-format #, c-format
msgid "Could not release screen %d on display \"%s\"\n" msgid "Could not release screen %d on display \"%s\"\n"
msgstr "திரை %d ஐ விடுவிக்க முடியவில்லை \"%s\"\n" msgstr "திரை %d ஐ விடுவிக்க முடியவில்லை \"%s\"\n"
@@ -475,44 +462,44 @@ msgstr ""
" &quot;தற்போதைய அமைப்பை சேமி&quot; செயலுக்கு ஆதரவு இல்லை மேலும் அடுத்த முறை " " &quot;தற்போதைய அமைப்பை சேமி&quot; செயலுக்கு ஆதரவு இல்லை மேலும் அடுத்த முறை "
"உள்நுழையும் போது நீங்களாக துவக்க வேண்டும்" "உள்நுழையும் போது நீங்களாக துவக்க வேண்டும்"
#: ../src/core/util.c:84 #: ../src/core/util.c:80
#, c-format #, c-format
msgid "Failed to open debug log: %s\n" msgid "Failed to open debug log: %s\n"
msgstr "பிழைதிருத்த பட்டியலை திறப்பதில் தோல்வி: %s\n" msgstr "பிழைதிருத்த பட்டியலை திறப்பதில் தோல்வி: %s\n"
#: ../src/core/util.c:94 #: ../src/core/util.c:90
#, c-format #, c-format
msgid "Failed to fdopen() log file %s: %s\n" msgid "Failed to fdopen() log file %s: %s\n"
msgstr "fdopen() பதிவுக்கோப்பு தோல்வி %s: %s\n" msgstr "fdopen() பதிவுக்கோப்பு தோல்வி %s: %s\n"
#: ../src/core/util.c:100 #: ../src/core/util.c:96
#, c-format #, c-format
msgid "Opened log file %s\n" msgid "Opened log file %s\n"
msgstr "பதிவுக்கோப்பு திறக்கப்பட்டது %s\n" msgstr "பதிவுக்கோப்பு திறக்கப்பட்டது %s\n"
#: ../src/core/util.c:119 ../src/tools/mutter-message.c:149 #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
#, c-format #, c-format
msgid "Mutter was compiled without support for verbose mode\n" msgid "Mutter was compiled without support for verbose mode\n"
msgstr "வெர்போஸ் ஆதரவு இல்லாமல் மட்டர் அமைக்கப்பட்டது\n" msgstr "வெர்போஸ் ஆதரவு இல்லாமல் மட்டர் அமைக்கப்பட்டது\n"
#: ../src/core/util.c:264 #: ../src/core/util.c:259
msgid "Window manager: " msgid "Window manager: "
msgstr "சாளர மேலாளர்:" msgstr "சாளர மேலாளர்:"
#: ../src/core/util.c:412 #: ../src/core/util.c:407
msgid "Bug in window manager: " msgid "Bug in window manager: "
msgstr "சாளர மேலாளரில் பிழை" msgstr "சாளர மேலாளரில் பிழை"
#: ../src/core/util.c:443 #: ../src/core/util.c:438
msgid "Window manager warning: " msgid "Window manager warning: "
msgstr "சாளர மேலாளர் எச்சரிக்கை:" msgstr "சாளர மேலாளர் எச்சரிக்கை:"
#: ../src/core/util.c:471 #: ../src/core/util.c:466
msgid "Window manager error: " msgid "Window manager error: "
msgstr "சாளர மேலாளர் பிழை" msgstr "சாளர மேலாளர் பிழை"
#. first time through #. first time through
#: ../src/core/window.c:7596 #: ../src/core/window.c:7240
#, c-format #, c-format
msgid "" msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
@@ -529,7 +516,7 @@ msgstr ""
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work. #. * about these apps but make them work.
#. #.
#: ../src/core/window.c:8320 #: ../src/core/window.c:7905
#, c-format #, c-format
msgid "" msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size " "Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
@@ -539,22 +526,22 @@ msgstr ""
"அதிக " "அதிக "
"பட்ச அளவு %d x %d; பொருள் தரும்படி இல்லை.\n" "பட்ச அளவு %d x %d; பொருள் தரும்படி இல்லை.\n"
#: ../src/core/window-props.c:318 #: ../src/core/window-props.c:274
#, c-format #, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n" msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "பயன்பாடு பொய்யான ஒரு _NET_WM_PID %lu ஐ அமைத்தது\n" msgstr "பயன்பாடு பொய்யான ஒரு _NET_WM_PID %lu ஐ அமைத்தது\n"
#: ../src/core/window-props.c:434 #: ../src/core/window-props.c:393
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (%s மீது)" msgstr "%s (%s மீது)"
#: ../src/core/window-props.c:1517 #: ../src/core/window-props.c:1448
#, c-format #, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "செல்லாத WM_TRANSIENT_FOR சாளரம் 0x%lx இதற்கு குறிக்கப்பட்டது: %s.\n" msgstr "செல்லாத WM_TRANSIENT_FOR சாளரம் 0x%lx இதற்கு குறிக்கப்பட்டது: %s.\n"
#: ../src/core/window-props.c:1528 #: ../src/core/window-props.c:1459
#, c-format #, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "WM_TRANSIENT_FOR சாளரம் 0x%lx %s க்கு சுழல் நிகழ்வை உருவாக்கும்.\n" msgstr "WM_TRANSIENT_FOR சாளரம் 0x%lx %s க்கு சுழல் நிகழ்வை உருவாக்கும்.\n"
@@ -706,22 +693,10 @@ msgstr ""
"இந்த மதிப்பை அடைய மறை விளிம்பு சேர்க்கப்படும்." "இந்த மதிப்பை அடைய மறை விளிம்பு சேர்க்கப்படும்."
#: ../src/org.gnome.mutter.gschema.xml.in.h:17 #: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Auto maximize nearly monitor sized windows"
msgstr "ஏறத்தாழ திரை அளவுள்ள சாளரங்களை தானியங்கியாக அதிக பட்ச அளவாக்கு"
#: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid ""
"If enabled, new windows that are initially the size of the monitor "
"automatically get maximized."
msgstr ""
"செயலாக்கினால், துவக்கத்தில் ஏறத்தாழ திரை அளவுள்ள புதிய சாளரங்கள் தானியங்கியாக "
"அதிக பட்ச அளவாக்கப்படும்"
#: ../src/org.gnome.mutter.gschema.xml.in.h:19
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "கீற்றுத்துள்ளலிருந்து சாளரத்தை தேர்ந்தெடுக்கவும்." msgstr "கீற்றுத்துள்ளலிருந்து சாளரத்தை தேர்ந்தெடுக்கவும்."
#: ../src/org.gnome.mutter.gschema.xml.in.h:20 #: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "கீற்று துள்ளுவதை இரத்து செய்" msgstr "கீற்று துள்ளுவதை இரத்து செய்"
@@ -924,53 +899,53 @@ msgstr "Mod5"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#. #.
#: ../src/ui/resizepopup.c:136 #: ../src/ui/resizepopup.c:113
#, c-format #, c-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
#: ../src/ui/theme.c:236 #: ../src/ui/theme.c:234
msgid "top" msgid "top"
msgstr "மேல்" msgstr "மேல்"
#: ../src/ui/theme.c:238 #: ../src/ui/theme.c:236
msgid "bottom" msgid "bottom"
msgstr "கீழ்" msgstr "கீழ்"
#: ../src/ui/theme.c:240 #: ../src/ui/theme.c:238
msgid "left" msgid "left"
msgstr "இடது" msgstr "இடது"
#: ../src/ui/theme.c:242 #: ../src/ui/theme.c:240
msgid "right" msgid "right"
msgstr "வலது" msgstr "வலது"
#: ../src/ui/theme.c:270 #: ../src/ui/theme.c:268
#, c-format #, c-format
msgid "frame geometry does not specify \"%s\" dimension" msgid "frame geometry does not specify \"%s\" dimension"
msgstr "சட்ட வடிவியல் \"%s\" அளவை குறிப்பிடவில்லை" msgstr "சட்ட வடிவியல் \"%s\" அளவை குறிப்பிடவில்லை"
#: ../src/ui/theme.c:289 #: ../src/ui/theme.c:287
#, c-format #, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "\"%s\" ஓரத்திற்கு வடிவியல் \"%s\" அளவை குறிப்பிடவில்லை" msgstr "\"%s\" ஓரத்திற்கு வடிவியல் \"%s\" அளவை குறிப்பிடவில்லை"
#: ../src/ui/theme.c:326 #: ../src/ui/theme.c:324
#, c-format #, c-format
msgid "Button aspect ratio %g is not reasonable" msgid "Button aspect ratio %g is not reasonable"
msgstr "பட்டன் அளவு விகிதம் %g சரியில்ல" msgstr "பட்டன் அளவு விகிதம் %g சரியில்ல"
#: ../src/ui/theme.c:338 #: ../src/ui/theme.c:336
#, c-format #, c-format
msgid "Frame geometry does not specify size of buttons" msgid "Frame geometry does not specify size of buttons"
msgstr "சட்ட அளவு பட்டன் அளவை குறிப்பிடவில்லை" msgstr "சட்ட அளவு பட்டன் அளவை குறிப்பிடவில்லை"
#: ../src/ui/theme.c:1051 #: ../src/ui/theme.c:1049
#, c-format #, c-format
msgid "Gradients should have at least two colors" msgid "Gradients should have at least two colors"
msgstr "க்ரேடியன்டில் இரண்டு நிறங்களாவது இருக்க வேண்டும்" msgstr "க்ரேடியன்டில் இரண்டு நிறங்களாவது இருக்க வேண்டும்"
#: ../src/ui/theme.c:1203 #: ../src/ui/theme.c:1201
#, c-format #, c-format
msgid "" msgid ""
"GTK custom color specification must have color name and fallback in " "GTK custom color specification must have color name and fallback in "
@@ -980,7 +955,7 @@ msgstr ""
"அடைப்புக்குறிகளுக்குள்ளும் " "அடைப்புக்குறிகளுக்குள்ளும் "
"கொண்டிருக்க வேண்டும் உம் gtk:custom(foo,bar); \"%s\" ஐ பகுக்க முடியவில்லை" "கொண்டிருக்க வேண்டும் உம் gtk:custom(foo,bar); \"%s\" ஐ பகுக்க முடியவில்லை"
#: ../src/ui/theme.c:1219 #: ../src/ui/theme.c:1217
#, c-format #, c-format
msgid "" msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
@@ -990,7 +965,7 @@ msgstr ""
"A-Za-z0-9-" "A-Za-z0-9-"
"_ ஆகியன மட்டுமே செல்லுபடியாகும்." "_ ஆகியன மட்டுமே செல்லுபடியாகும்."
#: ../src/ui/theme.c:1233 #: ../src/ui/theme.c:1231
#, c-format #, c-format
msgid "" msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
@@ -999,7 +974,7 @@ msgstr ""
"ஜிடிகே:தனிப்பயன் ஒழுங்கு \"gtk:custom(color_name,fallback)\", \"%s\" இந்த " "ஜிடிகே:தனிப்பயன் ஒழுங்கு \"gtk:custom(color_name,fallback)\", \"%s\" இந்த "
"ஒழுங்குக்கு பொருந்தாது" "ஒழுங்குக்கு பொருந்தாது"
#: ../src/ui/theme.c:1278 #: ../src/ui/theme.c:1276
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
@@ -1009,7 +984,7 @@ msgstr ""
"நிலையை " "நிலையை "
"குறிக்கும் பகுக்க முடியாது \"%s\"" "குறிக்கும் பகுக்க முடியாது \"%s\""
#: ../src/ui/theme.c:1292 #: ../src/ui/theme.c:1290
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:" "GTK color specification must have a close bracket after the state, e.g. gtk:"
@@ -1019,17 +994,17 @@ msgstr ""
"NORMAL " "NORMAL "
"நிலையை குறிக்கும் பகுக்க முடியாது \"%s\"" "நிலையை குறிக்கும் பகுக்க முடியாது \"%s\""
#: ../src/ui/theme.c:1303 #: ../src/ui/theme.c:1301
#, c-format #, c-format
msgid "Did not understand state \"%s\" in color specification" msgid "Did not understand state \"%s\" in color specification"
msgstr "நிலை \"%s\" வண்ண குறிப்பில் புரிந்துகொள்ள முடியவில்லை" msgstr "நிலை \"%s\" வண்ண குறிப்பில் புரிந்துகொள்ள முடியவில்லை"
#: ../src/ui/theme.c:1316 #: ../src/ui/theme.c:1314
#, c-format #, c-format
msgid "Did not understand color component \"%s\" in color specification" msgid "Did not understand color component \"%s\" in color specification"
msgstr "நிலை \"%s\" வண்ண குறிப்பு பொருளில் புரிந்துகொள்ள முடியவில்லை" msgstr "நிலை \"%s\" வண்ண குறிப்பு பொருளில் புரிந்துகொள்ள முடியவில்லை"
#: ../src/ui/theme.c:1345 #: ../src/ui/theme.c:1343
#, c-format #, c-format
msgid "" msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
@@ -1038,18 +1013,18 @@ msgstr ""
"வளைந்த அமைப்பு \"blend/bg_color/fg_color/alpha\", \"%s\" இந்த வடிவமைப்பிற்கு " "வளைந்த அமைப்பு \"blend/bg_color/fg_color/alpha\", \"%s\" இந்த வடிவமைப்பிற்கு "
"பொருந்தாது" "பொருந்தாது"
#: ../src/ui/theme.c:1356 #: ../src/ui/theme.c:1354
#, c-format #, c-format
msgid "Could not parse alpha value \"%s\" in blended color" msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "ஆம்ஃபா மதிப்பை \"%s\" வளைந்த நிறத்தில் பகுக்க முடியவில்லை" msgstr "ஆம்ஃபா மதிப்பை \"%s\" வளைந்த நிறத்தில் பகுக்க முடியவில்லை"
#: ../src/ui/theme.c:1366 #: ../src/ui/theme.c:1364
#, c-format #, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "" msgstr ""
"ஆல்ஃபா மதுப்பு \"%s\"வளைவு நிறத்தில் 0.0 க்கும் 1.0 க்கும் இடையில் இல்லை" "ஆல்ஃபா மதுப்பு \"%s\"வளைவு நிறத்தில் 0.0 க்கும் 1.0 க்கும் இடையில் இல்லை"
#: ../src/ui/theme.c:1413 #: ../src/ui/theme.c:1411
#, c-format #, c-format
msgid "" msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
@@ -1057,39 +1032,39 @@ msgstr ""
"நிழல் வடிவமைப்பு \"shade/base_color/factor\", \"%s\" இந்த அமைப்பிற்கு " "நிழல் வடிவமைப்பு \"shade/base_color/factor\", \"%s\" இந்த அமைப்பிற்கு "
"பொருந்தாது" "பொருந்தாது"
#: ../src/ui/theme.c:1424 #: ../src/ui/theme.c:1422
#, c-format #, c-format
msgid "Could not parse shade factor \"%s\" in shaded color" msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "நிழல்விகிதத்தை \"%s\" நிறத்தோடு பகுக்க முடியாது" msgstr "நிழல்விகிதத்தை \"%s\" நிறத்தோடு பகுக்க முடியாது"
#: ../src/ui/theme.c:1434 #: ../src/ui/theme.c:1432
#, c-format #, c-format
msgid "Shade factor \"%s\" in shaded color is negative" msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "நிழல் விகிதம் \"%s\" முழுக்களாக உள்ளது " msgstr "நிழல் விகிதம் \"%s\" முழுக்களாக உள்ளது "
#: ../src/ui/theme.c:1463 #: ../src/ui/theme.c:1461
#, c-format #, c-format
msgid "Could not parse color \"%s\"" msgid "Could not parse color \"%s\""
msgstr "\"%s\" நிறத்தை பகுக்க முடியவில்லை" msgstr "\"%s\" நிறத்தை பகுக்க முடியவில்லை"
#: ../src/ui/theme.c:1780 #: ../src/ui/theme.c:1778
#, c-format #, c-format
msgid "Coordinate expression contains character '%s' which is not allowed" msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "அச்சுக்கள் எழுத்தால் குறிக்கப்பட்டுள்ளது '%s' க்கு அனுமதி இல்லை" msgstr "அச்சுக்கள் எழுத்தால் குறிக்கப்பட்டுள்ளது '%s' க்கு அனுமதி இல்லை"
#: ../src/ui/theme.c:1807 #: ../src/ui/theme.c:1805
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contains floating point number '%s' which could not be " "Coordinate expression contains floating point number '%s' which could not be "
"parsed" "parsed"
msgstr "அச்சுக்கள் பின்ன எண்ணால் குறிக்கப்பட்டுள்ளது '%s' ஐ பகுக்க முடியாது" msgstr "அச்சுக்கள் பின்ன எண்ணால் குறிக்கப்பட்டுள்ளது '%s' ஐ பகுக்க முடியாது"
#: ../src/ui/theme.c:1821 #: ../src/ui/theme.c:1819
#, c-format #, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed" msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "அச்சுக்கள் இயல் எண்ணால் குறிக்கப்பட்டுள்ளது '%s' ஐ பகுக்க முடியாது" msgstr "அச்சுக்கள் இயல் எண்ணால் குறிக்கப்பட்டுள்ளது '%s' ஐ பகுக்க முடியாது"
#: ../src/ui/theme.c:1942 #: ../src/ui/theme.c:1940
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contained unknown operator at the start of this text: " "Coordinate expression contained unknown operator at the start of this text: "
@@ -1097,41 +1072,41 @@ msgid ""
msgstr "" msgstr ""
"உரையின் துவக்கத்தில் அச்சின் கூற்றில் தெரியாத செயல் இடம்பெற்றுள்ளது \"%s\"" "உரையின் துவக்கத்தில் அச்சின் கூற்றில் தெரியாத செயல் இடம்பெற்றுள்ளது \"%s\""
#: ../src/ui/theme.c:1999 #: ../src/ui/theme.c:1997
#, c-format #, c-format
msgid "Coordinate expression was empty or not understood" msgid "Coordinate expression was empty or not understood"
msgstr "அச்சு கூற்று காலியாக உள்ளது அல்லது புரியவில்லை" msgstr "அச்சு கூற்று காலியாக உள்ளது அல்லது புரியவில்லை"
#: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 #: ../src/ui/theme.c:2110 ../src/ui/theme.c:2120 ../src/ui/theme.c:2154
#, c-format #, c-format
msgid "Coordinate expression results in division by zero" msgid "Coordinate expression results in division by zero"
msgstr "அச்சு கூற்று பூஜ்ஜியத்தால் வகுத்தல் பிழையை தந்தது" msgstr "அச்சு கூற்று பூஜ்ஜியத்தால் வகுத்தல் பிழையை தந்தது"
#: ../src/ui/theme.c:2164 #: ../src/ui/theme.c:2162
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression tries to use mod operator on a floating-point number" "Coordinate expression tries to use mod operator on a floating-point number"
msgstr "அச்சு கூற்று mod ஆப்பரேட்டரை பின்ன எண்ணில் பயன்படுத்த முயல்கிறது" msgstr "அச்சு கூற்று mod ஆப்பரேட்டரை பின்ன எண்ணில் பயன்படுத்த முயல்கிறது"
#: ../src/ui/theme.c:2220 #: ../src/ui/theme.c:2218
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected" "Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "" msgstr ""
"அச்சு கூற்றில் ஆப்பரேட்டர் உள்ளது \"%s\" ஆப்பரன் எதிர்பார்க்கப்படுகிறது" "அச்சு கூற்றில் ஆப்பரேட்டர் உள்ளது \"%s\" ஆப்பரன் எதிர்பார்க்கப்படுகிறது"
#: ../src/ui/theme.c:2229 #: ../src/ui/theme.c:2227
#, c-format #, c-format
msgid "Coordinate expression had an operand where an operator was expected" msgid "Coordinate expression had an operand where an operator was expected"
msgstr "" msgstr ""
"அச்சு கூற்றில் ஆப்பரன்ட் உள்ளது ஆனால் ஆப்பரேட்டர் எதிர்பார்க்கப்படுகிறது" "அச்சு கூற்றில் ஆப்பரன்ட் உள்ளது ஆனால் ஆப்பரேட்டர் எதிர்பார்க்கப்படுகிறது"
#: ../src/ui/theme.c:2237 #: ../src/ui/theme.c:2235
#, c-format #, c-format
msgid "Coordinate expression ended with an operator instead of an operand" msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "அச்சு கூற்றில் ஆப்பரன்ட்டுக்கு பதில் ஆப்பரேட்டரால் முடிந்தது" msgstr "அச்சு கூற்றில் ஆப்பரன்ட்டுக்கு பதில் ஆப்பரேட்டரால் முடிந்தது"
#: ../src/ui/theme.c:2247 #: ../src/ui/theme.c:2245
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no " "Coordinate expression has operator \"%c\" following operator \"%c\" with no "
@@ -1140,39 +1115,39 @@ msgstr ""
"அச்சு கூற்றில் \"%c\" ஆப்பரேட்டர் உள்ளது \"%c\" ஆப்பரேட்டருக்கு ஆப்பரன்ட் " "அச்சு கூற்றில் \"%c\" ஆப்பரேட்டர் உள்ளது \"%c\" ஆப்பரேட்டருக்கு ஆப்பரன்ட் "
"இல்லை" "இல்லை"
#: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 #: ../src/ui/theme.c:2396 ../src/ui/theme.c:2441
#, c-format #, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\"" msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "அச்சு கூற்றில் செல்லாத மாற்றி மற்றும் கான்ஸ்ட்டன் உள்ளது \"%s\"" msgstr "அச்சு கூற்றில் செல்லாத மாற்றி மற்றும் கான்ஸ்ட்டன் உள்ளது \"%s\""
#: ../src/ui/theme.c:2497 #: ../src/ui/theme.c:2495
#, c-format #, c-format
msgid "Coordinate expression parser overflowed its buffer." msgid "Coordinate expression parser overflowed its buffer."
msgstr "ஆயத்தொலைவு தெரிவிப்பு பகுப்பி அதன் இடையகத்தை நிரப்பியது" msgstr "ஆயத்தொலைவு தெரிவிப்பு பகுப்பி அதன் இடையகத்தை நிரப்பியது"
#: ../src/ui/theme.c:2526 #: ../src/ui/theme.c:2524
#, c-format #, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis" msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "" msgstr ""
"அச்சு கூற்றில் மூடிய அடைப்புக்குறி உள்ளது ஆனால் திறந்த அடைப்புகுறி இல்லை" "அச்சு கூற்றில் மூடிய அடைப்புக்குறி உள்ளது ஆனால் திறந்த அடைப்புகுறி இல்லை"
#: ../src/ui/theme.c:2590 #: ../src/ui/theme.c:2588
#, c-format #, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis" msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "" msgstr ""
"அச்சு கூற்றில் திறந்த அடைப்புக்குறி உள்ளது ஆனால் மூடிய அடைப்புகுறி இல்லை" "அச்சு கூற்றில் திறந்த அடைப்புக்குறி உள்ளது ஆனால் மூடிய அடைப்புகுறி இல்லை"
#: ../src/ui/theme.c:2601 #: ../src/ui/theme.c:2599
#, c-format #, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands" msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "அச்சுக்கூற்றில் ஆப்பரன்ட் மற்றும் ஆப்பரேட்டர் காணப்படவில்லை" msgstr "அச்சுக்கூற்றில் ஆப்பரன்ட் மற்றும் ஆப்பரேட்டர் காணப்படவில்லை"
#: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 #: ../src/ui/theme.c:2812 ../src/ui/theme.c:2832 ../src/ui/theme.c:2852
#, c-format #, c-format
msgid "Theme contained an expression that resulted in an error: %s\n" msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "கருப்பொருளில் ஒரு கூற்று இருந்தது. அது பிழையை ஏற்படுத்தியது : %s\n" msgstr "கருப்பொருளில் ஒரு கூற்று இருந்தது. அது பிழையை ஏற்படுத்தியது : %s\n"
#: ../src/ui/theme.c:4500 #: ../src/ui/theme.c:4498
#, c-format #, c-format
msgid "" msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
@@ -1182,25 +1157,25 @@ msgstr ""
"பாணிக்கு " "பாணிக்கு "
"குறிப்பிடப்பட வேண்டும்" "குறிப்பிடப்பட வேண்டும்"
#: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 #: ../src/ui/theme.c:5009 ../src/ui/theme.c:5034
#, c-format #, c-format
msgid "" msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr "" msgstr ""
"காணவில்லை <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" "காணவில்லை <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
#: ../src/ui/theme.c:5084 #: ../src/ui/theme.c:5082
#, c-format #, c-format
msgid "Failed to load theme \"%s\": %s\n" msgid "Failed to load theme \"%s\": %s\n"
msgstr "கருப்பொருளை ஏற்றுவதில் தோல்வி \"%s\": %s\n" msgstr "கருப்பொருளை ஏற்றுவதில் தோல்வி \"%s\": %s\n"
#: ../src/ui/theme.c:5220 ../src/ui/theme.c:5227 ../src/ui/theme.c:5234 #: ../src/ui/theme.c:5218 ../src/ui/theme.c:5225 ../src/ui/theme.c:5232
#: ../src/ui/theme.c:5241 ../src/ui/theme.c:5248 #: ../src/ui/theme.c:5239 ../src/ui/theme.c:5246
#, c-format #, c-format
msgid "No <%s> set for theme \"%s\"" msgid "No <%s> set for theme \"%s\""
msgstr "இல்லை<%s> கருப்பொருளுக்காக அமைக்கப்பட்டது \"%s\"" msgstr "இல்லை<%s> கருப்பொருளுக்காக அமைக்கப்பட்டது \"%s\""
#: ../src/ui/theme.c:5256 #: ../src/ui/theme.c:5254
#, c-format #, c-format
msgid "" msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window " "No frame style set for window type \"%s\" in theme \"%s\", add a <window "
@@ -1209,7 +1184,7 @@ msgstr ""
"சட்ட பாணி சாளர வகை இல்லை\"%s\" கருப்பொருளில் \"%s\", <window type=\"%s\" " "சட்ட பாணி சாளர வகை இல்லை\"%s\" கருப்பொருளில் \"%s\", <window type=\"%s\" "
"style_set=\"whatever\"/> உறுப்பை சேர்க்கவும்" "style_set=\"whatever\"/> உறுப்பை சேர்க்கவும்"
#: ../src/ui/theme.c:5663 ../src/ui/theme.c:5725 ../src/ui/theme.c:5788 #: ../src/ui/theme.c:5650 ../src/ui/theme.c:5712 ../src/ui/theme.c:5775
#, c-format #, c-format
msgid "" msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not" "User-defined constants must begin with a capital letter; \"%s\" does not"
@@ -1217,7 +1192,7 @@ msgstr ""
"பயனீட்டாளர்-குறிப்பிட்ட கான்ஸ்டன் பெரிய எழுத்தில் துவங்க வேண்டும்; \"%s\" " "பயனீட்டாளர்-குறிப்பிட்ட கான்ஸ்டன் பெரிய எழுத்தில் துவங்க வேண்டும்; \"%s\" "
"இல்லை" "இல்லை"
#: ../src/ui/theme.c:5671 ../src/ui/theme.c:5733 ../src/ui/theme.c:5796 #: ../src/ui/theme.c:5658 ../src/ui/theme.c:5720 ../src/ui/theme.c:5783
#, c-format #, c-format
msgid "Constant \"%s\" has already been defined" msgid "Constant \"%s\" has already been defined"
msgstr "கான்ஸ்டன் \"%s\" ஏற்கெனவே குறிப்பிடப்பட்டது" msgstr "கான்ஸ்டன் \"%s\" ஏற்கெனவே குறிப்பிடப்பட்டது"
@@ -1600,7 +1575,7 @@ msgstr "உறுப்பிற்குள் உரை அனுமதி இ
msgid "<%s> specified twice for this theme" msgid "<%s> specified twice for this theme"
msgstr "<%s> இந்த கருப்பொருளுக்கு இரண்டுமுறை குறிப்பிட்டுள்ளது" msgstr "<%s> இந்த கருப்பொருளுக்கு இரண்டுமுறை குறிப்பிட்டுள்ளது"
#: ../src/ui/theme-parser.c:4336 #: ../src/ui/theme-parser.c:4334
#, c-format #, c-format
msgid "Failed to find a valid file for theme %s\n" msgid "Failed to find a valid file for theme %s\n"
msgstr "%s கருத்துக்கு செல்லுபடியாகும் கோப்பு கண்டுபிடித்தல் தோல்வியுற்றது \n" msgstr "%s கருத்துக்கு செல்லுபடியாகும் கோப்பு கண்டுபிடித்தல் தோல்வியுற்றது \n"
@@ -1706,56 +1681,56 @@ msgstr "ஓரம்"
msgid "Attached Modal Dialog" msgid "Attached Modal Dialog"
msgstr "இணைத்த மாதிரி உரையாடல்" msgstr "இணைத்த மாதிரி உரையாடல்"
#: ../src/ui/theme-viewer.c:737 #: ../src/ui/theme-viewer.c:739
#, c-format #, c-format
msgid "Button layout test %d" msgid "Button layout test %d"
msgstr "பட்டன் உருவரை சோதனை %d" msgstr "பட்டன் உருவரை சோதனை %d"
#: ../src/ui/theme-viewer.c:766 #: ../src/ui/theme-viewer.c:768
#, c-format #, c-format
msgid "%g milliseconds to draw one window frame" msgid "%g milliseconds to draw one window frame"
msgstr "%g சாளரத்தை வரைய மில்லிசெக்கண்டு" msgstr "%g சாளரத்தை வரைய மில்லிசெக்கண்டு"
#: ../src/ui/theme-viewer.c:811 #: ../src/ui/theme-viewer.c:813
#, c-format #, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n" msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "பயன்பாடு: metacity-theme-viewer [THEMENAME]\n" msgstr "பயன்பாடு: metacity-theme-viewer [THEMENAME]\n"
#: ../src/ui/theme-viewer.c:818 #: ../src/ui/theme-viewer.c:820
#, c-format #, c-format
msgid "Error loading theme: %s\n" msgid "Error loading theme: %s\n"
msgstr "கருப்பொருளை ஏற்றுவதில் பிழை: %s\n" msgstr "கருப்பொருளை ஏற்றுவதில் பிழை: %s\n"
#: ../src/ui/theme-viewer.c:824 #: ../src/ui/theme-viewer.c:826
#, c-format #, c-format
msgid "Loaded theme \"%s\" in %g seconds\n" msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "கருப்பொருள் \"%s\" %g செகண்டில்\n" msgstr "கருப்பொருள் \"%s\" %g செகண்டில்\n"
#: ../src/ui/theme-viewer.c:869 #: ../src/ui/theme-viewer.c:870
msgid "Normal Title Font" msgid "Normal Title Font"
msgstr "இயல்பான தலைப்பு எழுத்துரு" msgstr "இயல்பான தலைப்பு எழுத்துரு"
#: ../src/ui/theme-viewer.c:875 #: ../src/ui/theme-viewer.c:876
msgid "Small Title Font" msgid "Small Title Font"
msgstr "சிறிய தலைப்பு எழுத்துரு" msgstr "சிறிய தலைப்பு எழுத்துரு"
#: ../src/ui/theme-viewer.c:881 #: ../src/ui/theme-viewer.c:882
msgid "Large Title Font" msgid "Large Title Font"
msgstr "பெரிய தலைப்பு எழுத்துரு" msgstr "பெரிய தலைப்பு எழுத்துரு"
#: ../src/ui/theme-viewer.c:886 #: ../src/ui/theme-viewer.c:887
msgid "Button Layouts" msgid "Button Layouts"
msgstr "பட்டன் உருவரை" msgstr "பட்டன் உருவரை"
#: ../src/ui/theme-viewer.c:891 #: ../src/ui/theme-viewer.c:892
msgid "Benchmark" msgid "Benchmark"
msgstr "நிர்ணயம்" msgstr "நிர்ணயம்"
#: ../src/ui/theme-viewer.c:947 #: ../src/ui/theme-viewer.c:944
msgid "Window Title Goes Here" msgid "Window Title Goes Here"
msgstr "சாளர தலைப்பு இங்கே" msgstr "சாளர தலைப்பு இங்கே"
#: ../src/ui/theme-viewer.c:1053 #: ../src/ui/theme-viewer.c:1047
#, c-format #, c-format
msgid "" msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
@@ -1766,46 +1741,43 @@ msgstr ""
"சேவகனின் " "சேவகனின் "
"மூலத்தில் (%g மில்லி செகண்ட் சட்டத்திற்கு)\n" "மூலத்தில் (%g மில்லி செகண்ட் சட்டத்திற்கு)\n"
#: ../src/ui/theme-viewer.c:1273 #: ../src/ui/theme-viewer.c:1266
msgid "position expression test returned TRUE but set error" msgid "position expression test returned TRUE but set error"
msgstr "நிலை கூற்று சோதனை உண்மையை தந்தது ஆனால் பிழை" msgstr "நிலை கூற்று சோதனை உண்மையை தந்தது ஆனால் பிழை"
#: ../src/ui/theme-viewer.c:1275 #: ../src/ui/theme-viewer.c:1268
msgid "position expression test returned FALSE but didn't set error" msgid "position expression test returned FALSE but didn't set error"
msgstr "நிலை கூற்று சோதனை பொய்யை தந்தது ஆனால் பிழை" msgstr "நிலை கூற்று சோதனை பொய்யை தந்தது ஆனால் பிழை"
#: ../src/ui/theme-viewer.c:1279 #: ../src/ui/theme-viewer.c:1272
msgid "Error was expected but none given" msgid "Error was expected but none given"
msgstr "பிழை எதிர்பார்க்கப்பட்டடு ஆனால் தரப்படவில்லை" msgstr "பிழை எதிர்பார்க்கப்பட்டடு ஆனால் தரப்படவில்லை"
#: ../src/ui/theme-viewer.c:1281 #: ../src/ui/theme-viewer.c:1274
#, c-format #, c-format
msgid "Error %d was expected but %d given" msgid "Error %d was expected but %d given"
msgstr "பிழை %d எதிர்பார்க்கப்பட்டது %d தரப்படவில்லை" msgstr "பிழை %d எதிர்பார்க்கப்பட்டது %d தரப்படவில்லை"
#: ../src/ui/theme-viewer.c:1287 #: ../src/ui/theme-viewer.c:1280
#, c-format #, c-format
msgid "Error not expected but one was returned: %s" msgid "Error not expected but one was returned: %s"
msgstr "பிழை எதிர்பார்க்கப்பட்டடு ஆனால் தரப்படவில்லை: %s" msgstr "பிழை எதிர்பார்க்கப்பட்டடு ஆனால் தரப்படவில்லை: %s"
#: ../src/ui/theme-viewer.c:1291 #: ../src/ui/theme-viewer.c:1284
#, c-format #, c-format
msgid "x value was %d, %d was expected" msgid "x value was %d, %d was expected"
msgstr "x மதிப்பு %d, %d எதிர்பார்க்கப்பட்டது" msgstr "x மதிப்பு %d, %d எதிர்பார்க்கப்பட்டது"
#: ../src/ui/theme-viewer.c:1294 #: ../src/ui/theme-viewer.c:1287
#, c-format #, c-format
msgid "y value was %d, %d was expected" msgid "y value was %d, %d was expected"
msgstr "y மதிப்பு %d, %d எதிர்பார்க்கப்பட்டது" msgstr "y மதிப்பு %d, %d எதிர்பார்க்கப்பட்டது"
#: ../src/ui/theme-viewer.c:1359 #: ../src/ui/theme-viewer.c:1352
#, c-format #, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr "%d அச்சு கூற்று பகுக்கப்பட்டது %g செகண்டில் (%g சராசரி செகண்ட்)\n" msgstr "%d அச்சு கூற்று பகுக்கப்பட்டது %g செகண்டில் (%g சராசரி செகண்ட்)\n"
#~ msgid "Minimize window"
#~ msgstr "சாளரத்தை சிறிதாக்கு"
#~ msgid "Comma-separated list of compositor plugins" #~ msgid "Comma-separated list of compositor plugins"
#~ msgstr "பல்வினையாக்கியின் சொருகிகளின் கமாவால் பிரித்த பட்டியல்." #~ msgstr "பல்வினையாக்கியின் சொருகிகளின் கமாவால் பிரித்த பட்டியல்."

770
po/te.po

File diff suppressed because it is too large Load Diff

1663
po/tg.po

File diff suppressed because it is too large Load Diff

270
po/ug.po
View File

@@ -9,9 +9,9 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: mutter\n" "Project-Id-Version: mutter\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-03-31 13:47+0000\n" "POT-Creation-Date: 2013-01-11 15:23+0000\n"
"PO-Revision-Date: 2013-04-06 18:40+0900\n" "PO-Revision-Date: 2011-08-08 16:52+0600\n"
"Last-Translator: Gheyret Kenji <gheyret@gmail.com>\n" "Last-Translator: Sahran <sahran.ug@gmail.com>\n"
"Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n" "Language-Team: Uyghur Computer Science Association <UKIJ@yahoogroups.com>\n"
"Language: \n" "Language: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -63,6 +63,7 @@ msgid "Switch windows"
msgstr "كۆزنەكلەرنى ئالماشتۇرۇش" msgstr "كۆزنەكلەرنى ئالماشتۇرۇش"
#: ../src/50-mutter-navigation.xml.in.h:12 #: ../src/50-mutter-navigation.xml.in.h:12
#| msgid "Move between windows of an application immediately"
msgid "Switch windows of an application" msgid "Switch windows of an application"
msgstr "پروگراممىنىڭ كۆزنىكىنى ئالماشتۇرۇش" msgstr "پروگراممىنىڭ كۆزنىكىنى ئالماشتۇرۇش"
@@ -75,6 +76,7 @@ msgid "Switch windows directly"
msgstr "كۆزنەكلەرنى بىۋاسىتە ئالماشتۇرۇش" msgstr "كۆزنەكلەرنى بىۋاسىتە ئالماشتۇرۇش"
#: ../src/50-mutter-navigation.xml.in.h:15 #: ../src/50-mutter-navigation.xml.in.h:15
#| msgid "Move between windows of an application immediately"
msgid "Switch windows of an app directly" msgid "Switch windows of an app directly"
msgstr "بىر پروگراممىنىڭ كۆزنەكلىرىنى بىۋاسىتە ئالماشتۇرۇش" msgstr "بىر پروگراممىنىڭ كۆزنەكلىرىنى بىۋاسىتە ئالماشتۇرۇش"
@@ -83,6 +85,7 @@ msgid "Switch system controls directly"
msgstr "سىستېما تىزگىنلىرىنى بىۋاسىتە ئالماشتۇرۇش" msgstr "سىستېما تىزگىنلىرىنى بىۋاسىتە ئالماشتۇرۇش"
#: ../src/50-mutter-navigation.xml.in.h:17 #: ../src/50-mutter-navigation.xml.in.h:17
#| msgid "Hide all normal windows and set focus to the desktop"
msgid "Hide all normal windows" msgid "Hide all normal windows"
msgstr "بارلىق نورمال كۆزنەكلەرنى يوشۇرۇش" msgstr "بارلىق نورمال كۆزنەكلەرنى يوشۇرۇش"
@@ -103,18 +106,22 @@ msgid "Switch to workspace 4"
msgstr "4-خىزمەت رايونىغا ئالمىشىش" msgstr "4-خىزمەت رايونىغا ئالمىشىش"
#: ../src/50-mutter-navigation.xml.in.h:22 #: ../src/50-mutter-navigation.xml.in.h:22
#| msgid "Move to Workspace _Left"
msgid "Move to workspace left" msgid "Move to workspace left"
msgstr "سولدىكى خىزمەت رايونىغا يۆتكەش" msgstr "سولدىكى خىزمەت رايونىغا يۆتكەش"
#: ../src/50-mutter-navigation.xml.in.h:23 #: ../src/50-mutter-navigation.xml.in.h:23
#| msgid "Move to Workspace R_ight"
msgid "Move to workspace right" msgid "Move to workspace right"
msgstr "ئوڭدىكى خىزمەت رايونىغا يۆتكەش" msgstr "ئوڭدىكى خىزمەت رايونىغا يۆتكەش"
#: ../src/50-mutter-navigation.xml.in.h:24 #: ../src/50-mutter-navigation.xml.in.h:24
#| msgid "Move to Workspace _Left"
msgid "Move to workspace above" msgid "Move to workspace above"
msgstr "ئۇستىدىكى خىزمەت رايونىغا يۆتكەش" msgstr "ئۇستىدىكى خىزمەت رايونىغا يۆتكەش"
#: ../src/50-mutter-navigation.xml.in.h:25 #: ../src/50-mutter-navigation.xml.in.h:25
#| msgid "Move to Workspace _Down"
msgid "Move to workspace below" msgid "Move to workspace below"
msgstr "تۆۋەندىكى خىزمەت رايونىغا يۆتكەش" msgstr "تۆۋەندىكى خىزمەت رايونىغا يۆتكەش"
@@ -123,6 +130,7 @@ msgid "System"
msgstr "سىستېما" msgstr "سىستېما"
#: ../src/50-mutter-system.xml.in.h:2 #: ../src/50-mutter-system.xml.in.h:2
#| msgid "Show the panel's main menu"
msgid "Show the run command prompt" msgid "Show the run command prompt"
msgstr "بۇيرۇق قۇرىنى كۆرسىتىدۇ" msgstr "بۇيرۇق قۇرىنى كۆرسىتىدۇ"
@@ -163,6 +171,7 @@ msgid "Close window"
msgstr "كۆزنەك ياپ" msgstr "كۆزنەك ياپ"
#: ../src/50-mutter-windows.xml.in.h:9 #: ../src/50-mutter-windows.xml.in.h:9
#| msgid "Resize window"
msgid "Hide window" msgid "Hide window"
msgstr "كۆزنەكنى يوشۇرۇش" msgstr "كۆزنەكنى يوشۇرۇش"
@@ -175,10 +184,12 @@ msgid "Resize window"
msgstr "كۆزنەك چوڭلۇقىنى ئۆزگەرتىش" msgstr "كۆزنەك چوڭلۇقىنى ئۆزگەرتىش"
#: ../src/50-mutter-windows.xml.in.h:12 #: ../src/50-mutter-windows.xml.in.h:12
#| msgid "Toggle whether window is on all workspaces or just one"
msgid "Toggle window on all workspaces or one" msgid "Toggle window on all workspaces or one"
msgstr "كۆزنەكنى بارلىق خىزمەت رايونى ياكى بىرىگىلا ئالماشتۇرۇش" msgstr "كۆزنەكنى بارلىق خىزمەت رايونى ياكى بىرىگىلا ئالماشتۇرۇش"
#: ../src/50-mutter-windows.xml.in.h:13 #: ../src/50-mutter-windows.xml.in.h:13
#| msgid "Raise window if it's covered by another window, otherwise lower it"
msgid "Raise window if covered, otherwise lower it" msgid "Raise window if covered, otherwise lower it"
msgstr "كۆزنەك توسۇلۇپ قالغان بولسا كۆتۈرسۇن، بولمىسا پەسلەتسۇن" msgstr "كۆزنەك توسۇلۇپ قالغان بولسا كۆتۈرسۇن، بولمىسا پەسلەتسۇن"
@@ -208,18 +219,14 @@ msgstr "كۆزنەكنىڭ ئوڭ تەرىپىدە كۆرسەتسۇن"
#. This probably means that a non-WM compositor like xcompmgr is running; #. This probably means that a non-WM compositor like xcompmgr is running;
#. * we have no way to get it to exit #. * we have no way to get it to exit
#: ../src/compositor/compositor.c:568 #: ../src/compositor/compositor.c:512
#, c-format #, c-format
msgid "" msgid ""
"Another compositing manager is already running on screen %i on display \"%s" "Another compositing manager is already running on screen %i on display \"%s"
"\"." "\"."
msgstr "كۆرسەتكۈچ «%2$s» نىڭدىكى ئېكران %1$i دا بۆلەك باشقۇرغۇچ ئىجرا قىلىنىۋاتىدۇ." msgstr "كۆرسەتكۈچ \"%2$s\" نىڭدىكى ئېكران %1$d دا بۆلەك باشقۇرغۇچ ئىجرا قىلىنىۋاتىدۇ."
#: ../src/compositor/meta-background.c:1064 #: ../src/core/bell.c:320
msgid "background texture could not be created from file"
msgstr "ھۆججەتتىن تەگلىك texture نى قۇرغىلى بولمايدۇ"
#: ../src/core/bell.c:322
msgid "Bell event" msgid "Bell event"
msgstr "قوڭغۇراق ھادىسىسى" msgstr "قوڭغۇراق ھادىسىسى"
@@ -230,6 +237,7 @@ msgstr "نامەلۇم كۆزنەك ئۇچۇرى ئىلتىماسى:%d"
#: ../src/core/delete.c:111 #: ../src/core/delete.c:111
#, c-format #, c-format
#| msgid "<tt>%s</tt> is not responding."
msgid "“%s” is not responding." msgid "“%s” is not responding."
msgstr "%s نىڭدىن جاۋاب كەلمەيۋاتىدۇ." msgstr "%s نىڭدىن جاۋاب كەلمەيۋاتىدۇ."
@@ -251,59 +259,53 @@ msgstr "كۈت(_W)"
msgid "_Force Quit" msgid "_Force Quit"
msgstr "مەجبۇرى ئاخىرلاشتۇر(_F)" msgstr "مەجبۇرى ئاخىرلاشتۇر(_F)"
#: ../src/core/display.c:401 #: ../src/core/display.c:394
#, c-format #, c-format
msgid "Missing %s extension required for compositing" msgid "Missing %s extension required for compositing"
msgstr "بىرىكتۈرۈش ئۈچۈن زۆرۈر بولغان كېڭەيتىلمە %s يوق" msgstr "بىرىكتۈرۈش ئۈچۈن زۆرۈر بولغان كېڭەيتىلمە %s يوق"
#: ../src/core/display.c:493 #: ../src/core/display.c:491
#, c-format #, c-format
msgid "Failed to open X Window System display '%s'\n" msgid "Failed to open X Window System display '%s'\n"
msgstr "X كۆزنەك سىستېمىسى كۆرسەتكۈچى %s نى ئېچىش مەغلۇپ بولدى\n" msgstr "X كۆزنەك سىستېمىسى كۆرسەتكۈچى %s نى ئېچىش مەغلۇپ بولدى\n"
#: ../src/core/keybindings.c:935 #: ../src/core/keybindings.c:876
#, c-format #, c-format
msgid "" msgid ""
"Some other program is already using the key %s with modifiers %x as a " "Some other program is already using the key %s with modifiers %x as a "
"binding\n" "binding\n"
msgstr "باشقا پروگرامما %s كۇنۇپكىسى بىلەن سۈپەتلىگۈچى كۇنۇپكا %x نىڭ بىرىكمىسىنى ئىشلىتىۋاتىدۇ\n" msgstr "باشقا پروگرامما %s كۇنۇپكىسى بىلەن سۈپەتلىگۈچى كۇنۇپكا %x نىڭ بىرىكمىسىنى ئىشلىتىۋاتىدۇ\n"
#: ../src/core/keybindings.c:1135 #: ../src/core/main.c:196
#, c-format
#| msgid "\"%s\" is not a valid value for focus attribute"
msgid "\"%s\" is not a valid accelerator\n"
msgstr "«%s» ئىناۋەتلىك تېزلەتكۈچ ئەمەس\n"
#: ../src/core/main.c:197
msgid "Disable connection to session manager" msgid "Disable connection to session manager"
msgstr "ئەڭگىمە باشقۇرغۇچقا باغلىنىشنى ئىناۋەتسىز قىل" msgstr "ئەڭگىمە باشقۇرغۇچقا باغلىنىشنى چەكلە"
#: ../src/core/main.c:203 #: ../src/core/main.c:202
msgid "Replace the running window manager" msgid "Replace the running window manager"
msgstr "ئىجرا قىلىنىۋاتقان كۆزنەك باشقۇرغۇچنى ئالماشتۇر" msgstr "ئىجرا قىلىنىۋاتقان كۆزنەك باشقۇرغۇچنى ئالماشتۇر"
#: ../src/core/main.c:209 #: ../src/core/main.c:208
msgid "Specify session management ID" msgid "Specify session management ID"
msgstr "ئەڭگىمە باشقۇرغۇ ID سېنى بەلگىلە" msgstr "ئەڭگىمە باشقۇرغۇ ID سېنى بەلگىلە"
#: ../src/core/main.c:214 #: ../src/core/main.c:213
msgid "X Display to use" msgid "X Display to use"
msgstr "ئىشلىتىدىغان X كۆرسەتكۈچى" msgstr "ئىشلىتىدىغان X كۆرسەتكۈچى"
#: ../src/core/main.c:220 #: ../src/core/main.c:219
msgid "Initialize session from savefile" msgid "Initialize session from savefile"
msgstr "ساقلانغان ھۆججەتتىن ئەڭگىمەنى دەسلەپلەشتۈرۈش" msgstr "ساقلانغان ھۆججەتتىن ئەڭگىمەنى دەسلەپلەشتۈرۈش"
#: ../src/core/main.c:226 #: ../src/core/main.c:225
msgid "Make X calls synchronous" msgid "Make X calls synchronous"
msgstr "X نى قەدەمداش قىلىپ ئىشلەت" msgstr "X نى قەدەمداش قىلىپ ئىشلەت"
#: ../src/core/main.c:534 #: ../src/core/main.c:494
#, c-format #, c-format
msgid "Failed to scan themes directory: %s\n" msgid "Failed to scan themes directory: %s\n"
msgstr "ئۆرنەكلەر مۇندەرىجىسىنى ئىزدەش مەغلۇپ بولدى: %s\n" msgstr "ئۆرنەكلەر مۇندەرىجىسىنى ئىزدەش مەغلۇپ بولدى: %s\n"
#: ../src/core/main.c:550 #: ../src/core/main.c:510
#, c-format #, c-format
msgid "" msgid ""
"Could not find a theme! Be sure %s exists and contains the usual themes.\n" "Could not find a theme! Be sure %s exists and contains the usual themes.\n"
@@ -330,60 +332,61 @@ msgstr "نەشرىنى باس"
msgid "Mutter plugin to use" msgid "Mutter plugin to use"
msgstr "ئىشلىتىدىغان Mutter قىستۇرمىسى" msgstr "ئىشلىتىدىغان Mutter قىستۇرمىسى"
#: ../src/core/prefs.c:1095 #: ../src/core/prefs.c:1087
msgid "" msgid ""
"Workarounds for broken applications disabled. Some applications may not " "Workarounds for broken applications disabled. Some applications may not "
"behave properly.\n" "behave properly.\n"
msgstr "بۇزۇلغان پروگراممىلارنى تۈزىتىش-ياخشىلاش ئىناۋەتسىز قىلىنغان. بەزى پروگراممىلار نورمال ئىشلىمەسلىكى مۇمكىن.\n" msgstr "بۇزۇلغان پروگراممىلارنى تۈزىتىش-ياخشىلاش ئىناۋەتسىز قىلىنغان. بەزى پروگراممىلار نورمال ئىشلىمەسلىكى مۇمكىن.\n"
#: ../src/core/prefs.c:1170 #: ../src/core/prefs.c:1162
#, c-format #, c-format
#| msgid "Could not parse font description \"%s\" from GConf key %s\n"
msgid "Could not parse font description \"%s\" from GSettings key %s\n" msgid "Could not parse font description \"%s\" from GSettings key %s\n"
msgstr "GSettings ئاچقۇچى %s نىڭ تەركىبىدىكى فونت چۈشەندۈرۈشى «%s»نى تەھلىل قىلغىنى بولمىدى\n" msgstr "GSettings ئاچقۇچى %s نىڭ تەركىبىدىكى فونت چۈشەندۈرۈشى «%s»نى تەھلىل قىلغىنى بولمىدى\n"
#: ../src/core/prefs.c:1236 #: ../src/core/prefs.c:1228
#, c-format #, c-format
msgid "" msgid ""
"\"%s\" found in configuration database is not a valid value for mouse button " "\"%s\" found in configuration database is not a valid value for mouse button "
"modifier\n" "modifier\n"
msgstr "سەپلىمە سانداندىن تېپىلغان «%s» چاشقىنەك توپچىسىنىڭ سۈپەتلىگۈچىسى ئۈچۈن ئىناۋەتسىز\n" msgstr "سەپلىمە سانداندىن تېپىلغان «%s» چاشقىنەك توپچىسىنىڭ سۈپەتلىگۈچىسى ئۈچۈن ئىناۋەتسىز\n"
#: ../src/core/prefs.c:1788 #: ../src/core/prefs.c:1780
#, c-format #, c-format
msgid "" msgid ""
"\"%s\" found in configuration database is not a valid value for keybinding " "\"%s\" found in configuration database is not a valid value for keybinding "
"\"%s\"\n" "\"%s\"\n"
msgstr "سەپلىمە ساندىنىدىن تېپىلغان «%s»، «%s» كۇنۇپكا باغلانمىسىنىڭ ئىناۋەتلىك قىممىتى ئەمەس\n" msgstr "سەپلىمە ساندىنىدىن تېپىلغان «%s»، «%s» كۇنۇپكا باغلانمىسىنىڭ ئىناۋەتلىك قىممىتى ئەمەس\n"
#: ../src/core/prefs.c:1887 #: ../src/core/prefs.c:1877
#, c-format #, c-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "خىزمەت بوشلۇقى %d" msgstr "خىزمەت بوشلۇقى %d"
#: ../src/core/screen.c:691 #: ../src/core/screen.c:658
#, c-format #, c-format
msgid "Screen %d on display '%s' is invalid\n" msgid "Screen %d on display '%s' is invalid\n"
msgstr "كۆرسەتكۈچ %2$s دىكى ئېكران %1$d ئىناۋەتسىز\n" msgstr "كۆرسەتكۈچ %2$s دىكى ئېكران %1$d ئىناۋەتسىز\n"
#: ../src/core/screen.c:707 #: ../src/core/screen.c:674
#, c-format #, c-format
msgid "" msgid ""
"Screen %d on display \"%s\" already has a window manager; try using the --" "Screen %d on display \"%s\" already has a window manager; try using the --"
"replace option to replace the current window manager.\n" "replace option to replace the current window manager.\n"
msgstr "كۆرسەتكۈچ «%2$s» دىكى ئېكران %1$d نىڭ كۆزنەك باشقۇرغۇسى بار؛ ھازىرقى كۆزنەك باشقۇرغۇنى ئالماشتۇرۇش ئۈچۈن --replace تاللانمىسىنى ئىشلىتىپ كۆرۈپ بېقىڭ.\n" msgstr "كۆرسەتكۈچ «%2$s» دىكى ئېكران %1$d نىڭ كۆزنەك باشقۇرغۇسى بار؛ ھازىرقى كۆزنەك باشقۇرغۇنى ئالماشتۇرۇش ئۈچۈن --replace تاللانمىسىنى ئىشلىتىپ كۆرۈپ بېقىڭ.\n"
#: ../src/core/screen.c:734 #: ../src/core/screen.c:701
#, c-format #, c-format
msgid "" msgid ""
"Could not acquire window manager selection on screen %d display \"%s\"\n" "Could not acquire window manager selection on screen %d display \"%s\"\n"
msgstr "كۆرسەتكۈچ «%2$s» نىڭدىكى ئېكران %1$d دا كۆزنەك باشقۇرغۇنىڭ تاللانمىسىنى ئالغىلى بولمىدى\n" msgstr "كۆرسەتكۈچ «%2$s» نىڭدىكى ئېكران %1$d دا كۆزنەك باشقۇرغۇنىڭ تاللانمىسىنى ئالغىلى بولمىدى\n"
#: ../src/core/screen.c:812 #: ../src/core/screen.c:770
#, c-format #, c-format
msgid "Screen %d on display \"%s\" already has a window manager\n" msgid "Screen %d on display \"%s\" already has a window manager\n"
msgstr "«%2$s» دىكى %1$d ئېكراندا بىر كۆزنەك باشقۇرغۇ بار\n" msgstr "«%2$s» دىكى %1$d ئېكراندا بىر كۆزنەك باشقۇرغۇ بار\n"
#: ../src/core/screen.c:998 #: ../src/core/screen.c:955
#, c-format #, c-format
msgid "Could not release screen %d on display \"%s\"\n" msgid "Could not release screen %d on display \"%s\"\n"
msgstr "«%2$s» دىكى %1$d ئېكراننى بوشاتقىلى بولمىدى\n" msgstr "«%2$s» دىكى %1$d ئېكراننى بوشاتقىلى بولمىدى\n"
@@ -441,49 +444,49 @@ msgid ""
"be restarted manually next time you log in." "be restarted manually next time you log in."
msgstr "بۇ كۆزنەكلەردە «ھازىرقى تەڭشەكنى ساقلاش» ئىقتىدارىنى ئىشلەتكىلى بولمايدۇ. كېيىن كىرگەندە يەنە قوزغىتىڭ." msgstr "بۇ كۆزنەكلەردە «ھازىرقى تەڭشەكنى ساقلاش» ئىقتىدارىنى ئىشلەتكىلى بولمايدۇ. كېيىن كىرگەندە يەنە قوزغىتىڭ."
#: ../src/core/util.c:84 #: ../src/core/util.c:80
#, c-format #, c-format
msgid "Failed to open debug log: %s\n" msgid "Failed to open debug log: %s\n"
msgstr "سازلاش خاتىرىسىنى ئېچىش مەغلۇپ بولدى:%s\n" msgstr "سازلاش خاتىرىسىنى ئېچىش مەغلۇپ بولدى:%s\n"
#: ../src/core/util.c:94 #: ../src/core/util.c:90
#, c-format #, c-format
msgid "Failed to fdopen() log file %s: %s\n" msgid "Failed to fdopen() log file %s: %s\n"
msgstr "خاتىرە ھۆججىتى %s غا fdopen() مەشغۇلاتى قىلغىلى بولمىدى:%s\n" msgstr "خاتىرە ھۆججىتى %s غا fdopen() مەشغۇلاتى قىلغىلى بولمىدى:%s\n"
#: ../src/core/util.c:100 #: ../src/core/util.c:96
#, c-format #, c-format
msgid "Opened log file %s\n" msgid "Opened log file %s\n"
msgstr "ئاچقان خاتىرە ھۆججەت %s\n" msgstr "ئاچقان خاتىرە ھۆججەت %s\n"
#: ../src/core/util.c:119 ../src/tools/mutter-message.c:149 #: ../src/core/util.c:115 ../src/tools/mutter-message.c:149
#, c-format #, c-format
msgid "Mutter was compiled without support for verbose mode\n" msgid "Mutter was compiled without support for verbose mode\n"
msgstr "Mutter تەرجىمە-تەھرىرلىگەندە تەپسىلات قوللاش ھالىتى قوشۇلمىغان\n" msgstr "Mutter تەرجىمە-تەھرىرلىگەندە تەپسىلات قوللاش ھالىتى قوشۇلمىغان\n"
#: ../src/core/util.c:264 #: ../src/core/util.c:259
msgid "Window manager: " msgid "Window manager: "
msgstr "كۆزنەك باشقۇرغۇ: " msgstr "كۆزنەك باشقۇرغۇ: "
#: ../src/core/util.c:412 #: ../src/core/util.c:407
msgid "Bug in window manager: " msgid "Bug in window manager: "
msgstr "كۆزنەك باشقۇرغۇدىكى كەمتۈك: " msgstr "كۆزنەك باشقۇرغۇدىكى كەمتۈك: "
#: ../src/core/util.c:443 #: ../src/core/util.c:438
msgid "Window manager warning: " msgid "Window manager warning: "
msgstr "كۆزنەك باشقۇرغۇ ئاگاھلاندۇرۇشى: " msgstr "كۆزنەك باشقۇرغۇ ئاگاھلاندۇرۇشى: "
#: ../src/core/util.c:471 #: ../src/core/util.c:466
msgid "Window manager error: " msgid "Window manager error: "
msgstr "كۆزنەك باشقۇرغۇ خاتالىقى: " msgstr "كۆزنەك باشقۇرغۇ خاتالىقى: "
#. first time through #. first time through
#: ../src/core/window.c:7596 #: ../src/core/window.c:7279
#, c-format #, c-format
msgid "" msgid ""
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER " "Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
"window as specified in the ICCCM.\n" "window as specified in the ICCCM.\n"
msgstr "كۆزنەك %s بەلگىلىمە ICCCM دا بەلگىلەنگەن WM_CLIENT_LEADER كۆزنەكنى ئەمەس SM_CLIENT_ID نى ئۆزى بەلگىلىۋېلىپتۇ.\n" msgstr "كۆزنەك %s بەلگىلىمە ICCCM دا بەلگىلەنگەن WM_CLIENT_LEADER كۆزنەكنى ئەمەس SM_CLIENT_ID نى ئۆزى بەلگىلىۋېتىپتۇ.\n"
#. We ignore mwm_has_resize_func because WM_NORMAL_HINTS is the #. We ignore mwm_has_resize_func because WM_NORMAL_HINTS is the
#. * authoritative source for that info. Some apps such as mplayer or #. * authoritative source for that info. Some apps such as mplayer or
@@ -492,29 +495,29 @@ msgstr "كۆزنەك %s بەلگىلىمە ICCCM دا بەلگىلەنگەن WM
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain #. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
#. * about these apps but make them work. #. * about these apps but make them work.
#. #.
#: ../src/core/window.c:8320 #: ../src/core/window.c:7945
#, c-format #, c-format
msgid "" msgid ""
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size " "Window %s sets an MWM hint indicating it isn't resizable, but sets min size "
"%d x %d and max size %d x %d; this doesn't make much sense.\n" "%d x %d and max size %d x %d; this doesn't make much sense.\n"
msgstr "كۆزنەك %s نىڭدا MWM بەلگىلەنگەن بولۇپ، بۇ كۆزنەك چوڭلۇقىنى ئۆزگەرتكىلى بولمايدۇ دېگەن مەنىدە. بىراق ئەڭ كىچىك چوڭلۇقى%d x %d، ۋە ئەڭ كىچىك چوڭلۇقى %d x %d قىلىپ بەلگىلىنىپتۇ. بۇنىڭ ھېچقانداق ئەھمىيىتى يوق.\n" msgstr "كۆزنەك %s نىڭدا MWM بەلگىلەنگەن بولۇپ، بۇ كۆزنەك چوڭلۇقىنى ئۆزگەرتكىلى بولمايدۇ دېگەن مەنىدە. بىراق ئەڭ كىچىك چوڭلۇقى%d x %d، ۋە ئەڭ كىچىك چوڭلۇقى %d x %d قىلىپ بەلگىلىنىپتۇ. بۇنىڭ ھېچقانداق ئەھمىيىتى يوق.\n"
#: ../src/core/window-props.c:318 #: ../src/core/window-props.c:274
#, c-format #, c-format
msgid "Application set a bogus _NET_WM_PID %lu\n" msgid "Application set a bogus _NET_WM_PID %lu\n"
msgstr "پروگرامما بىر ساختا _NET_WM_PID نى بەلگىلىدى%lu\n" msgstr "پروگرامما بىر ساختا _NET_WM_PID نى بەلگىلىدى%lu\n"
#: ../src/core/window-props.c:434 #: ../src/core/window-props.c:393
#, c-format #, c-format
msgid "%s (on %s)" msgid "%s (on %s)"
msgstr "%s (ھازىر %s نىڭ ئۈستىدە)" msgstr "%s (ھازىر %s نىڭ ئۈستىدە)"
#: ../src/core/window-props.c:1517 #: ../src/core/window-props.c:1448
#, c-format #, c-format
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n" msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
msgstr "%2$s گە بەلگىلەنگەن ئۈنۈمسىز WM_TRANSIENT_FOR كۆزنەك 0x%1$lx بولىدۇ.\n" msgstr "%2$s گە بەلگىلەنگەن ئۈنۈمسىز WM_TRANSIENT_FOR كۆزنەك 0x%1$lx بولىدۇ.\n"
#: ../src/core/window-props.c:1528 #: ../src/core/window-props.c:1459
#, c-format #, c-format
msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n" msgid "WM_TRANSIENT_FOR window 0x%lx for %s would create loop.\n"
msgstr "%2$s نىڭ WM_TRANSIENT_FOR كۆزنەك0x%1$lx دەۋرىيلىك قۇرۇشى مۇمكىن.\n" msgstr "%2$s نىڭ WM_TRANSIENT_FOR كۆزنەك0x%1$lx دەۋرىيلىك قۇرۇشى مۇمكىن.\n"
@@ -584,14 +587,14 @@ msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:7 #: ../src/org.gnome.mutter.gschema.xml.in.h:7
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
msgstr "خىزمەت رايونلىرى جانلىق باشقۇرۇلسۇن" msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:8 #: ../src/org.gnome.mutter.gschema.xml.in.h:8
msgid "" msgid ""
"Determines whether workspaces are managed dynamically or whether there's a " "Determines whether workspaces are managed dynamically or whether there's a "
"static number of workspaces (determined by the num-workspaces key in org." "static number of workspaces (determined by the num-workspaces key in org."
"gnome.desktop.wm.preferences)." "gnome.desktop.wm.preferences)."
msgstr "خىزمەت رايونلىرى جانلىق باشقۇرۇلامدۇ ياكى خىزمەت رايونلىرىنىڭ سانى مۇقىم بولامدۇ بەلگىلەيدۇ(خىزمەت رايونلىرىنىڭ سانى org.gnome.desktop.wm.preferences دېگەن ئاچقۇچتا بەلگىلىنىدۇ)" msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:9 #: ../src/org.gnome.mutter.gschema.xml.in.h:9
msgid "Workspaces only on primary" msgid "Workspaces only on primary"
@@ -605,7 +608,7 @@ msgstr "خىزمەت رايونى ئالماشتۇرۇشنىڭ ھەممە ئېك
#: ../src/org.gnome.mutter.gschema.xml.in.h:11 #: ../src/org.gnome.mutter.gschema.xml.in.h:11
msgid "No tab popup" msgid "No tab popup"
msgstr "بەتكۈچ سەكرىمىسۇن" msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:12 #: ../src/org.gnome.mutter.gschema.xml.in.h:12
msgid "" msgid ""
@@ -626,13 +629,13 @@ msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:15 #: ../src/org.gnome.mutter.gschema.xml.in.h:15
msgid "Draggable border width" msgid "Draggable border width"
msgstr "سۆرەشكە بولىدىغان گىرۋەكنىڭ كەڭلىكى" msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:16 #: ../src/org.gnome.mutter.gschema.xml.in.h:16
msgid "" msgid ""
"The amount of total draggable borders. If the theme's visible borders are " "The amount of total draggable borders. If the theme's visible borders are "
"not enough, invisible borders will be added to meet this value." "not enough, invisible borders will be added to meet this value."
msgstr "سۆرەشكە بولىدىغان گىرۋەكنىڭ كەڭلىكى. ئۆرنەكتە كۆرسىتىلىۋاتقان گىرۋەكنىڭ كەڭلىكى بۇنىڭدىن كىچىك بولسا، كۆرسەتكىلى بولمايدىغان گىرۋەككە مۇشۇ قىممەتكە ماس كېلىدىغان قىلىپ قىممەت قوشۇلىدۇ." msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:17 #: ../src/org.gnome.mutter.gschema.xml.in.h:17
msgid "Auto maximize nearly monitor sized windows" msgid "Auto maximize nearly monitor sized windows"
@@ -640,17 +643,18 @@ msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:18 #: ../src/org.gnome.mutter.gschema.xml.in.h:18
msgid "" msgid ""
"If enabled, new windows that are initially the size of the monitor " "If enabled, monitor nearly monitor sized windows automatically get maximized "
"automatically get maximized." "when mapped."
msgstr "" msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:19 #: ../src/org.gnome.mutter.gschema.xml.in.h:19
#| msgid "Remove Window From Top"
msgid "Select window from tab popup" msgid "Select window from tab popup"
msgstr "سەكرەپ چىققان بەتكۈچتىن كۆزنەك تاللىسۇن" msgstr ""
#: ../src/org.gnome.mutter.gschema.xml.in.h:20 #: ../src/org.gnome.mutter.gschema.xml.in.h:20
msgid "Cancel tab popup" msgid "Cancel tab popup"
msgstr "سەكرەپ چىققان بەتكۈچنى ئەمەلدىن قالدۇر" msgstr ""
#: ../src/tools/mutter-message.c:123 #: ../src/tools/mutter-message.c:123
#, c-format #, c-format
@@ -851,266 +855,266 @@ msgstr "Mod5"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#. #.
#: ../src/ui/resizepopup.c:136 #: ../src/ui/resizepopup.c:113
#, c-format #, c-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
#: ../src/ui/theme.c:236 #: ../src/ui/theme.c:235
msgid "top" msgid "top"
msgstr "چوققا" msgstr "چوققا"
#: ../src/ui/theme.c:238 #: ../src/ui/theme.c:237
msgid "bottom" msgid "bottom"
msgstr "ئاستى" msgstr "ئاستى"
#: ../src/ui/theme.c:240 #: ../src/ui/theme.c:239
msgid "left" msgid "left"
msgstr "سول" msgstr "سول"
#: ../src/ui/theme.c:242 #: ../src/ui/theme.c:241
msgid "right" msgid "right"
msgstr "ئوڭ" msgstr "ئوڭ"
#: ../src/ui/theme.c:270 #: ../src/ui/theme.c:269
#, c-format #, c-format
msgid "frame geometry does not specify \"%s\" dimension" msgid "frame geometry does not specify \"%s\" dimension"
msgstr "كاندۇكنىڭ گېئومېتىرىيىلىك شەكلى «%s» ئۆلچەمنى ئىپادىلىمەيدۇ" msgstr "كاندۇكنىڭ گېئومېتىرىيىلىك شەكلى «%s» ئۆلچەمنى ئىپادىلىمەيدۇ"
#: ../src/ui/theme.c:289 #: ../src/ui/theme.c:288
#, c-format #, c-format
msgid "frame geometry does not specify dimension \"%s\" for border \"%s\"" msgid "frame geometry does not specify dimension \"%s\" for border \"%s\""
msgstr "كاندۇكنىڭ گېئومېتىرىيىلىك شەكلى گىرۋەك «%2$s» نىڭ ئۆلچىمى «%1$s» ئىپادىلىمەيدۇ" msgstr "كاندۇكنىڭ گېئومېتىرىيىلىك شەكلى گىرۋەك «%2$s» نىڭ ئۆلچىمى «%1$s» ئىپادىلىمەيدۇ"
#: ../src/ui/theme.c:326 #: ../src/ui/theme.c:325
#, c-format #, c-format
msgid "Button aspect ratio %g is not reasonable" msgid "Button aspect ratio %g is not reasonable"
msgstr "توپچىنىڭ ئېگىزلىك ۋە كەڭلىك نىسبىتى %g مۇۋاپىق ئەمەس" msgstr "توپچىنىڭ ئېگىزلىك ۋە كەڭلىك نىسبىتى %g مۇۋاپىق ئەمەس"
#: ../src/ui/theme.c:338 #: ../src/ui/theme.c:337
#, c-format #, c-format
msgid "Frame geometry does not specify size of buttons" msgid "Frame geometry does not specify size of buttons"
msgstr "كاندۇكنىڭ گېئومېتىرىيىلىك شەكلى توپچىلارنىڭ چوڭلۇقىنى ئىپادىلىمەيدۇ" msgstr "كاندۇكنىڭ گېئومېتىرىيىلىك شەكلى توپچىلارنىڭ چوڭلۇقىنى ئىپادىلىمەيدۇ"
#: ../src/ui/theme.c:1051 #: ../src/ui/theme.c:1050
#, c-format #, c-format
msgid "Gradients should have at least two colors" msgid "Gradients should have at least two colors"
msgstr "تەدرىجىي ئۆزگىرىشتە ئاز دېگەندە ئىككى خىل رەڭ بولۇش كېرەك" msgstr "تەدرىجىي ئۆزگىرىشتە ئاز دېگەندە ئىككى خىل رەڭ بولۇش كېرەك"
#: ../src/ui/theme.c:1203 #: ../src/ui/theme.c:1202
#, c-format #, c-format
msgid "" msgid ""
"GTK custom color specification must have color name and fallback in " "GTK custom color specification must have color name and fallback in "
"parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\"" "parentheses, e.g. gtk:custom(foo,bar); could not parse \"%s\""
msgstr "GTK رەڭ ئۆلچىمىدە ھالەتتىن كېيىن چوقۇم رەڭ ئاتى ۋە زاپاس بولۇشى لازىم، مەسىلەن، gtk:custom(foo,bar) ھالەت؛ «%s» نى تەھلىل قىلالمايدۇ" msgstr "GTK رەڭ ئۆلچىمىدە ھالەتتىن كېيىن چوقۇم رەڭ ئاتى ۋە زاپاس بولۇشى لازىم، مەسىلەن، gtk:custom(foo,bar) ھالەت؛ «%s» نى تەھلىل قىلالمايدۇ"
#: ../src/ui/theme.c:1219 #: ../src/ui/theme.c:1218
#, c-format #, c-format
msgid "" msgid ""
"Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-" "Invalid character '%c' in color_name parameter of gtk:custom, only A-Za-z0-9-"
"_ are valid" "_ are valid"
msgstr "gtk:custom نىڭ color_name پارامېتىرىدىكى ئىناۋەتسىز ھەرپ '%c'، پەقەت A-Za-z0-9-_ نىلا ئىشلەتكىلى بولىدۇ" msgstr "gtk:custom نىڭ color_name پارامېتىرىدىكى ئىناۋەتسىز ھەرپ '%c'، پەقەت A-Za-z0-9-_ نىلا ئىشلەتكىلى بولىدۇ"
#: ../src/ui/theme.c:1233 #: ../src/ui/theme.c:1232
#, c-format #, c-format
msgid "" msgid ""
"Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not " "Gtk:custom format is \"gtk:custom(color_name,fallback)\", \"%s\" does not "
"fit the format" "fit the format"
msgstr "Gtk:custom نىڭ پىچىمى \"gtk:custom(color_name,fallback)\" بولۇپ، «%s» پىچىمغا توغرا كەلمەيدۇ" msgstr "Gtk:custom نىڭ پىچىمى \"gtk:custom(color_name,fallback)\" بولۇپ، «%s» پىچىمغا توغرا كەلمەيدۇ"
#: ../src/ui/theme.c:1278 #: ../src/ui/theme.c:1277
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] " "GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
"where NORMAL is the state; could not parse \"%s\"" "where NORMAL is the state; could not parse \"%s\""
msgstr "GTK رەڭ بەلگىلىمىسىنىڭ ھالىتى چوقۇم gtk:fg[NORMAL] نىڭدەك تىرناق ئىچىگە ئېلىنىشى كېرەك؛ «%s» نى تەھلىل قىلغىلى بولمىدى." msgstr "GTK رەڭ بەلگىلىمىسىنىڭ ھالىتى چوقۇم gtk:fg[NORMAL] نىڭدەك تىرناق ئىچىگە ئېلىنىشى كېرەك؛ «%s» نى تەھلىل قىلغىلى بولمىدى."
#: ../src/ui/theme.c:1292 #: ../src/ui/theme.c:1291
#, c-format #, c-format
msgid "" msgid ""
"GTK color specification must have a close bracket after the state, e.g. gtk:" "GTK color specification must have a close bracket after the state, e.g. gtk:"
"fg[NORMAL] where NORMAL is the state; could not parse \"%s\"" "fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
msgstr "GTK رەڭ بەلگىلىمىسىنىڭ ھالىتىنىڭ ئارقىسىغا سول تىرناق يېزىلىشى كېرەك. مەسىلەن gtk:fg[NORMAL] نىڭدەك بۇ يەردىكى «NORMAL» ھالەتنى بىلدۈرىدۇ؛ «%s» نى تەھلىل قىلغىلى بولمىدى." msgstr "GTK رەڭ بەلگىلىمىسىنىڭ ھالىتىنىڭ ئارقىسىغا سول تىرناق يېزىلىشى كېرەك. مەسىلەن gtk:fg[NORMAL] نىڭدەك بۇ يەردىكى «NORMAL» ھالەتنى بىلدۈرىدۇ؛ «%s» نى تەھلىل قىلغىلى بولمىدى."
#: ../src/ui/theme.c:1303 #: ../src/ui/theme.c:1302
#, c-format #, c-format
msgid "Did not understand state \"%s\" in color specification" msgid "Did not understand state \"%s\" in color specification"
msgstr "رەڭ بەلگىلىمىسىدىكى «%s» ھالەتنى چۈشەنگىلى بولمىدى" msgstr "رەڭ بەلگىلىمىسىدىكى «%s» ھالەتنى چۈشەنگىلى بولمىدى"
#: ../src/ui/theme.c:1316 #: ../src/ui/theme.c:1315
#, c-format #, c-format
msgid "Did not understand color component \"%s\" in color specification" msgid "Did not understand color component \"%s\" in color specification"
msgstr "رەڭ بەلگىلىمىسىدىكى «%s» رەڭ بۆلىكىنى چۈشەنگىلى بولمىدى" msgstr "رەڭ بەلگىلىمىسىدىكى «%s» رەڭ بۆلىكىنى چۈشەنگىلى بولمىدى"
#: ../src/ui/theme.c:1345 #: ../src/ui/theme.c:1344
#, c-format #, c-format
msgid "" msgid ""
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the " "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
"format" "format"
msgstr "بىرىكمە رەڭنىڭ فورماتى \"blend/bg_color/fg_color/alpha\"، «%s» بۇ پىچىمغا ماس كەلمىدى" msgstr "بىرىكمە رەڭنىڭ فورماتى \"blend/bg_color/fg_color/alpha\"، «%s» بۇ پىچىمغا ماس كەلمىدى"
#: ../src/ui/theme.c:1356 #: ../src/ui/theme.c:1355
#, c-format #, c-format
msgid "Could not parse alpha value \"%s\" in blended color" msgid "Could not parse alpha value \"%s\" in blended color"
msgstr "بىرىكمە رەڭدىكى ئالفا قىممىتى «%s» نى تەھلىل قىلغىلى بولمىدى" msgstr "بىرىكمە رەڭدىكى ئالفا قىممىتى «%s» نى تەھلىل قىلغىلى بولمىدى"
#: ../src/ui/theme.c:1366 #: ../src/ui/theme.c:1365
#, c-format #, c-format
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0" msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
msgstr "بىرىكمە رەڭنىڭ ئالفا قىممىتى «%s» نىڭ دائىرىسى 0.0 ~1.0 ئىچىدە ئەمەس" msgstr "بىرىكمە رەڭنىڭ ئالفا قىممىتى «%s» نىڭ دائىرىسى 0.0 ~1.0 ئىچىدە ئەمەس"
#: ../src/ui/theme.c:1413 #: ../src/ui/theme.c:1412
#, c-format #, c-format
msgid "" msgid ""
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format" "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
msgstr "سايە پىچىمى «shade/base_color/factor»، «%s» بۇ پىچىمغا ماسلاشمىدى" msgstr "سايە پىچىمى «shade/base_color/factor»، «%s» بۇ پىچىمغا ماسلاشمىدى"
#: ../src/ui/theme.c:1424 #: ../src/ui/theme.c:1423
#, c-format #, c-format
msgid "Could not parse shade factor \"%s\" in shaded color" msgid "Could not parse shade factor \"%s\" in shaded color"
msgstr "سايە رەڭگىدىكى سايە فاكتور «%s» نى تەھلىل قىلغىلى بولمىدى" msgstr "سايە رەڭگىدىكى سايە فاكتور «%s» نى تەھلىل قىلغىلى بولمىدى"
#: ../src/ui/theme.c:1434 #: ../src/ui/theme.c:1433
#, c-format #, c-format
msgid "Shade factor \"%s\" in shaded color is negative" msgid "Shade factor \"%s\" in shaded color is negative"
msgstr "سايە رەڭگىدىكى سايە فاكتورى «%s» مەنپىي سان" msgstr "سايە رەڭگىدىكى سايە فاكتورى «%s» مەنپىي سان"
#: ../src/ui/theme.c:1463 #: ../src/ui/theme.c:1462
#, c-format #, c-format
msgid "Could not parse color \"%s\"" msgid "Could not parse color \"%s\""
msgstr "رەڭ «%s» نى ئانالىز قىلغىلى بولمىدى" msgstr "رەڭ «%s» نى ئانالىز قىلغىلى بولمىدى"
#: ../src/ui/theme.c:1780 #: ../src/ui/theme.c:1779
#, c-format #, c-format
msgid "Coordinate expression contains character '%s' which is not allowed" msgid "Coordinate expression contains character '%s' which is not allowed"
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە رۇخسەت قىلىنمىغان ھەرپ '%s بار" msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە رۇخسەت قىلىنمىغان ھەرپ '%s بار"
#: ../src/ui/theme.c:1807 #: ../src/ui/theme.c:1806
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contains floating point number '%s' which could not be " "Coordinate expression contains floating point number '%s' which could not be "
"parsed" "parsed"
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە تەھلىل قىلغىلى بولمايدىغان كەسىر سان %s بار" msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە تەھلىل قىلغىلى بولمايدىغان كەسىر سان %s بار"
#: ../src/ui/theme.c:1821 #: ../src/ui/theme.c:1820
#, c-format #, c-format
msgid "Coordinate expression contains integer '%s' which could not be parsed" msgid "Coordinate expression contains integer '%s' which could not be parsed"
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە تەھلىل قىلغىلى بولمايدىغان پۈتۈن سان %s بار" msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە تەھلىل قىلغىلى بولمايدىغان پۈتۈن سان %s بار"
#: ../src/ui/theme.c:1942 #: ../src/ui/theme.c:1941
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression contained unknown operator at the start of this text: " "Coordinate expression contained unknown operator at the start of this text: "
"\"%s\"" "\"%s\""
msgstr "كوئوردېنات ئىپادىسىنىڭ بېشىدا نامەلۇم ئەمەل بار: «%s»" msgstr "كوئوردېنات ئىپادىسىنىڭ بېشىدا نامەلۇم ئەمەل بار: «%s»"
#: ../src/ui/theme.c:1999 #: ../src/ui/theme.c:1998
#, c-format #, c-format
msgid "Coordinate expression was empty or not understood" msgid "Coordinate expression was empty or not understood"
msgstr "كوئوردېنات ئىپادىسى قۇرۇق ياكى چۈشىنىكسىز" msgstr "كوئوردېنات ئىپادىسى قۇرۇق ياكى چۈشىنىكسىز"
#: ../src/ui/theme.c:2112 ../src/ui/theme.c:2122 ../src/ui/theme.c:2156 #: ../src/ui/theme.c:2111 ../src/ui/theme.c:2121 ../src/ui/theme.c:2155
#, c-format #, c-format
msgid "Coordinate expression results in division by zero" msgid "Coordinate expression results in division by zero"
msgstr "كوئوردېنات ئىپادىسى 0 نى بۆلگۈچى قىلغان" msgstr "كوئوردېنات ئىپادىسى 0 نى بۆلگۈچى قىلغان"
#: ../src/ui/theme.c:2164 #: ../src/ui/theme.c:2163
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression tries to use mod operator on a floating-point number" "Coordinate expression tries to use mod operator on a floating-point number"
msgstr "كوئوردېنات ئىپادىسى كەسىر سانغا mod ئەمىلىنى ئىشلەتمەكچى" msgstr "كوئوردېنات ئىپادىسى كەسىر سانغا mod ئەمىلىنى ئىشلەتمەكچى"
#: ../src/ui/theme.c:2220 #: ../src/ui/theme.c:2219
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has an operator \"%s\" where an operand was expected" "Coordinate expression has an operator \"%s\" where an operand was expected"
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە سان كېلىدىغان يەردە ئەمەل «%s» بار ئىكەن" msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە سان كېلىدىغان يەردە ئەمەل «%s» بار ئىكەن"
#: ../src/ui/theme.c:2229 #: ../src/ui/theme.c:2228
#, c-format #, c-format
msgid "Coordinate expression had an operand where an operator was expected" msgid "Coordinate expression had an operand where an operator was expected"
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل كېلىدىغان يەردە سان بار ئىكەن" msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل كېلىدىغان يەردە سان بار ئىكەن"
#: ../src/ui/theme.c:2237 #: ../src/ui/theme.c:2236
#, c-format #, c-format
msgid "Coordinate expression ended with an operator instead of an operand" msgid "Coordinate expression ended with an operator instead of an operand"
msgstr "كوئوردېنات ئىپادىسى سان بىلەن ئاياغلاشماي ئەمەل بىلەن ئاياغلاشقان" msgstr "كوئوردېنات ئىپادىسى سان بىلەن ئاياغلاشماي ئەمەل بىلەن ئاياغلاشقان"
#: ../src/ui/theme.c:2247 #: ../src/ui/theme.c:2246
#, c-format #, c-format
msgid "" msgid ""
"Coordinate expression has operator \"%c\" following operator \"%c\" with no " "Coordinate expression has operator \"%c\" following operator \"%c\" with no "
"operand in between" "operand in between"
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل «%2$c» نىڭ ئارقىسىدىن ئەمەل «%1$c» كېلىپتۇ، ئارىلىقتا سان يوق ئىكەن" msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل «%2$c» نىڭ ئارقىسىدىن ئەمەل «%1$c» كېلىپتۇ، ئارىلىقتا سان يوق ئىكەن"
#: ../src/ui/theme.c:2398 ../src/ui/theme.c:2443 #: ../src/ui/theme.c:2397 ../src/ui/theme.c:2442
#, c-format #, c-format
msgid "Coordinate expression had unknown variable or constant \"%s\"" msgid "Coordinate expression had unknown variable or constant \"%s\""
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە نامەلۇم ئۆزگەرگۈچى ياكى تۇراقلىق سان «%s» بار ئىكەن" msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە نامەلۇم ئۆزگەرگۈچى ياكى تۇراقلىق سان «%s» بار ئىكەن"
#: ../src/ui/theme.c:2497 #: ../src/ui/theme.c:2496
#, c-format #, c-format
msgid "Coordinate expression parser overflowed its buffer." msgid "Coordinate expression parser overflowed its buffer."
msgstr "كوئوردېنات ئىپادىسىنى تەھلىل قىلىۋاتقاندا يىغلەك تېشىپ كەتتى." msgstr "كوئوردېنات ئىپادىسىنى تەھلىل قىلىۋاتقاندا يىغلەك تېشىپ كەتتى."
#: ../src/ui/theme.c:2526 #: ../src/ui/theme.c:2525
#, c-format #, c-format
msgid "Coordinate expression had a close parenthesis with no open parenthesis" msgid "Coordinate expression had a close parenthesis with no open parenthesis"
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدىكى يېپىلغان تىرناققا ماس كېلىدىغان ئېچىلغان تىرناق يوق" msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدىكى يېپىلغان تىرناققا ماس كېلىدىغان ئېچىلغان تىرناق يوق"
#: ../src/ui/theme.c:2590 #: ../src/ui/theme.c:2589
#, c-format #, c-format
msgid "Coordinate expression had an open parenthesis with no close parenthesis" msgid "Coordinate expression had an open parenthesis with no close parenthesis"
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدىكى ئېچىلغان تىرناققا ماس كېلىدىغان يېپىلغان تىرناق يوق" msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدىكى ئېچىلغان تىرناققا ماس كېلىدىغان يېپىلغان تىرناق يوق"
#: ../src/ui/theme.c:2601 #: ../src/ui/theme.c:2600
#, c-format #, c-format
msgid "Coordinate expression doesn't seem to have any operators or operands" msgid "Coordinate expression doesn't seem to have any operators or operands"
msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل(قوشۇش، ئېلىش...) ياكى سان يوق" msgstr "كوئوردېنات ئىپادىسىنىڭ تەركىبىدە ئەمەل(قوشۇش، ئېلىش...) ياكى سان يوق"
#: ../src/ui/theme.c:2814 ../src/ui/theme.c:2834 ../src/ui/theme.c:2854 #: ../src/ui/theme.c:2813 ../src/ui/theme.c:2833 ../src/ui/theme.c:2853
#, c-format #, c-format
msgid "Theme contained an expression that resulted in an error: %s\n" msgid "Theme contained an expression that resulted in an error: %s\n"
msgstr "ئۆرنەك تەركىبىدە خاتالىق چىقىرىدىغان ئىپادە بار: %s\n" msgstr "ئۆرنەك تەركىبىدە خاتالىق چىقىرىدىغان ئىپادە بار: %s\n"
#: ../src/ui/theme.c:4500 #: ../src/ui/theme.c:4499
#, c-format #, c-format
msgid "" msgid ""
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be " "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
"specified for this frame style" "specified for this frame style"
msgstr "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/>بۇ كۆزنەكنىڭ ئۇسلۇبى ئۈچۈن بەلگىلىنىشى زۆرۈر" msgstr "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/>بۇ كۆزنەكنىڭ ئۇسلۇبى ئۈچۈن بەلگىلىنىشى زۆرۈر"
#: ../src/ui/theme.c:5011 ../src/ui/theme.c:5036 #: ../src/ui/theme.c:5010 ../src/ui/theme.c:5035
#, c-format #, c-format
msgid "" msgid ""
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>" "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
msgstr "<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> يوق" msgstr "<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> يوق"
#: ../src/ui/theme.c:5084 #: ../src/ui/theme.c:5083
#, c-format #, c-format
msgid "Failed to load theme \"%s\": %s\n" msgid "Failed to load theme \"%s\": %s\n"
msgstr "ئۆرنەك «%s» نى ئوقۇش مەغلۇپ بولدى: %s\n" msgstr "ئۆرنەك «%s» نى ئوقۇش مەغلۇپ بولدى: %s\n"
#: ../src/ui/theme.c:5220 ../src/ui/theme.c:5227 ../src/ui/theme.c:5234 #: ../src/ui/theme.c:5219 ../src/ui/theme.c:5226 ../src/ui/theme.c:5233
#: ../src/ui/theme.c:5241 ../src/ui/theme.c:5248 #: ../src/ui/theme.c:5240 ../src/ui/theme.c:5247
#, c-format #, c-format
msgid "No <%s> set for theme \"%s\"" msgid "No <%s> set for theme \"%s\""
msgstr "ئۆرنەك «%2$s» نىڭ <%1$s> ئى بەلگىلەنمىگەن" msgstr "ئۆرنەك «%2$s» نىڭ <%1$s> ئى بەلگىلەنمىگەن"
#: ../src/ui/theme.c:5256 #: ../src/ui/theme.c:5255
#, c-format #, c-format
msgid "" msgid ""
"No frame style set for window type \"%s\" in theme \"%s\", add a <window " "No frame style set for window type \"%s\" in theme \"%s\", add a <window "
"type=\"%s\" style_set=\"whatever\"/> element" "type=\"%s\" style_set=\"whatever\"/> element"
msgstr "ئۆرنەك «%2$s» نىڭ ئىچىدىكى كۆزنەك تىپى <%1$s> نىڭ كاندۇك ئۇسلۇبى بەلگىلەنمىگەن. بىر <window type=\"%3$s\" style_set=\"whatever\"/> ئېلېمېنتى قوشۇڭ" msgstr "ئۆرنەك «%2$s» نىڭ ئىچىدىكى كۆزنەك تىپى <%1$s> نىڭ كاندۇك ئۇسلۇبى بەلگىلەنمىگەن. بىر <window type=\"%3$s\" style_set=\"whatever\"/> ئېلېمېنتى قوشۇڭ"
#: ../src/ui/theme.c:5663 ../src/ui/theme.c:5725 ../src/ui/theme.c:5788 #: ../src/ui/theme.c:5659 ../src/ui/theme.c:5721 ../src/ui/theme.c:5784
#, c-format #, c-format
msgid "" msgid ""
"User-defined constants must begin with a capital letter; \"%s\" does not" "User-defined constants must begin with a capital letter; \"%s\" does not"
msgstr "ئىشلەتكۈچى بەلگىلىگەن تۇراقلىق مىقدار چوقۇم چوڭ ھەرپ بىلەن باشلانسۇن؛ «%s» بولمايدۇ" msgstr "ئىشلەتكۈچى بەلگىلىگەن تۇراقلىق مىقدار چوقۇم چوڭ ھەرپ بىلەن باشلانسۇن؛ «%s» بولمايدۇ"
#: ../src/ui/theme.c:5671 ../src/ui/theme.c:5733 ../src/ui/theme.c:5796 #: ../src/ui/theme.c:5667 ../src/ui/theme.c:5729 ../src/ui/theme.c:5792
#, c-format #, c-format
msgid "Constant \"%s\" has already been defined" msgid "Constant \"%s\" has already been defined"
msgstr "تۇراقلىق سان «%s» غا ئېنىقلىما بېرىلگەن" msgstr "تۇراقلىق سان «%s» غا ئېنىقلىما بېرىلگەن"
@@ -1470,7 +1474,7 @@ msgstr "ئېلېمېنت <%s> نىڭ ئىچىدە تېكىست بولسا بول
msgid "<%s> specified twice for this theme" msgid "<%s> specified twice for this theme"
msgstr "بۇ ئۆرنەك ئۈچۈن <%s> ئىككى قېتىم بەلگىلەنگەن" msgstr "بۇ ئۆرنەك ئۈچۈن <%s> ئىككى قېتىم بەلگىلەنگەن"
#: ../src/ui/theme-parser.c:4336 #: ../src/ui/theme-parser.c:4334
#, c-format #, c-format
msgid "Failed to find a valid file for theme %s\n" msgid "Failed to find a valid file for theme %s\n"
msgstr "ئۆرنەك %s ئۈچۈن ئىناۋەتلىك ھۆججەتنى تېپىش مەغلۇپ بولدى\n" msgstr "ئۆرنەك %s ئۈچۈن ئىناۋەتلىك ھۆججەتنى تېپىش مەغلۇپ بولدى\n"
@@ -1576,96 +1580,96 @@ msgstr "گىرۋەك"
msgid "Attached Modal Dialog" msgid "Attached Modal Dialog"
msgstr "قوشۇلغان Modal سۆزلەشكۈ" msgstr "قوشۇلغان Modal سۆزلەشكۈ"
#: ../src/ui/theme-viewer.c:737 #: ../src/ui/theme-viewer.c:739
#, c-format #, c-format
msgid "Button layout test %d" msgid "Button layout test %d"
msgstr "توپچا ئورۇنلاشتۇرۇلۇشىنى سىناش %d" msgstr "توپچا ئورۇنلاشتۇرۇلۇشىنى سىناش %d"
#: ../src/ui/theme-viewer.c:766 #: ../src/ui/theme-viewer.c:768
#, c-format #, c-format
msgid "%g milliseconds to draw one window frame" msgid "%g milliseconds to draw one window frame"
msgstr "بىر كۆزنەك كاندۇكىنى سىزىشقا كەتكەن ۋاقىت %g مىللىسېكۇنت" msgstr "بىر كۆزنەك كاندۇكىنى سىزىشقا كەتكەن ۋاقىت %g مىللىسېكۇنت"
#: ../src/ui/theme-viewer.c:811 #: ../src/ui/theme-viewer.c:813
#, c-format #, c-format
msgid "Usage: metacity-theme-viewer [THEMENAME]\n" msgid "Usage: metacity-theme-viewer [THEMENAME]\n"
msgstr "ئىشلىتىش ئۇسۇلى: metacity-theme-viewer [ئۆرنەك ئاتى]\n" msgstr "ئىشلىتىش ئۇسۇلى: metacity-theme-viewer [ئۆرنەك ئاتى]\n"
#: ../src/ui/theme-viewer.c:818 #: ../src/ui/theme-viewer.c:820
#, c-format #, c-format
msgid "Error loading theme: %s\n" msgid "Error loading theme: %s\n"
msgstr "ئۆرنەك ئوقۇشتا خاتالىق كۆرۈلدى: %s\n" msgstr "ئۆرنەك ئوقۇشتا خاتالىق كۆرۈلدى: %s\n"
#: ../src/ui/theme-viewer.c:824 #: ../src/ui/theme-viewer.c:826
#, c-format #, c-format
msgid "Loaded theme \"%s\" in %g seconds\n" msgid "Loaded theme \"%s\" in %g seconds\n"
msgstr "«%s» دېگەن ئۆرنەكنى %g سېكۇنتتا ئوقۇدى\n" msgstr "«%s» دېگەن ئۆرنەكنى %g سېكۇنتتا ئوقۇدى\n"
#: ../src/ui/theme-viewer.c:869 #: ../src/ui/theme-viewer.c:871
msgid "Normal Title Font" msgid "Normal Title Font"
msgstr "ئادەتتىكى ماۋزۇ خەت نۇسخىسى" msgstr "ئادەتتىكى ماۋزۇ خەت نۇسخىسى"
#: ../src/ui/theme-viewer.c:875 #: ../src/ui/theme-viewer.c:877
msgid "Small Title Font" msgid "Small Title Font"
msgstr "تارماق ماۋزۇ خەت نۇسخىسى" msgstr "تارماق ماۋزۇ خەت نۇسخىسى"
#: ../src/ui/theme-viewer.c:881 #: ../src/ui/theme-viewer.c:883
msgid "Large Title Font" msgid "Large Title Font"
msgstr "ماۋزۇ خەت نۇسخىسى" msgstr "ماۋزۇ خەت نۇسخىسى"
#: ../src/ui/theme-viewer.c:886 #: ../src/ui/theme-viewer.c:888
msgid "Button Layouts" msgid "Button Layouts"
msgstr "توپچا جايلاشتۇرۇشلىرى" msgstr "توپچا جايلاشتۇرۇشلىرى"
#: ../src/ui/theme-viewer.c:891 #: ../src/ui/theme-viewer.c:893
msgid "Benchmark" msgid "Benchmark"
msgstr "ئاساسىي كۆرسەتكۈچ" msgstr "ئاساسىي كۆرسەتكۈچ"
#: ../src/ui/theme-viewer.c:947 #: ../src/ui/theme-viewer.c:949
msgid "Window Title Goes Here" msgid "Window Title Goes Here"
msgstr "بۇ يەردە كۆزنەك ماۋزۇسى كۆرسىتىلىدۇ" msgstr "بۇ يەردە كۆزنەك ماۋزۇسى كۆرسىتىلىدۇ"
#: ../src/ui/theme-viewer.c:1053 #: ../src/ui/theme-viewer.c:1055
#, c-format #, c-format
msgid "" msgid ""
"Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g " "Drew %d frames in %g client-side seconds (%g milliseconds per frame) and %g "
"seconds wall clock time including X server resources (%g milliseconds per " "seconds wall clock time including X server resources (%g milliseconds per "
"frame)\n" "frame)\n"
msgstr "%d دانە كاندۇك خېرىدار تەرەپتە %g سېكۇنتتا سىزىلدى(بىر كاندۇك ئۈچۈن %g مىللىسېكۇنت). ئەمەلىيەتتە X مۇلازىمېتىرىنىڭ مەنبەلىرىنىمۇ قوشۇپ %g سېكۇنت(بىر كاندۇكنى %g مىللىسېكۇنت) ۋاقىتتا سىزدى.\n" msgstr "在 %2$g 的客户端秒(每帧 %3$g 毫秒)和包括 X 服务器资源在内的 %4$g 秒时钟时间(每帧 %5$g 毫秒)内绘制 %1$d 帧\n"
#: ../src/ui/theme-viewer.c:1273 #: ../src/ui/theme-viewer.c:1275
msgid "position expression test returned TRUE but set error" msgid "position expression test returned TRUE but set error"
msgstr "ئورۇن ئىپادىسىنى سىناشتا TRUE قايتتى بىراق خاتالىق كۆرۈلدى" msgstr "ئورۇن ئىپادىسىنى سىناشتا TRUE قايتتى بىراق خاتالىق كۆرۈلدى"
#: ../src/ui/theme-viewer.c:1275 #: ../src/ui/theme-viewer.c:1277
msgid "position expression test returned FALSE but didn't set error" msgid "position expression test returned FALSE but didn't set error"
msgstr "ئورۇن ئىپادىسىنى سىناشتا FALSE قايتتى بىراق خاتالىق كۆرۈلمىدى" msgstr "ئورۇن ئىپادىسىنى سىناشتا FALSE قايتتى بىراق خاتالىق كۆرۈلمىدى"
#: ../src/ui/theme-viewer.c:1279 #: ../src/ui/theme-viewer.c:1281
msgid "Error was expected but none given" msgid "Error was expected but none given"
msgstr "خاتالىق چىقىدىغان يەردە خاتالىق چىقمىدى" msgstr "خاتالىق چىقىدىغان يەردە خاتالىق چىقمىدى"
#: ../src/ui/theme-viewer.c:1281 #: ../src/ui/theme-viewer.c:1283
#, c-format #, c-format
msgid "Error %d was expected but %d given" msgid "Error %d was expected but %d given"
msgstr "خاتالىق %d چىقىدىغان يەردە %d چىقتى" msgstr "خاتالىق %d چىقىدىغان يەردە %d چىقتى"
#: ../src/ui/theme-viewer.c:1287 #: ../src/ui/theme-viewer.c:1289
#, c-format #, c-format
msgid "Error not expected but one was returned: %s" msgid "Error not expected but one was returned: %s"
msgstr "خاتالىق چىقمايدىغان يەردە بىر خاتالىق چىقىپ قالدى: %s" msgstr "خاتالىق چىقمايدىغان يەردە بىر خاتالىق چىقىپ قالدى: %s"
#: ../src/ui/theme-viewer.c:1291 #: ../src/ui/theme-viewer.c:1293
#, c-format #, c-format
msgid "x value was %d, %d was expected" msgid "x value was %d, %d was expected"
msgstr "x نىڭ قىممىتى %d ئىكەن، ئەسلى %d بولسا بولاتتى" msgstr "x نىڭ قىممىتى %d ئىكەن، ئەسلى %d بولسا بولاتتى"
#: ../src/ui/theme-viewer.c:1294 #: ../src/ui/theme-viewer.c:1296
#, c-format #, c-format
msgid "y value was %d, %d was expected" msgid "y value was %d, %d was expected"
msgstr "y نىڭ قىممىتى %d ئىكەن، ئەسلى %d بولسا بولاتتى" msgstr "y نىڭ قىممىتى %d ئىكەن، ئەسلى %d بولسا بولاتتى"
#: ../src/ui/theme-viewer.c:1359 #: ../src/ui/theme-viewer.c:1361
#, c-format #, c-format
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n" msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
msgstr "%d كوئوردېنات ئىپادىسى %g سېكۇنتتا تەھلىل قىلىندى(%g ئوتتۇرىچە سېكۇنت)\n" msgstr "%d كوئوردېنات ئىپادىسى %g سېكۇنتتا تەھلىل قىلىندى(%g ئوتتۇرىچە سېكۇنت)\n"

648
po/vi.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -3,12 +3,11 @@
lib_LTLIBRARIES = libmutter.la lib_LTLIBRARIES = libmutter.la
SUBDIRS=compositor/plugins SUBDIRS=wm-tester tools compositor/plugins
INCLUDES= \ INCLUDES= \
-DCLUTTER_ENABLE_EXPERIMENTAL_API \ -DCLUTTER_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_API \ -DCOGL_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_2_0_API \
$(MUTTER_CFLAGS) \ $(MUTTER_CFLAGS) \
-I$(srcdir) \ -I$(srcdir) \
-I$(srcdir)/core \ -I$(srcdir)/core \
@@ -30,33 +29,23 @@ INCLUDES= \
-DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\" -DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\"
mutter_built_sources = \ mutter_built_sources = \
$(dbus_idle_built_sources) \ mutter-enum-types.h \
$(dbus_xrandr_built_sources) \
mutter-enum-types.h \
mutter-enum-types.c mutter-enum-types.c
libmutter_la_SOURCES = \ libmutter_la_SOURCES = \
core/async-getprop.c \ core/async-getprop.c \
core/async-getprop.h \ core/async-getprop.h \
core/barrier.c \
meta/barrier.h \
core/bell.c \ core/bell.c \
core/bell.h \ core/bell.h \
core/boxes.c \ core/boxes.c \
core/boxes-private.h \ core/boxes-private.h \
meta/boxes.h \ meta/boxes.h \
compositor/clutter-utils.c \
compositor/clutter-utils.h \
compositor/cogl-utils.c \ compositor/cogl-utils.c \
compositor/cogl-utils.h \ compositor/cogl-utils.h \
compositor/compositor.c \ compositor/compositor.c \
compositor/compositor-private.h \ compositor/compositor-private.h \
compositor/meta-background.c \
compositor/meta-background-actor.c \ compositor/meta-background-actor.c \
compositor/meta-background-actor-private.h \ compositor/meta-background-actor-private.h \
compositor/meta-background-group.c \
compositor/meta-cullable.c \
compositor/meta-cullable.h \
compositor/meta-module.c \ compositor/meta-module.c \
compositor/meta-module.h \ compositor/meta-module.h \
compositor/meta-plugin.c \ compositor/meta-plugin.c \
@@ -78,9 +67,7 @@ libmutter_la_SOURCES = \
compositor/region-utils.c \ compositor/region-utils.c \
compositor/region-utils.h \ compositor/region-utils.h \
meta/compositor.h \ meta/compositor.h \
meta/meta-background.h \
meta/meta-background-actor.h \ meta/meta-background-actor.h \
meta/meta-background-group.h \
meta/meta-plugin.h \ meta/meta-plugin.h \
meta/meta-shadow-factory.h \ meta/meta-shadow-factory.h \
meta/meta-window-actor.h \ meta/meta-window-actor.h \
@@ -97,10 +84,10 @@ libmutter_la_SOURCES = \
ui/draw-workspace.h \ ui/draw-workspace.h \
core/edge-resistance.c \ core/edge-resistance.c \
core/edge-resistance.h \ core/edge-resistance.h \
core/edid-parse.c \
core/edid.h \
core/errors.c \ core/errors.c \
meta/errors.h \ meta/errors.h \
core/eventqueue.c \
core/eventqueue.h \
core/frame.c \ core/frame.c \
core/frame.h \ core/frame.h \
ui/gradient.c \ ui/gradient.c \
@@ -115,15 +102,6 @@ libmutter_la_SOURCES = \
core/keybindings.c \ core/keybindings.c \
core/keybindings-private.h \ core/keybindings-private.h \
core/main.c \ core/main.c \
core/meta-cursor-tracker.c \
core/meta-cursor-tracker-private.h \
core/meta-idle-monitor.c \
core/meta-idle-monitor-private.h \
core/meta-xrandr-shared.h \
core/monitor.c \
core/monitor-config.c \
core/monitor-private.h \
core/monitor-xrandr.c \
core/mutter-Xatomtype.h \ core/mutter-Xatomtype.h \
core/place.c \ core/place.c \
core/place.h \ core/place.h \
@@ -153,6 +131,7 @@ libmutter_la_SOURCES = \
meta/common.h \ meta/common.h \
core/core.h \ core/core.h \
ui/ui.h \ ui/ui.h \
inlinepixbufs.h \
ui/frames.c \ ui/frames.c \
ui/frames.h \ ui/frames.h \
ui/menu.c \ ui/menu.c \
@@ -169,9 +148,9 @@ libmutter_la_SOURCES = \
ui/theme.c \ ui/theme.c \
meta/theme.h \ meta/theme.h \
ui/theme-private.h \ ui/theme-private.h \
ui/ui.c ui/ui.c \
meta/preview-widget.h \
nodist_libmutter_la_SOURCES = \ ui/preview-widget.c \
$(mutter_built_sources) $(mutter_built_sources)
libmutter_la_LDFLAGS = -no-undefined libmutter_la_LDFLAGS = -no-undefined
@@ -180,7 +159,6 @@ libmutter_la_LIBADD = $(MUTTER_LIBS)
# Headers installed for plugins; introspected information will # Headers installed for plugins; introspected information will
# be extracted into Mutter-<version>.gir # be extracted into Mutter-<version>.gir
libmutterinclude_base_headers = \ libmutterinclude_base_headers = \
meta/barrier.h \
meta/boxes.h \ meta/boxes.h \
meta/common.h \ meta/common.h \
meta/compositor-mutter.h \ meta/compositor-mutter.h \
@@ -192,10 +170,6 @@ libmutterinclude_base_headers = \
meta/keybindings.h \ meta/keybindings.h \
meta/main.h \ meta/main.h \
meta/meta-background-actor.h \ meta/meta-background-actor.h \
meta/meta-background-group.h \
meta/meta-background.h \
meta/meta-cursor-tracker.h \
meta/meta-idle-monitor.h \
meta/meta-plugin.h \ meta/meta-plugin.h \
meta/meta-shaped-texture.h \ meta/meta-shaped-texture.h \
meta/meta-shadow-factory.h \ meta/meta-shadow-factory.h \
@@ -211,6 +185,7 @@ libmutterinclude_base_headers = \
# Excluded from scanning for introspection but installed # Excluded from scanning for introspection but installed
# atomnames.h: macros cause problems for scanning process # atomnames.h: macros cause problems for scanning process
libmutterinclude_extra_headers = \ libmutterinclude_extra_headers = \
meta/preview-widget.h \
meta/atomnames.h meta/atomnames.h
libmutterincludedir = $(includedir)/mutter/meta libmutterincludedir = $(includedir)/mutter/meta
@@ -219,7 +194,10 @@ libmutterinclude_HEADERS = \
$(libmutterinclude_base_headers) \ $(libmutterinclude_base_headers) \
$(libmutterinclude_extra_headers) $(libmutterinclude_extra_headers)
bin_PROGRAMS=mutter mutter_theme_viewer_SOURCES= \
ui/theme-viewer.c
bin_PROGRAMS=mutter mutter-theme-viewer
mutter_SOURCES = core/mutter.c mutter_SOURCES = core/mutter.c
mutter_LDADD = $(MUTTER_LIBS) libmutter.la mutter_LDADD = $(MUTTER_LIBS) libmutter.la
@@ -252,11 +230,13 @@ Meta-$(api_version).gir: libmutter.la
@META_GIR@_FILES = \ @META_GIR@_FILES = \
mutter-enum-types.h \ mutter-enum-types.h \
$(libmutterinclude_base_headers) \ $(libmutterinclude_base_headers) \
$(filter %.c,$(libmutter_la_SOURCES) $(nodist_libmutter_la_SOURCES)) $(filter %.c,$(libmutter_la_SOURCES))
@META_GIR@_SCANNERFLAGS = --warn-all --warn-error @META_GIR@_SCANNERFLAGS = --warn-all --warn-error
endif endif
mutter_theme_viewer_LDADD= $(MUTTER_LIBS) libmutter.la
testboxes_SOURCES = core/testboxes.c testboxes_SOURCES = core/testboxes.c
testgradient_SOURCES = ui/testgradient.c testgradient_SOURCES = ui/testgradient.c
testasyncgetprop_SOURCES = core/testasyncgetprop.c testasyncgetprop_SOURCES = core/testasyncgetprop.c
@@ -293,7 +273,14 @@ gsettings_SCHEMAS = org.gnome.mutter.gschema.xml
convertdir = $(datadir)/GConf/gsettings convertdir = $(datadir)/GConf/gsettings
convert_DATA = mutter-schemas.convert convert_DATA = mutter-schemas.convert
IMAGES=stock_maximize.png stock_minimize.png stock_delete.png
VARIABLES=stock_maximize_data $(srcdir)/stock_maximize.png \
stock_minimize_data $(srcdir)/stock_minimize.png \
stock_delete_data $(srcdir)/stock_delete.png
BUILT_SOURCES = inlinepixbufs.h
CLEANFILES = \ CLEANFILES = \
inlinepixbufs.h \
mutter.desktop \ mutter.desktop \
mutter-wm.desktop \ mutter-wm.desktop \
org.gnome.mutter.gschema.xml \ org.gnome.mutter.gschema.xml \
@@ -302,6 +289,9 @@ CLEANFILES = \
$(typelib_DATA) \ $(typelib_DATA) \
$(gir_DATA) $(gir_DATA)
inlinepixbufs.h: $(IMAGES)
$(GDK_PIXBUF_CSOURCE) --raw --build-list $(VARIABLES) >$(srcdir)/inlinepixbufs.h
pkgconfigdir = $(libdir)/pkgconfig pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libmutter.pc mutter-plugins.pc pkgconfig_DATA = libmutter.pc mutter-plugins.pc
@@ -313,15 +303,13 @@ EXTRA_DIST=$(desktopfiles_files) \
$(wmproperties_in_files) \ $(wmproperties_in_files) \
$(xml_in_files) \ $(xml_in_files) \
org.gnome.mutter.gschema.xml.in \ org.gnome.mutter.gschema.xml.in \
idle-monitor.xml \
xrandr.xml \
mutter-schemas.convert \ mutter-schemas.convert \
libmutter.pc.in \ libmutter.pc.in \
mutter-plugins.pc.in \ mutter-plugins.pc.in \
mutter-enum-types.h.in \ mutter-enum-types.h.in \
mutter-enum-types.c.in mutter-enum-types.c.in
BUILT_SOURCES = $(mutter_built_sources) BUILT_SOURCES += $(mutter_built_sources)
MUTTER_STAMP_FILES = stamp-mutter-enum-types.h MUTTER_STAMP_FILES = stamp-mutter-enum-types.h
CLEANFILES += $(MUTTER_STAMP_FILES) CLEANFILES += $(MUTTER_STAMP_FILES)
@@ -343,22 +331,3 @@ mutter-enum-types.c: stamp-mutter-enum-types.h mutter-enum-types.c.in
$(libmutterinclude_base_headers) ) >> xgen-tetc && \ $(libmutterinclude_base_headers) ) >> xgen-tetc && \
cp xgen-tetc mutter-enum-types.c && \ cp xgen-tetc mutter-enum-types.c && \
rm -f xgen-tetc rm -f xgen-tetc
dbus_xrandr_built_sources = meta-dbus-xrandr.c meta-dbus-xrandr.h
$(dbus_xrandr_built_sources) : Makefile.am xrandr.xml
$(AM_V_GEN)gdbus-codegen \
--interface-prefix org.gnome.Mutter \
--c-namespace MetaDBus \
--generate-c-code meta-dbus-xrandr \
$(srcdir)/xrandr.xml
dbus_idle_built_sources = meta-dbus-idle-monitor.c meta-dbus-idle-monitor.h
$(dbus_idle_built_sources) : Makefile.am idle-monitor.xml
$(AM_V_GEN)gdbus-codegen \
--interface-prefix org.gnome.Mutter \
--c-namespace MetaDBus \
--generate-c-code meta-dbus-idle-monitor \
--c-generate-object-manager \
$(srcdir)/idle-monitor.xml

View File

@@ -1,120 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Utilities for use with Cogl
*
* Copyright 2010 Red Hat, Inc.
* Copyright 2010 Intel Corporation
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "clutter-utils.h"
#include <math.h>
/* This file uses pixel-aligned region computation to determine what
* can be clipped out. This only really works if everything is aligned
* to the pixel grid - not scaled or rotated and at integer offsets.
*
* (This could be relaxed - if we turned off filtering for unscaled
* windows then windows would be, by definition aligned to the pixel
* grid. And for rectangular windows without a shape, the outline that
* we draw for an unrotated window is always a rectangle because we
* don't use antialasing for the window boundary - with or without
* filtering, with or without a scale. But figuring out exactly
* what pixels will be drawn by the graphics system in these cases
* gets tricky, so we just go for the easiest part - no scale,
* and at integer offsets.)
*
* The way we check for pixel-aligned is by looking at the
* transformation into screen space of the allocation box of an actor
* and and checking if the corners are "close enough" to integral
* pixel values.
*/
/* The definition of "close enough" to integral pixel values is
* equality when we convert to 24.8 fixed-point.
*/
static inline int
round_to_fixed (float x)
{
return roundf (x * 256);
}
/* This helper function checks if (according to our fixed point precision)
* the vertices @verts form a box of width @widthf and height @heightf
* located at integral coordinates. These coordinates are returned
* in @x_origin and @y_origin.
*/
gboolean
meta_actor_vertices_are_untransformed (ClutterVertex *verts,
float widthf,
float heightf,
int *x_origin,
int *y_origin)
{
int width, height;
int v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y;
int x, y;
width = round_to_fixed (widthf); height = round_to_fixed (heightf);
v0x = round_to_fixed (verts[0].x); v0y = round_to_fixed (verts[0].y);
v1x = round_to_fixed (verts[1].x); v1y = round_to_fixed (verts[1].y);
v2x = round_to_fixed (verts[2].x); v2y = round_to_fixed (verts[2].y);
v3x = round_to_fixed (verts[3].x); v3y = round_to_fixed (verts[3].y);
/* Using shifting for converting fixed => int, gets things right for
* negative values. / 256. wouldn't do the same
*/
x = v0x >> 8;
y = v0y >> 8;
/* At integral coordinates? */
if (x * 256 != v0x || y * 256 != v0y)
return FALSE;
/* Not scaled? */
if (v1x - v0x != width || v2y - v0y != height)
return FALSE;
/* Not rotated/skewed? */
if (v0x != v2x || v0y != v1y ||
v3x != v1x || v3y != v2y)
return FALSE;
*x_origin = x;
*y_origin = y;
return TRUE;
}
/* Check if an actor is "untransformed" - which actually means transformed by
* at most a integer-translation. The integer translation, if any, is returned.
*/
gboolean
meta_actor_is_untransformed (ClutterActor *actor,
int *x_origin,
int *y_origin)
{
gfloat widthf, heightf;
ClutterVertex verts[4];
clutter_actor_get_size (actor, &widthf, &heightf);
clutter_actor_get_abs_allocation_vertices (actor, verts);
return meta_actor_vertices_are_untransformed (verts, widthf, heightf, x_origin, y_origin);
}

View File

@@ -1,36 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Utilities for use with Clutter
*
* Copyright 2010 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef __META_CLUTTER_UTILS_H__
#define __META_CLUTTER_UTILS_H__
#include <clutter/clutter.h>
gboolean meta_actor_vertices_are_untransformed (ClutterVertex *verts,
float widthf,
float heightf,
int *x_origin,
int *y_origin);
gboolean meta_actor_is_untransformed (ClutterActor *actor,
int *x_origin,
int *y_origin);
#endif /* __META_CLUTTER_UTILS_H__ */

View File

@@ -21,15 +21,14 @@
* 02111-1307, USA. * 02111-1307, USA.
*/ */
#include <clutter/clutter.h>
#include "cogl-utils.h" #include "cogl-utils.h"
/** /**
* meta_create_color_texture_4ub: * meta_create_color_texture_4ub:
* @red: red component * @red:
* @green: green component * @green:
* @blue: blue component * @blue:
* @alpha: alpha component * @alpha:
* @flags: Optional flags for the texture, or %COGL_TEXTURE_NONE; * @flags: Optional flags for the texture, or %COGL_TEXTURE_NONE;
* %COGL_TEXTURE_NO_SLICING is useful if the texture will be * %COGL_TEXTURE_NO_SLICING is useful if the texture will be
* repeated to create a constant color fill, since hardware * repeated to create a constant color fill, since hardware
@@ -40,7 +39,7 @@
* *
* Return value: (transfer full): a newly created Cogl texture * Return value: (transfer full): a newly created Cogl texture
*/ */
CoglTexture * CoglHandle
meta_create_color_texture_4ub (guint8 red, meta_create_color_texture_4ub (guint8 red,
guint8 green, guint8 green,
guint8 blue, guint8 blue,
@@ -50,7 +49,7 @@ meta_create_color_texture_4ub (guint8 red,
CoglColor color; CoglColor color;
guint8 pixel[4]; guint8 pixel[4];
cogl_color_init_from_4ub (&color, red, green, blue, alpha); cogl_color_set_from_4ub (&color, red, green, blue, alpha);
cogl_color_premultiply (&color); cogl_color_premultiply (&color);
pixel[0] = cogl_color_get_red_byte (&color); pixel[0] = cogl_color_get_red_byte (&color);
@@ -69,42 +68,43 @@ meta_create_color_texture_4ub (guint8 red,
/* Based on gnome-shell/src/st/st-private.c:_st_create_texture_material.c */ /* Based on gnome-shell/src/st/st-private.c:_st_create_texture_material.c */
/** /**
* meta_create_texture_pipeline: * meta_create_texture_material:
* @src_texture: (allow-none): texture to use initially for the layer * @src_texture: (allow-none): texture to use initially for the layer
* *
* Creates a pipeline with a single layer. Using a common template * Creates a material with a single layer. Using a common template
* makes it easier for Cogl to share a shader for different uses in * allows sharing a shader for different uses in Mutter. To share the same
* Mutter. * shader with all other materials that are just texture plus opacity
* would require Cogl fixes.
* (See http://bugzilla.clutter-project.org/show_bug.cgi?id=2425)
* *
* Return value: (transfer full): a newly created #CoglPipeline * Return value: (transfer full): a newly created Cogl material
*/ */
CoglPipeline * CoglHandle
meta_create_texture_pipeline (CoglTexture *src_texture) meta_create_texture_material (CoglHandle src_texture)
{ {
static CoglPipeline *texture_pipeline_template = NULL; static CoglHandle texture_material_template = COGL_INVALID_HANDLE;
CoglPipeline *pipeline; CoglHandle material;
/* The only state used in the pipeline that would affect the shader /* We use a material that has a dummy texture as a base for all
generation is the texture type on the layer. Therefore we create texture materials. The idea is that only the Cogl texture object
a template pipeline which sets this state and all texture would be different in the children so it is likely that Cogl will
pipelines are created as a copy of this. That way Cogl can find be able to share GL programs between all the textures. */
the shader state for the pipeline more quickly by looking at the if (G_UNLIKELY (texture_material_template == COGL_INVALID_HANDLE))
pipeline ancestry instead of resorting to the shader cache. */
if (G_UNLIKELY (texture_pipeline_template == NULL))
{ {
CoglContext *ctx = CoglHandle dummy_texture;
clutter_backend_get_cogl_context (clutter_get_default_backend ());
texture_pipeline_template = cogl_pipeline_new (ctx); dummy_texture = meta_create_color_texture_4ub (0xff, 0xff, 0xff, 0xff,
cogl_pipeline_set_layer_null_texture (texture_pipeline_template, COGL_TEXTURE_NONE);
0, /* layer */
COGL_TEXTURE_TYPE_2D); texture_material_template = cogl_material_new ();
cogl_material_set_layer (texture_material_template, 0, dummy_texture);
cogl_handle_unref (dummy_texture);
} }
pipeline = cogl_pipeline_copy (texture_pipeline_template); material = cogl_material_copy (texture_material_template);
if (src_texture != NULL) if (src_texture != COGL_INVALID_HANDLE)
cogl_pipeline_set_layer_texture (pipeline, 0, src_texture); cogl_material_set_layer (material, 0, src_texture);
return pipeline; return material;
} }

View File

@@ -25,11 +25,11 @@
#include <cogl/cogl.h> #include <cogl/cogl.h>
CoglTexture * meta_create_color_texture_4ub (guint8 red, CoglHandle meta_create_color_texture_4ub (guint8 red,
guint8 green, guint8 green,
guint8 blue, guint8 blue,
guint8 alpha, guint8 alpha,
CoglTextureFlags flags); CoglTextureFlags flags);
CoglPipeline * meta_create_texture_pipeline (CoglTexture *texture); CoglHandle meta_create_texture_material (CoglHandle src_texture);
#endif /* __META_COGL_UTILS_H__ */ #endif /* __META_COGL_UTILS_H__ */

View File

@@ -17,6 +17,8 @@ struct _MetaCompositor
{ {
MetaDisplay *display; MetaDisplay *display;
Atom atom_x_root_pixmap;
Atom atom_net_wm_window_opacity;
guint repaint_func_id; guint repaint_func_id;
ClutterActor *shadow_src; ClutterActor *shadow_src;
@@ -36,8 +38,9 @@ struct _MetaCompScreen
{ {
MetaScreen *screen; MetaScreen *screen;
ClutterActor *stage, *window_group, *top_window_group, *overlay_group; ClutterActor *stage, *window_group, *overlay_group;
ClutterActor *background_actor; ClutterActor *background_actor;
ClutterActor *hidden_group;
GList *windows; GList *windows;
GHashTable *windows_by_xid; GHashTable *windows_by_xid;
Window output; Window output;
@@ -57,13 +60,14 @@ struct _MetaCompScreen
MetaPluginManager *plugin_mgr; MetaPluginManager *plugin_mgr;
}; };
/* Wait 2ms after vblank before starting to draw next frame */
#define META_SYNC_DELAY 2 #define META_SYNC_DELAY 2
void meta_switch_workspace_completed (MetaScreen *screen); void meta_switch_workspace_completed (MetaScreen *screen);
gboolean meta_begin_modal_for_plugin (MetaScreen *screen, gboolean meta_begin_modal_for_plugin (MetaScreen *screen,
MetaPlugin *plugin, MetaPlugin *plugin,
Window grab_window,
Cursor cursor,
MetaModalOptions options, MetaModalOptions options,
guint32 timestamp); guint32 timestamp);
void meta_end_modal_for_plugin (MetaScreen *screen, void meta_end_modal_for_plugin (MetaScreen *screen,

View File

@@ -1,65 +1,9 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* SECTION:compositor
* @Title: MetaCompositor
* @Short_Description: Compositor API
*
* At a high-level, a window is not-visible or visible. When a
* window is added (with meta_compositor_add_window()) it is not visible.
* meta_compositor_show_window() indicates a transition from not-visible to
* visible. Some of the reasons for this:
*
* - Window newly created
* - Window is unminimized
* - Window is moved to the current desktop
* - Window was made sticky
*
* meta_compositor_hide_window() indicates that the window has transitioned from
* visible to not-visible. Some reasons include:
*
* - Window was destroyed
* - Window is minimized
* - Window is moved to a different desktop
* - Window no longer sticky.
*
* Note that combinations are possible - a window might have first
* been minimized and then moved to a different desktop. The 'effect' parameter
* to meta_compositor_show_window() and meta_compositor_hide_window() is a hint
* as to the appropriate effect to show the user and should not
* be considered to be indicative of a state change.
*
* When the active workspace is changed, meta_compositor_switch_workspace() is
* called first, then meta_compositor_show_window() and
* meta_compositor_hide_window() are called individually for each window
* affected, with an effect of META_COMP_EFFECT_NONE.
* If hiding windows will affect the switch workspace animation, the
* compositor needs to delay hiding the windows until the switch
* workspace animation completes.
*
* meta_compositor_maximize_window() and meta_compositor_unmaximize_window()
* are transitions within the visible state. The window is resized __before__
* the call, so it may be necessary to readjust the display based on the
* old_rect to start the animation.
*
* # Containers #
*
* There's two containers in the stage that are used to place window actors, here
* are listed in the order in which they are painted:
*
* - window group, accessible with meta_get_window_group_for_screen()
* - top window group, accessible with meta_get_top_window_group_for_screen()
*
* Mutter will place actors representing windows in the window group, except for
* override-redirect windows (ie. popups and menus) which will be placed in the
* top window group.
*/
#include <config.h> #include <config.h>
#include <clutter/x11/clutter-x11.h> #include <clutter/x11/clutter-x11.h>
#include "core.h"
#include <meta/screen.h> #include <meta/screen.h>
#include <meta/errors.h> #include <meta/errors.h>
#include <meta/window.h> #include <meta/window.h>
@@ -68,11 +12,10 @@
#include "xprops.h" #include "xprops.h"
#include <meta/prefs.h> #include <meta/prefs.h>
#include <meta/main.h> #include <meta/main.h>
#include <meta/meta-background-actor.h>
#include <meta/meta-background-group.h>
#include <meta/meta-shadow-factory.h> #include <meta/meta-shadow-factory.h>
#include "meta-window-actor-private.h" #include "meta-window-actor-private.h"
#include "meta-window-group.h" #include "meta-window-group.h"
#include "meta-background-actor-private.h"
#include "window-private.h" /* to check window->hidden */ #include "window-private.h" /* to check window->hidden */
#include "display-private.h" /* for meta_display_lookup_x_window() */ #include "display-private.h" /* for meta_display_lookup_x_window() */
#include <X11/extensions/shape.h> #include <X11/extensions/shape.h>
@@ -166,6 +109,46 @@ process_damage (MetaCompositor *compositor,
meta_window_actor_process_damage (window_actor, event); meta_window_actor_process_damage (window_actor, event);
} }
static void
process_property_notify (MetaCompositor *compositor,
XPropertyEvent *event,
MetaWindow *window)
{
MetaWindowActor *window_actor;
if (event->atom == compositor->atom_x_root_pixmap)
{
GSList *l;
for (l = meta_display_get_screens (compositor->display); l; l = l->next)
{
MetaScreen *screen = l->data;
if (event->window == meta_screen_get_xroot (screen))
{
meta_background_actor_update (screen);
return;
}
}
}
if (window == NULL)
return;
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
if (window_actor == NULL)
return;
/* Check for the opacity changing */
if (event->atom == compositor->atom_net_wm_window_opacity)
{
meta_window_actor_update_opacity (window_actor);
DEBUG_TRACE ("process_property_notify: net_wm_window_opacity\n");
return;
}
DEBUG_TRACE ("process_property_notify: unknown\n");
}
static Window static Window
get_output_window (MetaScreen *screen) get_output_window (MetaScreen *screen)
{ {
@@ -180,8 +163,6 @@ get_output_window (MetaScreen *screen)
xroot = meta_screen_get_xroot (screen); xroot = meta_screen_get_xroot (screen);
output = XCompositeGetOverlayWindow (xdisplay, xroot); output = XCompositeGetOverlayWindow (xdisplay, xroot);
meta_core_add_old_event_mask (xdisplay, output, &mask);
XISetMask (mask.mask, XI_KeyPress); XISetMask (mask.mask, XI_KeyPress);
XISetMask (mask.mask, XI_KeyRelease); XISetMask (mask.mask, XI_KeyRelease);
XISetMask (mask.mask, XI_ButtonPress); XISetMask (mask.mask, XI_ButtonPress);
@@ -219,6 +200,23 @@ meta_get_stage_for_screen (MetaScreen *screen)
return info->stage; return info->stage;
} }
/**
* meta_get_overlay_group_for_screen:
* @screen: a #MetaScreen
*
* Returns: (transfer none): The overlay group corresponding to @screen
*/
ClutterActor *
meta_get_overlay_group_for_screen (MetaScreen *screen)
{
MetaCompScreen *info = meta_screen_get_compositor_data (screen);
if (!info)
return NULL;
return info->overlay_group;
}
/** /**
* meta_get_window_group_for_screen: * meta_get_window_group_for_screen:
* @screen: a #MetaScreen * @screen: a #MetaScreen
@@ -237,20 +235,24 @@ meta_get_window_group_for_screen (MetaScreen *screen)
} }
/** /**
* meta_get_top_window_group_for_screen: * meta_get_background_actor_for_screen:
* @screen: a #MetaScreen * @screen: a #MetaScreen
* *
* Returns: (transfer none): The top window group corresponding to @screen * Gets the actor that draws the root window background under the windows.
* The root window background automatically tracks the image or color set
* by the environment.
*
* Returns: (transfer none): The background actor corresponding to @screen
*/ */
ClutterActor * ClutterActor *
meta_get_top_window_group_for_screen (MetaScreen *screen) meta_get_background_actor_for_screen (MetaScreen *screen)
{ {
MetaCompScreen *info = meta_screen_get_compositor_data (screen); MetaCompScreen *info = meta_screen_get_compositor_data (screen);
if (!info) if (!info)
return NULL; return NULL;
return info->top_window_group; return info->background_actor;
} }
/** /**
@@ -335,49 +337,11 @@ meta_empty_stage_input_region (MetaScreen *screen)
meta_set_stage_input_region (screen, region); meta_set_stage_input_region (screen, region);
} }
void
meta_focus_stage_window (MetaScreen *screen,
guint32 timestamp)
{
ClutterStage *stage;
Window window;
stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen));
if (!stage)
return;
window = clutter_x11_get_stage_window (stage);
if (window == None)
return;
meta_display_set_input_focus_xwindow (screen->display,
screen,
window,
timestamp);
}
gboolean
meta_stage_is_focused (MetaScreen *screen)
{
ClutterStage *stage;
Window window;
stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen));
if (!stage)
return FALSE;
window = clutter_x11_get_stage_window (stage);
if (window == None)
return FALSE;
return (screen->display->focus_xwindow == window);
}
gboolean gboolean
meta_begin_modal_for_plugin (MetaScreen *screen, meta_begin_modal_for_plugin (MetaScreen *screen,
MetaPlugin *plugin, MetaPlugin *plugin,
Window grab_window,
Cursor cursor,
MetaModalOptions options, MetaModalOptions options,
guint32 timestamp) guint32 timestamp)
{ {
@@ -388,19 +352,10 @@ meta_begin_modal_for_plugin (MetaScreen *screen,
MetaDisplay *display = meta_screen_get_display (screen); MetaDisplay *display = meta_screen_get_display (screen);
Display *xdpy = meta_display_get_xdisplay (display); Display *xdpy = meta_display_get_xdisplay (display);
MetaCompositor *compositor = display->compositor; MetaCompositor *compositor = display->compositor;
ClutterStage *stage;
Window grab_window;
Cursor cursor = None;
gboolean pointer_grabbed = FALSE; gboolean pointer_grabbed = FALSE;
gboolean keyboard_grabbed = FALSE; gboolean keyboard_grabbed = FALSE;
int result; int result;
stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen));
if (!stage)
return FALSE;
grab_window = clutter_x11_get_stage_window (stage);
if (compositor->modal_plugin != NULL || display->grab_op != META_GRAB_OP_NONE) if (compositor->modal_plugin != NULL || display->grab_op != META_GRAB_OP_NONE)
return FALSE; return FALSE;
@@ -508,32 +463,37 @@ meta_check_end_modal (MetaScreen *screen)
{ {
meta_end_modal_for_plugin (screen, meta_end_modal_for_plugin (screen,
compositor->modal_plugin, compositor->modal_plugin,
CurrentTime);
CurrentTime);
} }
} }
static void static void
after_stage_paint (ClutterStage *stage, after_stage_paint (ClutterActor *stage,
gpointer data) MetaCompScreen *info)
{ {
MetaCompScreen *info = (MetaCompScreen*) data;
GList *l; GList *l;
for (l = info->windows; l; l = l->next) for (l = info->windows; l; l = l->next)
meta_window_actor_post_paint (l->data); meta_window_actor_post_paint (l->data);
} }
static void void
redirect_windows (MetaCompositor *compositor, meta_compositor_manage_screen (MetaCompositor *compositor,
MetaScreen *screen) MetaScreen *screen)
{ {
MetaDisplay *display = meta_screen_get_display (screen); MetaCompScreen *info;
Display *xdisplay = meta_display_get_xdisplay (display); MetaDisplay *display = meta_screen_get_display (screen);
Window xroot = meta_screen_get_xroot (screen); Display *xdisplay = meta_display_get_xdisplay (display);
int screen_number = meta_screen_get_screen_number (screen); int screen_number = meta_screen_get_screen_number (screen);
guint n_retries; Window xroot = meta_screen_get_xroot (screen);
guint max_retries; Window xwin;
gint width, height;
guint n_retries;
guint max_retries;
/* Check if the screen is already managed */
if (meta_screen_get_compositor_data (screen))
return;
if (meta_get_replace_current_wm ()) if (meta_get_replace_current_wm ())
max_retries = 5; max_retries = 5;
@@ -566,21 +526,6 @@ redirect_windows (MetaCompositor *compositor,
n_retries++; n_retries++;
g_usleep (G_USEC_PER_SEC); g_usleep (G_USEC_PER_SEC);
} }
}
void
meta_compositor_manage_screen (MetaCompositor *compositor,
MetaScreen *screen)
{
MetaCompScreen *info;
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdisplay = meta_display_get_xdisplay (display);
Window xwin;
gint width, height;
/* Check if the screen is already managed */
if (meta_screen_get_compositor_data (screen))
return;
info = g_new0 (MetaCompScreen, 1); info = g_new0 (MetaCompScreen, 1);
/* /*
@@ -601,12 +546,10 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
meta_screen_set_cm_selection (screen); meta_screen_set_cm_selection (screen);
info->stage = clutter_stage_new (); info->stage = clutter_stage_new ();
g_signal_connect_after (info->stage, "paint",
G_CALLBACK (after_stage_paint), info);
clutter_stage_set_paint_callback (CLUTTER_STAGE (info->stage), /* Wait 6-ms after vblank before starting to draw next frame */
after_stage_paint,
info,
NULL);
clutter_stage_set_sync_delay (CLUTTER_STAGE (info->stage), META_SYNC_DELAY); clutter_stage_set_sync_delay (CLUTTER_STAGE (info->stage), META_SYNC_DELAY);
meta_screen_get_size (screen, &width, &height); meta_screen_get_size (screen, &width, &height);
@@ -622,8 +565,6 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits }; XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits };
XWindowAttributes attr; XWindowAttributes attr;
meta_core_add_old_event_mask (xdisplay, xwin, &mask);
XISetMask (mask.mask, XI_KeyPress); XISetMask (mask.mask, XI_KeyPress);
XISetMask (mask.mask, XI_KeyRelease); XISetMask (mask.mask, XI_KeyRelease);
XISetMask (mask.mask, XI_ButtonPress); XISetMask (mask.mask, XI_ButtonPress);
@@ -633,9 +574,6 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
XISetMask (mask.mask, XI_FocusIn); XISetMask (mask.mask, XI_FocusIn);
XISetMask (mask.mask, XI_FocusOut); XISetMask (mask.mask, XI_FocusOut);
XISetMask (mask.mask, XI_Motion); XISetMask (mask.mask, XI_Motion);
XIClearMask (mask.mask, XI_TouchBegin);
XIClearMask (mask.mask, XI_TouchEnd);
XIClearMask (mask.mask, XI_TouchUpdate);
XISelectEvents (xdisplay, xwin, &mask, 1); XISelectEvents (xdisplay, xwin, &mask, 1);
event_mask = ExposureMask | PropertyChangeMask | StructureNotifyMask; event_mask = ExposureMask | PropertyChangeMask | StructureNotifyMask;
@@ -646,11 +584,31 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
} }
info->window_group = meta_window_group_new (screen); info->window_group = meta_window_group_new (screen);
info->top_window_group = meta_window_group_new (screen); info->background_actor = meta_background_actor_new_for_screen (screen);
info->overlay_group = clutter_group_new ();
info->hidden_group = clutter_group_new ();
clutter_actor_add_child (info->stage, info->window_group); clutter_container_add (CLUTTER_CONTAINER (info->window_group),
clutter_actor_add_child (info->stage, info->top_window_group); info->background_actor,
NULL);
clutter_container_add (CLUTTER_CONTAINER (info->stage),
info->window_group,
info->overlay_group,
info->hidden_group,
NULL);
clutter_actor_hide (info->hidden_group);
info->plugin_mgr = meta_plugin_manager_new (screen);
/*
* Delay the creation of the overlay window as long as we can, to avoid
* blanking out the screen. This means that during the plugin loading, the
* overlay window is not accessible; if the plugin needs to access it
* directly, it should hook into the "show" signal on stage, and do
* its stuff there.
*/
info->output = get_output_window (screen); info->output = get_output_window (screen);
XReparentWindow (xdisplay, xwin, info->output, 0, 0); XReparentWindow (xdisplay, xwin, info->output, 0, 0);
@@ -671,14 +629,8 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
info->pending_input_region = None; info->pending_input_region = None;
} }
info->plugin_mgr = meta_plugin_manager_new (screen); clutter_actor_show (info->overlay_group);
clutter_actor_show (info->stage);
/* Map overlay window before redirecting windows offscreen so we catch their
* contents until we show the stage.
*/
XMapWindow (xdisplay, info->output);
redirect_windows (compositor, screen);
} }
void void
@@ -715,7 +667,7 @@ meta_shape_cow_for_window (MetaScreen *screen,
int width, height; int width, height;
MetaRectangle rect; MetaRectangle rect;
meta_window_get_frame_rect (metaWindow, &rect); meta_window_get_outer_rect (metaWindow, &rect);
window_bounds.x = rect.x; window_bounds.x = rect.x;
window_bounds.y = rect.y; window_bounds.y = rect.y;
@@ -793,21 +745,6 @@ meta_compositor_set_updates_frozen (MetaCompositor *compositor,
meta_window_actor_set_updates_frozen (window_actor, updates_frozen); meta_window_actor_set_updates_frozen (window_actor, updates_frozen);
} }
void
meta_compositor_queue_frame_drawn (MetaCompositor *compositor,
MetaWindow *window,
gboolean no_delay_frame)
{
MetaWindowActor *window_actor;
DEBUG_TRACE ("meta_compositor_queue_frame_drawn\n");
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
if (!window_actor)
return;
meta_window_actor_queue_frame_drawn (window_actor, no_delay_frame);
}
static gboolean static gboolean
is_grabbed_event (MetaDisplay *display, is_grabbed_event (MetaDisplay *display,
XEvent *event) XEvent *event)
@@ -837,75 +774,11 @@ meta_compositor_window_shape_changed (MetaCompositor *compositor,
{ {
MetaWindowActor *window_actor; MetaWindowActor *window_actor;
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window)); window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
if (!window_actor)
return;
meta_window_actor_update_shape (window_actor); meta_window_actor_update_shape (window_actor);
} }
void
meta_compositor_window_opacity_changed (MetaCompositor *compositor,
MetaWindow *window)
{
MetaWindowActor *window_actor;
window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
if (!window_actor)
return;
meta_window_actor_update_opacity (window_actor);
}
/* Clutter makes the assumption that there is only one X window
* per stage, which is a valid assumption to make for a generic
* application toolkit. As such, it will ignore any events sent
* to the a stage that isn't its X window.
*
* When a user clicks on what she thinks is the wallpaper, she
* is actually clicking on the guard window, which is an entirely
* separate top-level override-redirect window in the hierarchy.
* We want to recieve events on this guard window so that users
* can right-click on the background actor. We do this by telling
* Clutter a little white lie, by transforming clicks on the guard
* window to become clicks on the stage window, allowing Clutter
* to process the event normally.
*/
static void
maybe_spoof_guard_window_event_as_stage_event (MetaCompScreen *info,
XEvent *event)
{
MetaDisplay *display = meta_screen_get_display (info->screen);
if (event->type == GenericEvent &&
event->xcookie.extension == display->xinput_opcode)
{
XIEvent *input_event = (XIEvent *) event->xcookie.data;
/* Only care about pointer events for now. */
switch (input_event->evtype)
{
case XI_Motion:
case XI_ButtonPress:
case XI_ButtonRelease:
{
XIDeviceEvent *device_event = ((XIDeviceEvent *) input_event);
if (device_event->event == info->screen->guard_window)
{
Window xwin = clutter_x11_get_stage_window (CLUTTER_STAGE (info->stage));
device_event->event = xwin;
}
}
break;
default:
break;
}
}
}
/** /**
* meta_compositor_process_event: (skip) * meta_compositor_process_event: (skip)
* @compositor:
* @event:
* @window:
* *
*/ */
gboolean gboolean
@@ -915,7 +788,10 @@ meta_compositor_process_event (MetaCompositor *compositor,
{ {
if (compositor->modal_plugin && is_grabbed_event (compositor->display, event)) if (compositor->modal_plugin && is_grabbed_event (compositor->display, event))
{ {
_meta_plugin_xevent_filter (compositor->modal_plugin, event); MetaPluginClass *klass = META_PLUGIN_GET_CLASS (compositor->modal_plugin);
if (klass->xevent_filter)
klass->xevent_filter (compositor->modal_plugin, event);
/* We always consume events even if the plugin says it didn't handle them; /* We always consume events even if the plugin says it didn't handle them;
* exclusive is exclusive */ * exclusive is exclusive */
@@ -949,8 +825,6 @@ meta_compositor_process_event (MetaCompositor *compositor,
info = meta_screen_get_compositor_data (screen); info = meta_screen_get_compositor_data (screen);
maybe_spoof_guard_window_event_as_stage_event (info, event);
if (meta_plugin_manager_xevent_filter (info->plugin_mgr, event)) if (meta_plugin_manager_xevent_filter (info->plugin_mgr, event))
{ {
DEBUG_TRACE ("meta_compositor_process_event (filtered,window==NULL)\n"); DEBUG_TRACE ("meta_compositor_process_event (filtered,window==NULL)\n");
@@ -961,19 +835,28 @@ meta_compositor_process_event (MetaCompositor *compositor,
} }
} }
if (event->type == meta_display_get_damage_event_base (compositor->display) + XDamageNotify) switch (event->type)
{ {
/* Core code doesn't handle damage events, so we need to extract the MetaWindow case PropertyNotify:
* ourselves process_property_notify (compositor, (XPropertyEvent *) event, window);
*/ break;
if (window == NULL)
{
Window xwin = ((XDamageNotifyEvent *) event)->drawable;
window = meta_display_lookup_x_window (compositor->display, xwin);
}
DEBUG_TRACE ("meta_compositor_process_event (process_damage)\n"); default:
process_damage (compositor, (XDamageNotifyEvent *) event, window); if (event->type == meta_display_get_damage_event_base (compositor->display) + XDamageNotify)
{
/* Core code doesn't handle damage events, so we need to extract the MetaWindow
* ourselves
*/
if (window == NULL)
{
Window xwin = ((XDamageNotifyEvent *) event)->drawable;
window = meta_display_lookup_x_window (compositor->display, xwin);
}
DEBUG_TRACE ("meta_compositor_process_event (process_damage)\n");
process_damage (compositor, (XDamageNotifyEvent *) event, window);
}
break;
} }
/* Clutter needs to know about MapNotify events otherwise it will /* Clutter needs to know about MapNotify events otherwise it will
@@ -1097,11 +980,8 @@ static void
sync_actor_stacking (MetaCompScreen *info) sync_actor_stacking (MetaCompScreen *info)
{ {
GList *children; GList *children;
GList *expected_window_node;
GList *tmp; GList *tmp;
GList *old; GList *old;
GList *backgrounds;
gboolean has_windows;
gboolean reordered; gboolean reordered;
/* NB: The first entries in the lists are stacked the lowest */ /* NB: The first entries in the lists are stacked the lowest */
@@ -1110,75 +990,60 @@ sync_actor_stacking (MetaCompScreen *info)
* little effort to make sure we actually need to restack before * little effort to make sure we actually need to restack before
* we go ahead and do it */ * we go ahead and do it */
children = clutter_actor_get_children (info->window_group); children = clutter_container_get_children (CLUTTER_CONTAINER (info->window_group));
has_windows = FALSE;
reordered = FALSE; reordered = FALSE;
old = children;
/* We allow for actors in the window group other than the actors we /* We allow for actors in the window group other than the actors we
* know about, but it's up to a plugin to try and keep them stacked correctly * know about, but it's up to a plugin to try and keep them stacked correctly
* (we really need extra API to make that reliable.) * (we really need extra API to make that reliable.)
*/ */
/* First we collect a list of all backgrounds, and check if they're at the /* Of the actors we know, the bottom actor should be the background actor */
* bottom. Then we check if the window actors are in the correct sequence */
backgrounds = NULL; while (old && old->data != info->background_actor && !META_IS_WINDOW_ACTOR (old->data))
expected_window_node = info->windows; old = old->next;
for (old = children; old != NULL; old = old->next) if (old == NULL || old->data != info->background_actor)
{ {
ClutterActor *actor = old->data; reordered = TRUE;
goto done_with_check;
if (META_IS_BACKGROUND_GROUP (actor) ||
META_IS_BACKGROUND_ACTOR (actor))
{
backgrounds = g_list_prepend (backgrounds, actor);
if (has_windows)
reordered = TRUE;
}
else if (META_IS_WINDOW_ACTOR (actor) && !reordered)
{
has_windows = TRUE;
if (expected_window_node != NULL && actor == expected_window_node->data)
expected_window_node = expected_window_node->next;
else
reordered = TRUE;
}
} }
/* Then the window actors should follow in sequence */
old = old->next;
for (tmp = info->windows; tmp != NULL; tmp = tmp->next)
{
while (old && !META_IS_WINDOW_ACTOR (old->data))
old = old->next;
/* old == NULL: someone reparented a window out of the window group,
* order undefined, always restack */
if (old == NULL || old->data != tmp->data)
{
reordered = TRUE;
goto done_with_check;
}
old = old->next;
}
done_with_check:
g_list_free (children); g_list_free (children);
if (!reordered) if (!reordered)
{ return;
g_list_free (backgrounds);
return;
}
/* reorder the actors by lowering them in turn to the bottom of the stack.
* windows first, then background.
*
* We reorder the actors even if they're not parented to the window group,
* to allow stacking to work with intermediate actors (eg during effects)
*/
for (tmp = g_list_last (info->windows); tmp != NULL; tmp = tmp->prev) for (tmp = g_list_last (info->windows); tmp != NULL; tmp = tmp->prev)
{ {
ClutterActor *actor = tmp->data, *parent; MetaWindowActor *window_actor = tmp->data;
parent = clutter_actor_get_parent (actor); clutter_actor_lower_bottom (CLUTTER_ACTOR (window_actor));
clutter_actor_set_child_below_sibling (parent, actor, NULL);
} }
/* we prepended the backgrounds above so the last actor in the list clutter_actor_lower_bottom (info->background_actor);
* should get lowered to the bottom last.
*/
for (tmp = backgrounds; tmp != NULL; tmp = tmp->next)
{
ClutterActor *actor = tmp->data, *parent;
parent = clutter_actor_get_parent (actor);
clutter_actor_set_child_below_sibling (parent, actor, NULL);
}
g_list_free (backgrounds);
} }
void void
@@ -1273,10 +1138,33 @@ meta_compositor_sync_stack (MetaCompositor *compositor,
sync_actor_stacking (info); sync_actor_stacking (info);
} }
void
meta_compositor_window_mapped (MetaCompositor *compositor,
MetaWindow *window)
{
MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
DEBUG_TRACE ("meta_compositor_window_mapped\n");
if (!window_actor)
return;
meta_window_actor_mapped (window_actor);
}
void
meta_compositor_window_unmapped (MetaCompositor *compositor,
MetaWindow *window)
{
MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
DEBUG_TRACE ("meta_compositor_window_unmapped\n");
if (!window_actor)
return;
meta_window_actor_unmapped (window_actor);
}
void void
meta_compositor_sync_window_geometry (MetaCompositor *compositor, meta_compositor_sync_window_geometry (MetaCompositor *compositor,
MetaWindow *window, MetaWindow *window)
gboolean did_placement)
{ {
MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window)); MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
MetaScreen *screen = meta_window_get_screen (window); MetaScreen *screen = meta_window_get_screen (window);
@@ -1288,7 +1176,7 @@ meta_compositor_sync_window_geometry (MetaCompositor *compositor,
if (!window_actor) if (!window_actor)
return; return;
meta_window_actor_sync_actor_geometry (window_actor, did_placement); meta_window_actor_sync_actor_position (window_actor);
} }
void void
@@ -1310,6 +1198,8 @@ meta_compositor_sync_screen_size (MetaCompositor *compositor,
XResizeWindow (xdisplay, xwin, width, height); XResizeWindow (xdisplay, xwin, width, height);
meta_background_actor_screen_size_changed (screen);
meta_verbose ("Changed size for stage on screen %d to %dx%d\n", meta_verbose ("Changed size for stage on screen %d to %dx%d\n",
meta_screen_get_screen_number (screen), meta_screen_get_screen_number (screen),
width, height); width, height);
@@ -1331,21 +1221,12 @@ frame_callback (CoglOnscreen *onscreen,
if (presentation_time_cogl != 0) if (presentation_time_cogl != 0)
{ {
/* Cogl reports presentation in terms of its own clock, which is
* guaranteed to be in nanoseconds but with no specified base. The
* normal case with the open source GPU drivers on Linux 3.8 and
* newer is that the base of cogl_get_clock_time() is that of
* clock_gettime(CLOCK_MONOTONIC), so the same as g_get_monotonic_time),
* but there's no exposure of that through the API. clock_gettime()
* is fairly fast, so calling it twice and subtracting to get a
* nearly-zero number is acceptable, if a litle ugly.
*/
CoglContext *context = cogl_framebuffer_get_context (COGL_FRAMEBUFFER (onscreen)); CoglContext *context = cogl_framebuffer_get_context (COGL_FRAMEBUFFER (onscreen));
gint64 current_cogl_time = cogl_get_clock_time (context); gint64 current_time_cogl = cogl_get_clock_time (context);
gint64 current_monotonic_time = g_get_monotonic_time (); gint64 now = g_get_monotonic_time ();
presentation_time = presentation_time =
current_monotonic_time + (presentation_time_cogl - current_cogl_time) / 1000; now + (presentation_time_cogl - current_time_cogl) / 1000;
} }
else else
{ {
@@ -1447,13 +1328,18 @@ on_shadow_factory_changed (MetaShadowFactory *factory,
/** /**
* meta_compositor_new: (skip) * meta_compositor_new: (skip)
* @display:
* *
*/ */
MetaCompositor * MetaCompositor *
meta_compositor_new (MetaDisplay *display) meta_compositor_new (MetaDisplay *display)
{ {
char *atom_names[] = {
"_XROOTPMAP_ID",
"_NET_WM_WINDOW_OPACITY",
};
Atom atoms[G_N_ELEMENTS(atom_names)];
MetaCompositor *compositor; MetaCompositor *compositor;
Display *xdisplay = meta_display_get_xdisplay (display);
if (!composite_at_least_version (display, 0, 3)) if (!composite_at_least_version (display, 0, 3))
return NULL; return NULL;
@@ -1465,11 +1351,18 @@ meta_compositor_new (MetaDisplay *display)
if (g_getenv("META_DISABLE_MIPMAPS")) if (g_getenv("META_DISABLE_MIPMAPS"))
compositor->no_mipmaps = TRUE; compositor->no_mipmaps = TRUE;
meta_verbose ("Creating %d atoms\n", (int) G_N_ELEMENTS (atom_names));
XInternAtoms (xdisplay, atom_names, G_N_ELEMENTS (atom_names),
False, atoms);
g_signal_connect (meta_shadow_factory_get_default (), g_signal_connect (meta_shadow_factory_get_default (),
"changed", "changed",
G_CALLBACK (on_shadow_factory_changed), G_CALLBACK (on_shadow_factory_changed),
compositor); compositor);
compositor->atom_x_root_pixmap = atoms[0];
compositor->atom_net_wm_window_opacity = atoms[1];
compositor->repaint_func_id = clutter_threads_add_repaint_func (meta_repaint_func, compositor->repaint_func_id = clutter_threads_add_repaint_func (meta_repaint_func,
compositor, compositor,
NULL); NULL);
@@ -1479,7 +1372,6 @@ meta_compositor_new (MetaDisplay *display)
/** /**
* meta_get_overlay_window: (skip) * meta_get_overlay_window: (skip)
* @screen: a #MetaScreen
* *
*/ */
Window Window
@@ -1517,54 +1409,52 @@ void
meta_enable_unredirect_for_screen (MetaScreen *screen) meta_enable_unredirect_for_screen (MetaScreen *screen)
{ {
MetaCompScreen *info = meta_screen_get_compositor_data (screen); MetaCompScreen *info = meta_screen_get_compositor_data (screen);
if (info != NULL && info->disable_unredirect_count == 0) if (info != NULL)
g_warning ("Called enable_unredirect_for_screen while unredirection is enabled."); info->disable_unredirect_count = MAX(0, info->disable_unredirect_count - 1);
if (info != NULL && info->disable_unredirect_count > 0)
info->disable_unredirect_count = info->disable_unredirect_count - 1;
} }
#define FLASH_TIME_MS 50 #define FLASH_TIME_MS 50
static void static void
flash_out_completed (ClutterTimeline *timeline, flash_out_completed (ClutterAnimation *animation,
gboolean is_finished, ClutterActor *flash)
gpointer user_data)
{ {
ClutterActor *flash = CLUTTER_ACTOR (user_data);
clutter_actor_destroy (flash); clutter_actor_destroy (flash);
} }
static void
flash_in_completed (ClutterAnimation *animation,
ClutterActor *flash)
{
clutter_actor_animate (flash, CLUTTER_EASE_IN_QUAD,
FLASH_TIME_MS,
"opacity", 0,
"signal-after::completed", flash_out_completed, flash,
NULL);
}
void void
meta_compositor_flash_screen (MetaCompositor *compositor, meta_compositor_flash_screen (MetaCompositor *compositor,
MetaScreen *screen) MetaScreen *screen)
{ {
ClutterActor *stage; ClutterActor *stage;
ClutterActor *flash; ClutterActor *flash;
ClutterTransition *transition; ClutterColor black = { 0, 0, 0, 255 };
gfloat width, height; gfloat width, height;
stage = meta_get_stage_for_screen (screen); stage = meta_get_stage_for_screen (screen);
clutter_actor_get_size (stage, &width, &height); clutter_actor_get_size (stage, &width, &height);
flash = clutter_actor_new (); flash = clutter_rectangle_new_with_color (&black);
clutter_actor_set_background_color (flash, CLUTTER_COLOR_Black);
clutter_actor_set_size (flash, width, height); clutter_actor_set_size (flash, width, height);
clutter_actor_set_opacity (flash, 0); clutter_actor_set_opacity (flash, 0);
clutter_actor_add_child (stage, flash); clutter_container_add_actor (CLUTTER_CONTAINER (stage), flash);
clutter_actor_save_easing_state (flash); clutter_actor_animate (flash, CLUTTER_EASE_OUT_QUAD,
clutter_actor_set_easing_mode (flash, CLUTTER_EASE_IN_QUAD); FLASH_TIME_MS,
clutter_actor_set_easing_duration (flash, FLASH_TIME_MS); "opacity", 192,
clutter_actor_set_opacity (flash, 192); "signal-after::completed", flash_in_completed, flash,
NULL);
transition = clutter_actor_get_transition (flash, "opacity");
clutter_timeline_set_auto_reverse (CLUTTER_TIMELINE (transition), TRUE);
clutter_timeline_set_repeat_count (CLUTTER_TIMELINE (transition), 2);
g_signal_connect (transition, "stopped",
G_CALLBACK (flash_out_completed), flash);
clutter_actor_restore_easing_state (flash);
} }
/** /**
@@ -1589,7 +1479,7 @@ meta_compositor_monotonic_time_to_server_time (MetaDisplay *display,
if (compositor->server_time_query_time == 0 || if (compositor->server_time_query_time == 0 ||
(!compositor->server_time_is_monotonic_time && (!compositor->server_time_is_monotonic_time &&
monotonic_time > compositor->server_time_query_time + 10*1000*1000)) /* 10 seconds */ monotonic_time > compositor->server_time_query_time + 10000000)) /* 10 seconds */
{ {
guint32 server_time = meta_display_get_current_time_roundtrip (display); guint32 server_time = meta_display_get_current_time_roundtrip (display);
gint64 server_time_usec = (gint64)server_time * 1000; gint64 server_time_usec = (gint64)server_time * 1000;
@@ -1602,8 +1492,8 @@ meta_compositor_monotonic_time_to_server_time (MetaDisplay *display,
* is under load and our processing of the server response is * is under load and our processing of the server response is
* delayed. * delayed.
*/ */
if (server_time_usec > current_monotonic_time - 1000*1000 && if (server_time_usec > current_monotonic_time - 1000000 &&
server_time_usec < current_monotonic_time + 1000*1000) server_time_usec < current_monotonic_time + 1000000)
compositor->server_time_is_monotonic_time = TRUE; compositor->server_time_is_monotonic_time = TRUE;
compositor->server_time_offset = server_time_usec - current_monotonic_time; compositor->server_time_offset = server_time_usec - current_monotonic_time;

View File

@@ -6,6 +6,10 @@
#include <meta/screen.h> #include <meta/screen.h>
#include <meta/meta-background-actor.h> #include <meta/meta-background-actor.h>
cairo_region_t *meta_background_actor_get_clip_region (MetaBackgroundActor *self); void meta_background_actor_set_visible_region (MetaBackgroundActor *self,
cairo_region_t *visible_region);
void meta_background_actor_update (MetaScreen *screen);
void meta_background_actor_screen_size_changed (MetaScreen *screen);
#endif /* META_BACKGROUND_ACTOR_PRIVATE_H */ #endif /* META_BACKGROUND_ACTOR_PRIVATE_H */

View File

@@ -1,5 +1,7 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* /*
* meta-background-actor.c: Actor for painting the root window background
*
* Copyright 2009 Sander Dijkhuis * Copyright 2009 Sander Dijkhuis
* Copyright 2010 Red Hat, Inc. * Copyright 2010 Red Hat, Inc.
* *
@@ -21,13 +23,6 @@
* Portions adapted from gnome-shell/src/shell-global.c * Portions adapted from gnome-shell/src/shell-global.c
*/ */
/**
* SECTION:meta-background-actor
* @title: MetaBackgroundActor
* @short_description: Actor for painting the root window background
*
*/
#include <config.h> #include <config.h>
#include <cogl/cogl-texture-pixmap-x11.h> #include <cogl/cogl-texture-pixmap-x11.h>
@@ -39,37 +34,222 @@
#include "cogl-utils.h" #include "cogl-utils.h"
#include "compositor-private.h" #include "compositor-private.h"
#include <meta/errors.h> #include <meta/errors.h>
#include <meta/meta-background.h>
#include "meta-background-actor-private.h" #include "meta-background-actor-private.h"
#include "meta-cullable.h"
/* We allow creating multiple MetaBackgroundActors for the same MetaScreen to
* allow different rendering options to be set for different copies.
* But we want to share the same underlying CoglTexture for efficiency and
* to avoid driver bugs that might occur if we created multiple CoglTexturePixmaps
* for the same pixmap.
*
* This structure holds common information.
*/
typedef struct _MetaScreenBackground MetaScreenBackground;
struct _MetaScreenBackground
{
MetaScreen *screen;
GSList *actors;
float texture_width;
float texture_height;
CoglTexture *texture;
CoglMaterialWrapMode wrap_mode;
guint have_pixmap : 1;
};
struct _MetaBackgroundActorPrivate struct _MetaBackgroundActorPrivate
{ {
cairo_region_t *clip_region; MetaScreenBackground *background;
CoglPipeline *pipeline;
cairo_region_t *visible_region;
float dim_factor;
}; };
static void cullable_iface_init (MetaCullableInterface *iface); enum
{
PROP_0,
G_DEFINE_TYPE_WITH_CODE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR, PROP_DIM_FACTOR,
G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init));
PROP_LAST
};
static GParamSpec *obj_props[PROP_LAST];
G_DEFINE_TYPE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR);
static void set_texture (MetaScreenBackground *background,
CoglHandle texture);
static void set_texture_to_stage_color (MetaScreenBackground *background);
static void static void
set_clip_region (MetaBackgroundActor *self, on_notify_stage_color (GObject *stage,
cairo_region_t *clip_region) GParamSpec *pspec,
MetaScreenBackground *background)
{
if (!background->have_pixmap)
set_texture_to_stage_color (background);
}
static void
free_screen_background (MetaScreenBackground *background)
{
set_texture (background, COGL_INVALID_HANDLE);
if (background->screen != NULL)
{
ClutterActor *stage = meta_get_stage_for_screen (background->screen);
g_signal_handlers_disconnect_by_func (stage,
(gpointer) on_notify_stage_color,
background);
background->screen = NULL;
}
}
static MetaScreenBackground *
meta_screen_background_get (MetaScreen *screen)
{
MetaScreenBackground *background;
background = g_object_get_data (G_OBJECT (screen), "meta-screen-background");
if (background == NULL)
{
ClutterActor *stage;
background = g_new0 (MetaScreenBackground, 1);
background->screen = screen;
g_object_set_data_full (G_OBJECT (screen), "meta-screen-background",
background, (GDestroyNotify) free_screen_background);
stage = meta_get_stage_for_screen (screen);
g_signal_connect (stage, "notify::color",
G_CALLBACK (on_notify_stage_color), background);
meta_background_actor_update (screen);
}
return background;
}
static void
update_wrap_mode_of_actor (MetaBackgroundActor *self)
{ {
MetaBackgroundActorPrivate *priv = self->priv; MetaBackgroundActorPrivate *priv = self->priv;
g_clear_pointer (&priv->clip_region, (GDestroyNotify) cairo_region_destroy); cogl_pipeline_set_layer_wrap_mode (priv->pipeline, 0, priv->background->wrap_mode);
if (clip_region) }
priv->clip_region = cairo_region_copy (clip_region);
static void
update_wrap_mode (MetaScreenBackground *background)
{
GSList *l;
int width, height;
meta_screen_get_size (background->screen, &width, &height);
/* We turn off repeating when we have a full-screen pixmap to keep from
* getting artifacts from one side of the image sneaking into the other
* side of the image via bilinear filtering.
*/
if (width == background->texture_width && height == background->texture_height)
background->wrap_mode = COGL_MATERIAL_WRAP_MODE_CLAMP_TO_EDGE;
else
background->wrap_mode = COGL_MATERIAL_WRAP_MODE_REPEAT;
for (l = background->actors; l; l = l->next)
update_wrap_mode_of_actor (l->data);
}
static void
set_texture_on_actor (MetaBackgroundActor *self)
{
MetaBackgroundActorPrivate *priv = self->priv;
MetaDisplay *display = meta_screen_get_display (priv->background->screen);
/* This may trigger destruction of an old texture pixmap, which, if
* the underlying X pixmap is already gone has the tendency to trigger
* X errors inside DRI. For safety, trap errors */
meta_error_trap_push (display);
cogl_pipeline_set_layer_texture (priv->pipeline, 0, priv->background->texture);
meta_error_trap_pop (display);
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
}
static void
set_texture (MetaScreenBackground *background,
CoglHandle texture)
{
MetaDisplay *display = meta_screen_get_display (background->screen);
GSList *l;
/* This may trigger destruction of an old texture pixmap, which, if
* the underlying X pixmap is already gone has the tendency to trigger
* X errors inside DRI. For safety, trap errors */
meta_error_trap_push (display);
if (background->texture != COGL_INVALID_HANDLE)
{
cogl_handle_unref (background->texture);
background->texture = COGL_INVALID_HANDLE;
}
meta_error_trap_pop (display);
if (texture != COGL_INVALID_HANDLE)
background->texture = cogl_handle_ref (texture);
background->texture_width = cogl_texture_get_width (background->texture);
background->texture_height = cogl_texture_get_height (background->texture);
for (l = background->actors; l; l = l->next)
set_texture_on_actor (l->data);
update_wrap_mode (background);
}
/* Sets our pipeline to paint with a 1x1 texture of the stage's background
* color; doing this when we have no pixmap allows the application to turn
* off painting the stage. There might be a performance benefit to
* painting in this case with a solid color, but the normal solid color
* case is a 1x1 root pixmap, so we'd have to reverse-engineer that to
* actually pick up the (small?) performance win. This is just a fallback.
*/
static void
set_texture_to_stage_color (MetaScreenBackground *background)
{
ClutterActor *stage = meta_get_stage_for_screen (background->screen);
ClutterColor color;
CoglHandle texture;
clutter_stage_get_color (CLUTTER_STAGE (stage), &color);
/* Slicing will prevent COGL from using hardware texturing for
* the tiled 1x1 pixmap, and will cause it to draw the window
* background in millions of separate 1x1 rectangles */
texture = meta_create_color_texture_4ub (color.red, color.green,
color.blue, 0xff,
COGL_TEXTURE_NO_SLICING);
set_texture (background, texture);
cogl_handle_unref (texture);
} }
static void static void
meta_background_actor_dispose (GObject *object) meta_background_actor_dispose (GObject *object)
{ {
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object); MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
MetaBackgroundActorPrivate *priv = self->priv;
set_clip_region (self, NULL); meta_background_actor_set_visible_region (self, NULL);
if (priv->background != NULL)
{
priv->background->actors = g_slist_remove (priv->background->actors, self);
priv->background = NULL;
}
g_clear_pointer(&priv->pipeline, cogl_object_unref);
G_OBJECT_CLASS (meta_background_actor_parent_class)->dispose (object); G_OBJECT_CLASS (meta_background_actor_parent_class)->dispose (object);
} }
@@ -80,15 +260,11 @@ meta_background_actor_get_preferred_width (ClutterActor *actor,
gfloat *min_width_p, gfloat *min_width_p,
gfloat *natural_width_p) gfloat *natural_width_p)
{ {
ClutterContent *content; MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
gfloat width; MetaBackgroundActorPrivate *priv = self->priv;
int width, height;
content = clutter_actor_get_content (actor); meta_screen_get_size (priv->background->screen, &width, &height);
if (content)
clutter_content_get_preferred_size (content, &width, NULL);
else
width = 0;
if (min_width_p) if (min_width_p)
*min_width_p = width; *min_width_p = width;
@@ -103,15 +279,11 @@ meta_background_actor_get_preferred_height (ClutterActor *actor,
gfloat *natural_height_p) gfloat *natural_height_p)
{ {
ClutterContent *content; MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
gfloat height; MetaBackgroundActorPrivate *priv = self->priv;
int width, height;
content = clutter_actor_get_content (actor); meta_screen_get_size (priv->background->screen, &width, &height);
if (content)
clutter_content_get_preferred_size (content, NULL, &height);
else
height = 0;
if (min_height_p) if (min_height_p)
*min_height_p = height; *min_height_p = height;
@@ -119,100 +291,413 @@ meta_background_actor_get_preferred_height (ClutterActor *actor,
*natural_height_p = height; *natural_height_p = height;
} }
static void
meta_background_actor_paint (ClutterActor *actor)
{
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
MetaBackgroundActorPrivate *priv = self->priv;
guint8 opacity = clutter_actor_get_paint_opacity (actor);
guint8 color_component;
int width, height;
meta_screen_get_size (priv->background->screen, &width, &height);
color_component = (int)(0.5 + opacity * priv->dim_factor);
cogl_pipeline_set_color4ub (priv->pipeline,
color_component,
color_component,
color_component,
opacity);
cogl_set_source (priv->pipeline);
if (priv->visible_region)
{
int n_rectangles = cairo_region_num_rectangles (priv->visible_region);
int i;
for (i = 0; i < n_rectangles; i++)
{
cairo_rectangle_int_t rect;
cairo_region_get_rectangle (priv->visible_region, i, &rect);
cogl_rectangle_with_texture_coords (rect.x, rect.y,
rect.x + rect.width, rect.y + rect.height,
rect.x / priv->background->texture_width,
rect.y / priv->background->texture_height,
(rect.x + rect.width) / priv->background->texture_width,
(rect.y + rect.height) / priv->background->texture_height);
}
}
else
{
cogl_rectangle_with_texture_coords (0.0f, 0.0f,
width, height,
0.0f, 0.0f,
width / priv->background->texture_width,
height / priv->background->texture_height);
}
}
static gboolean
meta_background_actor_get_paint_volume (ClutterActor *actor,
ClutterPaintVolume *volume)
{
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
MetaBackgroundActorPrivate *priv = self->priv;
int width, height;
meta_screen_get_size (priv->background->screen, &width, &height);
clutter_paint_volume_set_width (volume, width);
clutter_paint_volume_set_height (volume, height);
return TRUE;
}
static void
meta_background_actor_set_dim_factor (MetaBackgroundActor *self,
gfloat dim_factor)
{
MetaBackgroundActorPrivate *priv = self->priv;
if (priv->dim_factor == dim_factor)
return;
priv->dim_factor = dim_factor;
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_DIM_FACTOR]);
}
static void
meta_background_actor_get_property(GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
MetaBackgroundActorPrivate *priv = self->priv;
switch (prop_id)
{
case PROP_DIM_FACTOR:
g_value_set_float (value, priv->dim_factor);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
meta_background_actor_set_property(GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
switch (prop_id)
{
case PROP_DIM_FACTOR:
meta_background_actor_set_dim_factor (self, g_value_get_float (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void static void
meta_background_actor_class_init (MetaBackgroundActorClass *klass) meta_background_actor_class_init (MetaBackgroundActorClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
GParamSpec *pspec;
g_type_class_add_private (klass, sizeof (MetaBackgroundActorPrivate)); g_type_class_add_private (klass, sizeof (MetaBackgroundActorPrivate));
object_class->dispose = meta_background_actor_dispose; object_class->dispose = meta_background_actor_dispose;
object_class->get_property = meta_background_actor_get_property;
object_class->set_property = meta_background_actor_set_property;
actor_class->get_preferred_width = meta_background_actor_get_preferred_width; actor_class->get_preferred_width = meta_background_actor_get_preferred_width;
actor_class->get_preferred_height = meta_background_actor_get_preferred_height; actor_class->get_preferred_height = meta_background_actor_get_preferred_height;
actor_class->paint = meta_background_actor_paint;
actor_class->get_paint_volume = meta_background_actor_get_paint_volume;
/**
* MetaBackgroundActor:dim-factor:
*
* Factor to dim the background by, between 0.0 (black) and 1.0 (original
* colors)
*/
pspec = g_param_spec_float ("dim-factor",
"Dim factor",
"Factor to dim the background by",
0.0, 1.0,
1.0,
G_PARAM_READWRITE);
obj_props[PROP_DIM_FACTOR] = pspec;
g_object_class_install_property (object_class, PROP_DIM_FACTOR, pspec);
} }
static void static void
meta_background_actor_init (MetaBackgroundActor *self) meta_background_actor_init (MetaBackgroundActor *self)
{ {
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MetaBackgroundActorPrivate *priv;
META_TYPE_BACKGROUND_ACTOR,
MetaBackgroundActorPrivate); priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
META_TYPE_BACKGROUND_ACTOR,
MetaBackgroundActorPrivate);
priv->dim_factor = 1.0;
} }
/** /**
* meta_background_actor_new: * meta_background_actor_new:
* @screen: the #MetaScreen
* *
* Creates a new actor to draw the background for the given monitor. * Creates a new actor to draw the background for the given screen.
* This actor should be associated with a #MetaBackground using
* clutter_actor_set_content()
* *
* Return value: the newly created background actor * Return value: the newly created background actor
*/ */
ClutterActor * ClutterActor *
meta_background_actor_new (void) meta_background_actor_new_for_screen (MetaScreen *screen)
{ {
MetaBackgroundActor *self; MetaBackgroundActor *self;
MetaBackgroundActorPrivate *priv;
g_return_val_if_fail (META_IS_SCREEN (screen), NULL);
self = g_object_new (META_TYPE_BACKGROUND_ACTOR, NULL); self = g_object_new (META_TYPE_BACKGROUND_ACTOR, NULL);
priv = self->priv;
priv->background = meta_screen_background_get (screen);
priv->background->actors = g_slist_prepend (priv->background->actors, self);
/* A CoglMaterial and a CoglPipeline are the same thing */
priv->pipeline = (CoglPipeline*) meta_create_texture_material (NULL);
set_texture_on_actor (self);
update_wrap_mode_of_actor (self);
return CLUTTER_ACTOR (self); return CLUTTER_ACTOR (self);
} }
static void /**
meta_background_actor_cull_out (MetaCullable *cullable, * meta_background_actor_update:
cairo_region_t *unobscured_region, * @screen: a #MetaScreen
cairo_region_t *clip_region) *
* Refetches the _XROOTPMAP_ID property for the root window and updates
* the contents of the background actor based on that. There's no attempt
* to optimize out pixmap values that don't change (since a root pixmap
* could be replaced by with another pixmap with the same ID under some
* circumstances), so this should only be called when we actually receive
* a PropertyNotify event for the property.
*/
void
meta_background_actor_update (MetaScreen *screen)
{ {
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (cullable); MetaScreenBackground *background;
set_clip_region (self, clip_region); MetaDisplay *display;
} MetaCompositor *compositor;
Atom type;
int format;
gulong nitems;
gulong bytes_after;
guchar *data;
Pixmap root_pixmap_id;
static void background = meta_screen_background_get (screen);
meta_background_actor_reset_culling (MetaCullable *cullable) display = meta_screen_get_display (screen);
{ compositor = meta_display_get_compositor (display);
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (cullable);
set_clip_region (self, NULL);
}
static void root_pixmap_id = None;
cullable_iface_init (MetaCullableInterface *iface) if (!XGetWindowProperty (meta_display_get_xdisplay (display),
{ meta_screen_get_xroot (screen),
iface->cull_out = meta_background_actor_cull_out; compositor->atom_x_root_pixmap,
iface->reset_culling = meta_background_actor_reset_culling; 0, LONG_MAX,
False,
AnyPropertyType,
&type, &format, &nitems, &bytes_after, &data) &&
type != None)
{
/* Got a property. */
if (type == XA_PIXMAP && format == 32 && nitems == 1)
{
/* Was what we expected. */
root_pixmap_id = *(Pixmap *)data;
}
XFree(data);
}
if (root_pixmap_id != None)
{
CoglHandle texture;
CoglContext *ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
GError *error = NULL;
meta_error_trap_push (display);
texture = cogl_texture_pixmap_x11_new (ctx, root_pixmap_id, FALSE, &error);
meta_error_trap_pop (display);
if (texture != COGL_INVALID_HANDLE)
{
set_texture (background, texture);
cogl_handle_unref (texture);
background->have_pixmap = True;
return;
}
else
{
g_warning ("Failed to create background texture from pixmap: %s",
error->message);
g_error_free (error);
}
}
background->have_pixmap = False;
set_texture_to_stage_color (background);
} }
/** /**
* meta_background_actor_get_clip_region: * meta_background_actor_set_visible_region:
* @self: a #MetaBackgroundActor * @self: a #MetaBackgroundActor
* @visible_region: (allow-none): the area of the actor (in allocate-relative
* coordinates) that is visible.
* *
* Return value (transfer full): a #cairo_region_t that represents the part of * Sets the area of the background that is unobscured by overlapping windows.
* the background not obscured by other #MetaBackgroundActor or * This is used to optimize and only paint the visible portions.
* #MetaWindowActor objects.
*/ */
cairo_region_t * void
meta_background_actor_get_clip_region (MetaBackgroundActor *self) meta_background_actor_set_visible_region (MetaBackgroundActor *self,
cairo_region_t *visible_region)
{ {
MetaBackgroundActorPrivate *priv = self->priv; MetaBackgroundActorPrivate *priv;
ClutterActorBox content_box;
cairo_rectangle_int_t content_area = { 0 };
cairo_region_t *clip_region;
g_return_val_if_fail (META_IS_BACKGROUND_ACTOR (self), NULL); g_return_if_fail (META_IS_BACKGROUND_ACTOR (self));
if (!priv->clip_region) priv = self->priv;
return NULL;
clutter_actor_get_content_box (CLUTTER_ACTOR (self), &content_box); if (priv->visible_region)
{
cairo_region_destroy (priv->visible_region);
priv->visible_region = NULL;
}
content_area.x = content_box.x1; if (visible_region)
content_area.y = content_box.y1; {
content_area.width = content_box.x2 - content_box.x1; cairo_rectangle_int_t screen_rect = { 0 };
content_area.height = content_box.y2 - content_box.y1; meta_screen_get_size (priv->background->screen, &screen_rect.width, &screen_rect.height);
clip_region = cairo_region_create_rectangle (&content_area); /* Doing the intersection here is probably unnecessary - MetaWindowGroup
cairo_region_intersect (clip_region, priv->clip_region); * should never compute a visible area that's larger than the root screen!
* but it's not that expensive and adds some extra robustness.
return clip_region; */
priv->visible_region = cairo_region_create_rectangle (&screen_rect);
cairo_region_intersect (priv->visible_region, visible_region);
}
} }
/**
* meta_background_actor_screen_size_changed:
* @screen: a #MetaScreen
*
* Called by the compositor when the size of the #MetaScreen changes
*/
void
meta_background_actor_screen_size_changed (MetaScreen *screen)
{
MetaScreenBackground *background = meta_screen_background_get (screen);
GSList *l;
update_wrap_mode (background);
for (l = background->actors; l; l = l->next)
clutter_actor_queue_relayout (l->data);
}
/**
* meta_background_actor_add_glsl_snippet:
* @actor: a #MetaBackgroundActor
* @hook: where to insert the code
* @declarations: GLSL declarations
* @code: GLSL code
* @is_replace: wheter Cogl code should be replaced by the custom shader
*
* Adds a GLSL snippet to the pipeline used for drawing the background.
* See #CoglSnippet for details.
*/
void
meta_background_actor_add_glsl_snippet (MetaBackgroundActor *actor,
MetaSnippetHook hook,
const char *declarations,
const char *code,
gboolean is_replace)
{
MetaBackgroundActorPrivate *priv;
CoglSnippet *snippet;
g_return_if_fail (META_IS_BACKGROUND_ACTOR (actor));
priv = actor->priv;
if (is_replace)
{
snippet = cogl_snippet_new (hook, declarations, NULL);
cogl_snippet_set_replace (snippet, code);
}
else
{
snippet = cogl_snippet_new (hook, declarations, code);
}
if (hook == META_SNIPPET_HOOK_VERTEX ||
hook == META_SNIPPET_HOOK_FRAGMENT)
cogl_pipeline_add_snippet (priv->pipeline, snippet);
else
cogl_pipeline_add_layer_snippet (priv->pipeline, 0, snippet);
cogl_object_unref (snippet);
}
/**
* meta_background_actor_set_uniform_float:
* @actor: a #MetaBackgroundActor
* @uniform_name:
* @n_components: number of components (for vector uniforms)
* @count: number of uniforms (for array uniforms)
* @uniform: (array length=uniform_length): the float values to set
* @uniform_length: the length of @uniform. Must be exactly @n_components x @count,
* and is provided mainly for language bindings.
*
* Sets a new GLSL uniform to the provided value. This is mostly
* useful in congiunction with meta_background_actor_add_glsl_snippet().
*/
void
meta_background_actor_set_uniform_float (MetaBackgroundActor *actor,
const char *uniform_name,
int n_components,
int count,
const float *uniform,
int uniform_length)
{
MetaBackgroundActorPrivate *priv;
g_return_if_fail (META_IS_BACKGROUND_ACTOR (actor));
g_return_if_fail (uniform_length == n_components * count);
priv = actor->priv;
cogl_pipeline_set_uniform_float (priv->pipeline,
cogl_pipeline_get_uniform_location (priv->pipeline,
uniform_name),
n_components, count, uniform);
}

View File

@@ -1,66 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/**
* SECTION:meta-background-group
* @title: MetaBackgroundGroup
* @short_description: Container for background actors
*
* This class is a subclass of ClutterActor with special handling for
* MetaBackgroundActor/MetaBackgroundGroup when painting children.
* It makes sure to only draw the parts of the backgrounds not
* occluded by opaque windows.
*
* See #MetaWindowGroup for more information behind the motivation,
* and details on implementation.
*/
#include <config.h>
#include <meta/meta-background-group.h>
#include "meta-cullable.h"
static void cullable_iface_init (MetaCullableInterface *iface);
G_DEFINE_TYPE_WITH_CODE (MetaBackgroundGroup, meta_background_group, CLUTTER_TYPE_ACTOR,
G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init));
static void
meta_background_group_class_init (MetaBackgroundGroupClass *klass)
{
}
static void
meta_background_group_cull_out (MetaCullable *cullable,
cairo_region_t *unobscured_region,
cairo_region_t *clip_region)
{
meta_cullable_cull_out_children (cullable, unobscured_region, clip_region);
}
static void
meta_background_group_reset_culling (MetaCullable *cullable)
{
meta_cullable_reset_culling_children (cullable);
}
static void
cullable_iface_init (MetaCullableInterface *iface)
{
iface->cull_out = meta_background_group_cull_out;
iface->reset_culling = meta_background_group_reset_culling;
}
static void
meta_background_group_init (MetaBackgroundGroup *self)
{
}
ClutterActor *
meta_background_group_new (void)
{
MetaBackgroundGroup *background_group;
background_group = g_object_new (META_TYPE_BACKGROUND_GROUP, NULL);
return CLUTTER_ACTOR (background_group);
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,191 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2013 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Written by:
* Owen Taylor <otaylor@redhat.com>
* Ray Strode <rstrode@redhat.com>
* Jasper St. Pierre <jstpierre@mecheye.net>
*/
#include "config.h"
#include "meta-cullable.h"
#include "clutter-utils.h"
G_DEFINE_INTERFACE (MetaCullable, meta_cullable, CLUTTER_TYPE_ACTOR);
/**
* SECTION:meta-cullable
* @title: MetaCullable
* @short_description: CPU culling operations for efficient drawing
*
* When we are painting a stack of 5-10 large actors, the standard
* bottom-to-top method of drawing every actor results in a tremendous
* amount of overdraw. If these actors are painting textures like
* windows, it can easily max out the available memory bandwidth on a
* low-end graphics chipset. It's even worse if window textures are
* being accessed over the AGP bus.
*
* #MetaCullable is our solution. The basic technique applied here is to
* do a pre-pass before painting where we walk each actor from top to bottom
* and ask each actor to "cull itself out". We pass in a region it can copy
* to clip its drawing to, and the actor can subtract its fully opaque pixels
* so that actors underneath know not to draw there as well.
*/
/**
* meta_cullable_cull_out_children:
* @cullable: The #MetaCullable
* @unobscured_region: The unobscured region, as passed into cull_out()
* @clip_region: The clip region, as passed into cull_out()
*
* This is a helper method for actors that want to recurse over their
* child actors, and cull them out.
*
* See #MetaCullable and meta_cullable_cull_out() for more details.
*/
void
meta_cullable_cull_out_children (MetaCullable *cullable,
cairo_region_t *unobscured_region,
cairo_region_t *clip_region)
{
ClutterActor *actor = CLUTTER_ACTOR (cullable);
ClutterActor *child;
ClutterActorIter iter;
clutter_actor_iter_init (&iter, actor);
while (clutter_actor_iter_prev (&iter, &child))
{
int x, y;
if (!CLUTTER_ACTOR_IS_VISIBLE (child))
continue;
/* If an actor has effects applied, then that can change the area
* it paints and the opacity, so we no longer can figure out what
* portion of the actor is obscured and what portion of the screen
* it obscures, so we skip the actor.
*
* This has a secondary beneficial effect: if a ClutterOffscreenEffect
* is applied to an actor, then our clipped redraws interfere with the
* caching of the FBO - even if we only need to draw a small portion
* of the window right now, ClutterOffscreenEffect may use other portions
* of the FBO later. So, skipping actors with effects applied also
* prevents these bugs.
*
* Theoretically, we should check clutter_actor_get_offscreen_redirect()
* as well for the same reason, but omitted for simplicity in the
* hopes that no-one will do that.
*/
if (clutter_actor_has_effects (child))
continue;
if (!META_IS_CULLABLE (child))
continue;
if (!meta_actor_is_untransformed (child, &x, &y))
continue;
/* Temporarily move to the coordinate system of the actor */
cairo_region_translate (unobscured_region, - x, - y);
cairo_region_translate (clip_region, - x, - y);
meta_cullable_cull_out (META_CULLABLE (child), unobscured_region, clip_region);
cairo_region_translate (unobscured_region, x, y);
cairo_region_translate (clip_region, x, y);
}
}
/**
* meta_cullable_reset_culling_children:
* @cullable: The #MetaCullable
*
* This is a helper method for actors that want to recurse over their
* child actors, and cull them out.
*
* See #MetaCullable and meta_cullable_reset_culling() for more details.
*/
void
meta_cullable_reset_culling_children (MetaCullable *cullable)
{
ClutterActor *actor = CLUTTER_ACTOR (cullable);
ClutterActor *child;
ClutterActorIter iter;
clutter_actor_iter_init (&iter, actor);
while (clutter_actor_iter_next (&iter, &child))
{
if (!META_IS_CULLABLE (child))
continue;
meta_cullable_reset_culling (META_CULLABLE (child));
}
}
static void
meta_cullable_default_init (MetaCullableInterface *iface)
{
}
/**
* meta_cullable_cull_out:
* @cullable: The #MetaCullable
* @unobscured_region: The unobscured region, in @cullable's space.
* @clip_region: The clip region, in @cullable's space.
*
* When #MetaWindowGroup is painted, we walk over its direct cullable
* children from top to bottom and ask themselves to "cull out". Cullables
* can use @unobscured_region and @clip_region to clip their drawing. Actors
* interested in eliminating overdraw should copy the @clip_region and only
* paint those parts, as everything else has been obscured by actors above it.
*
* Actors that may have fully opaque parts should also subtract out a region
* that is fully opaque from @unobscured_region and @clip_region.
*
* @unobscured_region and @clip_region are extremely similar. The difference
* is that @clip_region starts off with the stage's clip, if Clutter detects
* that we're doing a clipped redraw. @unobscured_region, however, starts off
* with the full stage size, so actors that may want to record what parts of
* their window are unobscured for e.g. scheduling repaints can do so.
*
* Actors that have children can also use the meta_cullable_cull_out_children()
* helper method to do a simple cull across all their children.
*/
void
meta_cullable_cull_out (MetaCullable *cullable,
cairo_region_t *unobscured_region,
cairo_region_t *clip_region)
{
META_CULLABLE_GET_IFACE (cullable)->cull_out (cullable, unobscured_region, clip_region);
}
/**
* meta_cullable_reset_culling:
* @cullable: The #MetaCullable
*
* Actors that copied data in their cull_out() implementation can now
* reset their data, as the paint is now over. Additional paints may be
* done by #ClutterClone or similar, and they should not be affected by
* the culling operation.
*/
void
meta_cullable_reset_culling (MetaCullable *cullable)
{
META_CULLABLE_GET_IFACE (cullable)->reset_culling (cullable);
}

View File

@@ -1,68 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2013 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Written by:
* Owen Taylor <otaylor@redhat.com>
* Ray Strode <rstrode@redhat.com>
* Jasper St. Pierre <jstpierre@mecheye.net>
*/
#ifndef __META_CULLABLE_H__
#define __META_CULLABLE_H__
#include <clutter/clutter.h>
G_BEGIN_DECLS
#define META_TYPE_CULLABLE (meta_cullable_get_type ())
#define META_CULLABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_CULLABLE, MetaCullable))
#define META_IS_CULLABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_CULLABLE))
#define META_CULLABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), META_TYPE_CULLABLE, MetaCullableInterface))
typedef struct _MetaCullable MetaCullable;
typedef struct _MetaCullableInterface MetaCullableInterface;
struct _MetaCullableInterface
{
GTypeInterface g_iface;
void (* cull_out) (MetaCullable *cullable,
cairo_region_t *unobscured_region,
cairo_region_t *clip_region);
void (* reset_culling) (MetaCullable *cullable);
};
GType meta_cullable_get_type (void);
void meta_cullable_cull_out (MetaCullable *cullable,
cairo_region_t *unobscured_region,
cairo_region_t *clip_region);
void meta_cullable_reset_culling (MetaCullable *cullable);
/* Utility methods for implementations */
void meta_cullable_cull_out_children (MetaCullable *cullable,
cairo_region_t *unobscured_region,
cairo_region_t *clip_region);
void meta_cullable_reset_culling_children (MetaCullable *cullable);
G_END_DECLS
#endif /* __META_CULLABLE_H__ */

View File

@@ -192,7 +192,10 @@ meta_module_class_init (MetaModuleClass *klass)
static void static void
meta_module_init (MetaModule *self) meta_module_init (MetaModule *self)
{ {
self->priv = META_MODULE_GET_PRIVATE (self); MetaModulePrivate *priv;
self->priv = priv = META_MODULE_GET_PRIVATE (self);
} }
GType GType

View File

@@ -85,20 +85,12 @@ meta_plugin_manager_load (const gchar *plugin_name)
g_free (path); g_free (path);
} }
static void
on_confirm_display_change (MetaMonitorManager *monitors,
MetaPluginManager *plugin_mgr)
{
meta_plugin_manager_confirm_display_change (plugin_mgr);
}
MetaPluginManager * MetaPluginManager *
meta_plugin_manager_new (MetaScreen *screen) meta_plugin_manager_new (MetaScreen *screen)
{ {
MetaPluginManager *plugin_mgr; MetaPluginManager *plugin_mgr;
MetaPluginClass *klass; MetaPluginClass *klass;
MetaPlugin *plugin; MetaPlugin *plugin;
MetaMonitorManager *monitors;
plugin_mgr = g_new0 (MetaPluginManager, 1); plugin_mgr = g_new0 (MetaPluginManager, 1);
plugin_mgr->screen = screen; plugin_mgr->screen = screen;
@@ -109,10 +101,6 @@ meta_plugin_manager_new (MetaScreen *screen)
if (klass->start) if (klass->start)
klass->start (plugin); klass->start (plugin);
monitors = meta_monitor_manager_get ();
g_signal_connect (monitors, "confirm-display-change",
G_CALLBACK (on_confirm_display_change), plugin_mgr);
return plugin_mgr; return plugin_mgr;
} }
@@ -306,23 +294,29 @@ meta_plugin_manager_filter_keybinding (MetaPluginManager *plugin_mgr,
return FALSE; return FALSE;
} }
/*
* The public method that the compositor hooks into for desktop switching.
*
* Returns TRUE if the plugin handled the event type (i.e.,
* if the return value is FALSE, there will be no subsequent call to the
* manager completed() callback, and the compositor must ensure that any
* appropriate post-effect cleanup is carried out.
*/
gboolean gboolean
meta_plugin_manager_xevent_filter (MetaPluginManager *plugin_mgr, meta_plugin_manager_xevent_filter (MetaPluginManager *plugin_mgr,
XEvent *xev) XEvent *xev)
{
MetaPlugin *plugin = plugin_mgr->plugin;
return _meta_plugin_xevent_filter (plugin, xev);
}
void
meta_plugin_manager_confirm_display_change (MetaPluginManager *plugin_mgr)
{ {
MetaPlugin *plugin = plugin_mgr->plugin; MetaPlugin *plugin = plugin_mgr->plugin;
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
if (klass->confirm_display_change) /* We need to make sure that clutter gets certain events, like
return klass->confirm_display_change (plugin); * ConfigureNotify on the stage window. If there is a plugin that
* provides an xevent_filter function, then it's the responsibility
* of that plugin to pass events to Clutter. Otherwise, we send the
* event directly to Clutter ourselves.
*/
if (klass->xevent_filter)
return klass->xevent_filter (plugin, xev);
else else
return meta_plugin_complete_display_change (plugin, TRUE); return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
} }

View File

@@ -72,9 +72,5 @@ gboolean meta_plugin_manager_filter_keybinding (MetaPluginManager *mgr,
gboolean meta_plugin_manager_xevent_filter (MetaPluginManager *mgr, gboolean meta_plugin_manager_xevent_filter (MetaPluginManager *mgr,
XEvent *xev); XEvent *xev);
gboolean _meta_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *xev);
void meta_plugin_manager_confirm_display_change (MetaPluginManager *mgr);
#endif #endif

View File

@@ -21,13 +21,6 @@
* 02111-1307, USA. * 02111-1307, USA.
*/ */
/**
* SECTION:meta-plugin
* @title: MetaPlugin
* @short_description: Entry point for plugins
*
*/
#include <meta/meta-plugin.h> #include <meta/meta-plugin.h>
#include "meta-plugin-manager.h" #include "meta-plugin-manager.h"
#include <meta/screen.h> #include <meta/screen.h>
@@ -41,7 +34,6 @@
#include "compositor-private.h" #include "compositor-private.h"
#include "meta-window-actor-private.h" #include "meta-window-actor-private.h"
#include "monitor-private.h"
G_DEFINE_ABSTRACT_TYPE (MetaPlugin, meta_plugin, G_TYPE_OBJECT); G_DEFINE_ABSTRACT_TYPE (MetaPlugin, meta_plugin, G_TYPE_OBJECT);
@@ -138,7 +130,9 @@ meta_plugin_class_init (MetaPluginClass *klass)
static void static void
meta_plugin_init (MetaPlugin *self) meta_plugin_init (MetaPlugin *self)
{ {
self->priv = META_PLUGIN_GET_PRIVATE (self); MetaPluginPrivate *priv;
self->priv = priv = META_PLUGIN_GET_PRIVATE (self);
} }
gboolean gboolean
@@ -183,18 +177,6 @@ _meta_plugin_effect_started (MetaPlugin *plugin)
priv->running++; priv->running++;
} }
gboolean
_meta_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *xev)
{
MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
if (klass->xevent_filter && klass->xevent_filter (plugin, xev))
return TRUE;
else
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
}
void void
meta_plugin_switch_workspace_completed (MetaPlugin *plugin) meta_plugin_switch_workspace_completed (MetaPlugin *plugin)
{ {
@@ -277,6 +259,10 @@ meta_plugin_destroy_completed (MetaPlugin *plugin,
/** /**
* meta_plugin_begin_modal: * meta_plugin_begin_modal:
* @plugin: a #MetaPlugin * @plugin: a #MetaPlugin
* @grab_window: the X window to grab the keyboard and mouse on
* @cursor: the cursor to use for the pointer grab, or None,
* to use the normal cursor for the grab window and
* its descendants.
* @options: flags that modify the behavior of the modal grab * @options: flags that modify the behavior of the modal grab
* @timestamp: the timestamp used for establishing grabs * @timestamp: the timestamp used for establishing grabs
* *
@@ -297,13 +283,15 @@ meta_plugin_destroy_completed (MetaPlugin *plugin,
*/ */
gboolean gboolean
meta_plugin_begin_modal (MetaPlugin *plugin, meta_plugin_begin_modal (MetaPlugin *plugin,
Window grab_window,
Cursor cursor,
MetaModalOptions options, MetaModalOptions options,
guint32 timestamp) guint32 timestamp)
{ {
MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv; MetaPluginPrivate *priv = META_PLUGIN (plugin)->priv;
return meta_begin_modal_for_plugin (priv->screen, plugin, return meta_begin_modal_for_plugin (priv->screen, plugin,
options, timestamp); grab_window, cursor, options, timestamp);
} }
/** /**
@@ -343,13 +331,3 @@ meta_plugin_get_screen (MetaPlugin *plugin)
return priv->screen; return priv->screen;
} }
void
meta_plugin_complete_display_change (MetaPlugin *plugin,
gboolean ok)
{
MetaMonitorManager *manager;
manager = meta_monitor_manager_get ();
meta_monitor_manager_confirm_configuration (manager, ok);
}

View File

@@ -40,7 +40,7 @@ typedef struct _MetaShadow MetaShadow;
MetaShadow *meta_shadow_ref (MetaShadow *shadow); MetaShadow *meta_shadow_ref (MetaShadow *shadow);
void meta_shadow_unref (MetaShadow *shadow); void meta_shadow_unref (MetaShadow *shadow);
CoglTexture*meta_shadow_get_texture (MetaShadow *shadow); CoglHandle meta_shadow_get_texture (MetaShadow *shadow);
void meta_shadow_paint (MetaShadow *shadow, void meta_shadow_paint (MetaShadow *shadow,
int window_x, int window_x,
int window_y, int window_y,

View File

@@ -1,5 +1,9 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/* /*
* MetaShadowFactory:
*
* Create and cache shadow textures for abritrary window shapes
*
* Copyright 2010 Red Hat, Inc. * Copyright 2010 Red Hat, Inc.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@@ -17,13 +21,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA. * 02111-1307, USA.
*/ */
/**
* SECTION:meta-shadow-factory
* @title: MetaShadowFactory
* @short_description: Create and cache shadow textures for abritrary window shapes
*/
#include <config.h> #include <config.h>
#include <math.h> #include <math.h>
#include <string.h> #include <string.h>
@@ -68,8 +65,8 @@ struct _MetaShadow
MetaShadowFactory *factory; MetaShadowFactory *factory;
MetaShadowCacheKey key; MetaShadowCacheKey key;
CoglTexture *texture; CoglHandle texture;
CoglPipeline *pipeline; CoglHandle material;
/* The outer order is the distance the shadow extends outside the window /* The outer order is the distance the shadow extends outside the window
* shape; the inner border is the unscaled portion inside the window * shape; the inner border is the unscaled portion inside the window
@@ -123,12 +120,12 @@ static guint signals[LAST_SIGNAL] = { 0 };
/* The first element in this array also defines the default parameters /* The first element in this array also defines the default parameters
* for newly created classes */ * for newly created classes */
MetaShadowClassInfo default_shadow_classes[] = { MetaShadowClassInfo default_shadow_classes[] = {
{ "normal", { 6, -1, 0, 3, 128 }, { 3, -1, 0, 3, 32 } }, { "normal", { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } },
{ "dialog", { 6, -1, 0, 3, 128 }, { 3, -1, 0, 3, 32 } }, { "dialog", { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } },
{ "modal_dialog", { 6, -1, 0, 1, 128 }, { 3, -1, 0, 3, 32 } }, { "modal_dialog", { 6, -1, 0, 1, 255 }, { 3, -1, 0, 3, 128 } },
{ "utility", { 3, -1, 0, 1, 128 }, { 3, -1, 0, 1, 32 } }, { "utility", { 3, -1, 0, 1, 255 }, { 3, -1, 0, 1, 128 } },
{ "border", { 6, -1, 0, 3, 128 }, { 3, -1, 0, 3, 32 } }, { "border", { 6, -1, 0, 3, 255 }, { 3, -1, 0, 3, 128 } },
{ "menu", { 6, -1, 0, 3, 128 }, { 3, -1, 0, 0, 32 } }, { "menu", { 6, -1, 0, 3, 255 }, { 3, -1, 0, 0, 128 } },
{ "popup-menu", { 1, -1, 0, 1, 128 }, { 1, -1, 0, 1, 128 } }, { "popup-menu", { 1, -1, 0, 1, 128 }, { 1, -1, 0, 1, 128 } },
@@ -178,8 +175,8 @@ meta_shadow_unref (MetaShadow *shadow)
} }
meta_window_shape_unref (shadow->key.shape); meta_window_shape_unref (shadow->key.shape);
cogl_object_unref (shadow->texture); cogl_handle_unref (shadow->texture);
cogl_object_unref (shadow->pipeline); cogl_handle_unref (shadow->material);
g_slice_free (MetaShadow, shadow); g_slice_free (MetaShadow, shadow);
} }
@@ -221,10 +218,10 @@ meta_shadow_paint (MetaShadow *shadow,
int dest_y[4]; int dest_y[4];
int n_x, n_y; int n_x, n_y;
cogl_pipeline_set_color4ub (shadow->pipeline, cogl_material_set_color4ub (shadow->material,
opacity, opacity, opacity, opacity); opacity, opacity, opacity, opacity);
cogl_set_source (shadow->pipeline); cogl_set_source (shadow->material);
if (shadow->scale_width) if (shadow->scale_width)
{ {
@@ -804,7 +801,7 @@ make_shadow (MetaShadow *shadow,
cairo_region_destroy (column_convolve_region); cairo_region_destroy (column_convolve_region);
g_free (buffer); g_free (buffer);
shadow->pipeline = meta_create_texture_pipeline (shadow->texture); shadow->material = meta_create_texture_material (shadow->texture);
} }
static MetaShadowParams * static MetaShadowParams *

View File

@@ -1,4 +1,8 @@
/* /*
* shaped texture
*
* An actor to draw a masked texture.
*
* Authored By Neil Roberts <neil@linux.intel.com> * Authored By Neil Roberts <neil@linux.intel.com>
* and Jasper St. Pierre <jstpierre@mecheye.net> * and Jasper St. Pierre <jstpierre@mecheye.net>
* *
@@ -21,16 +25,9 @@
* 02111-1307, USA. * 02111-1307, USA.
*/ */
/**
* SECTION:meta-shaped-texture
* @title: MetaShapedTexture
* @short_description: An actor to draw a masked texture.
*/
#include <config.h> #include <config.h>
#include <meta/meta-shaped-texture.h> #include <meta/meta-shaped-texture.h>
#include "clutter-utils.h"
#include "meta-texture-tower.h" #include "meta-texture-tower.h"
#include <clutter/clutter.h> #include <clutter/clutter.h>
@@ -67,12 +64,12 @@ struct _MetaShapedTexturePrivate
{ {
MetaTextureTower *paint_tower; MetaTextureTower *paint_tower;
Pixmap pixmap; Pixmap pixmap;
CoglTexturePixmapX11 *texture; CoglHandle texture;
CoglTexture *mask_texture; CoglHandle mask_texture;
CoglHandle material;
CoglHandle material_unshaped;
cairo_region_t *clip_region; cairo_region_t *clip_region;
cairo_region_t *opaque_region;
cairo_region_t *input_shape_region;
guint tex_width, tex_height; guint tex_width, tex_height;
@@ -104,8 +101,8 @@ meta_shaped_texture_init (MetaShapedTexture *self)
priv = self->priv = META_SHAPED_TEXTURE_GET_PRIVATE (self); priv = self->priv = META_SHAPED_TEXTURE_GET_PRIVATE (self);
priv->paint_tower = meta_texture_tower_new (); priv->paint_tower = meta_texture_tower_new ();
priv->texture = NULL; priv->texture = COGL_INVALID_HANDLE;
priv->mask_texture = NULL; priv->mask_texture = COGL_INVALID_HANDLE;
priv->create_mipmaps = TRUE; priv->create_mipmaps = TRUE;
} }
@@ -119,99 +116,41 @@ meta_shaped_texture_dispose (GObject *object)
meta_texture_tower_free (priv->paint_tower); meta_texture_tower_free (priv->paint_tower);
priv->paint_tower = NULL; priv->paint_tower = NULL;
g_clear_pointer (&priv->texture, cogl_object_unref); if (priv->material != COGL_INVALID_HANDLE)
g_clear_pointer (&priv->opaque_region, cairo_region_destroy); {
cogl_handle_unref (priv->material);
priv->material = COGL_INVALID_HANDLE;
}
if (priv->material_unshaped != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->material_unshaped);
priv->material_unshaped = COGL_INVALID_HANDLE;
}
if (priv->texture != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->texture);
priv->texture = COGL_INVALID_HANDLE;
}
meta_shaped_texture_set_mask_texture (self, NULL); meta_shaped_texture_set_mask_texture (self, COGL_INVALID_HANDLE);
meta_shaped_texture_set_clip_region (self, NULL); meta_shaped_texture_set_clip_region (self, NULL);
G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object); G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object);
} }
static CoglPipeline *
get_unmasked_pipeline (CoglContext *ctx)
{
return cogl_pipeline_new (ctx);
}
static CoglPipeline *
get_masked_pipeline (CoglContext *ctx)
{
static CoglPipeline *template = NULL;
if (G_UNLIKELY (template == NULL))
{
template = cogl_pipeline_new (ctx);
cogl_pipeline_set_layer_combine (template, 1,
"RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
NULL);
}
return cogl_pipeline_copy (template);
}
static CoglPipeline *
get_unblended_pipeline (CoglContext *ctx)
{
static CoglPipeline *template = NULL;
if (G_UNLIKELY (template == NULL))
{
CoglColor color;
template = cogl_pipeline_new (ctx);
cogl_color_init_from_4ub (&color, 255, 255, 255, 255);
cogl_pipeline_set_blend (template,
"RGBA = ADD (SRC_COLOR, 0)",
NULL);
cogl_pipeline_set_color (template, &color);
}
return cogl_pipeline_copy (template);
}
static void
paint_clipped_rectangle (CoglFramebuffer *fb,
CoglPipeline *pipeline,
cairo_rectangle_int_t *rect,
ClutterActorBox *alloc)
{
float coords[8];
float x1, y1, x2, y2;
x1 = rect->x;
y1 = rect->y;
x2 = rect->x + rect->width;
y2 = rect->y + rect->height;
coords[0] = rect->x / (alloc->x2 - alloc->x1);
coords[1] = rect->y / (alloc->y2 - alloc->y1);
coords[2] = (rect->x + rect->width) / (alloc->x2 - alloc->x1);
coords[3] = (rect->y + rect->height) / (alloc->y2 - alloc->y1);
coords[4] = coords[0];
coords[5] = coords[1];
coords[6] = coords[2];
coords[7] = coords[3];
cogl_framebuffer_draw_multitextured_rectangle (fb, pipeline,
x1, y1, x2, y2,
&coords[0], 8);
}
static void static void
meta_shaped_texture_paint (ClutterActor *actor) meta_shaped_texture_paint (ClutterActor *actor)
{ {
MetaShapedTexture *stex = (MetaShapedTexture *) actor; MetaShapedTexture *stex = (MetaShapedTexture *) actor;
MetaShapedTexturePrivate *priv = stex->priv; MetaShapedTexturePrivate *priv = stex->priv;
CoglHandle paint_tex;
guint tex_width, tex_height; guint tex_width, tex_height;
guchar opacity;
CoglContext *ctx;
CoglFramebuffer *fb;
CoglPipeline *pipeline = NULL;
CoglTexture *paint_tex;
ClutterActorBox alloc; ClutterActorBox alloc;
cairo_region_t *blended_region = NULL;
CoglPipelineFilter filter; static CoglHandle material_template = COGL_INVALID_HANDLE;
static CoglHandle material_unshaped_template = COGL_INVALID_HANDLE;
CoglHandle material;
if (priv->clip_region && cairo_region_is_empty (priv->clip_region)) if (priv->clip_region && cairo_region_is_empty (priv->clip_region))
return; return;
@@ -237,9 +176,9 @@ meta_shaped_texture_paint (ClutterActor *actor)
if (priv->create_mipmaps) if (priv->create_mipmaps)
paint_tex = meta_texture_tower_get_paint_texture (priv->paint_tower); paint_tex = meta_texture_tower_get_paint_texture (priv->paint_tower);
else else
paint_tex = COGL_TEXTURE (priv->texture); paint_tex = priv->texture;
if (paint_tex == NULL) if (paint_tex == COGL_INVALID_HANDLE)
return; return;
tex_width = priv->tex_width; tex_width = priv->tex_width;
@@ -248,144 +187,101 @@ meta_shaped_texture_paint (ClutterActor *actor)
if (tex_width == 0 || tex_height == 0) /* no contents yet */ if (tex_width == 0 || tex_height == 0) /* no contents yet */
return; return;
/* Use nearest-pixel interpolation if the texture is unscaled. This if (priv->mask_texture == COGL_INVALID_HANDLE)
* improves performance, especially with software rendering.
*/
filter = COGL_PIPELINE_FILTER_LINEAR;
if (!clutter_actor_is_in_clone_paint (actor))
{ {
int x_origin, y_origin; /* Use a single-layer texture if we don't have a mask. */
if (meta_actor_is_untransformed (actor, if (priv->material_unshaped == COGL_INVALID_HANDLE)
&x_origin,
&y_origin))
filter = COGL_PIPELINE_FILTER_NEAREST;
}
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
fb = cogl_get_draw_framebuffer ();
opacity = clutter_actor_get_paint_opacity (actor);
clutter_actor_get_allocation_box (actor, &alloc);
if (priv->opaque_region != NULL && opacity == 255)
{
CoglPipeline *opaque_pipeline;
cairo_region_t *region;
int n_rects;
int i;
if (priv->clip_region != NULL)
{ {
region = cairo_region_copy (priv->clip_region); if (G_UNLIKELY (material_unshaped_template == COGL_INVALID_HANDLE))
cairo_region_intersect (region, priv->opaque_region); material_unshaped_template = cogl_material_new ();
priv->material_unshaped = cogl_material_copy (material_unshaped_template);
} }
else material = priv->material_unshaped;
{
region = cairo_region_reference (priv->opaque_region);
}
if (cairo_region_is_empty (region))
goto paint_blended;
opaque_pipeline = get_unblended_pipeline (ctx);
cogl_pipeline_set_layer_texture (opaque_pipeline, 0, paint_tex);
cogl_pipeline_set_layer_filters (opaque_pipeline, 0, filter, filter);
n_rects = cairo_region_num_rectangles (region);
for (i = 0; i < n_rects; i++)
{
cairo_rectangle_int_t rect;
cairo_region_get_rectangle (region, i, &rect);
paint_clipped_rectangle (fb, opaque_pipeline, &rect, &alloc);
}
cogl_object_unref (opaque_pipeline);
if (priv->clip_region != NULL)
{
blended_region = cairo_region_copy (priv->clip_region);
}
else
{
cairo_rectangle_int_t rect = { 0, 0, tex_width, tex_height };
blended_region = cairo_region_create_rectangle (&rect);
}
cairo_region_subtract (blended_region, priv->opaque_region);
paint_blended:
cairo_region_destroy (region);
}
if (blended_region == NULL && priv->clip_region != NULL)
blended_region = cairo_region_reference (priv->clip_region);
if (blended_region != NULL && cairo_region_is_empty (blended_region))
goto out;
if (priv->mask_texture == NULL)
{
pipeline = get_unmasked_pipeline (ctx);
} }
else else
{ {
pipeline = get_masked_pipeline (ctx); if (priv->material == COGL_INVALID_HANDLE)
cogl_pipeline_set_layer_texture (pipeline, 1, priv->mask_texture); {
cogl_pipeline_set_layer_filters (pipeline, 1, filter, filter); if (G_UNLIKELY (material_template == COGL_INVALID_HANDLE))
{
material_template = cogl_material_new ();
cogl_material_set_layer_combine (material_template, 1,
"RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
NULL);
}
priv->material = cogl_material_copy (material_template);
}
material = priv->material;
cogl_material_set_layer (material, 1, priv->mask_texture);
} }
cogl_pipeline_set_layer_texture (pipeline, 0, paint_tex); cogl_material_set_layer (material, 0, paint_tex);
cogl_pipeline_set_layer_filters (pipeline, 0, filter, filter);
{ {
CoglColor color; CoglColor color;
cogl_color_init_from_4ub (&color, opacity, opacity, opacity, opacity); guchar opacity = clutter_actor_get_paint_opacity (actor);
cogl_pipeline_set_color (pipeline, &color); cogl_color_set_from_4ub (&color, opacity, opacity, opacity, opacity);
cogl_material_set_color (material, &color);
} }
if (blended_region != NULL) cogl_set_source (material);
clutter_actor_get_allocation_box (actor, &alloc);
if (priv->clip_region)
{ {
int n_rects; int n_rects;
int i;
cairo_rectangle_int_t tex_rect = { 0, 0, tex_width, tex_height };
/* Limit to how many separate rectangles we'll draw; beyond this just /* Limit to how many separate rectangles we'll draw; beyond this just
* fall back and draw the whole thing */ * fall back and draw the whole thing */
# define MAX_RECTS 16 # define MAX_RECTS 16
n_rects = cairo_region_num_rectangles (blended_region); n_rects = cairo_region_num_rectangles (priv->clip_region);
if (n_rects <= MAX_RECTS) if (n_rects <= MAX_RECTS)
{ {
int i; float coords[8];
cairo_rectangle_int_t tex_rect = { 0, 0, tex_width, tex_height }; float x1, y1, x2, y2;
for (i = 0; i < n_rects; i++) for (i = 0; i < n_rects; i++)
{ {
cairo_rectangle_int_t rect; cairo_rectangle_int_t rect;
cairo_region_get_rectangle (blended_region, i, &rect); cairo_region_get_rectangle (priv->clip_region, i, &rect);
if (!gdk_rectangle_intersect (&tex_rect, &rect, &rect)) if (!gdk_rectangle_intersect (&tex_rect, &rect, &rect))
continue; continue;
paint_clipped_rectangle (fb, pipeline, &rect, &alloc); x1 = rect.x;
y1 = rect.y;
x2 = rect.x + rect.width;
y2 = rect.y + rect.height;
coords[0] = rect.x / (alloc.x2 - alloc.x1);
coords[1] = rect.y / (alloc.y2 - alloc.y1);
coords[2] = (rect.x + rect.width) / (alloc.x2 - alloc.x1);
coords[3] = (rect.y + rect.height) / (alloc.y2 - alloc.y1);
coords[4] = coords[0];
coords[5] = coords[1];
coords[6] = coords[2];
coords[7] = coords[3];
cogl_rectangle_with_multitexture_coords (x1, y1, x2, y2,
&coords[0], 8);
} }
goto out; return;
} }
} }
cogl_framebuffer_draw_rectangle (fb, pipeline, cogl_rectangle (0, 0,
0, 0, alloc.x2 - alloc.x1,
alloc.x2 - alloc.x1, alloc.y2 - alloc.y1);
alloc.y2 - alloc.y1);
out:
if (pipeline != NULL)
cogl_object_unref (pipeline);
if (blended_region != NULL)
cairo_region_destroy (blended_region);
} }
static void static void
@@ -395,61 +291,38 @@ meta_shaped_texture_pick (ClutterActor *actor,
MetaShapedTexture *stex = (MetaShapedTexture *) actor; MetaShapedTexture *stex = (MetaShapedTexture *) actor;
MetaShapedTexturePrivate *priv = stex->priv; MetaShapedTexturePrivate *priv = stex->priv;
if (!clutter_actor_should_pick_paint (actor) ||
(priv->clip_region && cairo_region_is_empty (priv->clip_region)))
return;
/* If there is no region then use the regular pick */ /* If there is no region then use the regular pick */
if (priv->input_shape_region == NULL) if (priv->mask_texture == COGL_INVALID_HANDLE)
CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class)->pick (actor, color); CLUTTER_ACTOR_CLASS (meta_shaped_texture_parent_class)
else ->pick (actor, color);
else if (clutter_actor_should_pick_paint (actor))
{ {
int n_rects; CoglHandle paint_tex;
float *rectangles; ClutterActorBox alloc;
int i; guint tex_width, tex_height;
CoglPipeline *pipeline;
CoglContext *ctx;
CoglFramebuffer *fb;
CoglColor cogl_color;
/* Note: We don't bother trying to intersect the pick and clip regions paint_tex = priv->texture;
* since needing to copy the region, do the intersection, and probably
* increase the number of rectangles seems more likely to have a negative
* effect.
*
* NB: Most of the time when just using rectangles for picking then
* picking shouldn't involve any rendering, and minimizing the number of
* rectangles has more benefit than reducing the area of the pick
* region.
*/
n_rects = cairo_region_num_rectangles (priv->input_shape_region); if (paint_tex == COGL_INVALID_HANDLE)
rectangles = g_alloca (sizeof (float) * 4 * n_rects); return;
for (i = 0; i < n_rects; i++) tex_width = cogl_texture_get_width (paint_tex);
{ tex_height = cogl_texture_get_height (paint_tex);
cairo_rectangle_int_t rect;
int pos = i * 4;
cairo_region_get_rectangle (priv->input_shape_region, i, &rect); if (tex_width == 0 || tex_height == 0) /* no contents yet */
return;
rectangles[pos] = rect.x; cogl_set_source_color4ub (color->red, color->green, color->blue,
rectangles[pos + 1] = rect.y; color->alpha);
rectangles[pos + 2] = rect.x + rect.width;
rectangles[pos + 3] = rect.y + rect.height;
}
ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ()); clutter_actor_get_allocation_box (actor, &alloc);
fb = cogl_get_draw_framebuffer ();
cogl_color_init_from_4ub (&cogl_color, color->red, color->green, color->blue, color->alpha); /* Paint the mask rectangle in the given color */
cogl_set_source_texture (priv->mask_texture);
pipeline = cogl_pipeline_new (ctx); cogl_rectangle_with_texture_coords (0, 0,
cogl_pipeline_set_color (pipeline, &cogl_color); alloc.x2 - alloc.x1,
alloc.y2 - alloc.y1,
cogl_framebuffer_draw_rectangles (fb, pipeline, 0, 0, 1, 1);
rectangles, n_rects);
cogl_object_unref (pipeline);
} }
} }
@@ -520,17 +393,17 @@ meta_shaped_texture_set_create_mipmaps (MetaShapedTexture *stex,
if (create_mipmaps != priv->create_mipmaps) if (create_mipmaps != priv->create_mipmaps)
{ {
CoglTexture *base_texture; CoglHandle base_texture;
priv->create_mipmaps = create_mipmaps; priv->create_mipmaps = create_mipmaps;
base_texture = create_mipmaps ? base_texture = create_mipmaps ?
COGL_TEXTURE (priv->texture) : NULL; priv->texture : COGL_INVALID_HANDLE;
meta_texture_tower_set_base_texture (priv->paint_tower, base_texture); meta_texture_tower_set_base_texture (priv->paint_tower, base_texture);
} }
} }
void void
meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex, meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex,
CoglTexture *mask_texture) CoglHandle mask_texture)
{ {
MetaShapedTexturePrivate *priv; MetaShapedTexturePrivate *priv;
@@ -538,90 +411,46 @@ meta_shaped_texture_set_mask_texture (MetaShapedTexture *stex,
priv = stex->priv; priv = stex->priv;
g_clear_pointer (&priv->mask_texture, cogl_object_unref); if (priv->mask_texture != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->mask_texture);
priv->mask_texture = COGL_INVALID_HANDLE;
}
if (mask_texture != NULL) if (mask_texture != COGL_INVALID_HANDLE)
{ {
priv->mask_texture = mask_texture; priv->mask_texture = mask_texture;
cogl_object_ref (priv->mask_texture); cogl_handle_ref (priv->mask_texture);
} }
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex)); clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
} }
void
/**
* meta_shaped_texture_update_area:
* @stex: #MetaShapedTexture
* @x: the x coordinate of the damaged area
* @y: the y coordinate of the damaged area
* @width: the width of the damaged area
* @height: the height of the damaged area
* @unobscured_region: The unobscured region of the window or %NULL if
* there is no valid one (like when the actor is transformed or
* has a mapped clone)
*
* Repairs the damaged area indicated by @x, @y, @width and @height
* and queues a redraw for the intersection @visibible_region and
* the damage area. If @visibible_region is %NULL a redraw will always
* get queued.
*
* Return value: Whether a redraw have been queued or not
*/
gboolean
meta_shaped_texture_update_area (MetaShapedTexture *stex, meta_shaped_texture_update_area (MetaShapedTexture *stex,
int x, int x,
int y, int y,
int width, int width,
int height, int height)
cairo_region_t *unobscured_region)
{ {
MetaShapedTexturePrivate *priv; MetaShapedTexturePrivate *priv;
const cairo_rectangle_int_t clip = { x, y, width, height }; const cairo_rectangle_int_t clip = { x, y, width, height };
priv = stex->priv; priv = stex->priv;
if (priv->texture == NULL) if (priv->texture == COGL_INVALID_HANDLE)
return FALSE; return;
cogl_texture_pixmap_x11_update_area (priv->texture, cogl_texture_pixmap_x11_update_area (priv->texture, x, y, width, height);
x, y, width, height);
meta_texture_tower_update_area (priv->paint_tower, x, y, width, height); meta_texture_tower_update_area (priv->paint_tower, x, y, width, height);
if (unobscured_region)
{
cairo_region_t *intersection;
if (cairo_region_is_empty (unobscured_region))
return FALSE;
intersection = cairo_region_copy (unobscured_region);
cairo_region_intersect_rectangle (intersection, &clip);
if (!cairo_region_is_empty (intersection))
{
cairo_rectangle_int_t damage_rect;
cairo_region_get_extents (intersection, &damage_rect);
clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stex), &damage_rect);
cairo_region_destroy (intersection);
return TRUE;
}
cairo_region_destroy (intersection);
return FALSE;
}
clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stex), &clip); clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (stex), &clip);
return TRUE;
} }
static void static void
set_cogl_texture (MetaShapedTexture *stex, set_cogl_texture (MetaShapedTexture *stex,
CoglTexturePixmapX11 *cogl_tex) CoglHandle cogl_tex)
{ {
MetaShapedTexturePrivate *priv; MetaShapedTexturePrivate *priv;
guint width, height; guint width, height;
@@ -630,15 +459,21 @@ set_cogl_texture (MetaShapedTexture *stex,
priv = stex->priv; priv = stex->priv;
if (priv->texture != NULL) if (priv->texture != COGL_INVALID_HANDLE)
cogl_object_unref (priv->texture); cogl_handle_unref (priv->texture);
priv->texture = cogl_tex; priv->texture = cogl_tex;
if (cogl_tex != NULL) if (priv->material != COGL_INVALID_HANDLE)
cogl_material_set_layer (priv->material, 0, cogl_tex);
if (priv->material_unshaped != COGL_INVALID_HANDLE)
cogl_material_set_layer (priv->material_unshaped, 0, cogl_tex);
if (cogl_tex != COGL_INVALID_HANDLE)
{ {
width = cogl_texture_get_width (COGL_TEXTURE (cogl_tex)); width = cogl_texture_get_width (cogl_tex);
height = cogl_texture_get_height (COGL_TEXTURE (cogl_tex)); height = cogl_texture_get_height (cogl_tex);
if (width != priv->tex_width || if (width != priv->tex_width ||
height != priv->tex_height) height != priv->tex_height)
@@ -651,7 +486,7 @@ set_cogl_texture (MetaShapedTexture *stex,
} }
else else
{ {
/* size changed to 0 going to an inavlid texture */ /* size changed to 0 going to an invalid handle */
priv->tex_width = 0; priv->tex_width = 0;
priv->tex_height = 0; priv->tex_height = 0;
clutter_actor_queue_relayout (CLUTTER_ACTOR (stex)); clutter_actor_queue_relayout (CLUTTER_ACTOR (stex));
@@ -687,11 +522,10 @@ meta_shaped_texture_set_pixmap (MetaShapedTexture *stex,
set_cogl_texture (stex, cogl_texture_pixmap_x11_new (ctx, pixmap, FALSE, NULL)); set_cogl_texture (stex, cogl_texture_pixmap_x11_new (ctx, pixmap, FALSE, NULL));
} }
else else
set_cogl_texture (stex, NULL); set_cogl_texture (stex, COGL_INVALID_HANDLE);
if (priv->create_mipmaps) if (priv->create_mipmaps)
meta_texture_tower_set_base_texture (priv->paint_tower, meta_texture_tower_set_base_texture (priv->paint_tower, priv->texture);
COGL_TEXTURE (priv->texture));
} }
/** /**
@@ -700,53 +534,18 @@ meta_shaped_texture_set_pixmap (MetaShapedTexture *stex,
* *
* Returns: (transfer none): the unshaped texture * Returns: (transfer none): the unshaped texture
*/ */
CoglTexture * CoglHandle
meta_shaped_texture_get_texture (MetaShapedTexture *stex) meta_shaped_texture_get_texture (MetaShapedTexture *stex)
{ {
g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL); g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), COGL_INVALID_HANDLE);
return COGL_TEXTURE (stex->priv->texture); return stex->priv->texture;
}
/**
* meta_shaped_texture_set_input_shape_region:
* @stex: a #MetaShapedTexture
* @shape_region: the region of the texture that should respond to
* input.
*
* Determines what region of the texture should accept input. For
* X based windows this is defined by the ShapeInput region of the
* window.
*/
void
meta_shaped_texture_set_input_shape_region (MetaShapedTexture *stex,
cairo_region_t *shape_region)
{
MetaShapedTexturePrivate *priv;
g_return_if_fail (META_IS_SHAPED_TEXTURE (stex));
priv = stex->priv;
if (priv->input_shape_region != NULL)
{
cairo_region_destroy (priv->input_shape_region);
priv->input_shape_region = NULL;
}
if (shape_region != NULL)
{
cairo_region_reference (shape_region);
priv->input_shape_region = shape_region;
}
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
} }
/** /**
* meta_shaped_texture_set_clip_region: * meta_shaped_texture_set_clip_region:
* @stex: a #MetaShapedTexture * @stex: a #MetaShapedTexture
* @clip_region: the region of the texture that is visible and * @clip_region: (transfer full): the region of the texture that
* should be painted. * is visible and should be painted.
* *
* Provides a hint to the texture about what areas of the texture * Provides a hint to the texture about what areas of the texture
* are not completely obscured and thus need to be painted. This * are not completely obscured and thus need to be painted. This
@@ -767,7 +566,10 @@ meta_shaped_texture_set_clip_region (MetaShapedTexture *stex,
priv = stex->priv; priv = stex->priv;
if (priv->clip_region) if (priv->clip_region)
cairo_region_destroy (priv->clip_region); {
cairo_region_destroy (priv->clip_region);
priv->clip_region = NULL;
}
if (clip_region) if (clip_region)
priv->clip_region = cairo_region_copy (clip_region); priv->clip_region = cairo_region_copy (clip_region);
@@ -775,36 +577,6 @@ meta_shaped_texture_set_clip_region (MetaShapedTexture *stex,
priv->clip_region = NULL; priv->clip_region = NULL;
} }
/**
* meta_shaped_texture_set_opaque_region:
* @stex: a #MetaShapedTexture
* @opaque_region: (transfer full): the region of the texture that
* can have blending turned off.
*
* As most windows have a large portion that does not require blending,
* we can easily turn off blending if we know the areas that do not
* require blending. This sets the region where we will not blend for
* optimization purposes.
*/
void
meta_shaped_texture_set_opaque_region (MetaShapedTexture *stex,
cairo_region_t *opaque_region)
{
MetaShapedTexturePrivate *priv;
g_return_if_fail (META_IS_SHAPED_TEXTURE (stex));
priv = stex->priv;
if (priv->opaque_region)
cairo_region_destroy (priv->opaque_region);
if (opaque_region)
priv->opaque_region = cairo_region_reference (opaque_region);
else
priv->opaque_region = NULL;
}
/** /**
* meta_shaped_texture_get_image: * meta_shaped_texture_get_image:
* @stex: A #MetaShapedTexture * @stex: A #MetaShapedTexture
@@ -823,13 +595,13 @@ cairo_surface_t *
meta_shaped_texture_get_image (MetaShapedTexture *stex, meta_shaped_texture_get_image (MetaShapedTexture *stex,
cairo_rectangle_int_t *clip) cairo_rectangle_int_t *clip)
{ {
CoglTexture *texture, *mask_texture; CoglHandle texture, mask_texture;
cairo_rectangle_int_t texture_rect = { 0, 0, 0, 0 }; cairo_rectangle_int_t texture_rect = { 0, 0, 0, 0 };
cairo_surface_t *surface; cairo_surface_t *surface;
g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL); g_return_val_if_fail (META_IS_SHAPED_TEXTURE (stex), NULL);
texture = COGL_TEXTURE (stex->priv->texture); texture = stex->priv->texture;
if (texture == NULL) if (texture == NULL)
return NULL; return NULL;
@@ -866,7 +638,7 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
cogl_object_unref (texture); cogl_object_unref (texture);
mask_texture = stex->priv->mask_texture; mask_texture = stex->priv->mask_texture;
if (mask_texture != NULL) if (mask_texture != COGL_INVALID_HANDLE)
{ {
cairo_t *cr; cairo_t *cr;
cairo_surface_t *mask_surface; cairo_surface_t *mask_surface;

View File

@@ -59,10 +59,9 @@ typedef struct
struct _MetaTextureTower struct _MetaTextureTower
{ {
int n_levels; int n_levels;
CoglTexture *textures[MAX_TEXTURE_LEVELS]; CoglHandle textures[MAX_TEXTURE_LEVELS];
CoglOffscreen *fbos[MAX_TEXTURE_LEVELS]; CoglHandle fbos[MAX_TEXTURE_LEVELS];
Box invalid[MAX_TEXTURE_LEVELS]; Box invalid[MAX_TEXTURE_LEVELS];
CoglPipeline *pipeline_template;
}; };
/** /**
@@ -94,10 +93,7 @@ meta_texture_tower_free (MetaTextureTower *tower)
{ {
g_return_if_fail (tower != NULL); g_return_if_fail (tower != NULL);
if (tower->pipeline_template != NULL) meta_texture_tower_set_base_texture (tower, COGL_INVALID_HANDLE);
cogl_object_unref (tower->pipeline_template);
meta_texture_tower_set_base_texture (tower, NULL);
g_slice_free (MetaTextureTower, tower); g_slice_free (MetaTextureTower, tower);
} }
@@ -114,7 +110,7 @@ meta_texture_tower_free (MetaTextureTower *tower)
*/ */
void void
meta_texture_tower_set_base_texture (MetaTextureTower *tower, meta_texture_tower_set_base_texture (MetaTextureTower *tower,
CoglTexture *texture) CoglHandle texture)
{ {
int i; int i;
@@ -123,33 +119,33 @@ meta_texture_tower_set_base_texture (MetaTextureTower *tower,
if (texture == tower->textures[0]) if (texture == tower->textures[0])
return; return;
if (tower->textures[0] != NULL) if (tower->textures[0] != COGL_INVALID_HANDLE)
{ {
for (i = 1; i < tower->n_levels; i++) for (i = 1; i < tower->n_levels; i++)
{ {
if (tower->textures[i] != NULL) if (tower->textures[i] != COGL_INVALID_HANDLE)
{ {
cogl_object_unref (tower->textures[i]); cogl_handle_unref (tower->textures[i]);
tower->textures[i] = NULL; tower->textures[i] = COGL_INVALID_HANDLE;
} }
if (tower->fbos[i] != NULL) if (tower->fbos[i] != COGL_INVALID_HANDLE)
{ {
cogl_object_unref (tower->fbos[i]); cogl_handle_unref (tower->fbos[i]);
tower->fbos[i] = NULL; tower->fbos[i] = COGL_INVALID_HANDLE;
} }
} }
cogl_object_unref (tower->textures[0]); cogl_handle_unref (tower->textures[0]);
} }
tower->textures[0] = texture; tower->textures[0] = texture;
if (tower->textures[0] != NULL) if (tower->textures[0] != COGL_INVALID_HANDLE)
{ {
int width, height; int width, height;
cogl_object_ref (tower->textures[0]); cogl_handle_ref (tower->textures[0]);
width = cogl_texture_get_width (tower->textures[0]); width = cogl_texture_get_width (tower->textures[0]);
height = cogl_texture_get_height (tower->textures[0]); height = cogl_texture_get_height (tower->textures[0]);
@@ -190,7 +186,7 @@ meta_texture_tower_update_area (MetaTextureTower *tower,
g_return_if_fail (tower != NULL); g_return_if_fail (tower != NULL);
if (tower->textures[0] == NULL) if (tower->textures[0] == COGL_INVALID_HANDLE)
return; return;
texture_width = cogl_texture_get_width (tower->textures[0]); texture_width = cogl_texture_get_width (tower->textures[0]);
@@ -387,61 +383,185 @@ texture_tower_create_texture (MetaTextureTower *tower,
tower->invalid[level].y2 = height; tower->invalid[level].y2 = height;
} }
static void static gboolean
texture_tower_revalidate_fbo (MetaTextureTower *tower, texture_tower_revalidate_fbo (MetaTextureTower *tower,
int level) int level)
{ {
CoglTexture *source_texture = tower->textures[level - 1]; CoglHandle source_texture = tower->textures[level - 1];
int source_texture_width = cogl_texture_get_width (source_texture); int source_texture_width = cogl_texture_get_width (source_texture);
int source_texture_height = cogl_texture_get_height (source_texture); int source_texture_height = cogl_texture_get_height (source_texture);
CoglTexture *dest_texture = tower->textures[level]; CoglHandle dest_texture = tower->textures[level];
int dest_texture_width = cogl_texture_get_width (dest_texture); int dest_texture_width = cogl_texture_get_width (dest_texture);
int dest_texture_height = cogl_texture_get_height (dest_texture); int dest_texture_height = cogl_texture_get_height (dest_texture);
Box *invalid = &tower->invalid[level]; Box *invalid = &tower->invalid[level];
CoglFramebuffer *fb; CoglMatrix modelview;
CoglError *catch_error = NULL;
CoglPipeline *pipeline;
if (tower->fbos[level] == NULL) if (tower->fbos[level] == COGL_INVALID_HANDLE)
tower->fbos[level] = cogl_offscreen_new_with_texture (dest_texture); tower->fbos[level] = cogl_offscreen_new_to_texture (dest_texture);
fb = COGL_FRAMEBUFFER (tower->fbos[level]); if (tower->fbos[level] == COGL_INVALID_HANDLE)
return FALSE;
if (!cogl_framebuffer_allocate (fb, &catch_error)) cogl_push_framebuffer (tower->fbos[level]);
cogl_ortho (0, dest_texture_width, dest_texture_height, 0, -1., 1.);
cogl_matrix_init_identity (&modelview);
cogl_set_modelview_matrix (&modelview);
cogl_set_source_texture (tower->textures[level - 1]);
cogl_rectangle_with_texture_coords (invalid->x1, invalid->y1,
invalid->x2, invalid->y2,
(2. * invalid->x1) / source_texture_width,
(2. * invalid->y1) / source_texture_height,
(2. * invalid->x2) / source_texture_width,
(2. * invalid->y2) / source_texture_height);
cogl_pop_framebuffer ();
return TRUE;
}
static void
fill_copy (guchar *buf,
const guchar *source,
int width)
{
memcpy (buf, source, width * 4);
}
static void
fill_scale_down (guchar *buf,
const guchar *source,
int width)
{
while (width > 1)
{ {
cogl_error_free (catch_error); buf[0] = (source[0] + source[4]) / 2;
return; buf[1] = (source[1] + source[5]) / 2;
buf[2] = (source[2] + source[6]) / 2;
buf[3] = (source[3] + source[7]) / 2;
buf += 4;
source += 8;
width -= 2;
} }
cogl_framebuffer_orthographic (fb, 0, 0, dest_texture_width, dest_texture_height, -1., 1.); if (width > 0)
if (!tower->pipeline_template)
{ {
CoglContext *ctx = buf[0] = source[0] / 2;
clutter_backend_get_cogl_context (clutter_get_default_backend ()); buf[1] = source[1] / 2;
tower->pipeline_template = cogl_pipeline_new (ctx); buf[2] = source[2] / 2;
cogl_pipeline_set_blend (tower->pipeline_template, "RGBA = ADD (SRC_COLOR, 0)", NULL); buf[3] = source[3] / 2;
}
}
static void
texture_tower_revalidate_client (MetaTextureTower *tower,
int level)
{
CoglHandle source_texture = tower->textures[level - 1];
int source_texture_width = cogl_texture_get_width (source_texture);
int source_texture_height = cogl_texture_get_height (source_texture);
guint source_rowstride;
guchar *source_data;
CoglHandle dest_texture = tower->textures[level];
int dest_texture_width = cogl_texture_get_width (dest_texture);
int dest_texture_height = cogl_texture_get_height (dest_texture);
int dest_x = tower->invalid[level].x1;
int dest_y = tower->invalid[level].y1;
int dest_width = tower->invalid[level].x2 - tower->invalid[level].x1;
int dest_height = tower->invalid[level].y2 - tower->invalid[level].y1;
guchar *dest_data;
guchar *source_tmp1 = NULL, *source_tmp2 = NULL;
int i, j;
source_rowstride = source_texture_width * 4;
source_data = g_malloc (source_texture_height * source_rowstride);
cogl_texture_get_data (source_texture, TEXTURE_FORMAT, source_rowstride,
source_data);
dest_data = g_malloc (dest_height * dest_width * 4);
if (dest_texture_height < source_texture_height)
{
source_tmp1 = g_malloc (dest_width * 4);
source_tmp2 = g_malloc (dest_width * 4);
} }
pipeline = cogl_pipeline_copy (tower->pipeline_template); for (i = 0; i < dest_height; i++)
cogl_pipeline_set_layer_texture (pipeline, 0, tower->textures[level - 1]); {
guchar *dest_row = dest_data + i * dest_width * 4;
if (dest_texture_height < source_texture_height)
{
guchar *source1, *source2;
guchar *dest;
cogl_framebuffer_draw_textured_rectangle (fb, pipeline, if (dest_texture_width < source_texture_width)
invalid->x1, invalid->y1, {
invalid->x2, invalid->y2, fill_scale_down (source_tmp1,
(2. * invalid->x1) / source_texture_width, source_data + ((i + dest_y) * 2) * source_rowstride + dest_x * 2 * 4,
(2. * invalid->y1) / source_texture_height, dest_width * 2);
(2. * invalid->x2) / source_texture_width, fill_scale_down (source_tmp2,
(2. * invalid->y2) / source_texture_height); source_data + ((i + dest_y) * 2 + 1) * source_rowstride + dest_x * 2 * 4,
dest_width * 2);
}
else
{
fill_copy (source_tmp1,
source_data + ((i + dest_y) * 2) * source_rowstride + dest_x * 4,
dest_width);
fill_copy (source_tmp2,
source_data + ((i + dest_y) * 2 + 1) * source_rowstride + dest_x * 4,
dest_width);
}
cogl_object_unref (pipeline); source1 = source_tmp1;
source2 = source_tmp2;
dest = dest_row;
for (j = 0; j < dest_width * 4; j++)
*(dest++) = (*(source1++) + *(source2++)) / 2;
}
else
{
if (dest_texture_width < source_texture_width)
fill_scale_down (dest_row,
source_data + (i + dest_y) * source_rowstride + dest_x * 2 * 4,
dest_width * 2);
else
fill_copy (dest_row,
source_data + (i + dest_y) * source_rowstride,
dest_width);
}
}
cogl_texture_set_region (dest_texture,
0, 0,
dest_x, dest_y,
dest_width, dest_height,
dest_width, dest_height,
TEXTURE_FORMAT,
4 * dest_width,
dest_data);
if (dest_texture_height < source_texture_height)
{
g_free (source_tmp1);
g_free (source_tmp2);
}
g_free (source_data);
g_free (dest_data);
} }
static void static void
texture_tower_revalidate (MetaTextureTower *tower, texture_tower_revalidate (MetaTextureTower *tower,
int level) int level)
{ {
texture_tower_revalidate_fbo (tower, level); if (!texture_tower_revalidate_fbo (tower, level))
texture_tower_revalidate_client (tower, level);
} }
/** /**
@@ -455,28 +575,28 @@ texture_tower_revalidate (MetaTextureTower *tower,
* rectangle (0, 0, 200, 200). * rectangle (0, 0, 200, 200).
* *
* Return value: the COGL texture handle to use for painting, or * Return value: the COGL texture handle to use for painting, or
* %NULL if no base texture has yet been set. * %COGL_INVALID_HANDLE if no base texture has yet been set.
*/ */
CoglTexture * CoglHandle
meta_texture_tower_get_paint_texture (MetaTextureTower *tower) meta_texture_tower_get_paint_texture (MetaTextureTower *tower)
{ {
int texture_width, texture_height; int texture_width, texture_height;
int level; int level;
g_return_val_if_fail (tower != NULL, NULL); g_return_val_if_fail (tower != NULL, COGL_INVALID_HANDLE);
if (tower->textures[0] == NULL) if (tower->textures[0] == COGL_INVALID_HANDLE)
return NULL; return COGL_INVALID_HANDLE;
texture_width = cogl_texture_get_width (tower->textures[0]); texture_width = cogl_texture_get_width (tower->textures[0]);
texture_height = cogl_texture_get_height (tower->textures[0]); texture_height = cogl_texture_get_height (tower->textures[0]);
level = get_paint_level(texture_width, texture_height); level = get_paint_level(texture_width, texture_height);
if (level < 0) /* singular paint matrix, scaled to nothing */ if (level < 0) /* singular paint matrix, scaled to nothing */
return NULL; return COGL_INVALID_HANDLE;
level = MIN (level, tower->n_levels - 1); level = MIN (level, tower->n_levels - 1);
if (tower->textures[level] == NULL || if (tower->textures[level] == COGL_INVALID_HANDLE ||
(tower->invalid[level].x2 != tower->invalid[level].x1 && (tower->invalid[level].x2 != tower->invalid[level].x1 &&
tower->invalid[level].y2 != tower->invalid[level].y1)) tower->invalid[level].y2 != tower->invalid[level].y1))
{ {
@@ -488,7 +608,7 @@ meta_texture_tower_get_paint_texture (MetaTextureTower *tower)
texture_width = MAX (1, texture_width / 2); texture_width = MAX (1, texture_width / 2);
texture_height = MAX (1, texture_height / 2); texture_height = MAX (1, texture_height / 2);
if (tower->textures[i] == NULL) if (tower->textures[i] == COGL_INVALID_HANDLE)
texture_tower_create_texture (tower, i, texture_width, texture_height); texture_tower_create_texture (tower, i, texture_width, texture_height);
} }

View File

@@ -56,13 +56,13 @@ typedef struct _MetaTextureTower MetaTextureTower;
MetaTextureTower *meta_texture_tower_new (void); MetaTextureTower *meta_texture_tower_new (void);
void meta_texture_tower_free (MetaTextureTower *tower); void meta_texture_tower_free (MetaTextureTower *tower);
void meta_texture_tower_set_base_texture (MetaTextureTower *tower, void meta_texture_tower_set_base_texture (MetaTextureTower *tower,
CoglTexture *texture); CoglHandle texture);
void meta_texture_tower_update_area (MetaTextureTower *tower, void meta_texture_tower_update_area (MetaTextureTower *tower,
int x, int x,
int y, int y,
int width, int width,
int height); int height);
CoglTexture *meta_texture_tower_get_paint_texture (MetaTextureTower *tower); CoglHandle meta_texture_tower_get_paint_texture (MetaTextureTower *tower);
G_BEGIN_DECLS G_BEGIN_DECLS

View File

@@ -43,8 +43,7 @@ void meta_window_actor_get_shape_bounds (MetaWindowActor *self,
cairo_rectangle_int_t *bounds); cairo_rectangle_int_t *bounds);
gboolean meta_window_actor_effect_in_progress (MetaWindowActor *self); gboolean meta_window_actor_effect_in_progress (MetaWindowActor *self);
void meta_window_actor_sync_actor_geometry (MetaWindowActor *self, void meta_window_actor_sync_actor_position (MetaWindowActor *self);
gboolean did_placement);
void meta_window_actor_sync_visibility (MetaWindowActor *self); void meta_window_actor_sync_visibility (MetaWindowActor *self);
void meta_window_actor_update_shape (MetaWindowActor *self); void meta_window_actor_update_shape (MetaWindowActor *self);
void meta_window_actor_update_opacity (MetaWindowActor *self); void meta_window_actor_update_opacity (MetaWindowActor *self);
@@ -52,11 +51,14 @@ void meta_window_actor_mapped (MetaWindowActor *self);
void meta_window_actor_unmapped (MetaWindowActor *self); void meta_window_actor_unmapped (MetaWindowActor *self);
void meta_window_actor_set_updates_frozen (MetaWindowActor *self, void meta_window_actor_set_updates_frozen (MetaWindowActor *self,
gboolean updates_frozen); gboolean updates_frozen);
void meta_window_actor_queue_frame_drawn (MetaWindowActor *self,
gboolean no_delay_frame);
void meta_window_actor_set_unobscured_region (MetaWindowActor *self, cairo_region_t *meta_window_actor_get_obscured_region (MetaWindowActor *self);
cairo_region_t *unobscured_region);
void meta_window_actor_set_visible_region (MetaWindowActor *self,
cairo_region_t *visible_region);
void meta_window_actor_set_visible_region_beneath (MetaWindowActor *self,
cairo_region_t *beneath_region);
void meta_window_actor_reset_visible_regions (MetaWindowActor *self);
void meta_window_actor_effect_completed (MetaWindowActor *actor, void meta_window_actor_effect_completed (MetaWindowActor *actor,
gulong event); gulong event);

File diff suppressed because it is too large Load Diff

View File

@@ -7,29 +7,118 @@
#include <gdk/gdk.h> /* for gdk_rectangle_intersect() */ #include <gdk/gdk.h> /* for gdk_rectangle_intersect() */
#include "clutter-utils.h"
#include "compositor-private.h" #include "compositor-private.h"
#include "meta-window-actor-private.h" #include "meta-window-actor-private.h"
#include "meta-window-group.h" #include "meta-window-group.h"
#include "window-private.h" #include "meta-background-actor-private.h"
#include "meta-cullable.h"
struct _MetaWindowGroupClass struct _MetaWindowGroupClass
{ {
ClutterActorClass parent_class; ClutterGroupClass parent_class;
}; };
struct _MetaWindowGroup struct _MetaWindowGroup
{ {
ClutterActor parent; ClutterGroup parent;
MetaScreen *screen; MetaScreen *screen;
}; };
static void cullable_iface_init (MetaCullableInterface *iface); G_DEFINE_TYPE (MetaWindowGroup, meta_window_group, CLUTTER_TYPE_GROUP);
G_DEFINE_TYPE_WITH_CODE (MetaWindowGroup, meta_window_group, CLUTTER_TYPE_ACTOR, /* This file uses pixel-aligned region computation to determine what
G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init)); * can be clipped out. This only really works if everything is aligned
* to the pixel grid - not scaled or rotated and at integer offsets.
*
* (This could be relaxed - if we turned off filtering for unscaled
* windows then windows would be, by definition aligned to the pixel
* grid. And for rectangular windows without a shape, the outline that
* we draw for an unrotated window is always a rectangle because we
* don't use antialasing for the window boundary - with or without
* filtering, with or without a scale. But figuring out exactly
* what pixels will be drawn by the graphics system in these cases
* gets tricky, so we just go for the easiest part - no scale,
* and at integer offsets.)
*
* The way we check for pixel-aligned is by looking at the
* transformation into screen space of the allocation box of an actor
* and and checking if the corners are "close enough" to integral
* pixel values.
*/
/* The definition of "close enough" to integral pixel values is
* equality when we convert to 24.8 fixed-point.
*/
static inline int
round_to_fixed (float x)
{
return roundf (x * 256);
}
/* This helper function checks if (according to our fixed point precision)
* the vertices @verts form a box of width @widthf and height @heightf
* located at integral coordinates. These coordinates are returned
* in @x_origin and @y_origin.
*/
static gboolean
vertices_are_untransformed (ClutterVertex *verts,
float widthf,
float heightf,
int *x_origin,
int *y_origin)
{
int width, height;
int v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y;
int x, y;
width = round_to_fixed (widthf); height = round_to_fixed (heightf);
v0x = round_to_fixed (verts[0].x); v0y = round_to_fixed (verts[0].y);
v1x = round_to_fixed (verts[1].x); v1y = round_to_fixed (verts[1].y);
v2x = round_to_fixed (verts[2].x); v2y = round_to_fixed (verts[2].y);
v3x = round_to_fixed (verts[3].x); v3y = round_to_fixed (verts[3].y);
/* Using shifting for converting fixed => int, gets things right for
* negative values. / 256. wouldn't do the same
*/
x = v0x >> 8;
y = v0y >> 8;
/* At integral coordinates? */
if (x * 256 != v0x || y * 256 != v0y)
return FALSE;
/* Not scaled? */
if (v1x - v0x != width || v2y - v0y != height)
return FALSE;
/* Not rotated/skewed? */
if (v0x != v2x || v0y != v1y ||
v3x != v1x || v3y != v2y)
return FALSE;
*x_origin = x;
*y_origin = y;
return TRUE;
}
/* Check if an actor is "untransformed" - which actually means transformed by
* at most a integer-translation. The integer translation, if any, is returned.
*/
static gboolean
actor_is_untransformed (ClutterActor *actor,
int *x_origin,
int *y_origin)
{
gfloat widthf, heightf;
ClutterVertex verts[4];
clutter_actor_get_size (actor, &widthf, &heightf);
clutter_actor_get_abs_allocation_vertices (actor, verts);
return vertices_are_untransformed (verts, widthf, heightf, x_origin, y_origin);
}
/* Help macros to scale from OpenGL <-1,1> coordinates system to /* Help macros to scale from OpenGL <-1,1> coordinates system to
* window coordinates ranging [0,window-size]. Borrowed from clutter-utils.c * window coordinates ranging [0,window-size]. Borrowed from clutter-utils.c
@@ -86,58 +175,23 @@ painting_untransformed (MetaWindowGroup *window_group,
viewport[3], viewport[1]); viewport[3], viewport[1]);
} }
return meta_actor_vertices_are_untransformed (vertices, width, height, x_origin, y_origin); return vertices_are_untransformed (vertices, width, height, x_origin, y_origin);
}
static void
meta_window_group_cull_out (MetaCullable *cullable,
cairo_region_t *unobscured_region,
cairo_region_t *clip_region)
{
meta_cullable_cull_out_children (cullable, unobscured_region, clip_region);
}
static void
meta_window_group_reset_culling (MetaCullable *cullable)
{
meta_cullable_reset_culling_children (cullable);
}
static void
cullable_iface_init (MetaCullableInterface *iface)
{
iface->cull_out = meta_window_group_cull_out;
iface->reset_culling = meta_window_group_reset_culling;
} }
static void static void
meta_window_group_paint (ClutterActor *actor) meta_window_group_paint (ClutterActor *actor)
{ {
cairo_region_t *clip_region; cairo_region_t *visible_region;
cairo_region_t *unobscured_region; ClutterActor *stage;
ClutterActorIter iter; cairo_rectangle_int_t visible_rect;
ClutterActor *child; GList *children, *l;
cairo_rectangle_int_t visible_rect, clip_rect;
int paint_x_offset, paint_y_offset;
int paint_x_origin, paint_y_origin; int paint_x_origin, paint_y_origin;
int actor_x_origin, actor_y_origin; int actor_x_origin, actor_y_origin;
int paint_x_offset, paint_y_offset;
MetaWindowGroup *window_group = META_WINDOW_GROUP (actor); MetaWindowGroup *window_group = META_WINDOW_GROUP (actor);
ClutterActor *stage = clutter_actor_get_stage (actor);
MetaCompScreen *info = meta_screen_get_compositor_data (window_group->screen); MetaCompScreen *info = meta_screen_get_compositor_data (window_group->screen);
/* Start off by treating all windows as completely unobscured, so damage anywhere
* in a window queues redraws, but confine it more below. */
clutter_actor_iter_init (&iter, actor);
while (clutter_actor_iter_next (&iter, &child))
{
if (META_IS_WINDOW_ACTOR (child))
{
MetaWindowActor *window_actor = META_WINDOW_ACTOR (child);
meta_window_actor_set_unobscured_region (window_actor, NULL);
}
}
/* Normally we expect an actor to be drawn at it's position on the screen. /* Normally we expect an actor to be drawn at it's position on the screen.
* However, if we're inside the paint of a ClutterClone, that won't be the * However, if we're inside the paint of a ClutterClone, that won't be the
* case and we need to compensate. We look at the position of the window * case and we need to compensate. We look at the position of the window
@@ -152,17 +206,21 @@ meta_window_group_paint (ClutterActor *actor)
* on the stage. * on the stage.
*/ */
if (!painting_untransformed (window_group, &paint_x_origin, &paint_y_origin) || if (!painting_untransformed (window_group, &paint_x_origin, &paint_y_origin) ||
!meta_actor_is_untransformed (actor, &actor_x_origin, &actor_y_origin)) !actor_is_untransformed (actor, &actor_x_origin, &actor_y_origin))
{ {
CLUTTER_ACTOR_CLASS (meta_window_group_parent_class)->paint (actor); CLUTTER_ACTOR_CLASS (meta_window_group_parent_class)->paint (actor);
return; return;
} }
visible_rect.x = visible_rect.y = 0; paint_x_offset = paint_x_origin - actor_x_origin;
visible_rect.width = clutter_actor_get_width (CLUTTER_ACTOR (stage)); paint_y_offset = paint_y_origin - actor_y_origin;
visible_rect.height = clutter_actor_get_height (CLUTTER_ACTOR (stage));
unobscured_region = cairo_region_create_rectangle (&visible_rect); /* We walk the list from top to bottom (opposite of painting order),
* and subtract the opaque area of each window out of the visible
* region that we pass to the windows below.
*/
children = clutter_container_get_children (CLUTTER_CONTAINER (actor));
children = g_list_reverse (children);
/* Get the clipped redraw bounds from Clutter so that we can avoid /* Get the clipped redraw bounds from Clutter so that we can avoid
* painting shadows on windows that don't need to be painted in this * painting shadows on windows that don't need to be painted in this
@@ -170,59 +228,113 @@ meta_window_group_paint (ClutterActor *actor)
* sizes, we could intersect this with an accurate union of the * sizes, we could intersect this with an accurate union of the
* monitors to avoid painting shadows that are visible only in the * monitors to avoid painting shadows that are visible only in the
* holes. */ * holes. */
stage = clutter_actor_get_stage (actor);
clutter_stage_get_redraw_clip_bounds (CLUTTER_STAGE (stage), clutter_stage_get_redraw_clip_bounds (CLUTTER_STAGE (stage),
&clip_rect); &visible_rect);
clip_region = cairo_region_create_rectangle (&clip_rect); visible_region = cairo_region_create_rectangle (&visible_rect);
paint_x_offset = paint_x_origin - actor_x_origin;
paint_y_offset = paint_y_origin - actor_y_origin;
cairo_region_translate (clip_region, -paint_x_offset, -paint_y_offset);
if (info->unredirected_window != NULL) if (info->unredirected_window != NULL)
{ {
cairo_rectangle_int_t unredirected_rect; cairo_rectangle_int_t unredirected_rect;
MetaWindow *window = meta_window_actor_get_meta_window (info->unredirected_window); MetaWindow *window = meta_window_actor_get_meta_window (info->unredirected_window);
meta_window_get_frame_rect (window, (MetaRectangle *)&unredirected_rect); meta_window_get_outer_rect (window, (MetaRectangle *)&unredirected_rect);
cairo_region_subtract_rectangle (unobscured_region, &unredirected_rect); cairo_region_subtract_rectangle (visible_region, &unredirected_rect);
cairo_region_subtract_rectangle (clip_region, &unredirected_rect);
} }
meta_cullable_cull_out (META_CULLABLE (window_group), unobscured_region, clip_region); for (l = children; l; l = l->next)
{
if (!CLUTTER_ACTOR_IS_VISIBLE (l->data))
continue;
cairo_region_destroy (unobscured_region); if (l->data == info->unredirected_window)
cairo_region_destroy (clip_region); continue;
/* If an actor has effects applied, then that can change the area
* it paints and the opacity, so we no longer can figure out what
* portion of the actor is obscured and what portion of the screen
* it obscures, so we skip the actor.
*
* This has a secondary beneficial effect: if a ClutterOffscreenEffect
* is applied to an actor, then our clipped redraws interfere with the
* caching of the FBO - even if we only need to draw a small portion
* of the window right now, ClutterOffscreenEffect may use other portions
* of the FBO later. So, skipping actors with effects applied also
* prevents these bugs.
*
* Theoretically, we should check clutter_actor_get_offscreen_redirect()
* as well for the same reason, but omitted for simplicity in the
* hopes that no-one will do that.
*/
if (clutter_actor_has_effects (l->data))
continue;
if (META_IS_WINDOW_ACTOR (l->data))
{
MetaWindowActor *window_actor = l->data;
int x, y;
if (!actor_is_untransformed (CLUTTER_ACTOR (window_actor), &x, &y))
continue;
x += paint_x_offset;
y += paint_y_offset;
/* Temporarily move to the coordinate system of the actor */
cairo_region_translate (visible_region, - x, - y);
meta_window_actor_set_visible_region (window_actor, visible_region);
if (clutter_actor_get_paint_opacity (CLUTTER_ACTOR (window_actor)) == 0xff)
{
cairo_region_t *obscured_region = meta_window_actor_get_obscured_region (window_actor);
if (obscured_region)
cairo_region_subtract (visible_region, obscured_region);
}
meta_window_actor_set_visible_region_beneath (window_actor, visible_region);
cairo_region_translate (visible_region, x, y);
}
else if (META_IS_BACKGROUND_ACTOR (l->data))
{
MetaBackgroundActor *background_actor = l->data;
int x, y;
if (!actor_is_untransformed (CLUTTER_ACTOR (background_actor), &x, &y))
continue;
x += paint_x_offset;
y += paint_y_offset;
cairo_region_translate (visible_region, - x, - y);
meta_background_actor_set_visible_region (background_actor, visible_region);
cairo_region_translate (visible_region, x, y);
}
}
cairo_region_destroy (visible_region);
CLUTTER_ACTOR_CLASS (meta_window_group_parent_class)->paint (actor); CLUTTER_ACTOR_CLASS (meta_window_group_parent_class)->paint (actor);
meta_cullable_reset_culling (META_CULLABLE (window_group)); /* Now that we are done painting, unset the visible regions (they will
} * mess up painting clones of our actors)
*/
/* Adapted from clutter_actor_update_default_paint_volume() */ for (l = children; l; l = l->next)
static gboolean
meta_window_group_get_paint_volume (ClutterActor *self,
ClutterPaintVolume *volume)
{
ClutterActorIter iter;
ClutterActor *child;
clutter_actor_iter_init (&iter, self);
while (clutter_actor_iter_next (&iter, &child))
{ {
const ClutterPaintVolume *child_volume; if (META_IS_WINDOW_ACTOR (l->data))
{
if (!CLUTTER_ACTOR_IS_MAPPED (child)) MetaWindowActor *window_actor = l->data;
continue; meta_window_actor_reset_visible_regions (window_actor);
}
child_volume = clutter_actor_get_transformed_paint_volume (child, self); else if (META_IS_BACKGROUND_ACTOR (l->data))
if (child_volume == NULL) {
return FALSE; MetaBackgroundActor *background_actor = l->data;
meta_background_actor_set_visible_region (background_actor, NULL);
clutter_paint_volume_union (volume, child_volume); }
} }
return TRUE; g_list_free (children);
} }
static void static void
@@ -231,7 +343,6 @@ meta_window_group_class_init (MetaWindowGroupClass *klass)
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
actor_class->paint = meta_window_group_paint; actor_class->paint = meta_window_group_paint;
actor_class->get_paint_volume = meta_window_group_get_paint_volume;
} }
static void static void

View File

@@ -10,10 +10,28 @@
/** /**
* MetaWindowGroup: * MetaWindowGroup:
* *
* This class is a subclass of ClutterActor with special handling for * This class is a subclass of ClutterGroup with special handling for
* #MetaCullable when painting children. It uses code similar to * MetaWindowActor when painting the group. When we are painting a stack
* meta_cullable_cull_out_children(), but also has additional special * of 5-10 maximized windows, the standard bottom-to-top method of
* cases for the undirected window, and similar. * drawing every actor results in a tremendous amount of overdraw
* and can easily max out the available memory bandwidth on a low-end
* graphics chipset. It's even worse if window textures are being accessed
* over the AGP bus.
*
* The basic technique applied here is to do a pre-pass before painting
* where we walk window from top to bottom and compute the visible area
* at each step by subtracting out the windows above it. The visible
* area is passed to MetaWindowActor which uses it to clip the portion of
* the window which drawn and avoid redrawing the shadow if it is completely
* obscured.
*
* A caveat is that this is ineffective if applications are using ARGB
* visuals, since we have no way of knowing whether a window obscures
* the windows behind it or not. Alternate approaches using the depth
* or stencil buffer rather than client side regions might be able to
* handle alpha windows, but the combination of glAlphaFunc and stenciling
* tends not to be efficient except on newer cards. (And on newer cards
* we have lots of memory and bandwidth.)
*/ */
#define META_TYPE_WINDOW_GROUP (meta_window_group_get_type ()) #define META_TYPE_WINDOW_GROUP (meta_window_group_get_type ())
@@ -31,7 +49,4 @@ GType meta_window_group_get_type (void);
ClutterActor *meta_window_group_new (MetaScreen *screen); ClutterActor *meta_window_group_new (MetaScreen *screen);
gboolean meta_window_group_actor_is_untransformed (ClutterActor *actor,
int *x_origin,
int *y_origin);
#endif /* META_WINDOW_GROUP_H */ #endif /* META_WINDOW_GROUP_H */

View File

@@ -23,9 +23,6 @@
#include <meta/meta-plugin.h> #include <meta/meta-plugin.h>
#include <meta/window.h> #include <meta/window.h>
#include <meta/util.h>
#include <meta/meta-background-group.h>
#include <meta/meta-background-actor.h>
#include <libintl.h> #include <libintl.h>
#define _(x) dgettext (GETTEXT_PACKAGE, x) #define _(x) dgettext (GETTEXT_PACKAGE, x)
@@ -71,7 +68,6 @@ struct _MetaDefaultPluginClass
static GQuark actor_data_quark = 0; static GQuark actor_data_quark = 0;
static void start (MetaPlugin *plugin);
static void minimize (MetaPlugin *plugin, static void minimize (MetaPlugin *plugin,
MetaWindowActor *actor); MetaWindowActor *actor);
static void map (MetaPlugin *plugin, static void map (MetaPlugin *plugin,
@@ -100,8 +96,6 @@ static void kill_window_effects (MetaPlugin *plugin,
MetaWindowActor *actor); MetaWindowActor *actor);
static void kill_switch_workspace (MetaPlugin *plugin); static void kill_switch_workspace (MetaPlugin *plugin);
static void confirm_display_change (MetaPlugin *plugin);
static const MetaPluginInfo * plugin_info (MetaPlugin *plugin); static const MetaPluginInfo * plugin_info (MetaPlugin *plugin);
META_PLUGIN_DECLARE(MetaDefaultPlugin, meta_default_plugin); META_PLUGIN_DECLARE(MetaDefaultPlugin, meta_default_plugin);
@@ -117,8 +111,6 @@ struct _MetaDefaultPluginPrivate
ClutterActor *desktop1; ClutterActor *desktop1;
ClutterActor *desktop2; ClutterActor *desktop2;
ClutterActor *background_group;
MetaPluginInfo info; MetaPluginInfo info;
}; };
@@ -199,7 +191,6 @@ meta_default_plugin_class_init (MetaDefaultPluginClass *klass)
gobject_class->set_property = meta_default_plugin_set_property; gobject_class->set_property = meta_default_plugin_set_property;
gobject_class->get_property = meta_default_plugin_get_property; gobject_class->get_property = meta_default_plugin_get_property;
plugin_class->start = start;
plugin_class->map = map; plugin_class->map = map;
plugin_class->minimize = minimize; plugin_class->minimize = minimize;
plugin_class->maximize = maximize; plugin_class->maximize = maximize;
@@ -209,7 +200,6 @@ meta_default_plugin_class_init (MetaDefaultPluginClass *klass)
plugin_class->plugin_info = plugin_info; plugin_class->plugin_info = plugin_info;
plugin_class->kill_window_effects = kill_window_effects; plugin_class->kill_window_effects = kill_window_effects;
plugin_class->kill_switch_workspace = kill_switch_workspace; plugin_class->kill_switch_workspace = kill_switch_workspace;
plugin_class->confirm_display_change = confirm_display_change;
g_type_class_add_private (gobject_class, sizeof (MetaDefaultPluginPrivate)); g_type_class_add_private (gobject_class, sizeof (MetaDefaultPluginPrivate));
} }
@@ -292,78 +282,6 @@ on_switch_workspace_effect_complete (ClutterTimeline *timeline, gpointer data)
meta_plugin_switch_workspace_completed (plugin); meta_plugin_switch_workspace_completed (plugin);
} }
static gboolean
show_stage (MetaPlugin *plugin)
{
MetaScreen *screen;
ClutterActor *stage;
screen = meta_plugin_get_screen (plugin);
stage = meta_get_stage_for_screen (screen);
clutter_actor_show (stage);
return FALSE;
}
static void
on_monitors_changed (MetaScreen *screen,
MetaPlugin *plugin)
{
MetaDefaultPlugin *self = META_DEFAULT_PLUGIN (plugin);
int i, n;
clutter_actor_destroy_all_children (self->priv->background_group);
n = meta_screen_get_n_monitors (screen);
for (i = 0; i < n; i++)
{
MetaRectangle rect;
ClutterActor *background;
ClutterColor color;
meta_screen_get_monitor_geometry (screen, i, &rect);
background = meta_background_actor_new ();
clutter_actor_set_position (background, rect.x, rect.y);
clutter_actor_set_size (background, rect.width, rect.height);
/* Don't use rand() here, mesa calls srand() internally when
parsing the driconf XML, but it's nice if the colors are
reproducible.
*/
clutter_color_init (&color,
g_random_int () % 255,
g_random_int () % 255,
g_random_int () % 255,
255);
clutter_actor_set_background_color (background, &color);
clutter_actor_add_child (self->priv->background_group, background);
}
}
static void
start (MetaPlugin *plugin)
{
MetaDefaultPlugin *self = META_DEFAULT_PLUGIN (plugin);
MetaScreen *screen = meta_plugin_get_screen (plugin);
self->priv->background_group = meta_background_group_new ();
clutter_actor_insert_child_below (meta_get_window_group_for_screen (screen),
self->priv->background_group, NULL);
g_signal_connect (screen, "monitors-changed",
G_CALLBACK (on_monitors_changed), plugin);
on_monitors_changed (screen, plugin);
meta_later_add (META_LATER_BEFORE_REDRAW,
(GSourceFunc) show_stage,
plugin,
NULL);
}
static void static void
switch_workspace (MetaPlugin *plugin, switch_workspace (MetaPlugin *plugin,
gint from, gint to, gint from, gint to,
@@ -838,33 +756,3 @@ plugin_info (MetaPlugin *plugin)
return &priv->info; return &priv->info;
} }
static void
on_dialog_closed (GPid pid,
gint status,
gpointer user_data)
{
MetaPlugin *plugin = user_data;
gboolean ok;
ok = g_spawn_check_exit_status (status, NULL);
meta_plugin_complete_display_change (plugin, ok);
}
static void
confirm_display_change (MetaPlugin *plugin)
{
GPid pid;
pid = meta_show_dialog ("--question",
"Does the display look OK?",
"20",
NULL,
"_Keep This Configuration",
"_Restore Previous Configuration",
"preferences-desktop-display",
0,
NULL, NULL);
g_child_watch_add (pid, on_dialog_closed, plugin);
}

View File

@@ -1,408 +0,0 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
/**
* SECTION:barrier
* @Title: MetaBarrier
* @Short_Description: Pointer barriers
*/
#include "config.h"
#include <glib-object.h>
#include <X11/extensions/XInput2.h>
#include <X11/extensions/Xfixes.h>
#include <meta/util.h>
#include <meta/barrier.h>
#include "display-private.h"
#include "mutter-enum-types.h"
#include "core.h"
G_DEFINE_TYPE (MetaBarrier, meta_barrier, G_TYPE_OBJECT)
enum {
PROP_0,
PROP_DISPLAY,
PROP_X1,
PROP_Y1,
PROP_X2,
PROP_Y2,
PROP_DIRECTIONS,
PROP_LAST,
};
static GParamSpec *obj_props[PROP_LAST];
enum {
HIT,
LEFT,
LAST_SIGNAL,
};
static guint obj_signals[LAST_SIGNAL];
struct _MetaBarrierPrivate
{
MetaDisplay *display;
int x1;
int y1;
int x2;
int y2;
MetaBarrierDirection directions;
PointerBarrier xbarrier;
};
static void meta_barrier_event_unref (MetaBarrierEvent *event);
static void
meta_barrier_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
MetaBarrier *barrier = META_BARRIER (object);
MetaBarrierPrivate *priv = barrier->priv;
switch (prop_id)
{
case PROP_DISPLAY:
g_value_set_object (value, priv->display);
break;
case PROP_X1:
g_value_set_int (value, priv->x1);
break;
case PROP_Y1:
g_value_set_int (value, priv->y1);
break;
case PROP_X2:
g_value_set_int (value, priv->x2);
break;
case PROP_Y2:
g_value_set_int (value, priv->y2);
break;
case PROP_DIRECTIONS:
g_value_set_flags (value, priv->directions);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
meta_barrier_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
MetaBarrier *barrier = META_BARRIER (object);
MetaBarrierPrivate *priv = barrier->priv;
switch (prop_id)
{
case PROP_DISPLAY:
priv->display = g_value_get_object (value);
break;
case PROP_X1:
priv->x1 = g_value_get_int (value);
break;
case PROP_Y1:
priv->y1 = g_value_get_int (value);
break;
case PROP_X2:
priv->x2 = g_value_get_int (value);
break;
case PROP_Y2:
priv->y2 = g_value_get_int (value);
break;
case PROP_DIRECTIONS:
priv->directions = g_value_get_flags (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
meta_barrier_dispose (GObject *object)
{
MetaBarrier *barrier = META_BARRIER (object);
MetaBarrierPrivate *priv = barrier->priv;
if (meta_barrier_is_active (barrier))
{
meta_bug ("MetaBarrier wrapper %p for X barrier %ld was destroyed"
" while the X barrier is still active.",
barrier, priv->xbarrier);
}
G_OBJECT_CLASS (meta_barrier_parent_class)->dispose (object);
}
gboolean
meta_barrier_is_active (MetaBarrier *barrier)
{
return barrier->priv->xbarrier != 0;
}
/**
* meta_barrier_release:
* @barrier: The barrier to release
* @event: The event to release the pointer for
*
* In XI2.3, pointer barriers provide a feature where they can
* be temporarily released so that the pointer goes through
* them. Pass a #MetaBarrierEvent to release the barrier for
* this event sequence.
*/
void
meta_barrier_release (MetaBarrier *barrier,
MetaBarrierEvent *event)
{
#ifdef HAVE_XI23
MetaBarrierPrivate *priv = barrier->priv;
if (META_DISPLAY_HAS_XINPUT_23 (priv->display))
{
XIBarrierReleasePointer (priv->display->xdisplay,
META_VIRTUAL_CORE_POINTER_ID,
priv->xbarrier, event->event_id);
}
#endif /* HAVE_XI23 */
}
static void
meta_barrier_constructed (GObject *object)
{
MetaBarrier *barrier = META_BARRIER (object);
MetaBarrierPrivate *priv = barrier->priv;
Display *dpy;
Window root;
g_return_if_fail (priv->x1 == priv->x2 || priv->y1 == priv->y2);
if (priv->display == NULL)
{
g_warning ("A display must be provided when constructing a barrier.");
return;
}
dpy = priv->display->xdisplay;
root = DefaultRootWindow (dpy);
priv->xbarrier = XFixesCreatePointerBarrier (dpy, root,
priv->x1, priv->y1,
priv->x2, priv->y2,
priv->directions, 0, NULL);
/* Take a ref that we'll release when the XID dies inside destroy(),
* so that the object stays alive and doesn't get GC'd. */
g_object_ref (barrier);
g_hash_table_insert (priv->display->xids, &priv->xbarrier, barrier);
G_OBJECT_CLASS (meta_barrier_parent_class)->constructed (object);
}
static void
meta_barrier_class_init (MetaBarrierClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->get_property = meta_barrier_get_property;
object_class->set_property = meta_barrier_set_property;
object_class->dispose = meta_barrier_dispose;
object_class->constructed = meta_barrier_constructed;
obj_props[PROP_DISPLAY] =
g_param_spec_object ("display",
"Display",
"The display to construct the pointer barrier on",
META_TYPE_DISPLAY,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
obj_props[PROP_X1] =
g_param_spec_int ("x1",
"X1",
"The first X coordinate of the barrier",
0, G_MAXSHORT, 0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
obj_props[PROP_Y1] =
g_param_spec_int ("y1",
"Y1",
"The first Y coordinate of the barrier",
0, G_MAXSHORT, 0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
obj_props[PROP_X2] =
g_param_spec_int ("x2",
"X2",
"The second X coordinate of the barrier",
0, G_MAXSHORT, G_MAXSHORT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
obj_props[PROP_Y2] =
g_param_spec_int ("y2",
"Y2",
"The second Y coordinate of the barrier",
0, G_MAXSHORT, G_MAXSHORT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
obj_props[PROP_DIRECTIONS] =
g_param_spec_flags ("directions",
"Directions",
"A set of directions to let the pointer through",
META_TYPE_BARRIER_DIRECTION,
0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, PROP_LAST, obj_props);
/**
* MetaBarrier::hit:
* @barrier: The #MetaBarrier that was hit
* @event: A #MetaBarrierEvent that has the details of how
* the barrier was hit.
*
* When a pointer barrier is hit, this will trigger. This
* requires an XI2-enabled server.
*/
obj_signals[HIT] =
g_signal_new ("hit",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_FIRST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 1,
META_TYPE_BARRIER_EVENT);
/**
* MetaBarrier::left:
* @barrier: The #MetaBarrier that was left
* @event: A #MetaBarrierEvent that has the details of how
* the barrier was left.
*
* When a pointer barrier hitbox was left, this will trigger.
* This requires an XI2-enabled server.
*/
obj_signals[LEFT] =
g_signal_new ("left",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_FIRST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 1,
META_TYPE_BARRIER_EVENT);
g_type_class_add_private (object_class, sizeof(MetaBarrierPrivate));
}
void
meta_barrier_destroy (MetaBarrier *barrier)
{
MetaBarrierPrivate *priv = barrier->priv;
Display *dpy;
if (priv->display == NULL)
return;
dpy = priv->display->xdisplay;
if (!meta_barrier_is_active (barrier))
return;
XFixesDestroyPointerBarrier (dpy, priv->xbarrier);
g_hash_table_remove (priv->display->xids, &priv->xbarrier);
priv->xbarrier = 0;
g_object_unref (barrier);
}
static void
meta_barrier_init (MetaBarrier *barrier)
{
barrier->priv = G_TYPE_INSTANCE_GET_PRIVATE (barrier, META_TYPE_BARRIER, MetaBarrierPrivate);
}
#ifdef HAVE_XI23
static void
meta_barrier_fire_event (MetaBarrier *barrier,
XIBarrierEvent *xevent)
{
MetaBarrierEvent *event = g_slice_new0 (MetaBarrierEvent);
event->ref_count = 1;
event->event_id = xevent->eventid;
event->time = xevent->time;
event->dt = xevent->dtime;
event->x = xevent->root_x;
event->y = xevent->root_y;
event->dx = xevent->dx;
event->dy = xevent->dy;
event->released = (xevent->flags & XIBarrierPointerReleased) != 0;
event->grabbed = (xevent->flags & XIBarrierDeviceIsGrabbed) != 0;
switch (xevent->evtype)
{
case XI_BarrierHit:
g_signal_emit (barrier, obj_signals[HIT], 0, event);
break;
case XI_BarrierLeave:
g_signal_emit (barrier, obj_signals[LEFT], 0, event);
break;
default:
g_assert_not_reached ();
}
meta_barrier_event_unref (event);
}
gboolean
meta_display_process_barrier_event (MetaDisplay *display,
XIBarrierEvent *xev)
{
MetaBarrier *barrier;
barrier = g_hash_table_lookup (display->xids, &xev->barrier);
if (barrier != NULL)
{
meta_barrier_fire_event (barrier, xev);
return TRUE;
}
return FALSE;
}
#endif /* HAVE_XI23 */
static MetaBarrierEvent *
meta_barrier_event_ref (MetaBarrierEvent *event)
{
g_return_val_if_fail (event != NULL, NULL);
g_return_val_if_fail (event->ref_count > 0, NULL);
g_atomic_int_inc ((volatile int *)&event->ref_count);
return event;
}
static void
meta_barrier_event_unref (MetaBarrierEvent *event)
{
g_return_if_fail (event != NULL);
g_return_if_fail (event->ref_count > 0);
if (g_atomic_int_dec_and_test ((volatile int *)&event->ref_count))
g_slice_free (MetaBarrierEvent, event);
}
G_DEFINE_BOXED_TYPE (MetaBarrierEvent,
meta_barrier_event,
meta_barrier_event_ref,
meta_barrier_event_unref)

View File

@@ -22,8 +22,8 @@
* 02111-1307, USA. * 02111-1307, USA.
*/ */
/* /**
* SECTION:bell * SECTION:Bell
* @short_description: Ring the bell or flash the screen * @short_description: Ring the bell or flash the screen
* *
* Sometimes, X programs "ring the bell", whatever that means. Mutter lets * Sometimes, X programs "ring the bell", whatever that means. Mutter lets
@@ -52,9 +52,7 @@
#include <config.h> #include <config.h>
#include "bell.h" #include "bell.h"
#include "screen-private.h" #include "screen-private.h"
#include "window-private.h"
#include <meta/prefs.h> #include <meta/prefs.h>
#include <meta/compositor.h>
#ifdef HAVE_LIBCANBERRA #ifdef HAVE_LIBCANBERRA
#include <canberra-gtk.h> #include <canberra-gtk.h>
#endif #endif

View File

@@ -28,35 +28,30 @@
#ifdef HAVE_XKB #ifdef HAVE_XKB
/** /**
* meta_bell_notify:
* @display: The display the bell event came in on
* @xkb_ev: The bell event we just received
*
* Gives the user some kind of visual bell; in fact, this is our response * Gives the user some kind of visual bell; in fact, this is our response
* to any kind of bell request, but we set it up so that we only get * to any kind of bell request, but we set it up so that we only get
* notified about visual bells, and X deals with audible ones. * notified about visual bells, and X deals with audible ones.
* *
* If the configure script found we had no XKB, this does not exist. * If the configure script found we had no XKB, this does not exist.
*
* \param display The display the bell event came in on
* \param xkb_ev The bell event we just received
*/ */
void meta_bell_notify (MetaDisplay *display, XkbAnyEvent *xkb_ev); void meta_bell_notify (MetaDisplay *display, XkbAnyEvent *xkb_ev);
#endif #endif
/** /**
* meta_bell_set_audible:
* @display: The display we're configuring
* @audible: True for an audible bell, false for a visual bell
*
* Turns the bell to audible or visual. This tells X what to do, but * Turns the bell to audible or visual. This tells X what to do, but
* not Mutter; you will need to set the "visual bell" pref for that. * not Mutter; you will need to set the "visual bell" pref for that.
* *
* If the configure script found we had no XKB, this is a no-op. * If the configure script found we had no XKB, this is a no-op.
*
* \param display The display we're configuring
* \param audible True for an audible bell, false for a visual bell
*/ */
void meta_bell_set_audible (MetaDisplay *display, gboolean audible); void meta_bell_set_audible (MetaDisplay *display, gboolean audible);
/** /**
* meta_bell_init:
* @display: The display which is opening
*
* Initialises the bell subsystem. This involves intialising * Initialises the bell subsystem. This involves intialising
* XKB (which, despite being a keyboard extension, is the * XKB (which, despite being a keyboard extension, is the
* place to look for bell notifications), then asking it * place to look for bell notifications), then asking it
@@ -69,6 +64,8 @@ void meta_bell_set_audible (MetaDisplay *display, gboolean audible);
* we will have HAVE_XKB undefined, which will cause this * we will have HAVE_XKB undefined, which will cause this
* function to be a no-op. * function to be a no-op.
* *
* \param display The display which is opening
*
* \bug There is a line of code that's never run that tells * \bug There is a line of code that's never run that tells
* XKB to reset the bell status after we quit. Bill H said * XKB to reset the bell status after we quit. Bill H said
* (<http://bugzilla.gnome.org/show_bug.cgi?id=99886#c12>) * (<http://bugzilla.gnome.org/show_bug.cgi?id=99886#c12>)
@@ -78,11 +75,10 @@ void meta_bell_set_audible (MetaDisplay *display, gboolean audible);
gboolean meta_bell_init (MetaDisplay *display); gboolean meta_bell_init (MetaDisplay *display);
/** /**
* meta_bell_shutdown:
* @display: The display which is closing
*
* Shuts down the bell subsystem. * Shuts down the bell subsystem.
* *
* \param display The display which is closing
*
* \bug This is never called! If we had XkbSetAutoResetControls * \bug This is never called! If we had XkbSetAutoResetControls
* enabled in meta_bell_init(), this wouldn't be a problem, but * enabled in meta_bell_init(), this wouldn't be a problem, but
* we don't. * we don't.
@@ -90,12 +86,11 @@ gboolean meta_bell_init (MetaDisplay *display);
void meta_bell_shutdown (MetaDisplay *display); void meta_bell_shutdown (MetaDisplay *display);
/** /**
* meta_bell_notify_frame_destroy:
* @frame: The frame which is being destroyed
*
* Deals with a frame being destroyed. This is important because if we're * Deals with a frame being destroyed. This is important because if we're
* using a visual bell, we might be flashing the edges of the frame, and * using a visual bell, we might be flashing the edges of the frame, and
* so we'd have a timeout function waiting ready to un-flash them. If the * so we'd have a timeout function waiting ready to un-flash them. If the
* frame's going away, we can tell the timeout not to bother. * frame's going away, we can tell the timeout not to bother.
*
* \param frame The frame which is being destroyed
*/ */
void meta_bell_notify_frame_destroy (MetaFrame *frame); void meta_bell_notify_frame_destroy (MetaFrame *frame);

View File

@@ -1,10 +1,6 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/** /* Simple box operations */
* SECTION:boxes
* @Title: MetaRectangle
* @Short_Description: Simple box operations
*/
/* /*
* Copyright (C) 2005, 2006 Elijah Newren * Copyright (C) 2005, 2006 Elijah Newren

View File

@@ -118,6 +118,8 @@ typedef struct
{ {
MetaRectangle orig; MetaRectangle orig;
MetaRectangle current; MetaRectangle current;
MetaFrameBorders *borders;
gboolean must_free_borders;
ActionType action_type; ActionType action_type;
gboolean is_user_action; gboolean is_user_action;
@@ -193,6 +195,7 @@ static gboolean constrain_partially_onscreen (MetaWindow *window,
static void setup_constraint_info (ConstraintInfo *info, static void setup_constraint_info (ConstraintInfo *info,
MetaWindow *window, MetaWindow *window,
MetaFrameBorders *orig_borders,
MetaMoveResizeFlags flags, MetaMoveResizeFlags flags,
int resize_gravity, int resize_gravity,
const MetaRectangle *orig, const MetaRectangle *orig,
@@ -201,12 +204,13 @@ static void place_window_if_needed (MetaWindow *window,
ConstraintInfo *info); ConstraintInfo *info);
static void update_onscreen_requirements (MetaWindow *window, static void update_onscreen_requirements (MetaWindow *window,
ConstraintInfo *info); ConstraintInfo *info);
static void extend_by_frame (MetaWindow *window, static void extend_by_frame (MetaRectangle *rect,
MetaRectangle *rect); const MetaFrameBorders *borders);
static void unextend_by_frame (MetaWindow *window, static void unextend_by_frame (MetaRectangle *rect,
MetaRectangle *rect); const MetaFrameBorders *borders);
static inline void get_size_limits (MetaWindow *window, static inline void get_size_limits (const MetaWindow *window,
gboolean include_frame, const MetaFrameBorders *borders,
gboolean include_frame,
MetaRectangle *min_size, MetaRectangle *min_size,
MetaRectangle *max_size); MetaRectangle *max_size);
@@ -276,6 +280,7 @@ do_all_constraints (MetaWindow *window,
void void
meta_window_constrain (MetaWindow *window, meta_window_constrain (MetaWindow *window,
MetaFrameBorders *orig_borders,
MetaMoveResizeFlags flags, MetaMoveResizeFlags flags,
int resize_gravity, int resize_gravity,
const MetaRectangle *orig, const MetaRectangle *orig,
@@ -298,6 +303,7 @@ meta_window_constrain (MetaWindow *window,
setup_constraint_info (&info, setup_constraint_info (&info,
window, window,
orig_borders,
flags, flags,
resize_gravity, resize_gravity,
orig, orig,
@@ -327,11 +333,19 @@ meta_window_constrain (MetaWindow *window,
* if this was a user move or user move-and-resize operation. * if this was a user move or user move-and-resize operation.
*/ */
update_onscreen_requirements (window, &info); update_onscreen_requirements (window, &info);
/* Ew, what an ugly way to do things. Destructors (in a real OOP language,
* not gobject-style--gobject would be more pain than it's worth) or
* smart pointers would be so much nicer here. *shrug*
*/
if (info.must_free_borders)
g_free (info.borders);
} }
static void static void
setup_constraint_info (ConstraintInfo *info, setup_constraint_info (ConstraintInfo *info,
MetaWindow *window, MetaWindow *window,
MetaFrameBorders *orig_borders,
MetaMoveResizeFlags flags, MetaMoveResizeFlags flags,
int resize_gravity, int resize_gravity,
const MetaRectangle *orig, const MetaRectangle *orig,
@@ -343,6 +357,18 @@ setup_constraint_info (ConstraintInfo *info,
info->orig = *orig; info->orig = *orig;
info->current = *new; info->current = *new;
/* Create a fake frame geometry if none really exists */
if (orig_borders && !window->fullscreen)
{
info->borders = orig_borders;
info->must_free_borders = FALSE;
}
else
{
info->borders = g_new0 (MetaFrameBorders, 1);
info->must_free_borders = TRUE;
}
if (flags & META_IS_MOVE_ACTION && flags & META_IS_RESIZE_ACTION) if (flags & META_IS_MOVE_ACTION && flags & META_IS_RESIZE_ACTION)
info->action_type = ACTION_MOVE_AND_RESIZE; info->action_type = ACTION_MOVE_AND_RESIZE;
else if (flags & META_IS_RESIZE_ACTION) else if (flags & META_IS_RESIZE_ACTION)
@@ -421,14 +447,12 @@ setup_constraint_info (ConstraintInfo *info,
/* Workaround braindead legacy apps that don't know how to /* Workaround braindead legacy apps that don't know how to
* fullscreen themselves properly - don't get fooled by * fullscreen themselves properly - don't get fooled by
* windows which hide their titlebar when maximized or which are * windows which hide their titlebar when maximized; that's
* client decorated; that's not the same as fullscreen, even * not the same as fullscreen, even if there are no struts
* if there are no struts making the workarea smaller than * making the workarea smaller than the monitor.
* the monitor.
*/ */
if (meta_prefs_get_force_fullscreen() && if (meta_prefs_get_force_fullscreen() &&
!window->hide_titlebar_when_maximized && !window->hide_titlebar_when_maximized &&
window->decorated &&
meta_rectangle_equal (new, &monitor_info->rect) && meta_rectangle_equal (new, &monitor_info->rect) &&
window->has_fullscreen_func && window->has_fullscreen_func &&
!window->fullscreen) !window->fullscreen)
@@ -493,12 +517,11 @@ place_window_if_needed(MetaWindow *window,
!window->minimized && !window->minimized &&
!window->fullscreen) !window->fullscreen)
{ {
MetaRectangle placed_rect; MetaRectangle placed_rect = info->orig;
MetaWorkspace *cur_workspace; MetaWorkspace *cur_workspace;
const MetaMonitorInfo *monitor_info; const MetaMonitorInfo *monitor_info;
meta_window_get_frame_rect (window, &placed_rect); meta_window_place (window, info->borders, info->orig.x, info->orig.y,
meta_window_place (window, info->orig.x, info->orig.y,
&placed_rect.x, &placed_rect.y); &placed_rect.x, &placed_rect.y);
did_placement = TRUE; did_placement = TRUE;
@@ -516,7 +539,6 @@ place_window_if_needed(MetaWindow *window,
meta_workspace_get_onmonitor_region (cur_workspace, meta_workspace_get_onmonitor_region (cur_workspace,
monitor_info->number); monitor_info->number);
meta_window_frame_rect_to_client_rect (window, &placed_rect, &placed_rect);
info->current.x = placed_rect.x; info->current.x = placed_rect.x;
info->current.y = placed_rect.y; info->current.y = placed_rect.y;
@@ -562,6 +584,10 @@ place_window_if_needed(MetaWindow *window,
(window->maximize_vertically_after_placement ? (window->maximize_vertically_after_placement ?
META_MAXIMIZE_VERTICAL : 0), &info->current); META_MAXIMIZE_VERTICAL : 0), &info->current);
/* maximization may have changed frame geometry */
if (!window->fullscreen)
meta_frame_calc_borders (window->frame, info->borders);
if (window->fullscreen_after_placement) if (window->fullscreen_after_placement)
{ {
window->saved_rect = info->current; window->saved_rect = info->current;
@@ -621,7 +647,7 @@ update_onscreen_requirements (MetaWindow *window,
/* The require onscreen/on-single-monitor and titlebar_visible /* The require onscreen/on-single-monitor and titlebar_visible
* stuff is relative to the outer window, not the inner * stuff is relative to the outer window, not the inner
*/ */
extend_by_frame (window, &info->current); extend_by_frame (&info->current, info->borders);
/* Update whether we want future constraint runs to require the /* Update whether we want future constraint runs to require the
* window to be on fully onscreen. * window to be on fully onscreen.
@@ -654,13 +680,10 @@ update_onscreen_requirements (MetaWindow *window,
*/ */
if (window->frame && window->decorated) if (window->frame && window->decorated)
{ {
MetaFrameBorders borders;
MetaRectangle titlebar_rect; MetaRectangle titlebar_rect;
meta_frame_calc_borders (window->frame, &borders);
titlebar_rect = info->current; titlebar_rect = info->current;
titlebar_rect.height = borders.visible.top; titlebar_rect.height = info->borders->visible.top;
old = window->require_titlebar_visible; old = window->require_titlebar_visible;
window->require_titlebar_visible = window->require_titlebar_visible =
meta_rectangle_overlaps_with_region (info->usable_screen_region, meta_rectangle_overlaps_with_region (info->usable_screen_region,
@@ -673,33 +696,39 @@ update_onscreen_requirements (MetaWindow *window,
} }
/* Don't forget to restore the position of the window */ /* Don't forget to restore the position of the window */
unextend_by_frame (window, &info->current); unextend_by_frame (&info->current, info->borders);
} }
static void static void
extend_by_frame (MetaWindow *window, extend_by_frame (MetaRectangle *rect,
MetaRectangle *rect) const MetaFrameBorders *borders)
{ {
meta_window_client_rect_to_frame_rect (window, rect, rect); rect->x -= borders->visible.left;
rect->y -= borders->visible.top;
rect->width += borders->visible.left + borders->visible.right;
rect->height += borders->visible.top + borders->visible.bottom;
} }
static void static void
unextend_by_frame (MetaWindow *window, unextend_by_frame (MetaRectangle *rect,
MetaRectangle *rect) const MetaFrameBorders *borders)
{ {
meta_window_frame_rect_to_client_rect (window, rect, rect); rect->x += borders->visible.left;
rect->y += borders->visible.top;
rect->width -= borders->visible.left + borders->visible.right;
rect->height -= borders->visible.top + borders->visible.bottom;
} }
static inline void static inline void
get_size_limits (MetaWindow *window, get_size_limits (const MetaWindow *window,
gboolean include_frame, const MetaFrameBorders *borders,
gboolean include_frame,
MetaRectangle *min_size, MetaRectangle *min_size,
MetaRectangle *max_size) MetaRectangle *max_size)
{ {
/* We pack the results into MetaRectangle structs just for convienience; we /* We pack the results into MetaRectangle structs just for convienience; we
* don't actually use the position of those rects. * don't actually use the position of those rects.
*/ */
min_size->x = min_size->y = max_size->x = max_size->y = 0;
min_size->width = window->size_hints.min_width; min_size->width = window->size_hints.min_width;
min_size->height = window->size_hints.min_height; min_size->height = window->size_hints.min_height;
max_size->width = window->size_hints.max_width; max_size->width = window->size_hints.max_width;
@@ -707,8 +736,22 @@ get_size_limits (MetaWindow *window,
if (include_frame) if (include_frame)
{ {
meta_window_client_rect_to_frame_rect (window, min_size, min_size); int fw = borders->visible.left + borders->visible.right;
meta_window_client_rect_to_frame_rect (window, max_size, max_size); int fh = borders->visible.top + borders->visible.bottom;
min_size->width += fw;
min_size->height += fh;
/* Do check to avoid overflow (e.g. max_size->width & max_size->height
* may be set to G_MAXINT by meta_set_normal_hints()).
*/
if (max_size->width < (G_MAXINT - fw))
max_size->width += fw;
else
max_size->width = G_MAXINT;
if (max_size->height < (G_MAXINT - fh))
max_size->height += fh;
else
max_size->height = G_MAXINT;
} }
} }
@@ -720,28 +763,18 @@ constrain_modal_dialog (MetaWindow *window,
{ {
int x, y; int x, y;
MetaWindow *parent = meta_window_get_transient_for (window); MetaWindow *parent = meta_window_get_transient_for (window);
MetaRectangle child_rect, parent_rect;
gboolean constraint_already_satisfied; gboolean constraint_already_satisfied;
if (!meta_window_is_attached_dialog (window)) if (!meta_window_is_attached_dialog (window))
return TRUE; return TRUE;
/* We want to center the dialog on the parent, including the decorations x = parent->rect.x + (parent->rect.width / 2 - info->current.width / 2);
for both of them. info->current is in client X window coordinates, so we need y = parent->rect.y + (parent->rect.height / 2 - info->current.height / 2);
to convert them to frame coordinates, apply the centering and then if (parent->frame)
convert back to client. {
*/ x += parent->frame->rect.x;
y += parent->frame->rect.y;
child_rect = info->current; }
extend_by_frame (window, &child_rect);
meta_window_get_frame_rect (parent, &parent_rect);
child_rect.x = parent_rect.x + (parent_rect.width / 2 - child_rect.width / 2);
child_rect.y = parent_rect.y + (parent_rect.height / 2 - child_rect.height / 2);
unextend_by_frame (window, &child_rect);
x = child_rect.x;
y = child_rect.y;
constraint_already_satisfied = (x == info->current.x) && (y == info->current.y); constraint_already_satisfied = (x == info->current.x) && (y == info->current.y);
@@ -806,19 +839,19 @@ constrain_maximization (MetaWindow *window,
active_workspace_struts = window->screen->active_workspace->all_struts; active_workspace_struts = window->screen->active_workspace->all_struts;
target_size = info->current; target_size = info->current;
extend_by_frame (window, &target_size); extend_by_frame (&target_size, info->borders);
meta_rectangle_expand_to_avoiding_struts (&target_size, meta_rectangle_expand_to_avoiding_struts (&target_size,
&info->entire_monitor, &info->entire_monitor,
direction, direction,
active_workspace_struts); active_workspace_struts);
} }
/* Now make target_size = maximized size of client window */ /* Now make target_size = maximized size of client window */
unextend_by_frame (window, &target_size); unextend_by_frame (&target_size, info->borders);
/* Check min size constraints; max size constraints are ignored for maximized /* Check min size constraints; max size constraints are ignored for maximized
* windows, as per bug 327543. * windows, as per bug 327543.
*/ */
get_size_limits (window, FALSE, &min_size, &max_size); get_size_limits (window, info->borders, FALSE, &min_size, &max_size);
hminbad = target_size.width < min_size.width && window->maximized_horizontally; hminbad = target_size.width < min_size.width && window->maximized_horizontally;
vminbad = target_size.height < min_size.height && window->maximized_vertically; vminbad = target_size.height < min_size.height && window->maximized_vertically;
if (hminbad || vminbad) if (hminbad || vminbad)
@@ -872,12 +905,12 @@ constrain_tiling (MetaWindow *window,
* use an external function for the actual calculation * use an external function for the actual calculation
*/ */
meta_window_get_current_tile_area (window, &target_size); meta_window_get_current_tile_area (window, &target_size);
unextend_by_frame (window, &target_size); unextend_by_frame (&target_size, info->borders);
/* Check min size constraints; max size constraints are ignored as for /* Check min size constraints; max size constraints are ignored as for
* maximized windows. * maximized windows.
*/ */
get_size_limits (window, FALSE, &min_size, &max_size); get_size_limits (window, info->borders, FALSE, &min_size, &max_size);
hminbad = target_size.width < min_size.width; hminbad = target_size.width < min_size.width;
vminbad = target_size.height < min_size.height; vminbad = target_size.height < min_size.height;
if (hminbad || vminbad) if (hminbad || vminbad)
@@ -920,7 +953,7 @@ constrain_fullscreen (MetaWindow *window,
monitor = info->entire_monitor; monitor = info->entire_monitor;
get_size_limits (window, FALSE, &min_size, &max_size); get_size_limits (window, info->borders, FALSE, &min_size, &max_size);
too_big = !meta_rectangle_could_fit_rect (&monitor, &min_size); too_big = !meta_rectangle_could_fit_rect (&monitor, &min_size);
too_small = !meta_rectangle_could_fit_rect (&max_size, &monitor); too_small = !meta_rectangle_could_fit_rect (&max_size, &monitor);
if (too_big || too_small) if (too_big || too_small)
@@ -1029,7 +1062,7 @@ constrain_size_limits (MetaWindow *window,
return TRUE; return TRUE;
/* Determine whether constraint is already satisfied; exit if it is */ /* Determine whether constraint is already satisfied; exit if it is */
get_size_limits (window, FALSE, &min_size, &max_size); get_size_limits (window, info->borders, FALSE, &min_size, &max_size);
/* We ignore max-size limits for maximized windows; see #327543 */ /* We ignore max-size limits for maximized windows; see #327543 */
if (window->maximized_horizontally) if (window->maximized_horizontally)
max_size.width = MAX (max_size.width, info->current.width); max_size.width = MAX (max_size.width, info->current.width);
@@ -1221,8 +1254,8 @@ do_screen_and_monitor_relative_constraints (
/* Determine whether constraint applies; exit if it doesn't */ /* Determine whether constraint applies; exit if it doesn't */
how_far_it_can_be_smushed = info->current; how_far_it_can_be_smushed = info->current;
get_size_limits (window, TRUE, &min_size, &max_size); get_size_limits (window, info->borders, TRUE, &min_size, &max_size);
extend_by_frame (window, &info->current); extend_by_frame (&info->current, info->borders);
if (info->action_type != ACTION_MOVE) if (info->action_type != ACTION_MOVE)
{ {
@@ -1242,7 +1275,7 @@ do_screen_and_monitor_relative_constraints (
&info->current); &info->current);
if (exit_early || constraint_satisfied || check_only) if (exit_early || constraint_satisfied || check_only)
{ {
unextend_by_frame (window, &info->current); unextend_by_frame (&info->current, info->borders);
return constraint_satisfied; return constraint_satisfied;
} }
@@ -1266,7 +1299,7 @@ do_screen_and_monitor_relative_constraints (
info->fixed_directions, info->fixed_directions,
&info->current); &info->current);
unextend_by_frame (window, &info->current); unextend_by_frame (&info->current, info->borders);
return TRUE; return TRUE;
} }
@@ -1379,11 +1412,8 @@ constrain_titlebar_visible (MetaWindow *window,
*/ */
if (window->frame) if (window->frame)
{ {
MetaFrameBorders borders; bottom_amount = info->current.height + info->borders->visible.bottom;
meta_frame_calc_borders (window->frame, &borders); vert_amount_onscreen = info->borders->visible.top;
bottom_amount = info->current.height + borders.visible.bottom;
vert_amount_onscreen = borders.visible.top;
} }
else else
bottom_amount = vert_amount_offscreen; bottom_amount = vert_amount_offscreen;
@@ -1457,11 +1487,8 @@ constrain_partially_onscreen (MetaWindow *window,
*/ */
if (window->frame) if (window->frame)
{ {
MetaFrameBorders borders; bottom_amount = info->current.height + info->borders->visible.bottom;
meta_frame_calc_borders (window->frame, &borders); vert_amount_onscreen = info->borders->visible.top;
bottom_amount = info->current.height + borders.visible.bottom;
vert_amount_onscreen = borders.visible.top;
} }
else else
bottom_amount = vert_amount_offscreen; bottom_amount = vert_amount_offscreen;

Some files were not shown because too many files have changed in this diff Show More