Compare commits
343 Commits
METACITY_2
...
METACITY_2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
1dc74bbc8c | ||
![]() |
618a6b38c3 | ||
![]() |
e8b016984b | ||
![]() |
8bbccb91f7 | ||
![]() |
9c2e546f53 | ||
![]() |
12ac1d6a4b | ||
![]() |
2ccb7f7bfa | ||
![]() |
389eb410c7 | ||
![]() |
f0c4d2c57b | ||
![]() |
4c4943312a | ||
![]() |
d616aeb828 | ||
![]() |
92c63dfdc5 | ||
![]() |
f9678266c7 | ||
![]() |
e3db5a0be6 | ||
![]() |
49e1802c7a | ||
![]() |
eb4941d005 | ||
![]() |
371f0b732f | ||
![]() |
bdd9e28878 | ||
![]() |
1f05ddcd0e | ||
![]() |
78604b64bc | ||
![]() |
7c4af65ec1 | ||
![]() |
e6083f64fb | ||
![]() |
b996cd03be | ||
![]() |
36287b9417 | ||
![]() |
6d8efc90e0 | ||
![]() |
d53af7196c | ||
![]() |
667c74bc4d | ||
![]() |
c5c59b1761 | ||
![]() |
5fb20624c4 | ||
![]() |
8f2b9cb4a9 | ||
![]() |
0418146249 | ||
![]() |
6e70013412 | ||
![]() |
ff33209e1f | ||
![]() |
98791271e1 | ||
![]() |
8eac4fa3ce | ||
![]() |
0666e2c038 | ||
![]() |
1004bd8b60 | ||
![]() |
45966f581b | ||
![]() |
5194df842c | ||
![]() |
a7053d3d47 | ||
![]() |
8ead622f8f | ||
![]() |
7759644304 | ||
![]() |
526dd959ed | ||
![]() |
cb5c112166 | ||
![]() |
fb3b32a2bd | ||
![]() |
0e25c6eff6 | ||
![]() |
1724fa36f1 | ||
![]() |
a50b3c7a2b | ||
![]() |
c8d33dc86b | ||
![]() |
aae4472a63 | ||
![]() |
18c9101a4f | ||
![]() |
b10626c5d8 | ||
![]() |
50310c5870 | ||
![]() |
e03de727db | ||
![]() |
7f6b23a90d | ||
![]() |
e66919510f | ||
![]() |
966e36b9f6 | ||
![]() |
ee3ae1584f | ||
![]() |
128cda50bf | ||
![]() |
3f7d729978 | ||
![]() |
6de7271ab6 | ||
![]() |
6fa4dee13e | ||
![]() |
bc6996b171 | ||
![]() |
9ec6dbd5ca | ||
![]() |
2034a309e5 | ||
![]() |
7626f74b85 | ||
![]() |
eb639a4650 | ||
![]() |
dc9920b883 | ||
![]() |
b8f89db4d1 | ||
![]() |
63ca4e8bde | ||
![]() |
4d8a7a2045 | ||
![]() |
ebfbef86a0 | ||
![]() |
addf369006 | ||
![]() |
82c56cb5d7 | ||
![]() |
0a8bdcdcb3 | ||
![]() |
745906b7db | ||
![]() |
8fe344db51 | ||
![]() |
f32712937b | ||
![]() |
43d4ea3f3b | ||
![]() |
8d00f13dc7 | ||
![]() |
6753584e80 | ||
![]() |
9b85e7ee7f | ||
![]() |
dda3c2bee6 | ||
![]() |
921661e91d | ||
![]() |
7a799b3a63 | ||
![]() |
b01dcaa338 | ||
![]() |
9cae11fd9e | ||
![]() |
da7d198757 | ||
![]() |
350225ea37 | ||
![]() |
930c7ea270 | ||
![]() |
ec51e41c62 | ||
![]() |
08f51fdf94 | ||
![]() |
e82ce26425 | ||
![]() |
8a4c3c81a1 | ||
![]() |
0bb8bd4370 | ||
![]() |
81e32cfa32 | ||
![]() |
6e007baaa8 | ||
![]() |
55899b5ab7 | ||
![]() |
5c06f103ca | ||
![]() |
e6b1bd9922 | ||
![]() |
44b86d468e | ||
![]() |
44ef3b3a51 | ||
![]() |
11a90c53ed | ||
![]() |
88b91199d2 | ||
![]() |
15d871023e | ||
![]() |
fc00da1099 | ||
![]() |
db3d6725a2 | ||
![]() |
f94d12a991 | ||
![]() |
c7cb503003 | ||
![]() |
dc9880ea7e | ||
![]() |
7eb85e6e9c | ||
![]() |
6ab8fb150f | ||
![]() |
e179b813f4 | ||
![]() |
24a6a105e3 | ||
![]() |
9d6fed2aa0 | ||
![]() |
8090d192e3 | ||
![]() |
36b9a3a974 | ||
![]() |
f145337a8b | ||
![]() |
0d7d821343 | ||
![]() |
7211cc21c3 | ||
![]() |
f4277e3235 | ||
![]() |
47bb79adb2 | ||
![]() |
39a6707a06 | ||
![]() |
f6f968a545 | ||
![]() |
10ad03db76 | ||
![]() |
ae441010b9 | ||
![]() |
a877cbc80d | ||
![]() |
b40993fab9 | ||
![]() |
b86d678c4c | ||
![]() |
56b59faf87 | ||
![]() |
90e6198401 | ||
![]() |
cd748a2e97 | ||
![]() |
c73a198f94 | ||
![]() |
4e478159b6 | ||
![]() |
85e43a402f | ||
![]() |
c1fcc4bb6b | ||
![]() |
a850771e04 | ||
![]() |
6126940518 | ||
![]() |
82267f5afb | ||
![]() |
22e6c6f7c9 | ||
![]() |
fe75a334b1 | ||
![]() |
2774292561 | ||
![]() |
e9f578b511 | ||
![]() |
2ee754ddaf | ||
![]() |
f7a45f10ea | ||
![]() |
9626780635 | ||
![]() |
e3249d6e1b | ||
![]() |
419884a0cb | ||
![]() |
1b941ff508 | ||
![]() |
5d9ccfac37 | ||
![]() |
031b03513a | ||
![]() |
50c5bf4bf6 | ||
![]() |
c4a135aeee | ||
![]() |
d97395ae52 | ||
![]() |
d6be56358e | ||
![]() |
4becc1e631 | ||
![]() |
1b9faba6c5 | ||
![]() |
d20d537113 | ||
![]() |
28b48248a2 | ||
![]() |
f665d54373 | ||
![]() |
5ca9f43752 | ||
![]() |
5eabc7c781 | ||
![]() |
0180c10092 | ||
![]() |
5080b8fefb | ||
![]() |
34138ff44e | ||
![]() |
a2d21149e4 | ||
![]() |
db4fa5c5fb | ||
![]() |
ff88d79062 | ||
![]() |
15c7e2aed9 | ||
![]() |
09a48beaec | ||
![]() |
ea137d35f3 | ||
![]() |
54b0105ffa | ||
![]() |
01a282fdd3 | ||
![]() |
9d6d1c5fb6 | ||
![]() |
fd4378d84f | ||
![]() |
ceb54162b3 | ||
![]() |
390ded3054 | ||
![]() |
caf43a123f | ||
![]() |
106391a431 | ||
![]() |
595465ad22 | ||
![]() |
0b3391a25c | ||
![]() |
fcdd0fbd50 | ||
![]() |
9b701f520a | ||
![]() |
a3e309bab8 | ||
![]() |
c065a5df5d | ||
![]() |
01030ac0df | ||
![]() |
3e55c138f1 | ||
![]() |
81256ebe48 | ||
![]() |
8722c60a28 | ||
![]() |
8f09a12069 | ||
![]() |
c68c26b7f8 | ||
![]() |
d419955ddc | ||
![]() |
af593aa5c5 | ||
![]() |
191baa3c76 | ||
![]() |
c8c666f855 | ||
![]() |
edea47d113 | ||
![]() |
b164d11b90 | ||
![]() |
0cc7e939ab | ||
![]() |
2276f91162 | ||
![]() |
63ea328ea8 | ||
![]() |
fe34523949 | ||
![]() |
d79a571d0a | ||
![]() |
a34944d341 | ||
![]() |
b569dddc17 | ||
![]() |
5d33a1bbb8 | ||
![]() |
9da34955f7 | ||
![]() |
536bb240ef | ||
![]() |
ef1c6e9214 | ||
![]() |
90359a5346 | ||
![]() |
9e341dd4d8 | ||
![]() |
2168cd3eb7 | ||
![]() |
25910508ae | ||
![]() |
c4fa0d118c | ||
![]() |
ca3ed6a1eb | ||
![]() |
0201fcfc6c | ||
![]() |
07e4cacf14 | ||
![]() |
79eb53bd53 | ||
![]() |
b694312f1c | ||
![]() |
3cca3f3ee9 | ||
![]() |
b01408f358 | ||
![]() |
4fc6a7ce65 | ||
![]() |
e657ef87ab | ||
![]() |
3bc5cc1ce7 | ||
![]() |
49971fc1ef | ||
![]() |
569ff8a34c | ||
![]() |
2d73af1530 | ||
![]() |
470dc30174 | ||
![]() |
7dd25001ce | ||
![]() |
9b0ba2f274 | ||
![]() |
8938ea3fa1 | ||
![]() |
df93236627 | ||
![]() |
5c587726ae | ||
![]() |
87100b64d9 | ||
![]() |
def5a12ff0 | ||
![]() |
31f0853ca8 | ||
![]() |
fb41e2bc8d | ||
![]() |
aa077d95c0 | ||
![]() |
b004ef4e15 | ||
![]() |
7c58ecb657 | ||
![]() |
8144a962e7 | ||
![]() |
8c3bce3f98 | ||
![]() |
3b0478776d | ||
![]() |
c53538b1c2 | ||
![]() |
2ba196b310 | ||
![]() |
4beb9df364 | ||
![]() |
6fb90bc723 | ||
![]() |
dd86330ff8 | ||
![]() |
f9772ac685 | ||
![]() |
312454150b | ||
![]() |
3fac671fc8 | ||
![]() |
dc5dff7e9a | ||
![]() |
199e2b6988 | ||
![]() |
d3f1996655 | ||
![]() |
277236f730 | ||
![]() |
0d06471910 | ||
![]() |
4de104f9cf | ||
![]() |
189c8b9b11 | ||
![]() |
555d7dc90c | ||
![]() |
2ab4a35c53 | ||
![]() |
b62aba4401 | ||
![]() |
3800dac492 | ||
![]() |
bba4df7187 | ||
![]() |
c808195eef | ||
![]() |
cb595266fd | ||
![]() |
3ba437d508 | ||
![]() |
28ae1b40df | ||
![]() |
b2352cf9e2 | ||
![]() |
3d62fedfa2 | ||
![]() |
6c6d871abc | ||
![]() |
39b7e2ed79 | ||
![]() |
dc856f0fdb | ||
![]() |
39cb0ee987 | ||
![]() |
78634dd4b8 | ||
![]() |
7c8f91a3a9 | ||
![]() |
e199b946ee | ||
![]() |
6b8a3a1af5 | ||
![]() |
445e982894 | ||
![]() |
d80721697d | ||
![]() |
d818e18d81 | ||
![]() |
f89973dbfc | ||
![]() |
c35fbb3f5f | ||
![]() |
d9b4fdd845 | ||
![]() |
0484ecd355 | ||
![]() |
277af5e783 | ||
![]() |
3274df7df1 | ||
![]() |
7a68a53322 | ||
![]() |
c7c4efa1c1 | ||
![]() |
e38609f4a2 | ||
![]() |
9d320ba435 | ||
![]() |
18107f5f36 | ||
![]() |
88b9efd0b7 | ||
![]() |
b42e848986 | ||
![]() |
7489dbc34e | ||
![]() |
4c96afba71 | ||
![]() |
7ea55a1e54 | ||
![]() |
77a207c9cc | ||
![]() |
1bea8254ba | ||
![]() |
1f5130dc93 | ||
![]() |
1d92dcdadd | ||
![]() |
e7b08814ec | ||
![]() |
69e245b237 | ||
![]() |
9ad9fd4290 | ||
![]() |
c47e425527 | ||
![]() |
9051b70d40 | ||
![]() |
43b5985c20 | ||
![]() |
0ec2133e81 | ||
![]() |
9fe845581b | ||
![]() |
fc23f9b22f | ||
![]() |
cbd0312605 | ||
![]() |
57bedc42a4 | ||
![]() |
acc6c97997 | ||
![]() |
dcef402d68 | ||
![]() |
d4973e8d1b | ||
![]() |
1dd78e38ff | ||
![]() |
adc46fc970 | ||
![]() |
3917d818f5 | ||
![]() |
cc5def1021 | ||
![]() |
77a331a1e3 | ||
![]() |
c12dc9de3c | ||
![]() |
ab7f789cb0 | ||
![]() |
ae86fcd5b2 | ||
![]() |
74d4768b8e | ||
![]() |
fe74d5da13 | ||
![]() |
1fec6583ff | ||
![]() |
bf6da74e6a | ||
![]() |
e8fb842aad | ||
![]() |
76e4fd8a07 | ||
![]() |
3cca3381ba | ||
![]() |
7d8087f3e8 | ||
![]() |
419e063a24 | ||
![]() |
05323ef21a | ||
![]() |
6e4d6da191 | ||
![]() |
9c75b95146 | ||
![]() |
edfaf1a6bc | ||
![]() |
1538ffa04c | ||
![]() |
3d661f9bc7 | ||
![]() |
34662a6a3a | ||
![]() |
92dff14d55 | ||
![]() |
61e1bb57e7 | ||
![]() |
5e85bf7210 | ||
![]() |
85f9c499fb | ||
![]() |
42dd771506 | ||
![]() |
8afa1da3a7 |
9
HACKING
9
HACKING
@@ -39,10 +39,11 @@ Minimal Building/Testing Environment
|
||||
You do not need to _install_ a development version of Metacity to
|
||||
build, run and test it; you can run it from some temporary
|
||||
directory. Also, you do not need to build all of Gnome in order to
|
||||
build a development version of Metacity -- odds are, you can build
|
||||
metacity from CVS without building any other modules.
|
||||
build a development version of Metacity -- odds are, you may be able
|
||||
to build metacity from CVS without building any other modules.
|
||||
|
||||
As long as you have gtk+ >= 2.6 with your distro, you should be able
|
||||
As long as you have gtk+ >= 2.10 with your distro (gtk+ >= 2.6 if
|
||||
you manually revert the change from bug 348633), you should be able
|
||||
to install your distro's development packages (e.g. gtk2-devel,
|
||||
GConf2-devel, startup-notification-devel on Fedora; also, remember
|
||||
to install the gnome-common package which is needed for building cvs
|
||||
@@ -182,7 +183,7 @@ Debugging information
|
||||
|
||||
To run metacity under valgrind, use options typical for any Gnome
|
||||
program, such as
|
||||
valgrind --logfile=metacity.log --tool=memcheck --num-callers=48 \
|
||||
valgrind --log-file=metacity.log --tool=memcheck --num-callers=48 \
|
||||
--leak-check=yes --leak-resolution=high --show-reachable=yes \
|
||||
./src/metacity --replace
|
||||
where, again, the backslashes mean to join all the stuff on the following
|
||||
|
35
MAINTAINERS
35
MAINTAINERS
@@ -1,11 +1,32 @@
|
||||
Currently active maintainers
|
||||
----------------------------
|
||||
--------------------------------
|
||||
Elijah Newren (newren gmail com)
|
||||
- Usually won't touch the theme bugs (isn't interested) or the
|
||||
compositor (until open source nvidia drivers are up to snuff).
|
||||
Tends to be most interested in libwnck/gtk interactions, focus
|
||||
issues, constraints problems, and raising/stacking, but works on
|
||||
just about anything other than themes and the compositor.
|
||||
|
||||
Havoc Pennington
|
||||
E-mail: hp@redhat.com
|
||||
Thomas Thurman (thomas thurman org uk)
|
||||
- Responsible for all theme bugs and the compositor (thank goodness
|
||||
Thomas got involved, eh?). I'm sure he'll replace this sentence
|
||||
with his interests when he reads it. ;-)
|
||||
|
||||
Elijah Newren
|
||||
E-mail: newren@gmail.com
|
||||
|
||||
Søren Sandmann
|
||||
E-mail: sandmann@redhat.com
|
||||
Semi-active maintainers
|
||||
--------------------------------
|
||||
Havoc Pennington (hp redhat com)
|
||||
- Original author. Doesn't patch metacity anymore, but is active in
|
||||
answering questions, responding to bugs, providing very helpful
|
||||
suggestions and insight, and even assisting with debugging.
|
||||
|
||||
|
||||
Important historical figureheads
|
||||
--------------------------------
|
||||
Rob Adams (readams readams net)
|
||||
- Was the main maintainer of metacity for a while; particular areas
|
||||
of focus included xinerama, placement, and an older version of the
|
||||
constraints code. Still responds to bugs every once in a while.
|
||||
|
||||
Søren Sandmann (sandmann redhat com)
|
||||
- Wrote most of the current compositing manager code + libcm
|
||||
|
@@ -1,7 +1,7 @@
|
||||
|
||||
SUBDIRS=src po doc
|
||||
|
||||
EXTRA_DIST=HACKING rationales.txt \
|
||||
EXTRA_DIST = HACKING MAINTAINERS rationales.txt \
|
||||
intltool-extract.in intltool-merge.in intltool-update.in
|
||||
|
||||
DISTCLEANFILES = intltool-extract intltool-merge intltool-update po/stamp-it po/.intltool-merge-cache
|
||||
|
395
NEWS
395
NEWS
@@ -1,3 +1,398 @@
|
||||
2.19.34
|
||||
=======
|
||||
|
||||
Thanks to Rob Bradford, Cosimo Cecchi, Yair Hershkovitz and Thomas Thurman
|
||||
for improvements in this release.
|
||||
|
||||
- Fix a bug where the window can be focused without being raised
|
||||
if the maximize is aborted. (Rob) [#459027]
|
||||
- Unset fullscreen is an allowed action where relevant. (Cosimo) [#449427]
|
||||
- Reverse window buttons and align them to the left for RTL locales.
|
||||
(Yair) [#92212]
|
||||
- Put all bitfields in window data together to help with optimisation.
|
||||
(Thomas) [#450271]
|
||||
|
||||
Translations
|
||||
Jorge Gonzalez (es), Ilkka Tyohela (fi), Gabor Kelemen (hu),
|
||||
Takeshi AIHANA (ja), Kjartan Maraas (nb), Vincent van Adrighem (nl),
|
||||
Daniel Nylander (sv), Theppitak Karoonbooyana (th),
|
||||
Nguyễn Thái Ngọc Duy (vi)
|
||||
|
||||
2.19.21
|
||||
=======
|
||||
|
||||
Thanks to Damien Carbery and Thomas Thurman for improvements in
|
||||
this release.
|
||||
|
||||
- Fixed build on Solaris (Damien) [#397296, #446535]
|
||||
- Only activate windows which change their startup ID if the
|
||||
new ID differs from the old. (This fixes the bug where KDE
|
||||
apps gained the attention hint when switching workspaces.)
|
||||
(Thomas) [#400167]
|
||||
- Open new windows on the current xinerama. (Thomas) [#145503].
|
||||
|
||||
Translations
|
||||
Tshewang Norbu (dz), Jorge González (es), Funda Wang (zh_CN)
|
||||
|
||||
2.19.13
|
||||
=======
|
||||
|
||||
Thanks to Elijah Newren and Thomas Thurman for improvements in
|
||||
this release.
|
||||
|
||||
- Updated the description of raise_on_click (Elijah) [#445447,
|
||||
#389923]
|
||||
- Refactor queueing code in window.c (Thomas) [#376760]
|
||||
- Added switch_group to the keybindings file (Thomas) [#444879]
|
||||
- New window information accessor function (Thomas) [#377495]
|
||||
|
||||
2.19.8
|
||||
======
|
||||
|
||||
Thanks to Linus Torvalds, Yair Hershkovitz and Thomas Thurman for
|
||||
improvements in this release.
|
||||
|
||||
- Lots of fixups for various alignments in RTL locales (Yair)
|
||||
[#387893]
|
||||
- Add code to configure what happens on right or middle click
|
||||
of titlebar (Linus) [#408904]
|
||||
- Fix layout for titlebars with mixed LTR/RTL scripts (Thomas)
|
||||
[#433400]
|
||||
- Fix window menu layout for RTL scripts (Thomas) [#433400]
|
||||
|
||||
Translations
|
||||
Khaled Hosny (ar), Ihar Hrachyshka (be@latin), Jovan Naumovski (mk),
|
||||
Theppitak Karoonboonyanan (th)
|
||||
|
||||
[ Apologies to these translators who didn't get credited in the
|
||||
version of 2.19.8 that shipped. ]
|
||||
|
||||
2.19.5
|
||||
======
|
||||
|
||||
- Prevent metacity from "forgetting" which machine a window is on
|
||||
(Elijah) [#418552]
|
||||
- Prevent nasty flickering an placement problem introduced in
|
||||
metacity 2.19.2 (Elijah) [fix side-effect of change in #426519]
|
||||
- Fix some uninitialized memory usage errors (Elijah) [#427385]
|
||||
|
||||
Translations
|
||||
David Lodge (en_GB), Jorge González (es), Ignacio Casal Quinteiro (gl),
|
||||
Daniel Nylander (sv)
|
||||
|
||||
2.19.3
|
||||
======
|
||||
|
||||
Thanks to Magnus Therning, Elijah Newren, Thomas Thurman, and Bruno
|
||||
Boaventura for improvements in this release.
|
||||
|
||||
- Add support for _NET_MOVERESIZE_WINDOW (Magnus, Elijah) [#344521]
|
||||
- EWMH compliance: set _NET_WM_ALLOWED_ACTIONS so that pagers know
|
||||
which actions we support (Elijah) [#115247]
|
||||
- Fix crash with apps trying to open an insanely huge window
|
||||
(Thomas) [#399529]
|
||||
- Fix temporary hang/pause with libXt by making sure apps get a
|
||||
ConfigureNotify on unmap (Elijah) [#399552]
|
||||
- do not auto-maximize windows larger than the workarea in only a
|
||||
single direction (Elijah) [#419810]
|
||||
- Don't show the current workspace as a possible workspace to switch
|
||||
to (Bruno) [#426791]
|
||||
- Preserve stacking order across restarts (Elijah)
|
||||
|
||||
Translations
|
||||
Khaled Hosny (ar), Kjartan Maraas (nb)
|
||||
|
||||
2.19.2
|
||||
======
|
||||
|
||||
Thanks to Bastien Nocera, Thomas Thurman, and Elijah Newren for
|
||||
improvements in this release.
|
||||
|
||||
- Add new control-center key bindings definitions (Bastien) [#420145]
|
||||
- Prevent metacity from crashing when trying to use invalid themes
|
||||
(Thomas) [#423855]
|
||||
- Fix invalid free causing crash on metacity close introduced in
|
||||
2.19.1 (Elijah) [#427385]
|
||||
- Add special keybinding just for debugging spew marks, unbound and
|
||||
not even listed in schemas (Elijah)
|
||||
- Fix move/resize events in relation to combinations of
|
||||
ConfigureRequest and WM_NORMAL_HINTS change notifications (Elijah)
|
||||
[#426519]
|
||||
- Remove what we believe to be an ancient attempt at working around
|
||||
sloppy/mouse focus bugs that we believe have since been correctly
|
||||
fixed. May fix some ugly race conditions. May also cause nasty
|
||||
bugs in sloppy/mouse focus modes. Only one way to find
|
||||
out... (Elijah) [#304430]
|
||||
|
||||
Translations
|
||||
Raivis Dejus (lv)
|
||||
|
||||
2.19.1
|
||||
======
|
||||
|
||||
Thanks to Jaap Haitsma, Linus Torvalds, Charlie Brej, Kjartan Maraas,
|
||||
Arthur Taylor, Elijah Newren, Josselin Mouette, Havoc Pennington,
|
||||
Benjamin Berg, and Carlo Wood for improvements in this release.
|
||||
|
||||
- new icon for the force-quit dialog (Jaap) [#396655]
|
||||
- add configureable mouse click action abilities, and clean up lots of
|
||||
related code (Linus) [#408899, #408902, others]
|
||||
- add schemeas for middle and right click titlebar actions (Charlie)
|
||||
[#408903]
|
||||
- remove pango/pangox.h include since it's not needed and not
|
||||
installed anymore (Kjartan)
|
||||
- adjust rounded corners so that they fit nicely with the arcs
|
||||
around them (Arthur) [#399373]
|
||||
- fix session hang when metacity .sm file is missing (Josselin)
|
||||
[#407981]
|
||||
- add support for _NET_WM_USER_TIME_WINDOW in order to cut down on
|
||||
context switches (Elijah, Havoc) [#354213]
|
||||
- prevent nasty metacity/gdk interactions causing hangs with gtk
|
||||
trunk (Elijah) [offshoots of #354213]
|
||||
- fix button middle fallback and the prelight state (Benjamin) [#419043]
|
||||
- Lots of code cleanup for the strut lists (Elijah)
|
||||
- fix handling of unidirectional maximization and partial struts +
|
||||
some miscellaneous cleanups (Carlo) [#358311]
|
||||
- avoid some crashes when dragging windows partially offscreen
|
||||
(Elijah) [#353513]
|
||||
- avoid mousenav vs. keynav focus problems with the run application
|
||||
dialog in mouse/sloppy focus modes (Elijah) [#374752]
|
||||
- _NET_ACTIVE_WINDOW property on the root window should be a single
|
||||
xwindow id, not two (Elijah)
|
||||
- Fix unidirection unmaximization causing jumps (Elijah) [#355497]
|
||||
- fix unfullscreening and unmaximizing with size increment/size
|
||||
constraint windows (such as gnome-terminal) possibly not returning
|
||||
to their "original position" (Elijah) [#329152]
|
||||
- fix some issues with min/max and size increment constraints
|
||||
(Elijah) [#418395]
|
||||
- send synthetic configure notify events in response to appropriate
|
||||
MapRequest events too (Elijah) [#322840]
|
||||
|
||||
Translations
|
||||
Ihar Hrachyshka (be@latin), Jordi Mallach (ca), Jakub Friedl (cs),
|
||||
norbu (dz), David Lodge (en_GB), Ivar Smolin (et), Gabor Kelemen (hu),
|
||||
Luca Ferretti (it), Takeshi AIHANA (ja), Erdal Ronahi (ku), Gintautas
|
||||
Miliauskas (lt), Jovan Naumovski (mk), Kjartan Maraas (nb), Reinout van
|
||||
Schouwen (nl), wadim dziedzic (pl), raulpereira (pt_BR), Nickolay V.
|
||||
Shmyrev (ru), Горан Ракић (sr), Woodman Tuen (zh_HK), Woodman Tuen (zh_TW)
|
||||
|
||||
2.17.5
|
||||
======
|
||||
|
||||
Thanks to Bruno Boaventura, Mad Alex, and Thomas Thurman for
|
||||
improvements in this release.
|
||||
|
||||
- make window menu arrangement more sensible. (Bruno) [#382962]
|
||||
- unmaximise button keeps pressed appearance when moved off and
|
||||
back. (Alex) [#395560]
|
||||
- fix a couple of compositor crashes (Thomas) [#387761]
|
||||
- new environment variables checked if the compositor is enabled;
|
||||
see the new file doc/compositor-control.txt for details. (Thomas)
|
||||
|
||||
Translations
|
||||
Djihed Afifi (ar), Ales Nyakhaychyk (be), Jordi Mallach (ca),
|
||||
Jakub Friedl (cs), David Lodge (en_GB), Raivis Dejus (lv),
|
||||
Kjartan Maraas (nb), Mugurel Tudor (ro), Daniel Nylander (sv),
|
||||
Theppitak Karoonboonyanan (th)
|
||||
|
||||
2.17.3
|
||||
======
|
||||
|
||||
Thanks to Christof Krüger, Federico Mena Quintero, Bruno Boaventura,
|
||||
and Björn Lindqvist for improvements in this release.
|
||||
|
||||
- fix longstanding problem about windows flickering in and out of
|
||||
maximised state when dragging between xineramas (Christof) [#358715]
|
||||
- grab server when switching workspaces (Federico) [#381127]
|
||||
- replace changing text on window menu with pairs of radio buttons
|
||||
and checkboxes (Bruno, Björn) [#343108]
|
||||
|
||||
Translations
|
||||
Kjartan Maraas (nb), Jakub Friedl (cs), Yuval Tanny (he), Ivar Smolin (et),
|
||||
Duarte Loreto (pt), Francisco Javier F. Serrador (es)
|
||||
|
||||
2.17.2
|
||||
======
|
||||
|
||||
Thanks to Priit Laes, Bruno Boaventura, Kjartan Maraas, Justin Mason,
|
||||
Elijah Newren and Dan Mick for improvements in this release.
|
||||
|
||||
- implement handle_move_to_{side|corner}_* to allow the user to flip a
|
||||
window to the side or corner of the screen. (Justin) [#317884]
|
||||
- fix strict focus mode by picking up on res_class (Dan) [#361054]
|
||||
- remove deprecated gtk stuff (Priit, Bruno)
|
||||
- string fixes (Kjartan) [#363354, #363355]
|
||||
|
||||
Translations
|
||||
Jakub Friedl (cs), Francisco Javier F. Serrador (es), Ilkka Tuohela (fi),
|
||||
Christophe Merlet (RedFox) (fr), Kjartan Maraas (nb)
|
||||
|
||||
2.17.1
|
||||
======
|
||||
|
||||
Thanks to Bruno Boaventura and Carlo Wood for improvements in this
|
||||
release.
|
||||
|
||||
- sync metacity workspace previous with libwnck (Bruno) [#341893]
|
||||
- fix cases when titlebar is allowed offscreen and shouldn't be, and
|
||||
vice-versa (Carlo) [#333995]
|
||||
|
||||
Translations
|
||||
Ilkka Tuohela (fi)
|
||||
|
||||
2.17.0
|
||||
======
|
||||
|
||||
Thanks to Elijah Newren, Jens Granseuer, Bruno Boaventura, Carlo Wood,
|
||||
and Thomas Thurman for changes in this release.
|
||||
|
||||
- version 2 of theme format: stick, shade and above buttons on titlebar,
|
||||
variable rounding on corners, variable transparency on window
|
||||
backgrounds, stock icons in themes, can remove all titlebar buttons
|
||||
from certain classes of window, and more (Thomas) [#102547 and
|
||||
dependencies]
|
||||
- improve "Force Quit" dialog (Bruno) [#121936]
|
||||
- ignore edge resistance when resizing with keyboard (Elijah) [#346782]
|
||||
- maintain window size and placement across restarts (Carlo) [#358042]
|
||||
- prevent crash when closing certain remote apps (Elijah) [#358514]
|
||||
- longstanding mouse-focus bug fixed which affected firefox's
|
||||
autocompletion (Elijah) [#357695]
|
||||
- ignore maximum size constraints when maximising (Elijah) [#327543]
|
||||
- warn translators to keep translations in sync with libwnck (Bruno)
|
||||
[#355620]
|
||||
- fixes for compilation warnings, etc (Elijah, Jens) [#348067, #356631]
|
||||
|
||||
Translators
|
||||
Ivar Smolin (et), Gabor Kelemen (hu), Luca Ferretti (it),
|
||||
Runa Bhattacharjee (bn_IN)
|
||||
|
||||
2.16.2
|
||||
======
|
||||
|
||||
Thanks to Eljah Newren, Maik Beckmann, Christian Hamar, Thomas Andersen,
|
||||
and Bruno Boaventura de Oliveira for changes in this release.
|
||||
|
||||
- partial audit to fix timestamp usage (Elijah) [part of #355180]
|
||||
- remove compilation warnings (Maik) [#355876]; (Bruno) [#355490,
|
||||
#355489]
|
||||
- automatic detection of stable/unstable in configure script
|
||||
(Christian/Elijah) [#356122]
|
||||
- make windows be stacked correctly before showing them (Thomas)
|
||||
[#332385]
|
||||
- use guint32 for timestamps (Elijah) [#348305]
|
||||
|
||||
Translators
|
||||
Wouter Bolsterlee (nl), Matic Žgur (sl), Francisco Javier F. Serrador (es),
|
||||
Vladimir Petkov (bg), Jordi Mallach (ca), Ilkka Tuohela (fi),
|
||||
Rajesh Ranjan (hi), Woodman Tuen (zh_HK, zh_TW), Ani Peter (ml),
|
||||
Felix (ta), Ankit Patel (gu), Mohammad DAMT (id)
|
||||
|
||||
2.16.1
|
||||
======
|
||||
|
||||
Thanks to Elijah Newren, Colin Watson, and Bruno Boaventura de Oliveira
|
||||
Lacerda for changes in this release.
|
||||
|
||||
- fix stuck grab, letting focus be transferred between windows (Elijah)
|
||||
[#354422 partial]
|
||||
- windows returning from fullscreen are constrained to be onscreen
|
||||
(Elijah) [#353699]
|
||||
- Clear the transient_for flag of a window after emitting a warning
|
||||
(Colin)
|
||||
- Replace copy_of_gdk_x11_window_set_user_time() with the real thing
|
||||
(Bruno) [#352293]
|
||||
|
||||
Translators
|
||||
David Lodge (en_GB), Ivar Smolin (et), Matic Žgur (sl),
|
||||
Vasiliy Faronov (ru)
|
||||
|
||||
2.16.0
|
||||
==
|
||||
|
||||
Thanks to Jens Granseuer for changes in this release.
|
||||
|
||||
- Fix the build with c89/gcc 2.95.
|
||||
|
||||
Translators
|
||||
Rahul Bhalerao (mr), Runa Bhattacharjee (bn_IN), Woodman Tuen
|
||||
(zh_HK, zh_TW), Kostas Papadimas (el), Ani Peter (ml),
|
||||
Jonathan Ernst (fr), Горан Ракић (sr, Gabor Kelemen (hu),
|
||||
Maxim Dziumanenko (uk), Duarte Loreto (pt), Jordi Mallach (ca),
|
||||
Gintautas Miliauskas (lt)
|
||||
|
||||
2.15.34
|
||||
==
|
||||
|
||||
Thanks to Stéphane Rosi, Vytautus Liuolia, Will Walker, Baptiste
|
||||
Mille-Mathias, Elijah Newren, Ed Catmur, and Thomas Andersen for fixes
|
||||
in this release.
|
||||
|
||||
- allow moving maximized windows between xineramas again (Stéphane)
|
||||
[#338660]
|
||||
- fix an uninitialized-usage bug with net_wm_user_time that breaks
|
||||
focus with new windows (Vytautus)
|
||||
- re-fix accessibility events for the alt-tab popup (Will) [#350624]
|
||||
- update the close pixmap to fit better with the other pixmaps of the
|
||||
menu (Baptiste) [#345498]
|
||||
- fix several fullscreen handling bugs I introduced, causing
|
||||
fullscreen windows to not actually be shown fullscreen (Elijah)
|
||||
[#343115]
|
||||
- fix keybindings with hex-values, coming from special extended
|
||||
keyboard keys (Ed) [#140448]
|
||||
- fix metacity-dialog handling of arguments (Thomas) [#340690]
|
||||
|
||||
Translators
|
||||
Vladimir Petkov (bg), Jordi Mallach (ca), Gabor Kelemen (hu),
|
||||
Mohammad DAMT (id), Wouter Bolsterlee (nl), Daniel Nylander (sv),
|
||||
Funda Wang (zh_CN)
|
||||
|
||||
2.15.21
|
||||
==
|
||||
|
||||
Thanks to Vincent Untz, Jens Granseuer, Björn Lindqvist, Dmitry
|
||||
Timoshkov, Thomas Thurman, Vytautas Liuolia, Thomas Andersen, Chris
|
||||
Ball, and Elijah Newren for fixes in this release.
|
||||
|
||||
- kill usage of libegg (Vincent) [#348633]
|
||||
- fix another C89 vs. C99 issue (Jens) [#347621]
|
||||
- make it so maximized windows do not have rounded corners (Björn)
|
||||
[#336850]
|
||||
- fix the heuristic for determining if windows can be made
|
||||
fullscreen, needed for WINE and possible also some legacy
|
||||
applications (Dmitry) [#346927]
|
||||
- make sure window features get recalculated when the screen is
|
||||
resized via XRandR (Dmitry) [#346927]
|
||||
- fitts' law fixes for titlebar buttons on maximized windows (Thomas
|
||||
Thurman) [#97703]
|
||||
- react to _NET_STARTUP_ID changes, as proposed for the new
|
||||
startup-notification/EWMH spec (Vytautas) [#347515]
|
||||
- return the window to maximized state if the window was "shaken
|
||||
loose" from maximized state during a resize but the resize is later
|
||||
aborted (Thomas Andersen) [#346719]
|
||||
- fix button lighting with dragged clicks (Björn) [#321474]
|
||||
- don't minimize in response to double clicks on the titlebar when
|
||||
minimiziation should not be allowed (Chris) [#347377]
|
||||
- fix some titlebar-not-on-screen constraint issues (Elijah)
|
||||
[#333328, #345522]
|
||||
|
||||
Translators
|
||||
Mahay Alam Khan (bn_IN), Jakub Friedl (cs), Iñaki Larrañaga
|
||||
Murgoitio (eu), Yuval Tanny (he), Rajesh Ranjan (hi), Jovan
|
||||
Naumovski (mk) Kjartan Maraas (nb), Leonid Kanter (ru)
|
||||
|
||||
2.15.13
|
||||
==
|
||||
|
||||
Thanks to Björn Lindqvist and Thomas Thurman for improvements in this
|
||||
release.
|
||||
|
||||
- grab alt+shift+button1 when trying to snap-move windows (Björn)
|
||||
- avoid a case where memory is written after it's freed (Thomas)
|
||||
|
||||
Translators
|
||||
Hendrik Richter (de), Kostas Papadimas (el), Jonathan Ernst (fr),
|
||||
Satoru SATOH (ja)
|
||||
|
||||
2.15.8
|
||||
==
|
||||
|
||||
|
7
README
7
README
@@ -6,10 +6,11 @@ on UNIX keyboards.
|
||||
The first release of Metacity was version 2.3. Metacity has no need for
|
||||
your petty hangups about version numbers.
|
||||
|
||||
The stable releases so far are 2.4.x, 2.6.x, 2.8.[01], 2.8.1.x, 2.8.5-, 2.10.x,
|
||||
2.12.x, 2.14.x.
|
||||
The stable releases so far are 2.4.x, 2.6.x, 2.8.[01], 2.8.1.x, 2.8.5-,
|
||||
2.10.x, 2.12.x, 2.14.x, 2.16.x.
|
||||
|
||||
Unstable branches are 2.3.x, 2.5.x, 2.8.2-4, 2.9.x, 2.11.x, 2.13.x, 2.15.x
|
||||
Unstable branches are 2.3.x, 2.5.x, 2.8.2-4, 2.9.x, 2.11.x, 2.13.x,
|
||||
2.15.x, 2.17.x.
|
||||
|
||||
COMPILING METACITY
|
||||
===
|
||||
|
26
configure.in
26
configure.in
@@ -1,8 +1,14 @@
|
||||
AC_PREREQ(2.50)
|
||||
|
||||
m4_define([metacity_major_version], [2])
|
||||
m4_define([metacity_minor_version], [19])
|
||||
# Fibonacci sequence for micro version numbering:
|
||||
# 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987
|
||||
AC_INIT([metacity], [2.15.8],
|
||||
m4_define([metacity_micro_version], [34])
|
||||
|
||||
m4_define([metacity_version],
|
||||
[metacity_major_version.metacity_minor_version.metacity_micro_version])
|
||||
AC_INIT([metacity], [metacity_version],
|
||||
[http://bugzilla.gnome.org/enter_bug.cgi?product=metacity])
|
||||
|
||||
AC_CONFIG_SRCDIR(src/display.c)
|
||||
@@ -18,7 +24,7 @@ GETTEXT_PACKAGE=metacity
|
||||
AC_SUBST(GETTEXT_PACKAGE)
|
||||
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Name of default gettext domain])
|
||||
|
||||
IT_PROG_INTLTOOL([0.35.0])
|
||||
IT_PROG_INTLTOOL([0.34.90])
|
||||
AC_PROG_CC
|
||||
AC_ISC_POSIX
|
||||
AC_HEADER_STDC
|
||||
@@ -101,7 +107,7 @@ if test "x$GCC" = "xyes"; then
|
||||
fi
|
||||
changequote([,])dnl
|
||||
|
||||
METACITY_PC_MODULES='gtk+-2.0 >= 2.2.0 pango >= 1.2.0'
|
||||
METACITY_PC_MODULES='gtk+-2.0 >= 2.10.0 pango >= 1.2.0'
|
||||
|
||||
AC_ARG_ENABLE(gconf,
|
||||
AC_HELP_STRING([--disable-gconf],
|
||||
@@ -213,7 +219,7 @@ if test x$enable_compositor = xyes; then
|
||||
have_xcomposite=yes
|
||||
echo "CompositeExt support forced on"
|
||||
elif test x$enable_compositor = xauto; then
|
||||
echo "Not building compositing manager by default now, must enable explicitly to get it. And it doesn't work, so don't bother unless you want to hack on it..."
|
||||
echo "Not building compositing manager by default now, must enable explicitly to get it."
|
||||
have_xcomposite=no
|
||||
else
|
||||
have_xcomposite=no
|
||||
@@ -516,5 +522,13 @@ metacity-$VERSION:
|
||||
Render: ${have_xrender}
|
||||
Xcursor: ${have_xcursor}
|
||||
"
|
||||
echo "This is the UNSTABLE branch of metacity"
|
||||
echo "Use 2.14.x for stable (gnome-2-14 branch in CVS)"
|
||||
|
||||
METACITY_MINOR_VERSION=metacity_minor_version
|
||||
if test $(( $(echo $METACITY_MINOR_VERSION) %2)) == "1"; then
|
||||
stable_version=$(( ($METACITY_MINOR_VERSION / 2) * 2))
|
||||
echo "This is the UNSTABLE branch of metacity"
|
||||
echo -n "Use 2.$stable_version.x for stable "
|
||||
echo "(gnome-2-$stable_version branch in CVS)"
|
||||
else
|
||||
echo "This is the stable branch of metacity"
|
||||
fi
|
||||
|
46
doc/compositor-control.txt
Normal file
46
doc/compositor-control.txt
Normal file
@@ -0,0 +1,46 @@
|
||||
The compositor is the box of tricks inside the window manager which performs
|
||||
special effects on the windows on your screen. Metacity's compositor is
|
||||
under development. Your help is requested in finding and fixing bugs. This
|
||||
document tells you how to configure Metacity so that you can use compositing.
|
||||
|
||||
To turn the compositor on initially, you need to pass --enable-compositor to
|
||||
the configure script. This will introduce a dependence on libcm, which you
|
||||
can get from <URL:http://ftp.gnome.org/pub/GNOME/sources/libcm/>.
|
||||
|
||||
When Metacity is compiled, you will need to turn the compositor on in gconf
|
||||
for it to have any effect. You will find the boolean switch at
|
||||
|
||||
/apps/metacity/general/compositing_manager
|
||||
|
||||
When that's done, you can set some environment variables before you launch
|
||||
Metacity to influence how the compositor works. These will eventually become
|
||||
configuration options or gconf options when they grow up. Define them to any
|
||||
value to turn them on; leave them undefined to turn them off. Currently the
|
||||
options you can set are:
|
||||
|
||||
LIBCM_DIRECT
|
||||
|
||||
If this is set, the compositor will bypass the X server and do all its
|
||||
work directly with the hardware. I know of no reason you would want to
|
||||
do so, but perhaps you do.
|
||||
|
||||
LIBCM_TFP
|
||||
|
||||
If this is set ("tfp mode"), the compositor will feel free to use the
|
||||
texture_from_pixmap extension; if this is not set ("non-tfp mode"), the
|
||||
compositor will use a workaround. Many drivers require non-tfp mode in
|
||||
order to work, and will paint all windows clear blue or clear white
|
||||
without it. Thanks to Travis Watkins for suggesting this switch; he
|
||||
cautions that some games or video players may require tfp mode.
|
||||
|
||||
METACITY_BLING
|
||||
|
||||
This turns on several pretty but non-essential animations (dialogues
|
||||
fracturing and exploding, minimisations doing a shrinkydink effect,
|
||||
and so on). If it is not set, the standard non-GL animations are
|
||||
retained. This affects only window event animations; it doesn't change
|
||||
menus zooming, dialogues being semi-transparent, and so on. Try it
|
||||
and see whether you like it.
|
||||
|
||||
If you have any problems, ask on metacity-devel-list@gnome.org, or
|
||||
#gnome-hackers on gimpnet, or come and find me (tthurman at gnome) and ask.
|
@@ -9,7 +9,8 @@ basics are easy:
|
||||
Focus method Behavior
|
||||
click When a user clicks on a window, focus it
|
||||
sloppy When an EnterNotify is received, focus the window
|
||||
mouse Same as sloppy, but also defocus on LeaveNotify
|
||||
mouse Same as sloppy, but also defocus when mouse enters DESKTOP
|
||||
window
|
||||
|
||||
Note that these choices (along with the choice that clicking on a
|
||||
window raises it for the click focus method) introduces the following
|
||||
@@ -20,8 +21,8 @@ Focus method Invariant
|
||||
sloppy If the mouse is in a window, then it is focused; if the
|
||||
mouse is not in a window, then the most recently used
|
||||
window is focused.
|
||||
mouse If the mouse is in a window, then it is focused; otherwise,
|
||||
the designated "no_focus_window" is focused
|
||||
mouse If the mouse is in a non-DESKTOP window, then it is focused;
|
||||
otherwise, the designated "no_focus_window" is focused
|
||||
|
||||
However, there are a number of cases where the current focus window
|
||||
becomes invalid and another should be chosen. Some examples are when
|
||||
@@ -34,8 +35,9 @@ Focus method Behavior
|
||||
on top)
|
||||
sloppy Focus the window containing the pointer if there is such
|
||||
a window, otherwise focus the most recently used window.
|
||||
mouse Focus the window containing the pointer if there is one,
|
||||
otherwise focus the designated "no_focus_window".
|
||||
mouse Focus the non-DESKTOP window containing the pointer if
|
||||
there is one, otherwise focus the designated
|
||||
"no_focus_window".
|
||||
|
||||
Note that "most recently used window", as used here, has a slightly
|
||||
different connotation than "most recent to have keyboard focus". This
|
||||
@@ -62,9 +64,9 @@ cases in which a new window shouldn't be focused:
|
||||
|
||||
To handle these cases, Metacity compares timestamps of the event that
|
||||
caused the launch and the timestamp of the last interaction with the
|
||||
focused window. (Case 2 is handled by providing a special timestamp
|
||||
of 0 for the launch time, which ensures that the window that appears
|
||||
doesn't get focus)
|
||||
focused window. (Case 2 is handled by the application providing a
|
||||
special timestamp of 0 for the launch time, which ensures that the
|
||||
window that appears doesn't get focus)
|
||||
|
||||
If the newly launched window isn't focused, some things should be done
|
||||
to alert the user that there is a window to work with:
|
||||
@@ -84,10 +86,10 @@ attempt to handle the INHERENTLY CONFLICTING CONSTRAINTS. Metacity does
|
||||
this by having a mouse_mode boolean used to determine which of the two
|
||||
sets of invariants holds. This mode is set according to which method was
|
||||
most recently used to choose a focus window:
|
||||
1) When receiving EnterNotify/LeaveNotify events from mouse movement, set
|
||||
1) When receiving EnterNotify events from mouse movement, set
|
||||
mouse_mode to TRUE.
|
||||
2) When using keynav to choose a focus window (e.g. alt-tab, alt-esc,
|
||||
move-window-to-workspace keybindings), set mouse_mode to FALSE.
|
||||
alt-f2, move-window-to-workspace keybindings), set mouse_mode to FALSE.
|
||||
3) When handling events that don't choose a focus window but rather need
|
||||
a focus_window chosen for them (e.g. switch-to-workspace keybindings),
|
||||
don't change the mouse_mode and just use the current value.
|
||||
@@ -123,6 +125,7 @@ To read more about the bugs that inspired these choices:
|
||||
- Mousenav vs. Keynav in mouse and sloppy focus modes
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=167545
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=101190
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=357695
|
||||
- Not focusing panels
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=160470
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=120100
|
||||
|
@@ -1,6 +1,91 @@
|
||||
Docs on the theme format
|
||||
Themes are in a simple XML-subset format. There are multiple versions
|
||||
of the theme format, and a given theme can support more than one format.
|
||||
|
||||
Themes are in a simple XML-subset format.
|
||||
Version 1: THEMEDIR/metacity-1/metacity-theme-1.xml
|
||||
(original metacity format)
|
||||
Version 2: THEMEDIR/metacity-1/metacity-theme-2.xml
|
||||
|
||||
The subdirectory name is "metacity-1" in all versions.
|
||||
|
||||
As you might expect, older versions of metacity will not understand
|
||||
newer theme formats. However, newer versions will use old themes.
|
||||
Metacity will always use the newest theme format it understands that
|
||||
the X server supports. Some format versions are only supported if you
|
||||
have the right X server features.
|
||||
|
||||
Each format *requires* the corresponding filename. If you put version
|
||||
2 format features in the metacity-1/metacity-theme-1.xml file, then
|
||||
metacity will get angry.
|
||||
|
||||
This document has separate sections for each format version. You may
|
||||
want to read the document in reverse order, since the base features
|
||||
are discussed under version 1.
|
||||
|
||||
New Features in Theme Format Version 2
|
||||
======================================
|
||||
|
||||
The optional attributes rounded_top_left, rounded_top_right,
|
||||
rounded_bottom_left and rounded_bottom_right on <frame_geometry>
|
||||
should now be the radius of the corner in pixels. You may still use
|
||||
the values "false" for 0 and "true" for 5, which means v1 values will
|
||||
still work just fine.
|
||||
|
||||
<frame_geometry> has a new optional attribute, hide_buttons. If this
|
||||
is true, no buttons will be displayed on the titlebar.
|
||||
|
||||
Anywhere you can use a positive integer, you can use an integer constant.
|
||||
|
||||
As well as constant integers and reals, you may define constant colours,
|
||||
thus:
|
||||
<constant name="RevoltingPink" value="#FF00FF"/>
|
||||
<constant name="Background" value="gtk:bg[NORMAL]"/>
|
||||
|
||||
<frame_style> has two new optional attributes, background and alpha.
|
||||
If you specify alpha, you must specify background. background is a
|
||||
colour used for the background of the frame. alpha is the transparency
|
||||
as a real between 0.0 and 1.0. If the current X server does not support
|
||||
alpha channels, the value is ignored.
|
||||
|
||||
The filename attribute of <image> may begin with "theme:". If so, the
|
||||
rest of the string is the name of a theme icon. The 64x64 version of the
|
||||
icon is used, except for fallback mini_icons, which use the 16x16 version.
|
||||
This does not affect ordinary resizing. For example:
|
||||
<button function="close" state="normal">
|
||||
<draw_ops>
|
||||
<include name="active_button"/>
|
||||
<image filename="theme:gnome-logout" x="2" y="2"
|
||||
width="width-4" height="height-4"/>
|
||||
<!-- Note: not "theme:gnome-logout.png" or similar. -->
|
||||
</draw_ops>
|
||||
</button>
|
||||
|
||||
<menu_icon>s are parsed but ignored.
|
||||
|
||||
Fallback icons can be specified using <fallback>. There are two
|
||||
optional arguments, icon and mini_icon. The values of these arguments
|
||||
are identical to that of the filename attribute of <image>. Fallback
|
||||
icons are used when a window does not supply its own icon. If a fallback
|
||||
icon is not specified with <fallback>, Metacity will use a built-in
|
||||
icon, as in metacity-theme-1.
|
||||
|
||||
The <arc> element, as well as the original start_angle and end_angle
|
||||
attributes, may be given from and to attributes. The values of these
|
||||
attributes are given in degrees clockwise, with 0 being straight up.
|
||||
For example:
|
||||
<arc from="0.0" to="90.0" filled="true" color="#FF00FF"
|
||||
x="0" y="5" width="15" height="15"/>
|
||||
|
||||
<frame state="shaded"> may now take an optional resize attribute, with
|
||||
the same interpretation as the resize attribute on <frame state="normal">.
|
||||
If this attribute is omitted for state="shaded", it defaults to "both".
|
||||
(If it is omitted for state="normal", it remains an error.)
|
||||
|
||||
In addition to the four <button> functions which are required in
|
||||
metacity-theme-1, there are six new functions in metacity-theme-2:
|
||||
shade, unshade, above, unabove, stick and unstick.
|
||||
|
||||
Overview of Theme Format Version 1
|
||||
==================================
|
||||
|
||||
<?xml version="1.0"?>
|
||||
<metacity_theme>
|
||||
|
626
po/ChangeLog
626
po/ChangeLog
@@ -1,7 +1,621 @@
|
||||
2007-07-21 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Translation updated.
|
||||
|
||||
2007-07-18 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated.
|
||||
|
||||
2007-07-17 Daniel Nylander <po@danielnylander.se>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2007-07-16 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2007-07-10 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2007-07-08 Takeshi AIHANA <takeshi.aihana@gmail.com>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2007-07-02 Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2007-06-27 Clytie Siddall <clytie@riverland.net.au>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2007-06-25 Jorge Gonzalez <jorgegonz@svn.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation
|
||||
|
||||
2007-06-24 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* POTFILES.in: Add src/core.c
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
|
||||
2007-06-19 Jorge Gonzalez <jorgegonz@svn.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation
|
||||
|
||||
2007-06-16 Funda Wang <fundawang@gmail.com>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation
|
||||
|
||||
2007-06-15 Jorge Gonzalez <jorgegonz@svn.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation
|
||||
|
||||
2007-06-13 Pema Geyleg <pema.geyleg@gmail.com>
|
||||
|
||||
* dz.po: Updated dzongkha translation
|
||||
|
||||
2007-05-18 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2007-05-09 Jovan Naumovski <jovan@lugola.net>
|
||||
|
||||
* mk.po: Updated Macedonian translation.
|
||||
|
||||
2007-05-2 Djihed Afifi <djihed@gmail.com>
|
||||
|
||||
* ar.po: Updated Arabic Translation by Khaled Hosny.
|
||||
|
||||
2007-04-24 Ihar Hrachyshka <iharh@gnome.org>
|
||||
|
||||
* be@latin.po: Updated Belarusian Latin translation.
|
||||
|
||||
2007-04-23 David Lodge <dave@cirt.net>
|
||||
|
||||
* en_GB.po: Updated British English translation
|
||||
|
||||
2007-04-22 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
||||
|
||||
* gl.po: Updated Galician Translation.
|
||||
|
||||
2007-04-22 Jorge Gonzalez <jorgegonz@svn.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2007-04-21 Daniel Nylander <po@danielnylander.se>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2007-04-14 Djihed Afifi <djihed@gmail.com>
|
||||
|
||||
* ar.po: Updated Arabic Translation by Khaled Hosny.
|
||||
|
||||
2007-04-10 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
|
||||
2007-04-05 Bastien Nocera <hadess@hadess.net>
|
||||
|
||||
* POTFILES.in: add the XML keys definitions to the list
|
||||
|
||||
2007-04-05 Raivis Dejus <orvils@gmail.com>
|
||||
|
||||
* lv.po: Updated Latvian Translation.
|
||||
|
||||
2007-04-02 Alessio Frusciante <algol@firenze.linux.it>
|
||||
|
||||
* it.po: Fixed a typo in translation. Closes #420494.
|
||||
|
||||
2007-03-30 Ihar Hrachyshka <iharh@gnome.org>
|
||||
|
||||
* be@latin.po: Added Belarusian Latin translation by Ales Navicki.
|
||||
|
||||
2007-03-29 Priit Laes <plaes@svn.gnome.org>
|
||||
|
||||
* et.po: Updated Estonian translation by Ivar Smolin <okul@linux.ee>.
|
||||
|
||||
2007-03-27 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Translation updated.
|
||||
|
||||
2007-03-17 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
reviewed by: <delete if not using a buddy>
|
||||
|
||||
* nb.po:
|
||||
|
||||
2007-03-14 David Lodge <dave@cirt.net>
|
||||
|
||||
* en_GB.po: Updated English (British) translation
|
||||
|
||||
2007-03-12 Jakub Friedl <jfriedl@suse.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2007-03-11 Goran Rakić <grakic@devbase.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation.
|
||||
|
||||
2007-03-11 Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>
|
||||
|
||||
* ca.po: Updated Catalan translation by
|
||||
Jordi Mallach <jodri@sindominio.net>.
|
||||
|
||||
2007-03-10 Artur Flinta <aflinta@svn.gnome.org>
|
||||
|
||||
* pl.po: Updated Polish translation by GNOME PL Team.
|
||||
|
||||
2007-03-09 Nickolay V. Shmyrev <nshmyrev@yandex.ru>
|
||||
|
||||
* ru.po: Updated Russian translation.
|
||||
|
||||
2007-03-07 Artur Flinta <aflinta@svn.gnome.org>
|
||||
|
||||
* pl.po: Updated Polish translation by GNOME PL Team.
|
||||
|
||||
2007-03-06 Takeshi AIHANA <takeshi.aihana@gmail.com>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2007-03-06 Jovan Naumovski <jovan@lugola.net>
|
||||
|
||||
* mk.po: Updated Macedonian translation.
|
||||
|
||||
2007-03-05 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Reinout van Schouwen.
|
||||
|
||||
2007-03-04 Gintautas Miliauskas <gintas@akl.lt>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2007-03-04 Erdal Ronahi <erdal dot ronahi at gmail dot com>
|
||||
|
||||
* ku.po: Updated Kurdish translations
|
||||
|
||||
2007-03-04 Pema Geyleg <pema.geyleg@gmail.com>
|
||||
|
||||
* dz.po: Updated Dzongkha Translation.
|
||||
|
||||
2007-03-04 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
|
||||
|
||||
* zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
|
||||
* zh_TW.po: Updated Traditional Chinese translation(Taiwan).
|
||||
|
||||
2007-03-02 Leonardo Ferreira Fontenelle <leonardof@svn.gnome.org>
|
||||
|
||||
* pt_BR.po: Updated Brazilian Portuguese translation by Leonardo
|
||||
Ferreira Fontenelle <leo.fontenelle@gmail.com> (me!) and Raul Pereira
|
||||
<contato@raulpereira.com>.
|
||||
|
||||
2007-02-27 Gintautas Miliauskas <gintas@akl.lt>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2007-02-26 Luca Ferretti <elle.uca@libero.it>
|
||||
|
||||
* it.po: Updated Italian translation.
|
||||
|
||||
2007-02-25 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Translation updated.
|
||||
|
||||
2007-02-24 Raphael Higino <raphaelh@svn.gnome.org>
|
||||
|
||||
* pt_BR.po: Updated Brazilian Portuguese translation.
|
||||
|
||||
2007-02-24 Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2007-02-22 Abel Cheung <abelcheung@gmail.com>
|
||||
|
||||
* zh_CN.po: Updated simplified Chinese translation on behalf of
|
||||
Funda Wang.
|
||||
|
||||
2007-02-21 Maxim Dziumanenko <dziumanenko@gmail.com>
|
||||
|
||||
* uk.po: Update Ukrainian translation.
|
||||
|
||||
2007-02-21 Artur Flinta <aflinta@cvs.gnome.org>
|
||||
|
||||
* pl.po: Updated Polish translation by GNOME PL Team.
|
||||
|
||||
2007-02-20 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Alexander Shopov <ash@contact.bg>
|
||||
|
||||
2007-02-16 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2007-02-15 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2007-02-15 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
* pt.po: Updated Portuguese translation.
|
||||
|
||||
2007-02-14 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2007-02-09 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2007-01-31 Stéphane Raimbault <stephane.raimbault@gmail.com>
|
||||
|
||||
* fr.po: Updated French translation by Robert-André Mauchin.
|
||||
|
||||
2007-01-27 Priit Laes <plaes@svn.gnome.org>
|
||||
|
||||
* et.po: Updated Estonian translation by Ivar Smolin <okul@linux.ee>.
|
||||
|
||||
2007-01-22 Jakub Friedl <jfriedl@suse.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2007-01-16 Hendrik Richter <hendrikr@gnome.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2007-01-15 Djihed Afifi <djihed@gmail.com>
|
||||
|
||||
* ar.po: Updated Arabic Translation by Khaled Hosny.
|
||||
|
||||
2007-01-13 Daniel Nylander <po@danielnylander.se>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2007-01-05 Jakub Friedl <jfriedl@suse.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2007-01-3 Djihed Afifi <djihed@gmail.com>
|
||||
|
||||
* ar.po: Updated Arabic Translation by Djihed Afifi.
|
||||
|
||||
2007-01-01 David Lodge <dave@cirt.net>
|
||||
|
||||
* en_GB.po: Updated English (British) translation
|
||||
|
||||
2006-12-29 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
|
||||
2006-12-29 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2006-12-27 Djihed Afifi <djihed@gmail.com>
|
||||
|
||||
* ar.po: Updated Arabic Translation.
|
||||
|
||||
2006-12-24 Djihed Afifi <djihed@gmail.com>
|
||||
|
||||
* ar.po: Updated Arabic Translation.
|
||||
|
||||
2006-12-23 Raivis Dejus <orvils@gmail.com>
|
||||
|
||||
* lv.po: Updated Latvian Translation.
|
||||
|
||||
2006-12-18 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
|
||||
2006-12-18 Djihed Afifi <djihed@gmail.com>
|
||||
|
||||
* ar.po: Updated Arabic Translation.
|
||||
|
||||
2006-12-18 Ales Nyakhaychyk <nab@mail.by>
|
||||
|
||||
* be.po: Updated Belarusian Translation by Ihar Hrachyshka.
|
||||
|
||||
2006-12-15 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2006-12-13 Mugurel Tudor <mugurelu@gnome.ro>
|
||||
|
||||
* ro.po: Updated Romanian translation.
|
||||
|
||||
2006-12-11 Jordi Mallach <jordi@sindominio.net>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2006-12-11 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
|
||||
2006-12-04 Jakub Friedl <jfriedl@suse.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2006-11-22 Yair Hershkovitz <yairhr@gmail.com>
|
||||
|
||||
* he.po: Updated Hebrew translation.
|
||||
|
||||
2006-11-19 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2006-11-19 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
* pt.po: Partial updated Portuguese translation.
|
||||
|
||||
2006-11-19 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2006-11-18 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2006-11-07 Francisco Javier F. Serrador <serrador@openshine.com>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2006-11-03 Jakub Friedl <jfriedl@suse.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2006-10-26 Francisco Javier F. Serrador <serrador@openshine.com>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2006-10-26 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2006-10-26 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2006-10-22 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation.
|
||||
|
||||
2006-10-19 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
|
||||
2006-10-15 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2006-10-02 Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2006-09-29 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation with
|
||||
bugfixes prompted by Yavor Doganov
|
||||
|
||||
2006-09-21 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Translation updated.
|
||||
|
||||
2006-09-19 Runa Bhattacharjee <runabh@gmail.com>
|
||||
|
||||
* bn_IN.po: Updated Bengali India Translation.
|
||||
|
||||
2006-09-15 Wouter Bolsterlee <wbolster@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Wouter Bolsterlee.
|
||||
|
||||
2006-09-15 Matic Zgur <mr.zgur@gmail.com>
|
||||
|
||||
* sl.po: Updated Slovenian translation.
|
||||
|
||||
2006-09-14 Francisco Javier F. Serrador <serrador@openshine.com>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2006-09-14 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Alexander Shopov <ash@contact.bg>
|
||||
|
||||
2006-09-13 Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2006-09-13 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
- concistency fixes with libwnck
|
||||
|
||||
2006-09-13 Rajesh Ranjan <rajeshkajha@yahoo.com>
|
||||
|
||||
* hi.po: Updated Hindi Translation.
|
||||
|
||||
2006-09-13 Abel Cheung <abel@oaka.org>
|
||||
|
||||
* zh_HK.po: Updated Chinese (Hong Kong) translation.
|
||||
* zh_TW.po: Updated Chinese (Taiwan) translation.
|
||||
|
||||
2006-09-13 Ani Peter <peter.ani@gmail.com>
|
||||
|
||||
* ml.po: Updated Malayalam translation
|
||||
|
||||
2006-09-13 I.Felix <ifelix25@gmail.com>
|
||||
|
||||
* ta.po: Updated Tamil Translation.
|
||||
|
||||
2006-09-13 Ankit Patel <ankit644@yahoo.com>
|
||||
|
||||
* gu.po: Updated Gujarati Translation.
|
||||
|
||||
2006-09-13 Ahmad Riza H Nst <rizahnst@eriagempita.co.id>
|
||||
|
||||
* id.po: Updated.
|
||||
|
||||
2006-09-10 David Lodge <dave@cirt.net>
|
||||
|
||||
* en_GB.po: Updated English (British) translation.
|
||||
|
||||
2006-09-08 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2006-09-07 Matic Zgur <mr.zgur@gmail.com>
|
||||
|
||||
* sl.po: Updated Slovenian translation.
|
||||
|
||||
2006-09-04 Nickolay V. Shmyrev <nshmyrev@yandex.ru>
|
||||
|
||||
* ru.po: Updated Russian translation by
|
||||
Vasiliy Faronov <qvvx@yandex.ru>.
|
||||
|
||||
2006-09-04 Rahul Bhalerao <b.rahul.pm@gmail.com>
|
||||
|
||||
* mr.po: Updated Marathi translations.
|
||||
|
||||
2006-09-04 Runa Bhattacharjee <runabh@gmail.com>
|
||||
|
||||
* bn_IN.po: Modified the accelerators to English.
|
||||
|
||||
2006-09-04 Abel Cheung <abel@oaka.org>
|
||||
|
||||
* zh_HK.po: Updated Chinese (Hong Kong) translation from
|
||||
Woodman Tuen <wmtuen@gmail.com>.
|
||||
* zh_TW.po: Updated Chinese (Taiwan) translation from
|
||||
Woodman Tuen <wmtuen@gmail.com>.
|
||||
|
||||
2006-09-04 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2006-09-04 Ani Peter <peter.ani@gmail.com>
|
||||
|
||||
* ml.po: Updated Malayalam translation
|
||||
|
||||
2006-09-04 Rahul Bhalerao <b.rahul.pm@gmail.com>
|
||||
|
||||
* mr.po: Added the file and updated Marathi translation.
|
||||
* LINGUAS: Added an entry for Marathi(mr).
|
||||
|
||||
2006-09-03 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation from
|
||||
Jonathan Ernst <jonathan@ernstfamily.ch>.
|
||||
|
||||
2006-09-03 Danilo Šegan <danilo@gnome.org>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated by Goran Rakić.
|
||||
|
||||
2006-09-03 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Translation updated.
|
||||
|
||||
2006-09-03 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Translation updated.
|
||||
|
||||
2006-09-01 Maxim Dziumanenko <dziumanenko@gmail.com>
|
||||
|
||||
* uk.po: Update Ukrainian translation.
|
||||
|
||||
2006-09-01 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
* pt.po: Updated Portuguese translation.
|
||||
|
||||
2006-08-30 Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2006-08-27 Gintautas Miliauskas <gintas@akl.lt>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2006-08-20 Daniel Nylander <po@danielnylander.se>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2006-08-19 Ahmad Riza H Nst <rizahnst@eriagempita.co.id>
|
||||
|
||||
* id.po: Updated.
|
||||
|
||||
2006-08-18 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Alexander Shopov <ash@contact.bg>
|
||||
|
||||
2006-08-17 Jordi Mas <jmas@softcatala.org>
|
||||
|
||||
* ca.po: Fixes small mistakes in Catalan translation
|
||||
|
||||
2006-08-16 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Translation updated.
|
||||
|
||||
2006-08-13 Wouter Bolsterlee <uws+gnome@xs4all.nl>
|
||||
|
||||
* nl.po: Translation updated by Wouter Bolsterlee.
|
||||
|
||||
2006-08-09 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2006-08-08 Wouter Bolsterlee <uws+gnome@xs4all.nl>
|
||||
|
||||
* nl.po: Translation updated by Wouter Bolsterlee.
|
||||
|
||||
2006-08-07 Leonid Kanter <leon@asplinux.ru>
|
||||
|
||||
* ru.po: Updated Russian translation
|
||||
|
||||
2006-08-07 Inaki Larranaga <dooteo@euskalgnu.org>
|
||||
|
||||
* eu.po: Fixed some typos.
|
||||
|
||||
2006-08-03 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
|
||||
2006-08-03 Yair Hershkovitz <yairhr@gmail.com>
|
||||
|
||||
* he.po: Updated Hebrew translation.
|
||||
|
||||
2006-08-02 Jovan Naumovski <jovan@lugola.net>
|
||||
|
||||
* mk.po: Updated Macedonian translation.
|
||||
|
||||
2006-07-31 Jakub Friedl <jfriedl@suse.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2006-07-23 Satoru SATOH <ss@gnome.gr.jp>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2006-07-22 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation from
|
||||
Jonathan Ernst <jonathan@ernstfamily.ch>.
|
||||
|
||||
2006-07-22 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek translation
|
||||
|
||||
2006-07-21 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation from
|
||||
Jonathan Ernst <jonathan@ernstfamily.ch>.
|
||||
|
||||
2006-07-18 Hendrik Richter <hendrikr@gnome.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2006-07-03 Runa Bhattacharjee <runabh@gmail.com>
|
||||
|
||||
* bn_IN.po: Added Bengali India Translation
|
||||
* LINGUAS: Added Bengali India (bn_IN) to the list of languages.
|
||||
* bn_IN.po: Added Bengali India Translation
|
||||
* LINGUAS: Added Bengali India (bn_IN) to the list of languages.
|
||||
|
||||
2006-07-03 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
@@ -13,15 +627,15 @@
|
||||
|
||||
2006-06-28 Rajesh Ranjan <rajeshkajha@yahoo.com>
|
||||
|
||||
* hi.po: Updated Hindi Translation.
|
||||
* hi.po: Updated Hindi Translation.
|
||||
|
||||
2006-06-27 Rajesh Ranjan <rajeshkajha@yahoo.com>
|
||||
|
||||
* hi.po: Updated Hindi Translation.
|
||||
* hi.po: Updated Hindi Translation.
|
||||
|
||||
2006-06-26 Rajesh Ranjan <rajeshkajha@yahoo.com>
|
||||
|
||||
* hi.po: Updated Hindi Translation.
|
||||
* hi.po: Updated Hindi Translation.
|
||||
|
||||
2006-05-28 Pema Geyleg <pema.geyleg@gmail.com>
|
||||
|
||||
@@ -1219,7 +1833,7 @@
|
||||
|
||||
2004-10-13 David Lodge <dave@cirt.net>
|
||||
|
||||
* en_GB.po: Updated British English translation.
|
||||
* en_GB.po: Updated British English translation.
|
||||
|
||||
2004-09-26 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
|
@@ -4,6 +4,7 @@ am
|
||||
ar
|
||||
az
|
||||
be
|
||||
be@latin
|
||||
bg
|
||||
bn
|
||||
bn_IN
|
||||
@@ -13,6 +14,7 @@ cs
|
||||
cy
|
||||
da
|
||||
de
|
||||
dz
|
||||
el
|
||||
en_CA
|
||||
en_GB
|
||||
@@ -34,6 +36,7 @@ id
|
||||
is
|
||||
it
|
||||
ja
|
||||
ka
|
||||
ko
|
||||
ku
|
||||
lt
|
||||
@@ -42,11 +45,13 @@ mg
|
||||
mk
|
||||
ml
|
||||
mn
|
||||
mr
|
||||
ms
|
||||
nb
|
||||
ne
|
||||
nl
|
||||
nn
|
||||
oc
|
||||
or
|
||||
pa
|
||||
pl
|
||||
@@ -55,8 +60,8 @@ pt_BR
|
||||
ro
|
||||
ru
|
||||
rw
|
||||
sl
|
||||
sk
|
||||
sl
|
||||
sq
|
||||
sr
|
||||
sr@Latn
|
||||
|
@@ -1,6 +1,9 @@
|
||||
# List of source files containing translatable strings.
|
||||
# Please keep this file sorted alphabetically.
|
||||
src/50-metacity-desktop-key.xml.in
|
||||
src/50-metacity-key.xml.in
|
||||
src/tools/metacity-message.c
|
||||
src/core.c
|
||||
src/delete.c
|
||||
src/display.c
|
||||
src/errors.c
|
||||
|
2577
po/be@latin.po
Normal file
2577
po/be@latin.po
Normal file
File diff suppressed because it is too large
Load Diff
1705
po/bn_IN.po
1705
po/bn_IN.po
File diff suppressed because it is too large
Load Diff
2886
po/en_GB.po
2886
po/en_GB.po
File diff suppressed because it is too large
Load Diff
152
po/eu.po
152
po/eu.po
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: eu\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-05-25 08:47+0000\n"
|
||||
"POT-Creation-Date: 2006-08-07 18:02+0000\n"
|
||||
"PO-Revision-Date: 2006-05-25 09:26+0000\n"
|
||||
"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>\n"
|
||||
"Language-Team: Basque <itzulpena@euskalgnu.org>\n"
|
||||
@@ -16,7 +16,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: KBabel 1.10.2\n"
|
||||
"Plural-Forms: Plural-Forms: Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"\n"
|
||||
|
||||
#: ../src/tools/metacity-message.c:150
|
||||
@@ -43,7 +43,8 @@ msgstr "Ez dira ulertzen amaierako \"%s\" karaktereak \"%s\" katean"
|
||||
#: ../src/delete.c:129
|
||||
#, c-format
|
||||
msgid "Failed to parse message \"%s\" from dialog process\n"
|
||||
msgstr "Huts egin du elkarrizketa-koadroaren prozesutik \"%s\" mezua analizatzean\n"
|
||||
msgstr ""
|
||||
"Huts egin du elkarrizketa-koadroaren prozesutik \"%s\" mezua analizatzean\n"
|
||||
|
||||
#: ../src/delete.c:264
|
||||
#, c-format
|
||||
@@ -52,7 +53,8 @@ msgstr "Errorea elkarrizketa-koadroa bistaratzeko prozesutik irakurtzean: %s\n"
|
||||
|
||||
#: ../src/delete.c:345
|
||||
#, c-format
|
||||
msgid "Error launching metacity-dialog to ask about killing an application: %s\n"
|
||||
msgid ""
|
||||
"Error launching metacity-dialog to ask about killing an application: %s\n"
|
||||
msgstr ""
|
||||
"Errorea aplikazioa hil behar den galdetzeko metacity-ren elkarrizketa-"
|
||||
"koadroa abiaraztean: %s\n"
|
||||
@@ -174,8 +176,10 @@ msgstr "Huts egin du gaien direktorioa aztertzean: %s\n"
|
||||
|
||||
#: ../src/main.c:366
|
||||
#, c-format
|
||||
msgid "Could not find a theme! Be sure %s exists and contains the usual themes."
|
||||
msgstr "Gai bat ezin izan da aurkitu! Ziurtatu %s badagoela eta ohiko gaiak dituela."
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes."
|
||||
msgstr ""
|
||||
"Gai bat ezin izan da aurkitu! Ziurtatu %s badagoela eta ohiko gaiak dituela."
|
||||
|
||||
#: ../src/main.c:424
|
||||
#, c-format
|
||||
@@ -362,7 +366,8 @@ msgid "The window \"%s\" is not responding."
|
||||
msgstr "\"%s\" leihoak ez du erantzuten."
|
||||
|
||||
#: ../src/metacity-dialog.c:119
|
||||
msgid "Forcing this application to quit will cause you to lose any unsaved changes."
|
||||
msgid ""
|
||||
"Forcing this application to quit will cause you to lose any unsaved changes."
|
||||
msgstr ""
|
||||
"Aplikazioa ixtera behartzen baduzu, gorde gabeko aldaketak galdu egingo "
|
||||
"dituzu."
|
||||
@@ -402,7 +407,8 @@ msgstr "Metacity"
|
||||
|
||||
#: ../src/metacity.schemas.in.h:1
|
||||
msgid "(Not implemented) Navigation works in terms of applications not windows"
|
||||
msgstr "(Ez dago inplementatuta) Nabigazioa aplikazioetan egiten da, ez leihoetan"
|
||||
msgstr ""
|
||||
"(Ez dago inplementatuta) Nabigazioa aplikazioetan egiten da, ez leihoetan"
|
||||
|
||||
#: ../src/metacity.schemas.in.h:2
|
||||
msgid ""
|
||||
@@ -520,7 +526,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Egia bada, eta fokuaren modua \"sloppy\" edo \"mouse\" bada, fokua duen "
|
||||
"leihoa automatikoki goratuko da 'auto_raise_key' gakoan zehaztutako "
|
||||
"atzerapena igarotakoan. Honek ez dauka zerikusirik leiho baten klik egitearekin goratzeko, ezta leiho batean sartzearekin arrastatu eta jaregitean."
|
||||
"atzerapena igarotakoan. Honek ez dauka zerikusirik leiho baten klik "
|
||||
"egitearekin goratzeko, ezta leiho batean sartzearekin arrastatu eta "
|
||||
"jaregitean."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:21
|
||||
msgid ""
|
||||
@@ -562,12 +570,13 @@ msgstr ""
|
||||
"Aplikazioan oinarritutako moduan leiho bati fokua ematen diozunean, "
|
||||
"aplikazio horretako leiho guztiak goratuko dira. Gainera, aplikazioan "
|
||||
"oinarritutako moduan, foku-klikak ez dira pasatzen beste aplikazio "
|
||||
"batzuetako leihoetara. Gainera, aplikazioa "
|
||||
"oinarritutako modua ez dago ia batere inplementatuta oraingoz."
|
||||
"batzuetako leihoetara. Gainera, aplikazioa oinarritutako modua ez dago ia "
|
||||
"batere inplementatuta oraingoz."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:24
|
||||
msgid "If true, trade off usability for less resource usage"
|
||||
msgstr "Egia bada, gutxiagotu erabilgarritasuna errekurtso gutxiago erabiltzeko"
|
||||
msgstr ""
|
||||
"Egia bada, gutxiagotu erabilgarritasuna errekurtso gutxiago erabiltzeko"
|
||||
|
||||
#: ../src/metacity.schemas.in.h:25
|
||||
msgid "Lower window below other windows"
|
||||
@@ -589,8 +598,8 @@ msgstr ""
|
||||
"leihoa ez goratzeko. Faltsua balioarekin leihoa goratu ahalko da Alt"
|
||||
"+saguaren-ezker-pultsazioa sakatuz edo klik normal batekin leihoaren "
|
||||
"dekorazioan (suposatzen da horrelako klik-ak ez direla erabiltzen lekuz edo "
|
||||
"tamainaz aldatzeko eragiketak hasteko). "
|
||||
"Unean aukera hau desgaituta dago 'click-to-focus' moduan."
|
||||
"tamainaz aldatzeko eragiketak hasteko). Unean aukera hau desgaituta dago "
|
||||
"'click-to-focus' moduan."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:27
|
||||
msgid "Maximize window"
|
||||
@@ -780,7 +789,12 @@ msgid ""
|
||||
"manager misfeatures. This option puts Metacity in a rigorously correct mode, "
|
||||
"which gives a more consistent user interface, provided one does not need to "
|
||||
"run any misbehaving applications."
|
||||
msgstr "Aplikazio batzuk espezifikazioaei jaramonik ez diete egiten eta leiho-kudeatzailearen funtzionalitatea gutxituz. Aukera honek Metacity era zorrotzean modu zuzenean jartzen du, erabiltzailearen interfazeari sendotasun gehiago emanez, eskainitakoak ez du gaizki portatzen diren aplikazioak exekutatu beharrik."
|
||||
msgstr ""
|
||||
"Aplikazio batzuk espezifikazioaei jaramonik ez diete egiten eta leiho-"
|
||||
"kudeatzailearen funtzionalitatea gutxituz. Aukera honek Metacity era "
|
||||
"zorrotzean modu zuzenean jartzen du, erabiltzailearen interfazeari "
|
||||
"sendotasun gehiago emanez, eskainitakoak ez du gaizki portatzen diren "
|
||||
"aplikazioak exekutatu beharrik."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:72
|
||||
msgid "Switch to workspace 1"
|
||||
@@ -1633,14 +1647,13 @@ msgid ""
|
||||
"\"<Ctrl>\". If you set the option to the special string \"disabled\", "
|
||||
"then there will be no keybinding for this action."
|
||||
msgstr ""
|
||||
"Fokua leihoen artean laster-leihorik gabe aldatzeko laster-teklak. "
|
||||
"Laster-tekla hauekin batera \"maius\" "
|
||||
"sakatuta, mugimenduaren norabidea aldatu egiten da. Formatua \"<"
|
||||
"Kontrol>a\" edo \"<Maius><Alt>F1\" itxurakoa izango da. "
|
||||
"Analizatzailea oso irekia da eta maiuskulak eta minuskulak onartzen ditu, "
|
||||
"eta baita \"<Ktl>\" eta \"<Ktrl>\" moduko laburdurak ere. "
|
||||
"Aukeran \"disabled\" kate berezia ezartzen baduzu, ez da laster-teklarik "
|
||||
"izango ekintza honentzat."
|
||||
"Fokua leihoen artean laster-leihorik gabe aldatzeko laster-teklak. Laster-"
|
||||
"tekla hauekin batera \"maius\" sakatuta, mugimenduaren norabidea aldatu "
|
||||
"egiten da. Formatua \"<Kontrol>a\" edo \"<Maius><Alt>F1\" "
|
||||
"itxurakoa izango da. Analizatzailea oso irekia da eta maiuskulak eta "
|
||||
"minuskulak onartzen ditu, eta baita \"<Ktl>\" eta \"<Ktrl>\" "
|
||||
"moduko laburdurak ere. Aukeran \"disabled\" kate berezia ezartzen baduzu, ez "
|
||||
"da laster-teklarik izango ekintza honentzat."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:144
|
||||
msgid ""
|
||||
@@ -1878,7 +1891,8 @@ msgstr "Pantaila-argazkiaren komandoa"
|
||||
msgid ""
|
||||
"The theme determines the appearance of window borders, titlebar, and so "
|
||||
"forth."
|
||||
msgstr "Gaiak erabakiko du leihoen ertzen, titulu-barren eta horrelakoen itxura."
|
||||
msgstr ""
|
||||
"Gaiak erabakiko du leihoen ertzen, titulu-barren eta horrelakoen itxura."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:161
|
||||
msgid ""
|
||||
@@ -2007,7 +2021,11 @@ msgid ""
|
||||
"focus. It has two possible values; \"smart\" applies the user's normal focus "
|
||||
"mode, and \"strict\" results in windows started from a terminal not being "
|
||||
"given focus."
|
||||
msgstr "Aukera honek leihoak sortu berriek nola lortzen duten fokuaren gaineko kontrol gehiago ematen du. Bi balio izan ditzake: \"smart\" erabiltzailearen foku-modu normala aplikatzen du, eta \"sctrict\" leihoa terminal batetik abiaratzen denean eta fokua lortzen ez duenekoa."
|
||||
msgstr ""
|
||||
"Aukera honek leihoak sortu berriek nola lortzen duten fokuaren gaineko "
|
||||
"kontrol gehiago ematen du. Bi balio izan ditzake: \"smart\" erabiltzailearen "
|
||||
"foku-modu normala aplikatzen du, eta \"sctrict\" leihoa terminal batetik "
|
||||
"abiaratzen denean eta fokua lortzen ez duenekoa."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:171
|
||||
msgid "Toggle always on top state"
|
||||
@@ -2036,8 +2054,8 @@ msgid ""
|
||||
"environments."
|
||||
msgstr ""
|
||||
"Adierazpen bisuala aktibatzen du aplikazio batek edo sistemak soinua "
|
||||
"bidaltzen duenerako; erosoa da entzumen-arazoak dituztenentzat edo "
|
||||
"inguruan zarata handia dagoenerako."
|
||||
"bidaltzen duenerako; erosoa da entzumen-arazoak dituztenentzat edo inguruan "
|
||||
"zarata handia dagoenerako."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:177
|
||||
msgid "Unmaximize window"
|
||||
@@ -2165,7 +2183,8 @@ msgstr ""
|
||||
|
||||
#: ../src/screen.c:443
|
||||
#, c-format
|
||||
msgid "Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr ""
|
||||
"Ezin izan da eskuratu leiho-kudeatzailearen hautapena \"%2$s\" bistaratzeko %"
|
||||
"1$d pantailan\n"
|
||||
@@ -2286,7 +2305,8 @@ msgstr "\"%s\" ezin da analizatu koma mugikorreko zenbaki gisa"
|
||||
#: ../src/theme-parser.c:552
|
||||
#, c-format
|
||||
msgid "Boolean values must be \"true\" or \"false\" not \"%s\""
|
||||
msgstr "Balio boolearrak \"egiazkoak\" edo \"faltsuak\" izan daitezke, ez \"%s\""
|
||||
msgstr ""
|
||||
"Balio boolearrak \"egiazkoak\" edo \"faltsuak\" izan daitezke, ez \"%s\""
|
||||
|
||||
#: ../src/theme-parser.c:572
|
||||
#, c-format
|
||||
@@ -2296,7 +2316,8 @@ msgstr "Angeluak 0.0 eta 360.0 bitartekoa behar du, %g \n"
|
||||
#: ../src/theme-parser.c:638
|
||||
#, c-format
|
||||
msgid "Alpha must be between 0.0 (invisible) and 1.0 (fully opaque), was %g\n"
|
||||
msgstr "Alfak 0.0 (ikusezina) eta 1.0 (erabat opakoa) artekoa izan behar du, %g\n"
|
||||
msgstr ""
|
||||
"Alfak 0.0 (ikusezina) eta 1.0 (erabat opakoa) artekoa izan behar du, %g\n"
|
||||
|
||||
#: ../src/theme-parser.c:684
|
||||
#, c-format
|
||||
@@ -2398,7 +2419,8 @@ msgstr "Ez dago \"value\" atributurik <%s> elementuan"
|
||||
|
||||
#: ../src/theme-parser.c:1320 ../src/theme-parser.c:1334
|
||||
#: ../src/theme-parser.c:1393
|
||||
msgid "Cannot specify both button_width/button_height and aspect ratio for buttons"
|
||||
msgid ""
|
||||
"Cannot specify both button_width/button_height and aspect ratio for buttons"
|
||||
msgstr ""
|
||||
"button_width/button_height eta aspektu-erlazioa ezin dira batera zehaztu "
|
||||
"botoietan"
|
||||
@@ -2577,7 +2599,8 @@ msgstr "Ez da \"%s\" izeneko <draw_ops> bat ere definitu"
|
||||
#: ../src/theme-parser.c:2971 ../src/theme-parser.c:3087
|
||||
#, c-format
|
||||
msgid "Including draw_ops \"%s\" here would create a circular reference"
|
||||
msgstr "Hemen \"%s\" draw_ops sartzen bada, erreferentzia zirkularra sortuko da"
|
||||
msgstr ""
|
||||
"Hemen \"%s\" draw_ops sartzen bada, erreferentzia zirkularra sortuko da"
|
||||
|
||||
#: ../src/theme-parser.c:3150
|
||||
#, c-format
|
||||
@@ -2707,11 +2730,13 @@ msgstr ""
|
||||
#: ../src/theme-parser.c:3656
|
||||
#, c-format
|
||||
msgid "Outermost element in theme must be <metacity_theme> not <%s>"
|
||||
msgstr "Gaian kanporen dagoen elementuak <metacity_theme> izan behar du, ez <%s>"
|
||||
msgstr ""
|
||||
"Gaian kanporen dagoen elementuak <metacity_theme> izan behar du, ez <%s>"
|
||||
|
||||
#: ../src/theme-parser.c:3676
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a name/author/date/description element"
|
||||
msgid ""
|
||||
"Element <%s> is not allowed inside a name/author/date/description element"
|
||||
msgstr "<%s> elementua ez da onartzen izena/egilea/data/azalpena elementuan"
|
||||
|
||||
#: ../src/theme-parser.c:3681
|
||||
@@ -2721,13 +2746,15 @@ msgstr "<%s> elementua ez da onartzen <constant> elementuaren barnean"
|
||||
|
||||
#: ../src/theme-parser.c:3693
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a distance/border/aspect_ratio element"
|
||||
msgid ""
|
||||
"Element <%s> is not allowed inside a distance/border/aspect_ratio element"
|
||||
msgstr "<%s> elementua ez da onartzen distance/border/aspect_ratio elementuan"
|
||||
|
||||
#: ../src/theme-parser.c:3715
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a draw operation element"
|
||||
msgstr "<%s> elementua ez da onartzen marrazteko eragiketaren elementuaren barnean"
|
||||
msgstr ""
|
||||
"<%s> elementua ez da onartzen marrazteko eragiketaren elementuaren barnean"
|
||||
|
||||
#: ../src/theme-parser.c:3725 ../src/theme-parser.c:3755
|
||||
#: ../src/theme-parser.c:3760
|
||||
@@ -2944,7 +2971,8 @@ msgstr ""
|
||||
|
||||
#: ../src/theme-viewer.c:1217
|
||||
msgid "position expression test returned TRUE but set error"
|
||||
msgstr "adierazpenaren kokalekuko probak TRUE itzuli du, baina errore bat ezarri du"
|
||||
msgstr ""
|
||||
"adierazpenaren kokalekuko probak TRUE itzuli du, baina errore bat ezarri du"
|
||||
|
||||
#: ../src/theme-viewer.c:1219
|
||||
msgid "position expression test returned FALSE but didn't set error"
|
||||
@@ -2979,7 +3007,8 @@ msgstr "y balioa %d zen, %d espero zenean"
|
||||
#: ../src/theme-viewer.c:1301
|
||||
#, c-format
|
||||
msgid "%d coordinate expressions parsed in %g seconds (%g seconds average)\n"
|
||||
msgstr "%d koordenada adierazpen analizatua %g segundotan (%g segundo batazbesteko)\n"
|
||||
msgstr ""
|
||||
"%d koordenada adierazpen analizatua %g segundotan (%g segundo batazbesteko)\n"
|
||||
|
||||
#: ../src/theme.c:202
|
||||
msgid "top"
|
||||
@@ -3069,7 +3098,8 @@ msgstr "Kolore nahastuko \"%s\" alfa balioa ez dago 0,0 eta 1,0 artean"
|
||||
|
||||
#: ../src/theme.c:1075
|
||||
#, c-format
|
||||
msgid "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr ""
|
||||
"Itzal-faktorea \"shade/base_color/factor\" da, \"%s\" ez dator bat "
|
||||
"formatuarekin"
|
||||
@@ -3092,7 +3122,8 @@ msgstr "Ezin izan da \"%s\" kolorea analizatu"
|
||||
#: ../src/theme.c:1384
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Koordenatuen adierazpenak '%s' karakterea dauka, eta hori ez da onartzen"
|
||||
msgstr ""
|
||||
"Koordenatuen adierazpenak '%s' karakterea dauka, eta hori ez da onartzen"
|
||||
|
||||
#: ../src/theme.c:1411
|
||||
#, c-format
|
||||
@@ -3106,7 +3137,8 @@ msgstr ""
|
||||
#: ../src/theme.c:1425
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "Koordenatuen adierazpenak '%s' osoko zenbakia dauka, eta ezin da analizatu"
|
||||
msgstr ""
|
||||
"Koordenatuen adierazpenak '%s' osoko zenbakia dauka, eta ezin da analizatu"
|
||||
|
||||
#: ../src/theme.c:1492
|
||||
#, c-format
|
||||
@@ -3126,19 +3158,23 @@ msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Koordenatuen adierazpenak zero zatitzaileko zatiketa ematen du"
|
||||
|
||||
#: ../src/theme.c:1738
|
||||
msgid "Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr ""
|
||||
"Koordenatuen adierazpena mod eragilea erabiltzen saiatzen da koma "
|
||||
"mugikorreko zenbaki batean"
|
||||
|
||||
#: ../src/theme.c:1794
|
||||
#, c-format
|
||||
msgid "Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "Koordenatuen adierazpenak \"%s\" eragilea du eragigai bat espero zen lekuan"
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr ""
|
||||
"Koordenatuen adierazpenak \"%s\" eragilea du eragigai bat espero zen lekuan"
|
||||
|
||||
#: ../src/theme.c:1803
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "Koordenatuen adierazpenak eragigai bat du eragile bat espero zen lekuan"
|
||||
msgstr ""
|
||||
"Koordenatuen adierazpenak eragigai bat du eragile bat espero zen lekuan"
|
||||
|
||||
#: ../src/theme.c:1811
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
@@ -3157,11 +3193,13 @@ msgstr ""
|
||||
|
||||
#: ../src/theme.c:1939
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "Koordenatuen adierazpenaren analizatzaileak bere bufferra gainezkatu du"
|
||||
msgstr ""
|
||||
"Koordenatuen adierazpenaren analizatzaileak bere bufferra gainezkatu du"
|
||||
|
||||
#: ../src/theme.c:1968
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "Koordenatuen adierazpenak ixteko parentesi bat du, baina irekitzekoa falta da"
|
||||
msgstr ""
|
||||
"Koordenatuen adierazpenak ixteko parentesi bat du, baina irekitzekoa falta da"
|
||||
|
||||
#: ../src/theme.c:2030
|
||||
#, c-format
|
||||
@@ -3170,7 +3208,8 @@ msgstr "Koordenatuen adierazpenak \"%s\" aldagai edo konstante ezezaguna du"
|
||||
|
||||
#: ../src/theme.c:2085
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "Koordenatuen adierazpenak irekitzeko parentesi bat du, baina ixtekoa falta da"
|
||||
msgstr ""
|
||||
"Koordenatuen adierazpenak irekitzeko parentesi bat du, baina ixtekoa falta da"
|
||||
|
||||
#: ../src/theme.c:2096
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
@@ -3192,8 +3231,10 @@ msgstr ""
|
||||
|
||||
#: ../src/theme.c:4270 ../src/theme.c:4295
|
||||
#, c-format
|
||||
msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr "<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> falta da"
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> falta da"
|
||||
|
||||
#: ../src/theme.c:4341
|
||||
#, c-format
|
||||
@@ -3226,7 +3267,8 @@ msgstr ""
|
||||
|
||||
#: ../src/theme.c:4911 ../src/theme.c:4973
|
||||
#, c-format
|
||||
msgid "User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
"Erabiltzaileak definitutako konstanteak maiuskulaz hasi behar du; \"%s\" ez "
|
||||
"da maiuskulaz hasten"
|
||||
@@ -3283,7 +3325,7 @@ msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "%2$s(e)n baliogabeko WM_TRANSIENT_FOR 0x%1$lx leihoa zehaztu da.\n"
|
||||
|
||||
#. first time through
|
||||
#: ../src/window.c:5217
|
||||
#: ../src/window.c:5248
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -3299,7 +3341,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/window.c:5813
|
||||
#: ../src/window.c:5844
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -3331,8 +3373,8 @@ msgstr "0x%2$lx leihoko %1$s propietateak UTF-8 baliogabea du\n"
|
||||
|
||||
#: ../src/xprops.c:482
|
||||
#, c-format
|
||||
msgid "Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n"
|
||||
msgid ""
|
||||
"Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n"
|
||||
msgstr ""
|
||||
"0x%2$lx leihoko %1$s propietateak UTF-8 baliogabea du zerrendako %3$d. "
|
||||
"elementuan\n"
|
||||
|
||||
|
173
po/gu.po
173
po/gu.po
@@ -4,8 +4,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.HEAD.gu\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-04-20 06:45+0200\n"
|
||||
"PO-Revision-Date: 2006-04-20 13:00+0530\n"
|
||||
"POT-Creation-Date: 2006-09-13 00:49+0200\n"
|
||||
"PO-Revision-Date: 2006-09-13 11:27+0530\n"
|
||||
"Last-Translator: Ankit Patel <ankit644@yahoo.com>\n"
|
||||
"Language-Team: Gujarati <indianoss-gujarati@lists.sourceforge.net>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -19,6 +19,7 @@ msgstr ""
|
||||
"\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"\n"
|
||||
|
||||
#: ../src/tools/metacity-message.c:150
|
||||
#, c-format
|
||||
@@ -29,13 +30,13 @@ msgstr "વપરાશ: %s\n"
|
||||
msgid "Metacity was compiled without support for verbose mode\n"
|
||||
msgstr "મેટાસીટીને વર્ણનિય પદ્ધતિના આધાર વગર કમ્પાઈલ કરાયુ હતુ\n"
|
||||
|
||||
#: ../src/delete.c:64 ../src/delete.c:91 ../src/metacity-dialog.c:71
|
||||
#: ../src/delete.c:64 ../src/delete.c:91 ../src/metacity-dialog.c:48
|
||||
#: ../src/theme-parser.c:467
|
||||
#, c-format
|
||||
msgid "Could not parse \"%s\" as an integer"
|
||||
msgstr "\"%s\" ને પૂર્ણાંક તરીકે પદચ્છેદ કરી શકાયુ નહિ"
|
||||
|
||||
#: ../src/delete.c:71 ../src/delete.c:98 ../src/metacity-dialog.c:78
|
||||
#: ../src/delete.c:71 ../src/delete.c:98 ../src/metacity-dialog.c:55
|
||||
#: ../src/theme-parser.c:476 ../src/theme-parser.c:530
|
||||
#, c-format
|
||||
msgid "Did not understand trailing characters \"%s\" in string \"%s\""
|
||||
@@ -61,7 +62,7 @@ msgstr "કાર્યક્રમને મૃત કરવા માટે
|
||||
msgid "Failed to get hostname: %s\n"
|
||||
msgstr "યજમાનનું નામ મેળવવામાં નિષ્ફળ: %s\n"
|
||||
|
||||
#: ../src/display.c:354
|
||||
#: ../src/display.c:344
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "X વિન્ડો સિસ્ટમ ડિસ્પ્લે '%s' ને ખોલવામાં નિષ્ફળ\n"
|
||||
@@ -82,48 +83,48 @@ msgstr ""
|
||||
msgid "Fatal IO error %d (%s) on display '%s'.\n"
|
||||
msgstr "ઘાતક IO ભૂલ %d (%s) %s ડિસ્પ્લે પર.\n"
|
||||
|
||||
#: ../src/frames.c:1086
|
||||
#: ../src/frames.c:1089
|
||||
msgid "Close Window"
|
||||
msgstr "વિન્ડો બંધ કરો"
|
||||
|
||||
#: ../src/frames.c:1089
|
||||
#: ../src/frames.c:1092
|
||||
msgid "Window Menu"
|
||||
msgstr "વિન્ડોનું મેનુ"
|
||||
|
||||
#: ../src/frames.c:1092
|
||||
#: ../src/frames.c:1095
|
||||
msgid "Minimize Window"
|
||||
msgstr "વિન્ડોને ન્યૂનત્તમ સ્થિતિમાં લાવો"
|
||||
|
||||
#: ../src/frames.c:1095
|
||||
#: ../src/frames.c:1098
|
||||
msgid "Maximize Window"
|
||||
msgstr "વિન્ડોને મહત્તમ સ્થિતિમાં લાવો"
|
||||
|
||||
#: ../src/frames.c:1098
|
||||
#: ../src/frames.c:1101
|
||||
msgid "Unmaximize Window"
|
||||
msgstr "વિન્ડોને મહત્તમ સ્થિતિમાંથી પાછી લાવો"
|
||||
|
||||
#: ../src/keybindings.c:1021
|
||||
#: ../src/keybindings.c:1031
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
"binding\n"
|
||||
msgstr "કોઈ બીજો કાર્યક્રમ પહેલેથીજ કી %s ને બદલનાર %x સાથે જોડાણ તરીકે વાપરી રહ્યુ છે\n"
|
||||
|
||||
#: ../src/keybindings.c:2588
|
||||
#: ../src/keybindings.c:2663
|
||||
#, c-format
|
||||
msgid "Error launching metacity-dialog to print an error about a command: %s\n"
|
||||
msgstr "આદેશ વિશેની ભૂલ છાપવા માટે મેટાસીટી-સંવાદને શરુ કરવામાં ભૂલ: %s\n"
|
||||
|
||||
#: ../src/keybindings.c:2693
|
||||
#: ../src/keybindings.c:2768
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "કોઈ આદેશ %d વ્યાખ્યાયિત કરાયો નથી.\n"
|
||||
|
||||
#: ../src/keybindings.c:3559
|
||||
#: ../src/keybindings.c:3635
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "કોઈ ટર્મિનલ આદેશ વ્યાખ્યાયિત નથી.\n"
|
||||
|
||||
#: ../src/main.c:70
|
||||
#: ../src/main.c:65
|
||||
#, c-format
|
||||
msgid ""
|
||||
"metacity %s\n"
|
||||
@@ -138,48 +139,48 @@ msgstr ""
|
||||
"એની કોઈ બાંયધરી નથી; વ્યાપારીપણાં માટે પણ નહિં કે પછી ચોક્કસ ઉદ્દેશની વ્યવસ્થા માટે પણ "
|
||||
"નહિં.\n"
|
||||
|
||||
#: ../src/main.c:258
|
||||
#: ../src/main.c:169
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "સત્ર વ્યવસ્થાપકનું જોડાણ નિષ્ક્રિય કરો"
|
||||
|
||||
#: ../src/main.c:264
|
||||
#: ../src/main.c:175
|
||||
msgid "Replace the running window manager with Metacity"
|
||||
msgstr "ચાલી રહેલ વિન્ડો વ્યવસ્થાપક મેટાસીટી વડે બદલો"
|
||||
|
||||
#: ../src/main.c:270
|
||||
#: ../src/main.c:181
|
||||
msgid "Specify session management ID"
|
||||
msgstr "સત્ર વ્યવસ્થાપન ID સ્પષ્ટ કરો"
|
||||
|
||||
#: ../src/main.c:275
|
||||
#: ../src/main.c:186
|
||||
msgid "X Display to use"
|
||||
msgstr "વાપરવા માટેનું X ડિસ્પ્લે"
|
||||
|
||||
#: ../src/main.c:281
|
||||
#: ../src/main.c:192
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "સંગ્રહાયેલ ફાઈલમાંથી સત્રનો પ્રારંભ કરો"
|
||||
|
||||
#: ../src/main.c:287
|
||||
#: ../src/main.c:198
|
||||
msgid "Print version"
|
||||
msgstr "છાપન આવૃત્તિ"
|
||||
|
||||
#: ../src/main.c:439
|
||||
#: ../src/main.c:350
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "થીમની ડિરેક્ટરી જોવામાં નિષ્ફળ: %s\n"
|
||||
|
||||
#: ../src/main.c:455
|
||||
#: ../src/main.c:366
|
||||
#, c-format
|
||||
msgid "Could not find a theme! Be sure %s exists and contains the usual themes."
|
||||
msgstr "થીમ શોધી શકાઈ નહિં! ખાતરી કરો કે %s અસ્તિત્વ ધરાવે છે અને તેમાં સામાન્ય થીમ છે."
|
||||
|
||||
#: ../src/main.c:527
|
||||
#: ../src/main.c:424
|
||||
#, c-format
|
||||
msgid "Failed to restart: %s\n"
|
||||
msgstr "ફરીથી શરુ કરવામાં નિષ્ફળ: %s\n"
|
||||
|
||||
#: ../src/menu.c:55
|
||||
msgid "Mi_nimize"
|
||||
msgstr "ન્યૂનત્તમ કરો (_N)"
|
||||
msgstr "ન્યૂનત્તમ કરો (_n)"
|
||||
|
||||
#: ../src/menu.c:56
|
||||
msgid "Ma_ximize"
|
||||
@@ -187,7 +188,7 @@ msgstr "મહત્તમ કરો (_x)"
|
||||
|
||||
#: ../src/menu.c:57
|
||||
msgid "Unma_ximize"
|
||||
msgstr "મહત્તમમાંથી પાછા ફરો (_x)"
|
||||
msgstr "મહત્તમમાંથી પાછુ લાવો (_x)"
|
||||
|
||||
#: ../src/menu.c:58
|
||||
msgid "Roll _Up"
|
||||
@@ -199,11 +200,11 @@ msgstr "ખોલી કાઢો (_U)"
|
||||
|
||||
#: ../src/menu.c:60 ../src/menu.c:61
|
||||
msgid "On _Top"
|
||||
msgstr "ઉપરની બાજુએ (_T)"
|
||||
msgstr "ટોચ પર (_T)"
|
||||
|
||||
#: ../src/menu.c:62
|
||||
msgid "_Move"
|
||||
msgstr "ખસાડો (_M)"
|
||||
msgstr "ખસેડો (_M)"
|
||||
|
||||
#: ../src/menu.c:63
|
||||
msgid "_Resize"
|
||||
@@ -225,25 +226,25 @@ msgstr "હંમેશા દ્રશ્ય કામ કરવાની જ
|
||||
|
||||
#: ../src/menu.c:69
|
||||
msgid "_Only on This Workspace"
|
||||
msgstr "માત્ર આ કામ કરવાની જગ્યા પર જ (_O)"
|
||||
msgstr "માત્ર આ કામ કરવાની જગ્યા પર (_O)"
|
||||
|
||||
#: ../src/menu.c:70
|
||||
msgid "Move to Workspace _Left"
|
||||
msgstr "કામ કરવાની જગ્યાને ડાબે ખસેડો (_L)"
|
||||
msgstr "ડાબી કામ કરવાની જગ્યામાં ખસો (_L)"
|
||||
|
||||
#: ../src/menu.c:71
|
||||
msgid "Move to Workspace R_ight"
|
||||
msgstr "કામ કરવાની જગ્યાને જમણે ખસેડો (_i)"
|
||||
msgstr "જમણી કામ કરવાની જગ્યામાં ખસો (_i)"
|
||||
|
||||
#: ../src/menu.c:72
|
||||
msgid "Move to Workspace _Up"
|
||||
msgstr "કામ કરવાની જગ્યાને ઉપર ખસેડો (_U)"
|
||||
msgstr "ઉપરની કામ કરવાની જગ્યામાં ખસો (_U)"
|
||||
|
||||
#: ../src/menu.c:73
|
||||
msgid "Move to Workspace _Down"
|
||||
msgstr "કામ કરવાની જગ્યાને ડાબે ખસેડો (_D)"
|
||||
msgstr "ઉપરની કામ કરવાની જગ્યામાં ખસો (_D)"
|
||||
|
||||
#: ../src/menu.c:164 ../src/prefs.c:2142 ../src/prefs.c:2669
|
||||
#: ../src/menu.c:164 ../src/prefs.c:2142 ../src/prefs.c:2677
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "કામ કરવાની જગ્યા %d"
|
||||
@@ -351,31 +352,31 @@ msgstr "Mod4"
|
||||
msgid "Mod5"
|
||||
msgstr "Mod5"
|
||||
|
||||
#: ../src/metacity-dialog.c:111
|
||||
#: ../src/metacity-dialog.c:88
|
||||
#, c-format
|
||||
msgid "The window \"%s\" is not responding."
|
||||
msgstr "વિન્ડો \"%s\" જવાબ આપી રહ્યું નથી."
|
||||
|
||||
#: ../src/metacity-dialog.c:119
|
||||
#: ../src/metacity-dialog.c:96
|
||||
msgid "Forcing this application to quit will cause you to lose any unsaved changes."
|
||||
msgstr "આ કાર્યક્રમને જબરદસ્તી બંધ કરવાથી કોઈપણ અસંગ્રહિત બદલાવો ખોરવાઈ જશે."
|
||||
|
||||
#: ../src/metacity-dialog.c:130
|
||||
#: ../src/metacity-dialog.c:107
|
||||
msgid "_Force Quit"
|
||||
msgstr "જબરદસ્તી બહાર કાઢો (_F)"
|
||||
|
||||
# #-#-#-#-# libgnomeui.HEAD.hi.po (libgnomeui-2.0.hi) #-#-#-#-#
|
||||
# libgnomeui/gnome-druid-page-standard.c:121
|
||||
# libgnomeui/gnome-font-picker.c:155
|
||||
#: ../src/metacity-dialog.c:227
|
||||
#: ../src/metacity-dialog.c:204
|
||||
msgid "Title"
|
||||
msgstr "શીર્ષક"
|
||||
|
||||
#: ../src/metacity-dialog.c:239
|
||||
#: ../src/metacity-dialog.c:216
|
||||
msgid "Class"
|
||||
msgstr "વર્ગ"
|
||||
|
||||
#: ../src/metacity-dialog.c:265
|
||||
#: ../src/metacity-dialog.c:242
|
||||
msgid ""
|
||||
"These windows do not support \"save current setup\" and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@@ -383,7 +384,7 @@ msgstr ""
|
||||
"આ બધી વિન્ડો \"વર્તમાન સુયોજનનો સંગ્રહ કરો\" ને આધાર આપતી નથી અને બીજી વખત તમે પ્રવેશ "
|
||||
"કરો ત્યારે જાતે જ ફરી શરુ કરવું પડશે."
|
||||
|
||||
#: ../src/metacity-dialog.c:331
|
||||
#: ../src/metacity-dialog.c:308
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running \"%s\":\n"
|
||||
@@ -2078,19 +2079,19 @@ msgstr "%d એ જીકોન્ફ કી %s માં સંગ્રહિ
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "કામ કરવાની જગ્યાની સંખ્યા %d નક્કી કરવામાં ભૂલ થઈ: %s\n"
|
||||
|
||||
#: ../src/prefs.c:2170 ../src/prefs.c:2335
|
||||
#: ../src/prefs.c:2172 ../src/prefs.c:2342
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
"\"%s\"\n"
|
||||
msgstr "કી જોડાણ \"%s\" માટે રુપરેખાના ડેટાબેઝ \"%s\" માં મળેલ કિંમત યોગ્ય નથી\n"
|
||||
|
||||
#: ../src/prefs.c:2750
|
||||
#: ../src/prefs.c:2758
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "કામ કરવાની જગ્યા %d ને \"%s\" નું નામ બદલવામાં ભૂલ થઈ: %s\n"
|
||||
|
||||
#: ../src/resizepopup.c:123
|
||||
#: ../src/resizepopup.c:111
|
||||
#, c-format
|
||||
msgid "%d x %d"
|
||||
msgstr "%d x %d"
|
||||
@@ -2952,11 +2953,11 @@ msgstr "બટન માટે ધારેલુ પ્રમાણ %g એ વ
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "ચોકઠાની ભૂમિતિ બટનોનું માપ સ્પષ્ટ કરતી નથી"
|
||||
|
||||
#: ../src/theme.c:813
|
||||
#: ../src/theme.c:847
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "ઢાળમાં ઓછામાં ઓછા બે રંગ હોવા જોઈએ"
|
||||
|
||||
#: ../src/theme.c:939
|
||||
#: ../src/theme.c:973
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -2965,7 +2966,7 @@ msgstr ""
|
||||
"GTK રંગના સ્પષ્ટીકરણમાં કૌંસમાં સ્થિતિ હોવી જોઈએ દા.ત. gtk:fg[NORMAL] જ્યાં NORMAL "
|
||||
"સ્થિતિ છે; \"%s\" નો પદચ્છેદ કરી શકાય નહિં"
|
||||
|
||||
#: ../src/theme.c:953
|
||||
#: ../src/theme.c:987
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -2974,136 +2975,136 @@ msgstr ""
|
||||
"GTK રંગના સ્પષ્ટીકરણમાં સ્થિતિ પછી કૌંસ બંધ થવો જોઈએ દા.ત. gtk:fg[NORMAL] જ્યાં "
|
||||
"NORMAL સ્થિતિ છે; \"%s\" નો પદચ્છેદ કરી શકાય નહિં"
|
||||
|
||||
#: ../src/theme.c:964
|
||||
#: ../src/theme.c:998
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "રંગના સ્પષ્ટીકરણમાં સ્થિતિ \"%s\" સમજી શકાઈ નહિં"
|
||||
|
||||
#: ../src/theme.c:977
|
||||
#: ../src/theme.c:1011
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "રંગના સ્પષ્ટીકરણમાં રંગની વસ્તુ \"%s\" સમજી શકાયો નહિં"
|
||||
|
||||
#: ../src/theme.c:1007
|
||||
#: ../src/theme.c:1041
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
"format"
|
||||
msgstr "\"blend/bg_color/fg_color/alpha\" એ મિશ્રિત માળખું છે, \"%s\" માળખામાં બેસતું નથી "
|
||||
|
||||
#: ../src/theme.c:1018
|
||||
#: ../src/theme.c:1052
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "મિશ્રિત રંગમાં આલ્ફાની કિંમત \"%s\" નું પદચ્છેદ કરી શકાતુ નથી"
|
||||
|
||||
#: ../src/theme.c:1028
|
||||
#: ../src/theme.c:1062
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "મિશ્રિત રંગમાં આલ્ફાની કિંમત \"%s\" ૦.૦ અને ૧.૦ ની વચ્ચે નથી"
|
||||
|
||||
#: ../src/theme.c:1075
|
||||
#: ../src/theme.c:1109
|
||||
#, c-format
|
||||
msgid "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "છાયાનું માળખું \"shade/base_color/factor\" છે, \"%s\" માળખામાં બેસતુ નથી"
|
||||
|
||||
#: ../src/theme.c:1086
|
||||
#: ../src/theme.c:1120
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "છાયાંકિત રંગમાં છાયાનો અવયવ \"%s\" નું પદચ્છેદ કરી શકાતુ નથી"
|
||||
|
||||
#: ../src/theme.c:1096
|
||||
#: ../src/theme.c:1130
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "છાયાનો અવયવ \"%s\" છાયાના રંગમાં ઋણ છે"
|
||||
|
||||
#: ../src/theme.c:1125
|
||||
#: ../src/theme.c:1159
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "રંગ \"%s\" નુ પદચ્છેદ કરી શકાતુ નથી"
|
||||
|
||||
#: ../src/theme.c:1384
|
||||
#: ../src/theme.c:1418
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "યામાક્ષ સમીકરણ અક્ષર '%s' ધરાવે છે જે સ્વીકાર્ય નથી"
|
||||
|
||||
#: ../src/theme.c:1411
|
||||
#: ../src/theme.c:1445
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "યામાક્ષ સમીકરણ અપૂર્ણાંક સંખ્યા '%s' ધરાવે છે જેનું પદચ્છેદ કરી શકાતું નથી"
|
||||
|
||||
#: ../src/theme.c:1425
|
||||
#: ../src/theme.c:1459
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "યામાક્ષ સમીકરણ પૂર્ણાંક સંખ્યા '%s' ધરાવે છે જેનું પદચ્છેદ કરી શકાતું નથી"
|
||||
|
||||
#: ../src/theme.c:1492
|
||||
#: ../src/theme.c:1526
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr "યામાક્ષ સમીકરણમાં આ લખાણની શરુઆતમાં અજાણ્યા કારકો ધરાવે છે: \"%s\""
|
||||
|
||||
#: ../src/theme.c:1549
|
||||
#: ../src/theme.c:1583
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "યામાક્ષ સમીકરણ ખાલી છે અથવા સમજી શકાય એવું નથી"
|
||||
|
||||
#: ../src/theme.c:1686 ../src/theme.c:1696 ../src/theme.c:1730
|
||||
#: ../src/theme.c:1720 ../src/theme.c:1730 ../src/theme.c:1764
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "યામાક્ષ સમીકરણ શૂન્ય વડે ભાગાકારમાં પરિણમશે"
|
||||
|
||||
#: ../src/theme.c:1738
|
||||
#: ../src/theme.c:1772
|
||||
msgid "Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "યામાક્ષ સમીકરણ અપૂર્ણાંક સંખ્યાની ઉપર શેષ કારકનો ઉપયોગ કરવાનો પ્રયત્ન કરે છે"
|
||||
|
||||
#: ../src/theme.c:1794
|
||||
#: ../src/theme.c:1828
|
||||
#, c-format
|
||||
msgid "Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "યામાક્ષ સમીકરણ માટે \"%s\" કારક છે જેના માટે ઓપરન્ડ હોવા જોઈએ"
|
||||
|
||||
#: ../src/theme.c:1803
|
||||
#: ../src/theme.c:1837
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "યામાક્ષ સમીકરણમાં ઓપરન્ડ છે જ્યાં કારક હોવુ જોઈતું હતું"
|
||||
|
||||
#: ../src/theme.c:1811
|
||||
#: ../src/theme.c:1845
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "યામાક્ષ સમીકરણનો અંત ઓપરન્ડની જગ્યાએ કારકથી થાય છે"
|
||||
|
||||
#: ../src/theme.c:1821
|
||||
#: ../src/theme.c:1855
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
"operand in between"
|
||||
msgstr "યામાક્ષ સમીકરણમાં \"%c\" કારક પછી તરત જ \"%c\" કારક છે જેમની વચ્ચે કોઈ ઓપરન્ડ નથી"
|
||||
|
||||
#: ../src/theme.c:1939
|
||||
#: ../src/theme.c:1973
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "યામાક્ષ સમીકરણ પદચ્છેદકે તેનું બફર ઓવરફ્લો કરી નાંખ્યું."
|
||||
|
||||
#: ../src/theme.c:1968
|
||||
#: ../src/theme.c:2002
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "યામાક્ષ સમીકરણ પાસે ખુલ્લા કૌંસની વગર જ બંધ કૌંસ છે"
|
||||
|
||||
#: ../src/theme.c:2030
|
||||
#: ../src/theme.c:2064
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "યામાક્ષ સમીકરણમાં અજાણ્યો ચલ કે અચલ \"%s\" છે"
|
||||
|
||||
#: ../src/theme.c:2085
|
||||
#: ../src/theme.c:2119
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "યામાક્ષ સમીકરણ પાસે બંધ કૌંસની વગર જ ખુલ્લો કૌંસ હતો"
|
||||
|
||||
#: ../src/theme.c:2096
|
||||
#: ../src/theme.c:2130
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "યામાક્ષ સમીકરણમાં કોઈ કારક કે ઓપરન્ડ હોય તેવુ લાગતુ નથી"
|
||||
|
||||
#: ../src/theme.c:2337 ../src/theme.c:2359 ../src/theme.c:2380
|
||||
#: ../src/theme.c:2371 ../src/theme.c:2393 ../src/theme.c:2414
|
||||
#, c-format
|
||||
msgid "Theme contained an expression \"%s\" that resulted in an error: %s\n"
|
||||
msgstr "થીમ \"%s\" સમીકરણ ધરાવે છે જેના પરિણામે ભૂલ થઈ: %s\n"
|
||||
|
||||
#: ../src/theme.c:3826
|
||||
#: ../src/theme.c:3860
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -3112,23 +3113,23 @@ msgstr ""
|
||||
"આ માળખાની શૈલી માટે <button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/"
|
||||
"> સ્પષ્ટ કરેલી હોવી જરુરી છે"
|
||||
|
||||
#: ../src/theme.c:4270 ../src/theme.c:4295
|
||||
#: ../src/theme.c:4304 ../src/theme.c:4329
|
||||
#, c-format
|
||||
msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr "<frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/> ખોવાય છે"
|
||||
|
||||
#: ../src/theme.c:4341
|
||||
#: ../src/theme.c:4375
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "થીમ \"%s\" લાવવામાં નિષ્ફળ: %s\n"
|
||||
|
||||
#: ../src/theme.c:4481 ../src/theme.c:4488 ../src/theme.c:4495
|
||||
#: ../src/theme.c:4502 ../src/theme.c:4509
|
||||
#: ../src/theme.c:4515 ../src/theme.c:4522 ../src/theme.c:4529
|
||||
#: ../src/theme.c:4536 ../src/theme.c:4543
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "કોઈ <%s> ગોઠવણ થીમ \"%s\" માટે નથી"
|
||||
|
||||
#: ../src/theme.c:4517
|
||||
#: ../src/theme.c:4551
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -3137,7 +3138,7 @@ msgstr ""
|
||||
"થીમ \"%s\" માં વિન્ડોના પ્રકાર \"%s\" માટે કોઈ માળખાની શૈલી ગોઠવાયેલી નથી, <window "
|
||||
"type=\"%s\" style_set=\"whatever\"/> વસ્તુ ઊમેરો"
|
||||
|
||||
#: ../src/theme.c:4531
|
||||
#: ../src/theme.c:4565
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<menu_icon function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -3146,12 +3147,12 @@ msgstr ""
|
||||
"આ થીમ માટે <menu_icon function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> "
|
||||
"સ્પષ્ટ કરેલુ હોવુ જોઈએ"
|
||||
|
||||
#: ../src/theme.c:4911 ../src/theme.c:4973
|
||||
#: ../src/theme.c:4945 ../src/theme.c:5007
|
||||
#, c-format
|
||||
msgid "User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr "વપરાશકર્તા દ્વારા વ્યાખ્યાયિત અચલો મોટા અક્ષરથી જ શરુ થવા જોઈએ; \"%s\" નહિં"
|
||||
|
||||
#: ../src/theme.c:4919 ../src/theme.c:4981
|
||||
#: ../src/theme.c:4953 ../src/theme.c:5015
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "અચલ \"%s\" પહેલેથી જ વ્યાખ્યાયિત છે"
|
||||
@@ -3192,18 +3193,18 @@ msgstr "વિન્ડો વ્યવસ્થાપકની ભૂલ: "
|
||||
msgid "Application set a bogus _NET_WM_PID %lu\n"
|
||||
msgstr "કાર્યક્રમ એ ખોટું _NET_WM_PID %lu સુયોજિત કર્યું છે\n"
|
||||
|
||||
#: ../src/window-props.c:233
|
||||
#: ../src/window-props.c:237
|
||||
#, c-format
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (%s પર)"
|
||||
|
||||
#: ../src/window-props.c:1139
|
||||
#: ../src/window-props.c:1177
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "અયોગ્ય WM_TRANSIENT_FOR વિન્ડો 0x%lx એ %s માટે સ્પષ્ટ થયેલ છે.\n"
|
||||
|
||||
#. first time through
|
||||
#: ../src/window.c:5227
|
||||
#: ../src/window.c:5288
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -3219,7 +3220,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/window.c:5823
|
||||
#: ../src/window.c:5884
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
|
282
po/hi.po
282
po/hi.po
@@ -10,7 +10,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity.HEAD.hi\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-06-28 00:06+0200\n"
|
||||
"POT-Creation-Date: 2006-09-13 07:50+0200\n"
|
||||
"PO-Revision-Date: 2006-06-28 11:02+0530\n"
|
||||
"Last-Translator: Rajesh Ranjan <rranjan@redhat.com>\n"
|
||||
"Language-Team: Hindi <fedora-trans-hi@redhat.com>\n"
|
||||
@@ -18,7 +18,8 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: KBabel 1.9.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"\n"
|
||||
@@ -35,13 +36,13 @@ msgstr "उपयोग: %s\n"
|
||||
msgid "Metacity was compiled without support for verbose mode\n"
|
||||
msgstr "मेटासिटी को वाचाल विधि के बगैर कम्पाइल किया गया है\n"
|
||||
|
||||
#: ../src/delete.c:64 ../src/delete.c:91 ../src/metacity-dialog.c:71
|
||||
#: ../src/delete.c:64 ../src/delete.c:91 ../src/metacity-dialog.c:48
|
||||
#: ../src/theme-parser.c:467
|
||||
#, c-format
|
||||
msgid "Could not parse \"%s\" as an integer"
|
||||
msgstr "\"%s\" को पूर्णांक की तरह व्याख्या नहीं कर सका"
|
||||
|
||||
#: ../src/delete.c:71 ../src/delete.c:98 ../src/metacity-dialog.c:78
|
||||
#: ../src/delete.c:71 ../src/delete.c:98 ../src/metacity-dialog.c:55
|
||||
#: ../src/theme-parser.c:476 ../src/theme-parser.c:530
|
||||
#, c-format
|
||||
msgid "Did not understand trailing characters \"%s\" in string \"%s\""
|
||||
@@ -59,8 +60,10 @@ msgstr "संवाद प्रदर्शक प्रक्रिया: %s
|
||||
|
||||
#: ../src/delete.c:345
|
||||
#, c-format
|
||||
msgid "Error launching metacity-dialog to ask about killing an application: %s\n"
|
||||
msgstr "किसी अनुप्रयोग को खत्म करने के लिए पूछने हेतु मेटासिटी-संवाद प्रारंभ करने में त्रुटि: %s\n"
|
||||
msgid ""
|
||||
"Error launching metacity-dialog to ask about killing an application: %s\n"
|
||||
msgstr ""
|
||||
"किसी अनुप्रयोग को खत्म करने के लिए पूछने हेतु मेटासिटी-संवाद प्रारंभ करने में त्रुटि: %s\n"
|
||||
|
||||
#: ../src/delete.c:453
|
||||
#, c-format
|
||||
@@ -88,44 +91,45 @@ msgstr ""
|
||||
msgid "Fatal IO error %d (%s) on display '%s'.\n"
|
||||
msgstr "गंभीर आईओ त्रुटि %d (%s), प्रदर्शक '%s' में.\n"
|
||||
|
||||
#: ../src/frames.c:1086
|
||||
#: ../src/frames.c:1089
|
||||
msgid "Close Window"
|
||||
msgstr "विंडो बंद करें"
|
||||
|
||||
#: ../src/frames.c:1089
|
||||
#: ../src/frames.c:1092
|
||||
msgid "Window Menu"
|
||||
msgstr "विंडो मेनू"
|
||||
|
||||
#: ../src/frames.c:1092
|
||||
#: ../src/frames.c:1095
|
||||
msgid "Minimize Window"
|
||||
msgstr "विंडो न्यूनतम करें"
|
||||
|
||||
#: ../src/frames.c:1095
|
||||
#: ../src/frames.c:1098
|
||||
msgid "Maximize Window"
|
||||
msgstr "विंडो अधिकतम करें"
|
||||
|
||||
#: ../src/frames.c:1098
|
||||
#: ../src/frames.c:1101
|
||||
msgid "Unmaximize Window"
|
||||
msgstr "विंडो अधिकतम खत्म करें"
|
||||
|
||||
#: ../src/keybindings.c:1021
|
||||
#: ../src/keybindings.c:1031
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
"binding\n"
|
||||
msgstr "कोई अन्य प्रोग्राम पहले से ही कुंजी %s उपयोग में ले रहा है, परिवर्धक %x बाइंडिंग के रूप में \n"
|
||||
msgstr ""
|
||||
"कोई अन्य प्रोग्राम पहले से ही कुंजी %s उपयोग में ले रहा है, परिवर्धक %x बाइंडिंग के रूप में \n"
|
||||
|
||||
#: ../src/keybindings.c:2588
|
||||
#: ../src/keybindings.c:2663
|
||||
#, c-format
|
||||
msgid "Error launching metacity-dialog to print an error about a command: %s\n"
|
||||
msgstr "कमांड: %s हेतु हुई त्रुटि मुद्रण हेतु मेटासिटी-संवाद प्रारंभ करने में त्रुटि हुई\n"
|
||||
|
||||
#: ../src/keybindings.c:2693
|
||||
#: ../src/keybindings.c:2768
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "कोई कमांड %d पारिभाषित नहीं है.\n"
|
||||
|
||||
#: ../src/keybindings.c:3559
|
||||
#: ../src/keybindings.c:3635
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "कोई टर्मिनल कमांड पारिभाषित नहीं है.\n"
|
||||
|
||||
@@ -175,7 +179,8 @@ msgstr "प्रसंग डिरेक्ट्री स्कैन कर
|
||||
|
||||
#: ../src/main.c:366
|
||||
#, c-format
|
||||
msgid "Could not find a theme! Be sure %s exists and contains the usual themes."
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes."
|
||||
msgstr "प्रसंग नहीं ढूंढ सका! सुनिश्चित हों कि %s मौज़ूद है, तथा इसमें सामान्य प्रसंग हैं."
|
||||
|
||||
#: ../src/main.c:424
|
||||
@@ -193,7 +198,7 @@ msgstr "अधिकतम (_x)"
|
||||
|
||||
#: ../src/menu.c:57
|
||||
msgid "Unma_ximize"
|
||||
msgstr "अधिकतम खत्म करें (_x)"
|
||||
msgstr "बड़े से छोटा करें (_x)"
|
||||
|
||||
#: ../src/menu.c:58
|
||||
msgid "Roll _Up"
|
||||
@@ -250,7 +255,7 @@ msgstr "ऊपर कार्यस्थान में ले जाएँ (
|
||||
msgid "Move to Workspace _Down"
|
||||
msgstr "नीचे कार्यस्थान में ले जाएँ (_D)"
|
||||
|
||||
#: ../src/menu.c:164 ../src/prefs.c:2142 ../src/prefs.c:2669
|
||||
#: ../src/menu.c:164 ../src/prefs.c:2142 ../src/prefs.c:2677
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "कार्यस्थान %d"
|
||||
@@ -394,31 +399,32 @@ msgstr "परि.4"
|
||||
msgid "Mod5"
|
||||
msgstr "परि.5"
|
||||
|
||||
#: ../src/metacity-dialog.c:111
|
||||
#: ../src/metacity-dialog.c:88
|
||||
#, c-format
|
||||
msgid "The window \"%s\" is not responding."
|
||||
msgstr "विंडो \"%s\" कोई प्रतिक्रिया नही दे रहा है."
|
||||
|
||||
#: ../src/metacity-dialog.c:119
|
||||
msgid "Forcing this application to quit will cause you to lose any unsaved changes."
|
||||
#: ../src/metacity-dialog.c:96
|
||||
msgid ""
|
||||
"Forcing this application to quit will cause you to lose any unsaved changes."
|
||||
msgstr "इस अनुप्रयोग को जबरदस्ती बन्द करने पर आप अपने सहेजे नहीं गए परिवर्तनों को खो देंगे"
|
||||
|
||||
#: ../src/metacity-dialog.c:130
|
||||
#: ../src/metacity-dialog.c:107
|
||||
msgid "_Force Quit"
|
||||
msgstr "जबर्दस्ती बाहर (_F)"
|
||||
|
||||
# #-#-#-#-# libgnomeui.HEAD.hi.po (libgnomeui-2.0.hi) #-#-#-#-#
|
||||
# libgnomeui/gnome-druid-page-standard.c:121
|
||||
# libgnomeui/gnome-font-picker.c:155
|
||||
#: ../src/metacity-dialog.c:227
|
||||
#: ../src/metacity-dialog.c:204
|
||||
msgid "Title"
|
||||
msgstr "शीर्षक"
|
||||
|
||||
#: ../src/metacity-dialog.c:239
|
||||
#: ../src/metacity-dialog.c:216
|
||||
msgid "Class"
|
||||
msgstr "वर्ग"
|
||||
|
||||
#: ../src/metacity-dialog.c:265
|
||||
#: ../src/metacity-dialog.c:242
|
||||
msgid ""
|
||||
"These windows do not support \"save current setup\" and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@@ -426,7 +432,7 @@ msgstr ""
|
||||
"ये विंडो \"वर्तमान सेटअप सहेजें\" समर्थन नहीं करते अतः इन्हें अगली बार जब आप लॉगइन करेंगे तब "
|
||||
"पुनः प्रारंभ करना होगा."
|
||||
|
||||
#: ../src/metacity-dialog.c:331
|
||||
#: ../src/metacity-dialog.c:308
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running \"%s\":\n"
|
||||
@@ -451,8 +457,9 @@ msgid ""
|
||||
"option is set to true."
|
||||
msgstr ""
|
||||
"एक फंट विवरण स्ट्रिंग विंडो शीर्षक पट्टी के लिये फंट के बारे में बता रहा है. विवरण से आकार "
|
||||
"प्रयुक्त होगा अगर titlebar_font_size विकल्प 0 में सेट किया जाता है, साथ ही, यह विकल्प निष्क्रिय किया जाता है अगर titlebar_uses_desktop_font "
|
||||
"विकल्प को सही पर सेट किया जाता है."
|
||||
"प्रयुक्त होगा अगर titlebar_font_size विकल्प 0 में सेट किया जाता है, साथ ही, यह विकल्प "
|
||||
"निष्क्रिय किया जाता है अगर titlebar_uses_desktop_font विकल्प को सही पर सेट किया "
|
||||
"जाता है."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:3
|
||||
msgid "Action on title bar double-click"
|
||||
@@ -549,7 +556,10 @@ msgid ""
|
||||
"the focused window will be automatically raised after a delay specified by "
|
||||
"the auto_raise_delay key. This is not related to clicking on a window to "
|
||||
"raise it, nor to entering a window during drag-and-drop."
|
||||
msgstr "अगर सही पर सेट किया जाता है, और फोकस मोड या तो \"स्लोपी\" या \"माउस\" हो तब फोकस किया विंडो तब auto_raise_delay कुंजी से निर्दिष्ट विलंब से फोकस किया विंडो उठाया जायेगा. यह विंडो पर क्लिक किये जाने से संबंधित नहीं है, न तो खींचे व छोड़ें पर दाखिल होकर."
|
||||
msgstr ""
|
||||
"अगर सही पर सेट किया जाता है, और फोकस मोड या तो \"स्लोपी\" या \"माउस\" हो तब "
|
||||
"फोकस किया विंडो तब auto_raise_delay कुंजी से निर्दिष्ट विलंब से फोकस किया विंडो उठाया "
|
||||
"जायेगा. यह विंडो पर क्लिक किये जाने से संबंधित नहीं है, न तो खींचे व छोड़ें पर दाखिल होकर."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:21
|
||||
msgid ""
|
||||
@@ -586,8 +596,8 @@ msgstr ""
|
||||
"यदि सही है तो मेटासिटी विंडो के बजाए अनुप्रयोग जैसे कार्य करेगा. परिकल्पना थोड़ी संक्षिप्त "
|
||||
"है परंतु आमतौर पर अनुप्रयोग आधारित सेटअप मैक जैसा ज्यादा होगा विंडोज़ की तरह कम. यदि आप "
|
||||
"किसी विंडो को अनुप्रयोग आधारित मोड पर फ़ोकस करेंगे तो अनुप्रयोग में के सभी विंडो ऊपर हो "
|
||||
"जाएंगे. यह भी कि अनुप्रयोग आधारित मोड में फ़ोकस क्लिक अन्य अनुप्रयोग के विंडो से होकर नहीं जाता. अनुप्रयोग आधारित मोड विस्तृत रूप से इस समय कार्यान्वित नहीं "
|
||||
"है."
|
||||
"जाएंगे. यह भी कि अनुप्रयोग आधारित मोड में फ़ोकस क्लिक अन्य अनुप्रयोग के विंडो से होकर नहीं "
|
||||
"जाता. अनुप्रयोग आधारित मोड विस्तृत रूप से इस समय कार्यान्वित नहीं है."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:24
|
||||
msgid "If true, trade off usability for less resource usage"
|
||||
@@ -607,8 +617,11 @@ msgid ""
|
||||
"activation requests from pagers. This option is currently disabled in click-"
|
||||
"to-focus mode."
|
||||
msgstr ""
|
||||
"कई क्रिया (उदाहरण के लिये क्लाइंट क्षेत्र को क्लिक करना, विंडो को खिसकाना व पुनः आकार देना) सामान्यतः विंडो को कुप्रभाव के रूप में उठाता है. इस विकल्प को गलत पर सेट करें अन्य उपयोक्ता क्रिया से उठाते हुये. जबकि यह विकल्प गलत है, "
|
||||
"विंडो को अब भी alt-left-click से कहीं पर उठाया जा सकता है, विंडो सजावट पर सामान्य क्लिक से, या विशेष संदेश सेजैसे कि पेजर से सक्रियकरण आग्रह. यह विकल्प अभी क्लिक टू फोकस मोड में निष्क्रिय किया हुआ है."
|
||||
"कई क्रिया (उदाहरण के लिये क्लाइंट क्षेत्र को क्लिक करना, विंडो को खिसकाना व पुनः आकार "
|
||||
"देना) सामान्यतः विंडो को कुप्रभाव के रूप में उठाता है. इस विकल्प को गलत पर सेट करें अन्य "
|
||||
"उपयोक्ता क्रिया से उठाते हुये. जबकि यह विकल्प गलत है, विंडो को अब भी alt-left-click से "
|
||||
"कहीं पर उठाया जा सकता है, विंडो सजावट पर सामान्य क्लिक से, या विशेष संदेश सेजैसे कि पेजर "
|
||||
"से सक्रियकरण आग्रह. यह विकल्प अभी क्लिक टू फोकस मोड में निष्क्रिय किया हुआ है."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:27
|
||||
msgid "Maximize window"
|
||||
@@ -759,7 +772,9 @@ msgid ""
|
||||
"Number of workspaces. Must be more than zero, and has a fixed maximum to "
|
||||
"prevent making the desktop unusable by accidentally asking for too many "
|
||||
"workspaces."
|
||||
msgstr "कार्यस्थान की संख्या. यह शून्य से अधिक होना चाहिए तथा इसे एक अधिकतम पर निर्धारित करना चाहिये ज्यादा कार्यस्थान की मांग करने पर आपके डेस्कटॉप को दुर्धटनावश नष्ट होने से बचाने हेतु."
|
||||
msgstr ""
|
||||
"कार्यस्थान की संख्या. यह शून्य से अधिक होना चाहिए तथा इसे एक अधिकतम पर निर्धारित करना "
|
||||
"चाहिये ज्यादा कार्यस्थान की मांग करने पर आपके डेस्कटॉप को दुर्धटनावश नष्ट होने से बचाने हेतु."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:64
|
||||
msgid "Raise obscured window, otherwise lower"
|
||||
@@ -795,7 +810,10 @@ msgid ""
|
||||
"manager misfeatures. This option puts Metacity in a rigorously correct mode, "
|
||||
"which gives a more consistent user interface, provided one does not need to "
|
||||
"run any misbehaving applications."
|
||||
msgstr "कुछ अनुप्रयोग विशेषता को महत्व नहीं देते हैं जो कि विंडो प्रबंधक मिसफीचर में परिणाम लाता है. यह विकल्प Metacity को काफी सही मोड में रखता है, जो कि ज्यादा संगत उपयोक्ता अंतरफलक देता है, अगर कोई गलत अनुप्रयोग नहीं चला रहा है."
|
||||
msgstr ""
|
||||
"कुछ अनुप्रयोग विशेषता को महत्व नहीं देते हैं जो कि विंडो प्रबंधक मिसफीचर में परिणाम लाता है. "
|
||||
"यह विकल्प Metacity को काफी सही मोड में रखता है, जो कि ज्यादा संगत उपयोक्ता अंतरफलक "
|
||||
"देता है, अगर कोई गलत अनुप्रयोग नहीं चला रहा है."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:72
|
||||
msgid "Switch to workspace 1"
|
||||
@@ -1531,12 +1549,12 @@ msgid ""
|
||||
"Ctl>\" and \"<Ctrl>\". If you set the option to the special string "
|
||||
"\"disabled\", then there will be no keybinding for this action."
|
||||
msgstr ""
|
||||
"कीबाइंडिंग जो फ़ोकस को विंडो के बीच, पॉपअप विंडो के बिना उपयोग में आता "
|
||||
"है. इस बाइंडिंग के साथ \"शिफ़्ट\" को दबाकर रखने से दिशा फिर आगे जाती है. फ़ॉर्मेट इस "
|
||||
"तरह दिखेंगे \"<Control>a\" या \"<Shift><Alt>F1\". यह पारसर पूरी "
|
||||
"तरह लिबरल है और बड़े या छोटे अक्षर दोनों स्वीकार करता है, तथा संक्षिप्ताक्षर भी जैसे- "
|
||||
"\"<Ctl>\" और \"<Ctrl>\". यदि आपने विकल्प विशेष स्ट्रिंग में तय किया है "
|
||||
"\"निष्क्रिय\", तब वहाँ इस क्रिया हेतु कोई कीबाइंडिंग नहीं होगा."
|
||||
"कीबाइंडिंग जो फ़ोकस को विंडो के बीच, पॉपअप विंडो के बिना उपयोग में आता है. इस बाइंडिंग "
|
||||
"के साथ \"शिफ़्ट\" को दबाकर रखने से दिशा फिर आगे जाती है. फ़ॉर्मेट इस तरह दिखेंगे \"<"
|
||||
"Control>a\" या \"<Shift><Alt>F1\". यह पारसर पूरी तरह लिबरल है "
|
||||
"और बड़े या छोटे अक्षर दोनों स्वीकार करता है, तथा संक्षिप्ताक्षर भी जैसे- \"<Ctl>\" "
|
||||
"और \"<Ctrl>\". यदि आपने विकल्प विशेष स्ट्रिंग में तय किया है \"निष्क्रिय\", तब "
|
||||
"वहाँ इस क्रिया हेतु कोई कीबाइंडिंग नहीं होगा."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:138
|
||||
msgid ""
|
||||
@@ -1549,10 +1567,11 @@ msgid ""
|
||||
"\"disabled\", then there will be no keybinding for this action."
|
||||
msgstr ""
|
||||
"कीबाइंडिंग जो अनुप्रयोग के विंडो के बीच, पॉपअप विंडो की मदद से पीछे हटाने में उपयोग में आता "
|
||||
"है. इस बाइंडिंग के साथ \"shift\" को दबाकर रखने से दिशा फिर आगे जाती है. फ़ॉर्मेट इस तरह "
|
||||
"दिखेंगे \"<Control>a\" या \"<Shift><Alt>F1\". यह विश्लेषक पूरी तरह उदाहरण है और बड़े या छोटे अक्षर दोनों स्वीकार करता है, तथा संक्षिप्ताक्षर भी जैसे- \"<"
|
||||
"Ctl>\" और \"<Ctrl>\". यदि आपने विकल्प विशेष स्ट्रिंग में तय किया है "
|
||||
"\"निष्क्रिय\", तब वहाँ इस क्रिया हेतु कोई कीबाइंडिंग नहीं होगा."
|
||||
"है. इस बाइंडिंग के साथ \"shift\" को दबाकर रखने से दिशा फिर आगे जाती है. फ़ॉर्मेट इस "
|
||||
"तरह दिखेंगे \"<Control>a\" या \"<Shift><Alt>F1\". यह विश्लेषक "
|
||||
"पूरी तरह उदाहरण है और बड़े या छोटे अक्षर दोनों स्वीकार करता है, तथा संक्षिप्ताक्षर भी "
|
||||
"जैसे- \"<Ctl>\" और \"<Ctrl>\". यदि आपने विकल्प विशेष स्ट्रिंग में तय किया "
|
||||
"है \"निष्क्रिय\", तब वहाँ इस क्रिया हेतु कोई कीबाइंडिंग नहीं होगा."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:139
|
||||
msgid ""
|
||||
@@ -1630,12 +1649,11 @@ msgid ""
|
||||
"then there will be no keybinding for this action."
|
||||
msgstr ""
|
||||
"कीबाइंडिंग जो फ़ोकस को विंडो के बीच, पॉपअप विंडो की मदद के बगैर हटाने में उपयोग में आता "
|
||||
"है. इस बाइंडिंग के साथ शिफ्ट \"shift\" को "
|
||||
"दबाकर रखने से चाल की दिशा उलटी हो जाती है. फ़ॉर्मेट इस तरह दिखेंगे \"<Control>a"
|
||||
"\" या \"<Shift><Alt>F1\". यह विश्लेषक पूरी तरह उदार है और बड़े या छोटे "
|
||||
"अक्षर दोनों स्वीकार करता है, तथा संक्षिप्ताक्षर भी जैसे- \"<Ctl>\" और \"<"
|
||||
"Ctrl>\". यदि आपने विकल्प विशेष स्ट्रिंग में तय किया है \"निष्क्रिय\", तब वहाँ इस "
|
||||
"क्रिया हेतु कोई कीबाइंडिंग नहीं होगा."
|
||||
"है. इस बाइंडिंग के साथ शिफ्ट \"shift\" को दबाकर रखने से चाल की दिशा उलटी हो जाती "
|
||||
"है. फ़ॉर्मेट इस तरह दिखेंगे \"<Control>a\" या \"<Shift><Alt>F1\". "
|
||||
"यह विश्लेषक पूरी तरह उदार है और बड़े या छोटे अक्षर दोनों स्वीकार करता है, तथा "
|
||||
"संक्षिप्ताक्षर भी जैसे- \"<Ctl>\" और \"<Ctrl>\". यदि आपने विकल्प विशेष "
|
||||
"स्ट्रिंग में तय किया है \"निष्क्रिय\", तब वहाँ इस क्रिया हेतु कोई कीबाइंडिंग नहीं होगा."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:144
|
||||
msgid ""
|
||||
@@ -1648,12 +1666,11 @@ msgid ""
|
||||
"\"disabled\", then there will be no keybinding for this action."
|
||||
msgstr ""
|
||||
"कीबाइंडिंग जो फ़ोकस को विंडो के बीच, पॉपअप विंडो की मदद से हटाने में उपयोग में आता है. "
|
||||
"इस बाइंडिंग के साथ शिफ्ट \"shift\" को दबाकर रखने से "
|
||||
"चाल की दिशा उलटी हो जाती है. फ़ॉर्मेट इस तरह दिखेंगे \"<Control>a\" या \"<"
|
||||
"Shift><Alt>F1\". यह विश्लेषक पूरी तरह उदाहरण है और बड़े या छोटे अक्षर दोनों "
|
||||
"स्वीकार करता है, तथा संक्षिप्ताक्षर भी जैसे- \"<Ctl>\" और \"<Ctrl>\". "
|
||||
"यदि आपने विकल्प विशेष स्ट्रिंग में तय किया है \"निष्क्रिय\", तब वहाँ इस क्रिया हेतु कोई "
|
||||
"कीबाइंडिंग नहीं होगा."
|
||||
"इस बाइंडिंग के साथ शिफ्ट \"shift\" को दबाकर रखने से चाल की दिशा उलटी हो जाती है. "
|
||||
"फ़ॉर्मेट इस तरह दिखेंगे \"<Control>a\" या \"<Shift><Alt>F1\". यह "
|
||||
"विश्लेषक पूरी तरह उदाहरण है और बड़े या छोटे अक्षर दोनों स्वीकार करता है, तथा संक्षिप्ताक्षर "
|
||||
"भी जैसे- \"<Ctl>\" और \"<Ctrl>\". यदि आपने विकल्प विशेष स्ट्रिंग में तय "
|
||||
"किया है \"निष्क्रिय\", तब वहाँ इस क्रिया हेतु कोई कीबाइंडिंग नहीं होगा."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:145
|
||||
msgid ""
|
||||
@@ -1905,10 +1922,10 @@ msgstr ""
|
||||
"यह कुंजी बाइंडिंग बदलता है कि क्याविंडो को अन्य विंडो के ऊपर या नीचे करना है. यदि विंडो "
|
||||
"अन्य विंडो से ढँका है, तो यह विंडो को अन्य विंडो से ऊपर करता है. यदि विंडो पहले से ही पूरी "
|
||||
"तरह दिखाई दे रहा है, तो यह विंडो को अन्य विंडो के नीचे रखता है. फॉर्मेट इस तरह दिखेंगे "
|
||||
"\"<Control>a\" या \"<Shift><Alt>F1\". यह विश्लेषक पूरी तरह उदार "
|
||||
"है और बड़े या छोटे अक्षर दोनों स्वीकार करता है, तथा संक्षिप्ताक्षर भी जैसे- \"<Ctl>"
|
||||
"\" और \"<Ctrl>\". यदि आपने विकल्प विशेष स्ट्रिंग में तय किया है \"निष्क्रिय\", "
|
||||
"तब वहाँ इस क्रिया हेतु कोई कीबाइंडिंग नहीं होगा."
|
||||
"\"<Control>a\" या \"<Shift><Alt>F1\". यह विश्लेषक पूरी तरह "
|
||||
"उदार है और बड़े या छोटे अक्षर दोनों स्वीकार करता है, तथा संक्षिप्ताक्षर भी जैसे- \"<"
|
||||
"Ctl>\" और \"<Ctrl>\". यदि आपने विकल्प विशेष स्ट्रिंग में तय किया है \"निष्क्रिय"
|
||||
"\", तब वहाँ इस क्रिया हेतु कोई कीबाइंडिंग नहीं होगा."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:165
|
||||
msgid ""
|
||||
@@ -1975,7 +1992,11 @@ msgid ""
|
||||
"window, 'toggle_maximize' which will maximize/unmaximize the window, "
|
||||
"'minimize' which will minimize the window, and 'none' which will not do "
|
||||
"anything."
|
||||
msgstr "यह शीर्षक पट्टी पर डबल-क्लिक के असर को निर्धारित करता है. वर्तमान वैध विकल्प हैं- 'toggle_shade' जो विंडो की छाया चालू/बन्द करते हैं, तथा 'टॉगल-अधिकतम' जो विंडो को अधिकतम/उससे बाहर करता है, और 'न्यूनतम' जो विंडो न्यूनतम करेगा, और 'कुछ नहीं' जो विंडो को कुछ नहीं करेगा."
|
||||
msgstr ""
|
||||
"यह शीर्षक पट्टी पर डबल-क्लिक के असर को निर्धारित करता है. वर्तमान वैध विकल्प हैं- "
|
||||
"'toggle_shade' जो विंडो की छाया चालू/बन्द करते हैं, तथा 'टॉगल-अधिकतम' जो विंडो को "
|
||||
"अधिकतम/उससे बाहर करता है, और 'न्यूनतम' जो विंडो न्यूनतम करेगा, और 'कुछ नहीं' जो विंडो "
|
||||
"को कुछ नहीं करेगा."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:170
|
||||
msgid ""
|
||||
@@ -1983,7 +2004,10 @@ msgid ""
|
||||
"focus. It has two possible values; \"smart\" applies the user's normal focus "
|
||||
"mode, and \"strict\" results in windows started from a terminal not being "
|
||||
"given focus."
|
||||
msgstr "यह विकल्प अतिरिक्त नियंत्रण देता है कि कैसे नया बनाया विंडो फोकस पाता है. इसके दो संभावित मान हैं; \"smart\" उपयोक्ता के सामान्य फोकस मोड पर लागू होता है और \"strict\" ऐसे विंडो के रूप में आता है जो टर्मिनल से फोकस नहीं किये गये रूप में आता है."
|
||||
msgstr ""
|
||||
"यह विकल्प अतिरिक्त नियंत्रण देता है कि कैसे नया बनाया विंडो फोकस पाता है. इसके दो "
|
||||
"संभावित मान हैं; \"smart\" उपयोक्ता के सामान्य फोकस मोड पर लागू होता है और \"strict"
|
||||
"\" ऐसे विंडो के रूप में आता है जो टर्मिनल से फोकस नहीं किये गये रूप में आता है."
|
||||
|
||||
#: ../src/metacity.schemas.in.h:171
|
||||
msgid "Toggle always on top state"
|
||||
@@ -2067,7 +2091,9 @@ msgstr "जी-कॉन्फ़ कुंजी '%s' एक अवैध प
|
||||
msgid ""
|
||||
"%d stored in GConf key %s is not a reasonable cursor_size; must be in the "
|
||||
"range 1..128\n"
|
||||
msgstr "%d जो जी-कॉन्फ़ कुंजी %s में भंडारित है जो एक तार्किक cursor_size नहीं है; को 1..128 के परिसर में होना चाहिये\n"
|
||||
msgstr ""
|
||||
"%d जो जी-कॉन्फ़ कुंजी %s में भंडारित है जो एक तार्किक cursor_size नहीं है; को 1..128 के "
|
||||
"परिसर में होना चाहिये\n"
|
||||
|
||||
#: ../src/prefs.c:1329
|
||||
#, c-format
|
||||
@@ -2101,14 +2127,14 @@ msgstr "%d जो जी-कॉन्फ़ कुंजी %s में भं
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "कार्यस्थान संख्या %d पर तय करने में त्रुटि: %s हुई.\n"
|
||||
|
||||
#: ../src/prefs.c:2170 ../src/prefs.c:2335
|
||||
#: ../src/prefs.c:2172 ../src/prefs.c:2342
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
"\"%s\"\n"
|
||||
msgstr "कॉन्फ़िगरेशन डेटाबेस में प्राप्त \"%s\" कीबाइंडिंग \"%s\" हेतु वैध मूल्य नहीं है\n"
|
||||
|
||||
#: ../src/prefs.c:2750
|
||||
#: ../src/prefs.c:2758
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "कार्यस्थान नाम %d को \"%s\" से में बदलने में त्रुटि: %s हुई\n"
|
||||
@@ -2134,7 +2160,8 @@ msgstr ""
|
||||
|
||||
#: ../src/screen.c:443
|
||||
#, c-format
|
||||
msgid "Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgid ""
|
||||
"Could not acquire window manager selection on screen %d display \"%s\"\n"
|
||||
msgstr "स्क्रीन %d प्रदर्शक \"%s\" पर विंडो प्रबंधक चयन प्राप्त नहीं कर सका\n"
|
||||
|
||||
#: ../src/screen.c:501
|
||||
@@ -2365,7 +2392,8 @@ msgstr "कोई \"मान\" गुण तत्व <%s> पर नहीं
|
||||
|
||||
#: ../src/theme-parser.c:1320 ../src/theme-parser.c:1334
|
||||
#: ../src/theme-parser.c:1393
|
||||
msgid "Cannot specify both button_width/button_height and aspect ratio for buttons"
|
||||
msgid ""
|
||||
"Cannot specify both button_width/button_height and aspect ratio for buttons"
|
||||
msgstr "बटनों हेतु बटन-चौड़ाई/बटन-ऊँचाई दोनों ही तथा आकार अनुपात निर्दिष्ट नहीं कर सका"
|
||||
|
||||
#: ../src/theme-parser.c:1343
|
||||
@@ -2673,7 +2701,8 @@ msgstr "प्रसंग का सबसे बाहरी तत्व <म
|
||||
|
||||
#: ../src/theme-parser.c:3676
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a name/author/date/description element"
|
||||
msgid ""
|
||||
"Element <%s> is not allowed inside a name/author/date/description element"
|
||||
msgstr "तत्व <%s>, एक name/author/date/description तत्व के भीतर स्वीकार्य नहीं है"
|
||||
|
||||
#: ../src/theme-parser.c:3681
|
||||
@@ -2683,7 +2712,8 @@ msgstr "तत्व <%s> <स्थिरांक> तत्व के भी
|
||||
|
||||
#: ../src/theme-parser.c:3693
|
||||
#, c-format
|
||||
msgid "Element <%s> is not allowed inside a distance/border/aspect_ratio element"
|
||||
msgid ""
|
||||
"Element <%s> is not allowed inside a distance/border/aspect_ratio element"
|
||||
msgstr "तत्व <%s>, distance/border/aspect_ratio तत्व के भीतर स्वीकार्य नहीं है"
|
||||
|
||||
#: ../src/theme-parser.c:3715
|
||||
@@ -2975,11 +3005,11 @@ msgstr "बटन आस्पेक्ट रेशो %g यथोचित
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "फ्रेम ज्यामिती बटनों के आकार को उल्लेखित नहीं करता"
|
||||
|
||||
#: ../src/theme.c:813
|
||||
#: ../src/theme.c:847
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "अनुपात में कम से कम दो रंग होने चाहिएँ"
|
||||
|
||||
#: ../src/theme.c:939
|
||||
#: ../src/theme.c:973
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -2988,7 +3018,7 @@ msgstr ""
|
||||
"जीटीके रंग लक्षण कोष्ठक में स्थिति (स्टेट) होने चाहिएँ जैसे- gtk:fg[NORMAL] यहाँ NORMAL "
|
||||
"स्थिति है; \"%s\" की व्याख्या नहीं कर सका"
|
||||
|
||||
#: ../src/theme.c:953
|
||||
#: ../src/theme.c:987
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -2997,17 +3027,17 @@ msgstr ""
|
||||
"जीटीके रंग लक्षण स्थिति के बाद बंद कोष्ठक में होने चाहिएँ जैसे- gtk:fg[NORMAL] यहाँ "
|
||||
"NORMAL स्थिति है; \"%s\" की व्याख्या नहीं कर सका"
|
||||
|
||||
#: ../src/theme.c:964
|
||||
#: ../src/theme.c:998
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "स्थिति \"%s\" रंग लक्षण में समझ नहीं सका"
|
||||
|
||||
#: ../src/theme.c:977
|
||||
#: ../src/theme.c:1011
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "रंग अवयव \"%s\" रंग लक्षण में समझ नहीं सका"
|
||||
|
||||
#: ../src/theme.c:1007
|
||||
#: ../src/theme.c:1041
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -3016,119 +3046,124 @@ msgstr ""
|
||||
"ब्लेंड फ़ॉर्मेट है \"blend/bg_color/fg_color/alpha\", \"%s\" जो फ़ॉर्मेट के अनुरूप नहीं "
|
||||
"होता"
|
||||
|
||||
#: ../src/theme.c:1018
|
||||
#: ../src/theme.c:1052
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "अल्फा मूल्य \"%s\" की ब्लेंडेड रंग में व्याख्या नहीं कर सका"
|
||||
|
||||
#: ../src/theme.c:1028
|
||||
#: ../src/theme.c:1062
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "अल्फा मूल्य \"%s\" ब्लेंडेड रंग में 0.0 और 1.0 के बीच नहीं है"
|
||||
|
||||
#: ../src/theme.c:1075
|
||||
#: ../src/theme.c:1109
|
||||
#, c-format
|
||||
msgid "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr "शेड फॉर्मेट है \"shade/base_color/factor\", \"%s\" जो फॉर्मेट के अनुरूप नहीं होता"
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr ""
|
||||
"शेड फॉर्मेट है \"shade/base_color/factor\", \"%s\" जो फॉर्मेट के अनुरूप नहीं होता"
|
||||
|
||||
#: ../src/theme.c:1086
|
||||
#: ../src/theme.c:1120
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "शेड फैक्टर \"%s\" की आभायुक्त रंग में व्याख्या नहीं कर सका"
|
||||
|
||||
#: ../src/theme.c:1096
|
||||
#: ../src/theme.c:1130
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "शेड फैक्टर \"%s\" आभायुक्त रंग में ऋणात्मक है"
|
||||
|
||||
#: ../src/theme.c:1125
|
||||
#: ../src/theme.c:1159
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "\"%s\" रंग की व्याख्या नहीं कर सका"
|
||||
|
||||
#: ../src/theme.c:1384
|
||||
#: ../src/theme.c:1418
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन मे अक्षर '%s' है जो स्वीकार्य नहीं है"
|
||||
|
||||
#: ../src/theme.c:1411
|
||||
#: ../src/theme.c:1445
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन मे फ्लोटिंग पाइंट नम्बर '%s' है जिसकी व्याख्या नहीं की जा सकी"
|
||||
|
||||
#: ../src/theme.c:1425
|
||||
#: ../src/theme.c:1459
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन मे पूर्णांक '%s' है जिसकी व्याख्या नहीं की जा सकी"
|
||||
|
||||
#: ../src/theme.c:1492
|
||||
#: ../src/theme.c:1526
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन मे इस पाठ: \"%s\" के आरंभ में ही अज्ञात आपरेटर है "
|
||||
|
||||
#: ../src/theme.c:1549
|
||||
#: ../src/theme.c:1583
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन या खाली है या समझा नहीं जा सका"
|
||||
|
||||
#: ../src/theme.c:1686 ../src/theme.c:1696 ../src/theme.c:1730
|
||||
#: ../src/theme.c:1720 ../src/theme.c:1730 ../src/theme.c:1764
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन परिणाम शून्य से भाजक के रूप में मिला"
|
||||
|
||||
#: ../src/theme.c:1738
|
||||
msgid "Coordinate expression tries to use mod operator on a floating-point number"
|
||||
#: ../src/theme.c:1772
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन, फ्लोटिंग पाइंट नम्बर पर माड आपरेटर के उपयोग की कोशिश में"
|
||||
|
||||
#: ../src/theme.c:1794
|
||||
#: ../src/theme.c:1828
|
||||
#, c-format
|
||||
msgid "Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन में एक आपरेटर \"%s\" है जबकि आपरेंड वांछित है"
|
||||
|
||||
#: ../src/theme.c:1803
|
||||
#: ../src/theme.c:1837
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन में एक आपरेंड है जबकि आपरेटर वांछित है"
|
||||
|
||||
#: ../src/theme.c:1811
|
||||
#: ../src/theme.c:1845
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन एक आपरेटर से अंत हो रहा है एक आपरेंड के बदले"
|
||||
|
||||
#: ../src/theme.c:1821
|
||||
#: ../src/theme.c:1855
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
"operand in between"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन में आपरेटर \"%c\" के बाद आपरेटर \"%c\" है बीच में कोई आपरेण्ड नहीं है"
|
||||
msgstr ""
|
||||
"कोआर्डिनेट एक्सप्रेशन में आपरेटर \"%c\" के बाद आपरेटर \"%c\" है बीच में कोई आपरेण्ड नहीं है"
|
||||
|
||||
#: ../src/theme.c:1939
|
||||
#: ../src/theme.c:1973
|
||||
msgid "Coordinate expression parser overflowed its buffer."
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन विश्लेषक इसके बफर को ओवरफ्लो कर गया है."
|
||||
|
||||
#: ../src/theme.c:1968
|
||||
#: ../src/theme.c:2002
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन में बन्द लघुकोष्ठक है जिसमें कोई खुला कोष्ठक नहीं है"
|
||||
|
||||
#: ../src/theme.c:2030
|
||||
#: ../src/theme.c:2064
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन में अज्ञात चर या अचर \"%s\" है"
|
||||
|
||||
#: ../src/theme.c:2085
|
||||
#: ../src/theme.c:2119
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr "कोआर्डिनेट एक्सप्रेशन में खुला लघुकोष्ठक है जिसमें कोई बंद कोष्ठक नहीं है"
|
||||
|
||||
#: ../src/theme.c:2096
|
||||
#: ../src/theme.c:2130
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "प्रतीत होता है कि कोआर्डिनेट एक्सप्रेशन में कोई आपरेटर या आपरेंड नहीं है"
|
||||
|
||||
#: ../src/theme.c:2337 ../src/theme.c:2359 ../src/theme.c:2380
|
||||
#: ../src/theme.c:2371 ../src/theme.c:2393 ../src/theme.c:2414
|
||||
#, c-format
|
||||
msgid "Theme contained an expression \"%s\" that resulted in an error: %s\n"
|
||||
msgstr "प्रसंग में एक एक्सप्रेशन \"%s\" है जिसके प्रतिफल में त्रुटि: %s हुई \n"
|
||||
|
||||
#: ../src/theme.c:3826
|
||||
#: ../src/theme.c:3860
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -3137,23 +3172,25 @@ msgstr ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> इस फ्रेम शैली हेतु "
|
||||
"निर्दिष्ट किया जाना अनिवार्य है"
|
||||
|
||||
#: ../src/theme.c:4270 ../src/theme.c:4295
|
||||
#: ../src/theme.c:4304 ../src/theme.c:4329
|
||||
#, c-format
|
||||
msgid "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr "नहीं है <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"नहीं है <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
|
||||
#: ../src/theme.c:4341
|
||||
#: ../src/theme.c:4375
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "प्रसंग \"%s\" लोड करने में असफल: %s\n"
|
||||
|
||||
#: ../src/theme.c:4481 ../src/theme.c:4488 ../src/theme.c:4495
|
||||
#: ../src/theme.c:4502 ../src/theme.c:4509
|
||||
#: ../src/theme.c:4515 ../src/theme.c:4522 ../src/theme.c:4529
|
||||
#: ../src/theme.c:4536 ../src/theme.c:4543
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "कोई <%s> सेट प्रसंग \"%s\" हेतु नहीं है"
|
||||
|
||||
#: ../src/theme.c:4517
|
||||
#: ../src/theme.c:4551
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -3162,7 +3199,7 @@ msgstr ""
|
||||
"विंडो प्रकार \"%s\" में प्रसंग \"%s\" में कोई फ्रेम स्टाइल नियत नहीं है, जोड़ें <window "
|
||||
"type=\"%s\" style_set=\"whatever\"/> तत्व "
|
||||
|
||||
#: ../src/theme.c:4531
|
||||
#: ../src/theme.c:4565
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<menu_icon function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -3171,14 +3208,15 @@ msgstr ""
|
||||
"<menu_icon function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> इस प्रसंग हेतु "
|
||||
"उल्लेखित होना चाहिए"
|
||||
|
||||
#: ../src/theme.c:4911 ../src/theme.c:4973
|
||||
#: ../src/theme.c:4945 ../src/theme.c:5007
|
||||
#, c-format
|
||||
msgid "User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
"उपयोगकर्ता द्वारा पारिभाषित स्थिरांक बड़े अक्षर से शुरू होने चाहिएँ, जो \"%s\" नहीं हो "
|
||||
"रहा है"
|
||||
|
||||
#: ../src/theme.c:4919 ../src/theme.c:4981
|
||||
#: ../src/theme.c:4953 ../src/theme.c:5015
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "स्थिरांक \"%s\" पहले ही पारिभाषित है"
|
||||
@@ -3224,14 +3262,14 @@ msgstr "अनुप्रयोग ने नियत किया एक bogu
|
||||
msgid "%s (on %s)"
|
||||
msgstr "%s (%s पर)"
|
||||
|
||||
#: ../src/window-props.c:1159
|
||||
#: ../src/window-props.c:1177
|
||||
#, c-format
|
||||
msgid "Invalid WM_TRANSIENT_FOR window 0x%lx specified for %s.\n"
|
||||
msgstr "अवैध WM_TRANSIENT_FOR window 0x%lx %s के लिये निर्दिष्ट.\n"
|
||||
|
||||
# first time through
|
||||
#. first time through
|
||||
#: ../src/window.c:5240
|
||||
#: ../src/window.c:5288
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -3253,7 +3291,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: ../src/window.c:5836
|
||||
#: ../src/window.c:5884
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
@@ -3285,6 +3323,6 @@ msgstr "गुण %s विंडो 0x%lx में अवैध यूटी
|
||||
|
||||
#: ../src/xprops.c:482
|
||||
#, c-format
|
||||
msgid "Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n"
|
||||
msgid ""
|
||||
"Property %s on window 0x%lx contained invalid UTF-8 for item %d in the list\n"
|
||||
msgstr "गुण %s विंडो 0x%lx पर %d वस्तुओं हेतु सूची में अवैध यूटीएफ़-8 है\n"
|
||||
|
||||
|
3223
po/pt_BR.po
3223
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
14
po/ro.po
14
po/ro.po
@@ -260,7 +260,7 @@ msgstr "Ecranul %s%d"
|
||||
|
||||
#: ../src/menu.c:370
|
||||
msgid "Move to Another _Workspace"
|
||||
msgstr "Mută ferestra către un alt _ecran"
|
||||
msgstr "Mută fereastra către un alt _ecran"
|
||||
|
||||
#. This is the text that should appear next to menu accelerators
|
||||
#. * that use the shift key. If the text on this key isn't typically
|
||||
@@ -456,7 +456,7 @@ msgid ""
|
||||
"for example."
|
||||
msgstr ""
|
||||
"Efectuănd un click pe o fereastră având apăsată această tastă modificator va "
|
||||
"muta fereastra (click normal), va redimensiona ferestra (click cu butonul "
|
||||
"muta fereastra (click normal), va redimensiona fereastra (click cu butonul "
|
||||
"din mijloc), sau va arăta meniul ferestrei (click cu butonul din dreapta). "
|
||||
"Modificatorul este scris ca „<Alt>” sau „<Super>”, de exemplu."
|
||||
|
||||
@@ -599,7 +599,7 @@ msgstr ""
|
||||
|
||||
#: ../src/metacity.schemas.in.h:24
|
||||
msgid "Maximize window"
|
||||
msgstr "Maximizează ferestra"
|
||||
msgstr "Maximizează fereastra"
|
||||
|
||||
#: ../src/metacity.schemas.in.h:25
|
||||
msgid "Maximize window horizontally"
|
||||
@@ -667,7 +667,7 @@ msgstr "Mută fereastra un ecran la dreapta"
|
||||
|
||||
#: ../src/metacity.schemas.in.h:41
|
||||
msgid "Move window one workspace up"
|
||||
msgstr "Mută ferestra un ecran mai sus"
|
||||
msgstr "Mută fereastra un ecran mai sus"
|
||||
|
||||
#: ../src/metacity.schemas.in.h:42
|
||||
msgid "Move window to workspace 1"
|
||||
@@ -1932,7 +1932,7 @@ msgid ""
|
||||
"option to the special string \"disabled\", then there will be no keybinding "
|
||||
"for this action."
|
||||
msgstr ""
|
||||
"Combinaţia de taste folosită pentru a maximiza o ferestră la totalul "
|
||||
"Combinaţia de taste folosită pentru a maximiza o fereastră la totalul "
|
||||
"spaţiului disponibil pe verticală. Formatul arată ca de exemplu „<"
|
||||
"Control>a” sau „<Shift><Alt>F1”. Este permisă folosirea "
|
||||
"majusculelor şi a minusculelor, precum şi a abrevierilor gen „<Ctl>” "
|
||||
@@ -2877,7 +2877,7 @@ msgstr "Test de performanţă"
|
||||
|
||||
#: ../src/theme-viewer.c:900
|
||||
msgid "Window Title Goes Here"
|
||||
msgstr "Titlul de ferestră vine aici"
|
||||
msgstr "Titlul de fereastră vine aici"
|
||||
|
||||
#: ../src/theme-viewer.c:1004
|
||||
#, c-format
|
||||
@@ -3235,7 +3235,7 @@ msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
"window as specified in the ICCCM.\n"
|
||||
msgstr ""
|
||||
"Ferestra %s setează SM_CLIENT_ID asupra sa, în loc să o facă asupra "
|
||||
"Fereastra %s setează SM_CLIENT_ID asupra sa, în loc să o facă asupra "
|
||||
"ferestrei WM_CLIENT_LEADER aşa cum este specificat în ICCCM.\n"
|
||||
|
||||
#. We ignore mwm_has_resize_func because WM_NORMAL_HINTS is the
|
||||
|
1722
po/sr@Latn.po
1722
po/sr@Latn.po
File diff suppressed because it is too large
Load Diff
1482
po/zh_CN.po
1482
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
1961
po/zh_HK.po
1961
po/zh_HK.po
File diff suppressed because it is too large
Load Diff
1465
po/zh_TW.po
1465
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
20
src/50-metacity-desktop-key.xml.in
Normal file
20
src/50-metacity-desktop-key.xml.in
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<KeyListEntries _name="Desktop" wm_name="Metacity" package="metacity">
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/panel_run_dialog" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/panel_main_menu" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/run_command_screenshot" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/run_command_window_screenshot" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/run_command_terminal" />
|
||||
|
||||
</KeyListEntries>
|
||||
|
269
src/50-metacity-key.xml.in
Normal file
269
src/50-metacity-key.xml.in
Normal file
@@ -0,0 +1,269 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<KeyListEntries _name="Window Management" wm_name="Metacity" package="metacity">
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/activate_window_menu" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/toggle_fullscreen" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/toggle_maximized" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/maximize" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/unmaximize" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/toggle_shaded" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/close" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/minimize" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/begin_move" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/begin_resize" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/toggle_on_all_workspaces"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/raise_or_lower" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/raise" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/lower" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/maximize_vertically" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/maximize_horizontally" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_1"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_2"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_3"
|
||||
value="2"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_4"
|
||||
value="3"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_5"
|
||||
value="4"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_6"
|
||||
value="5"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_7"
|
||||
value="6"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_8"
|
||||
value="7"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_9"
|
||||
value="8"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_10"
|
||||
value="9"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_11"
|
||||
value="10"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_12"
|
||||
value="11"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_left"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_right"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_up"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/window_keybindings/move_to_workspace_down"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_windows" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_group" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_panels" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/cycle_windows" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/cycle_group" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/cycle_panels" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/show_desktop" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_1"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_2"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_3"
|
||||
value="2"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_4"
|
||||
value="3"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_5"
|
||||
value="4"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_6"
|
||||
value="5"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_7"
|
||||
value="6"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_8"
|
||||
value="7"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_9"
|
||||
value="8"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_10"
|
||||
value="9"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_11"
|
||||
value="10"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_12"
|
||||
value="11"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_left"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_right"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_up"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
<KeyListEntry
|
||||
name="/apps/metacity/global_keybindings/switch_to_workspace_down"
|
||||
value="1"
|
||||
key="/apps/metacity/general/num_workspaces"
|
||||
comparison="gt" />
|
||||
|
||||
</KeyListEntries>
|
||||
|
@@ -4,10 +4,6 @@ SUBDIRS=wm-tester tools themes
|
||||
|
||||
INCLUDES=@METACITY_CFLAGS@ -DMETACITY_LIBEXECDIR=\"$(libexecdir)\" -DHOST_ALIAS=\"@HOST_ALIAS@\" -DMETACITY_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" -DMETACITY_PKGDATADIR=\"$(pkgdatadir)\" -DMETACITY_DATADIR=\"$(datadir)\" -DG_LOG_DOMAIN=\"metacity\" -DSN_API_NOT_YET_FROZEN=1
|
||||
|
||||
EGGFILES= \
|
||||
eggaccelerators.c \
|
||||
eggaccelerators.h
|
||||
|
||||
metacity_SOURCES= \
|
||||
async-getprop.c \
|
||||
async-getprop.h \
|
||||
@@ -97,8 +93,7 @@ metacity_SOURCES= \
|
||||
workspace.c \
|
||||
workspace.h \
|
||||
xprops.c \
|
||||
xprops.h \
|
||||
$(EGGFILES)
|
||||
xprops.h
|
||||
|
||||
# by setting libmetacity_private_la_CFLAGS, the files shared with
|
||||
# metacity proper will be compiled with different names.
|
||||
@@ -166,6 +161,12 @@ schemadir = @GCONF_SCHEMA_FILE_DIR@
|
||||
schema_in_files = metacity.schemas.in
|
||||
schema_DATA = $(schema_in_files:.schemas.in=.schemas)
|
||||
|
||||
@INTLTOOL_XML_NOMERGE_RULE@
|
||||
|
||||
xmldir = $(datadir)/control-center/keybindings
|
||||
xml_in_files = 50-metacity-desktop-key.xml.in 50-metacity-key.xml.in
|
||||
xml_DATA = $(xml_in_files:.xml.in=.xml)
|
||||
|
||||
@INTLTOOL_SCHEMAS_RULE@
|
||||
|
||||
if GCONF_SCHEMAS_INSTALL
|
||||
@@ -182,7 +183,7 @@ VARIABLES=default_icon_data $(srcdir)/default_icon.png \
|
||||
stock_delete_data $(srcdir)/stock_delete.png
|
||||
|
||||
BUILT_SOURCES = inlinepixbufs.h
|
||||
CLEANFILES = inlinepixbufs.h metacity.desktop metacity.schemas
|
||||
CLEANFILES = inlinepixbufs.h metacity.desktop metacity.schemas 50-metacity-desktop-key.xml 50-metacity-key.xml
|
||||
|
||||
inlinepixbufs.h: $(IMAGES)
|
||||
$(GDK_PIXBUF_CSOURCE) --raw --build-list $(VARIABLES) >$(srcdir)/inlinepixbufs.h
|
||||
@@ -193,13 +194,8 @@ pkgconfig_DATA = libmetacity-private.pc
|
||||
|
||||
EXTRA_DIST=$(desktopfiles_files) \
|
||||
$(IMAGES) $(schema_DATA) \
|
||||
update-from-egg.sh \
|
||||
$(desktopfiles_in_files) \
|
||||
$(schema_in_files) \
|
||||
$(xml_in_files) \
|
||||
libmetacity-private.pc.in
|
||||
|
||||
|
||||
EGGDIR=$(srcdir)/../../libegg/libegg
|
||||
|
||||
regenerate-built-sources:
|
||||
EGGFILES="$(EGGFILES)" EGGDIR="$(EGGDIR)" $(srcdir)/update-from-egg.sh
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity misc. public entry points */
|
||||
|
||||
/*
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity misc. public entry points */
|
||||
|
||||
/*
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Asynchronous X property getting hack */
|
||||
|
||||
/*
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Asynchronous X property getting hack */
|
||||
|
||||
/*
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity visual bell */
|
||||
|
||||
/*
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/* Metacity visual bell */
|
||||
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
/*
|
||||
* Copyright (C) 2002 Sun Microsystems Inc.
|
||||
*
|
||||
|
259
src/boxes.c
259
src/boxes.c
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Simple box operations */
|
||||
|
||||
/*
|
||||
@@ -545,10 +547,10 @@ meta_rectangle_get_minimal_spanning_set_for_region (
|
||||
ret = g_list_prepend (NULL, temp_rect);
|
||||
|
||||
strut_iter = all_struts;
|
||||
while (strut_iter)
|
||||
for (strut_iter = all_struts; strut_iter; strut_iter = strut_iter->next)
|
||||
{
|
||||
GList *rect_iter;
|
||||
MetaRectangle *strut = (MetaRectangle*) strut_iter->data;
|
||||
MetaRectangle *strut_rect = &((MetaStrut*)strut_iter->data)->rect;
|
||||
|
||||
tmp_list = ret;
|
||||
ret = NULL;
|
||||
@@ -556,45 +558,45 @@ meta_rectangle_get_minimal_spanning_set_for_region (
|
||||
while (rect_iter)
|
||||
{
|
||||
MetaRectangle *rect = (MetaRectangle*) rect_iter->data;
|
||||
if (!meta_rectangle_overlap (rect, strut))
|
||||
if (!meta_rectangle_overlap (rect, strut_rect))
|
||||
ret = g_list_prepend (ret, rect);
|
||||
else
|
||||
{
|
||||
/* If there is area in rect left of strut */
|
||||
if (rect->x < strut->x)
|
||||
if (BOX_LEFT (*rect) < BOX_LEFT (*strut_rect))
|
||||
{
|
||||
temp_rect = g_new (MetaRectangle, 1);
|
||||
*temp_rect = *rect;
|
||||
temp_rect->width = strut->x - rect->x;
|
||||
temp_rect->width = BOX_LEFT (*strut_rect) - BOX_LEFT (*rect);
|
||||
ret = g_list_prepend (ret, temp_rect);
|
||||
}
|
||||
/* If there is area in rect right of strut */
|
||||
if (rect->x + rect->width > strut->x + strut->width)
|
||||
if (BOX_RIGHT (*rect) > BOX_RIGHT (*strut_rect))
|
||||
{
|
||||
int new_x;
|
||||
temp_rect = g_new (MetaRectangle, 1);
|
||||
*temp_rect = *rect;
|
||||
new_x = strut->x + strut->width;
|
||||
temp_rect->width = rect->x + rect->width - new_x;
|
||||
new_x = BOX_RIGHT (*strut_rect);
|
||||
temp_rect->width = BOX_RIGHT(*rect) - new_x;
|
||||
temp_rect->x = new_x;
|
||||
ret = g_list_prepend (ret, temp_rect);
|
||||
}
|
||||
/* If there is area in rect above strut */
|
||||
if (rect->y < strut->y)
|
||||
if (BOX_TOP (*rect) < BOX_TOP (*strut_rect))
|
||||
{
|
||||
temp_rect = g_new (MetaRectangle, 1);
|
||||
*temp_rect = *rect;
|
||||
temp_rect->height = strut->y - rect->y;
|
||||
temp_rect->height = BOX_TOP (*strut_rect) - BOX_TOP (*rect);
|
||||
ret = g_list_prepend (ret, temp_rect);
|
||||
}
|
||||
/* If there is area in rect below strut */
|
||||
if (rect->y + rect->height > strut->y + strut->height)
|
||||
if (BOX_BOTTOM (*rect) > BOX_BOTTOM (*strut_rect))
|
||||
{
|
||||
int new_y;
|
||||
temp_rect = g_new (MetaRectangle, 1);
|
||||
*temp_rect = *rect;
|
||||
new_y = strut->y + strut->height;
|
||||
temp_rect->height = rect->y + rect->height - new_y;
|
||||
new_y = BOX_BOTTOM (*strut_rect);
|
||||
temp_rect->height = BOX_BOTTOM (*rect) - new_y;
|
||||
temp_rect->y = new_y;
|
||||
ret = g_list_prepend (ret, temp_rect);
|
||||
}
|
||||
@@ -603,7 +605,6 @@ meta_rectangle_get_minimal_spanning_set_for_region (
|
||||
rect_iter = rect_iter->next;
|
||||
}
|
||||
g_list_free (tmp_list);
|
||||
strut_iter = strut_iter->next;
|
||||
}
|
||||
|
||||
/* Sort by maximal area, just because I feel like it... */
|
||||
@@ -660,6 +661,76 @@ meta_rectangle_expand_region_conditionally (GList *region,
|
||||
return region;
|
||||
}
|
||||
|
||||
void
|
||||
meta_rectangle_expand_to_avoiding_struts (MetaRectangle *rect,
|
||||
const MetaRectangle *expand_to,
|
||||
const MetaDirection direction,
|
||||
const GSList *all_struts)
|
||||
{
|
||||
const GSList *strut_iter;
|
||||
|
||||
/* If someone wants this function to handle more fine-grained
|
||||
* direction expanding in the future (e.g. only left, or fully
|
||||
* horizontal plus upward), feel free. But I'm hard-coding for both
|
||||
* horizontal directions (exclusive-)or both vertical directions.
|
||||
*/
|
||||
g_assert ((direction == META_DIRECTION_HORIZONTAL) ^
|
||||
(direction == META_DIRECTION_VERTICAL ));
|
||||
|
||||
if (direction == META_DIRECTION_HORIZONTAL)
|
||||
{
|
||||
rect->x = expand_to->x;
|
||||
rect->width = expand_to->width;
|
||||
}
|
||||
else
|
||||
{
|
||||
rect->y = expand_to->y;
|
||||
rect->height = expand_to->height;
|
||||
}
|
||||
|
||||
|
||||
/* Run over all struts */
|
||||
for (strut_iter = all_struts; strut_iter; strut_iter = strut_iter->next)
|
||||
{
|
||||
MetaStrut *strut = (MetaStrut*) strut_iter->data;
|
||||
|
||||
/* Skip struts that don't overlap */
|
||||
if (!meta_rectangle_overlap (&strut->rect, rect))
|
||||
continue;
|
||||
|
||||
if (direction == META_DIRECTION_HORIZONTAL)
|
||||
{
|
||||
if (strut->side == META_SIDE_LEFT)
|
||||
{
|
||||
int offset = BOX_RIGHT(strut->rect) - BOX_LEFT(*rect);
|
||||
rect->x += offset;
|
||||
rect->width -= offset;
|
||||
}
|
||||
else if (strut->side == META_SIDE_RIGHT)
|
||||
{
|
||||
int offset = BOX_RIGHT (*rect) - BOX_LEFT(strut->rect);
|
||||
rect->width -= offset;
|
||||
}
|
||||
/* else ignore the strut */
|
||||
}
|
||||
else /* direction == META_DIRECTION_VERTICAL */
|
||||
{
|
||||
if (strut->side == META_SIDE_TOP)
|
||||
{
|
||||
int offset = BOX_BOTTOM(strut->rect) - BOX_TOP(*rect);
|
||||
rect->y += offset;
|
||||
rect->height -= offset;
|
||||
}
|
||||
else if (strut->side == META_SIDE_BOTTOM)
|
||||
{
|
||||
int offset = BOX_BOTTOM(*rect) - BOX_TOP(strut->rect);
|
||||
rect->height -= offset;
|
||||
}
|
||||
/* else ignore the strut */
|
||||
}
|
||||
} /* end loop over struts */
|
||||
} /* end meta_rectangle_expand_to_avoiding_struts */
|
||||
|
||||
void
|
||||
meta_rectangle_free_list_and_elements (GList *filled_list)
|
||||
{
|
||||
@@ -705,6 +776,25 @@ meta_rectangle_contained_in_region (const GList *spanning_rects,
|
||||
return contained;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_rectangle_overlaps_with_region (const GList *spanning_rects,
|
||||
const MetaRectangle *rect)
|
||||
{
|
||||
const GList *temp;
|
||||
gboolean overlaps;
|
||||
|
||||
temp = spanning_rects;
|
||||
overlaps = FALSE;
|
||||
while (!overlaps && temp != NULL)
|
||||
{
|
||||
overlaps = overlaps || meta_rectangle_overlap (temp->data, rect);
|
||||
temp = temp->next;
|
||||
}
|
||||
|
||||
return overlaps;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
meta_rectangle_clamp_to_fit_into_region (const GList *spanning_rects,
|
||||
FixedDirections fixed_directions,
|
||||
@@ -718,39 +808,36 @@ meta_rectangle_clamp_to_fit_into_region (const GList *spanning_rects,
|
||||
/* First, find best rectangle from spanning_rects to which we can clamp
|
||||
* rect to fit into.
|
||||
*/
|
||||
temp = spanning_rects;
|
||||
while (temp)
|
||||
for (temp = spanning_rects; temp; temp = temp->next)
|
||||
{
|
||||
int factor = 1;
|
||||
MetaRectangle *compare_rect = temp->data;
|
||||
int maximal_overlap_amount_for_compare;
|
||||
|
||||
/* If x is fixed and the entire width of rect doesn't fit in compare, set
|
||||
* factor to 0.
|
||||
/* If x is fixed and the entire width of rect doesn't fit in compare,
|
||||
* skip this rectangle.
|
||||
*/
|
||||
if ((fixed_directions & FIXED_DIRECTION_X) &&
|
||||
(compare_rect->x > rect->x ||
|
||||
compare_rect->x + compare_rect->width < rect->x + rect->width))
|
||||
factor = 0;
|
||||
continue;
|
||||
|
||||
/* If y is fixed and the entire height of rect doesn't fit in compare, set
|
||||
* factor to 0.
|
||||
/* If y is fixed and the entire height of rect doesn't fit in compare,
|
||||
* skip this rectangle.
|
||||
*/
|
||||
if ((fixed_directions & FIXED_DIRECTION_Y) &&
|
||||
(compare_rect->y > rect->y ||
|
||||
compare_rect->y + compare_rect->height < rect->y + rect->height))
|
||||
factor = 0;
|
||||
continue;
|
||||
|
||||
/* If compare can't hold the min_size window, set factor to 0 */
|
||||
/* If compare can't hold the min_size window, skip this rectangle. */
|
||||
if (compare_rect->width < min_size->width ||
|
||||
compare_rect->height < min_size->height)
|
||||
factor = 0;
|
||||
continue;
|
||||
|
||||
/* Determine maximal overlap amount */
|
||||
maximal_overlap_amount_for_compare =
|
||||
MIN (rect->width, compare_rect->width) *
|
||||
MIN (rect->height, compare_rect->height);
|
||||
maximal_overlap_amount_for_compare *= factor;
|
||||
|
||||
/* See if this is the best rect so far */
|
||||
if (maximal_overlap_amount_for_compare > best_overlap)
|
||||
@@ -758,8 +845,6 @@ meta_rectangle_clamp_to_fit_into_region (const GList *spanning_rects,
|
||||
best_rect = compare_rect;
|
||||
best_overlap = maximal_overlap_amount_for_compare;
|
||||
}
|
||||
|
||||
temp = temp->next;
|
||||
}
|
||||
|
||||
/* Clamp rect appropriately */
|
||||
@@ -792,34 +877,31 @@ meta_rectangle_clip_to_region (const GList *spanning_rects,
|
||||
/* First, find best rectangle from spanning_rects to which we will clip
|
||||
* rect into.
|
||||
*/
|
||||
temp = spanning_rects;
|
||||
while (temp)
|
||||
for (temp = spanning_rects; temp; temp = temp->next)
|
||||
{
|
||||
int factor = 1;
|
||||
MetaRectangle *compare_rect = temp->data;
|
||||
MetaRectangle overlap;
|
||||
int maximal_overlap_amount_for_compare;
|
||||
|
||||
/* If x is fixed and the entire width of rect doesn't fit in compare, set
|
||||
* factor to 0.
|
||||
|
||||
/* If x is fixed and the entire width of rect doesn't fit in compare,
|
||||
* skip the rectangle.
|
||||
*/
|
||||
if ((fixed_directions & FIXED_DIRECTION_X) &&
|
||||
(compare_rect->x > rect->x ||
|
||||
compare_rect->x + compare_rect->width < rect->x + rect->width))
|
||||
factor = 0;
|
||||
continue;
|
||||
|
||||
/* If y is fixed and the entire height of rect doesn't fit in compare, set
|
||||
* factor to 0.
|
||||
/* If y is fixed and the entire height of rect doesn't fit in compare,
|
||||
* skip the rectangle.
|
||||
*/
|
||||
if ((fixed_directions & FIXED_DIRECTION_Y) &&
|
||||
(compare_rect->y > rect->y ||
|
||||
compare_rect->y + compare_rect->height < rect->y + rect->height))
|
||||
factor = 0;
|
||||
continue;
|
||||
|
||||
/* Determine maximal overlap amount */
|
||||
meta_rectangle_intersect (rect, compare_rect, &overlap);
|
||||
maximal_overlap_amount_for_compare = meta_rectangle_area (&overlap);
|
||||
maximal_overlap_amount_for_compare *= factor;
|
||||
|
||||
/* See if this is the best rect so far */
|
||||
if (maximal_overlap_amount_for_compare > best_overlap)
|
||||
@@ -827,8 +909,6 @@ meta_rectangle_clip_to_region (const GList *spanning_rects,
|
||||
best_rect = compare_rect;
|
||||
best_overlap = maximal_overlap_amount_for_compare;
|
||||
}
|
||||
|
||||
temp = temp->next;
|
||||
}
|
||||
|
||||
/* Clip rect appropriately */
|
||||
@@ -875,36 +955,35 @@ meta_rectangle_shove_into_region (const GList *spanning_rects,
|
||||
/* First, find best rectangle from spanning_rects to which we will shove
|
||||
* rect into.
|
||||
*/
|
||||
temp = spanning_rects;
|
||||
while (temp)
|
||||
|
||||
for (temp = spanning_rects; temp; temp = temp->next)
|
||||
{
|
||||
int factor = 1;
|
||||
MetaRectangle *compare_rect = temp->data;
|
||||
int maximal_overlap_amount_for_compare;
|
||||
int dist_to_compare;
|
||||
|
||||
/* If x is fixed and the entire width of rect doesn't fit in compare, set
|
||||
* factor to 0.
|
||||
/* If x is fixed and the entire width of rect doesn't fit in compare,
|
||||
* skip this rectangle.
|
||||
*/
|
||||
if ((fixed_directions & FIXED_DIRECTION_X) &&
|
||||
(compare_rect->x > rect->x ||
|
||||
compare_rect->x + compare_rect->width < rect->x + rect->width))
|
||||
factor = 0;
|
||||
continue;
|
||||
|
||||
/* If y is fixed and the entire height of rect doesn't fit in compare, set
|
||||
* factor to 0.
|
||||
/* If y is fixed and the entire height of rect doesn't fit in compare,
|
||||
* skip this rectangle.
|
||||
*/
|
||||
if ((fixed_directions & FIXED_DIRECTION_Y) &&
|
||||
(compare_rect->y > rect->y ||
|
||||
compare_rect->y + compare_rect->height < rect->y + rect->height))
|
||||
factor = 0;
|
||||
continue;
|
||||
|
||||
/* Determine maximal overlap amount between rect & compare_rect */
|
||||
maximal_overlap_amount_for_compare =
|
||||
MIN (rect->width, compare_rect->width) *
|
||||
MIN (rect->height, compare_rect->height);
|
||||
|
||||
/* Determine distance necessary to put rect into comapre_rect */
|
||||
/* Determine distance necessary to put rect into compare_rect */
|
||||
dist_to_compare = 0;
|
||||
if (compare_rect->x > rect->x)
|
||||
dist_to_compare += compare_rect->x - rect->x;
|
||||
@@ -917,13 +996,6 @@ meta_rectangle_shove_into_region (const GList *spanning_rects,
|
||||
dist_to_compare += (rect->y + rect->height) -
|
||||
(compare_rect->y + compare_rect->height);
|
||||
|
||||
/* If we'd have to move in the wrong direction, disqualify compare_rect */
|
||||
if (factor == 0)
|
||||
{
|
||||
maximal_overlap_amount_for_compare = 0;
|
||||
dist_to_compare = G_MAXINT;
|
||||
}
|
||||
|
||||
/* See if this is the best rect so far */
|
||||
if ((maximal_overlap_amount_for_compare > best_overlap) ||
|
||||
(maximal_overlap_amount_for_compare == best_overlap &&
|
||||
@@ -933,8 +1005,6 @@ meta_rectangle_shove_into_region (const GList *spanning_rects,
|
||||
best_overlap = maximal_overlap_amount_for_compare;
|
||||
shortest_distance = dist_to_compare;
|
||||
}
|
||||
|
||||
temp = temp->next;
|
||||
}
|
||||
|
||||
/* Shove rect appropriately */
|
||||
@@ -1054,9 +1124,9 @@ meta_rectangle_edge_aligns (const MetaRectangle *rect, const MetaEdge *edge)
|
||||
case META_DIRECTION_BOTTOM:
|
||||
return BOX_LEFT (*rect) <= BOX_RIGHT (edge->rect) &&
|
||||
BOX_LEFT (edge->rect) <= BOX_RIGHT (*rect);
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
static GList*
|
||||
@@ -1140,27 +1210,27 @@ replace_rect_with_list (GList *old_element,
|
||||
}
|
||||
|
||||
/* Make a copy of the strut list, make sure that copy only contains parts
|
||||
* of the old_struts that intersect with the rection rect, and then do some
|
||||
* of the old_struts that intersect with the region rect, and then do some
|
||||
* magic to make all the new struts disjoint (okay, we we break up struts
|
||||
* that aren't disjoint in a way that the overlapping part is only included
|
||||
* once, so it's not really magic...).
|
||||
*/
|
||||
static GList*
|
||||
get_disjoint_strut_list_in_region (const GSList *old_struts,
|
||||
const MetaRectangle *region)
|
||||
get_disjoint_strut_rect_list_in_region (const GSList *old_struts,
|
||||
const MetaRectangle *region)
|
||||
{
|
||||
GList *struts;
|
||||
GList *strut_rects;
|
||||
GList *tmp;
|
||||
|
||||
/* First, copy the list */
|
||||
struts = NULL;
|
||||
strut_rects = NULL;
|
||||
while (old_struts)
|
||||
{
|
||||
MetaRectangle *cur = old_struts->data;
|
||||
MetaRectangle *cur = &((MetaStrut*)old_struts->data)->rect;
|
||||
MetaRectangle *copy = g_new (MetaRectangle, 1);
|
||||
*copy = *cur;
|
||||
if (meta_rectangle_intersect (copy, region, copy))
|
||||
struts = g_list_prepend (struts, copy);
|
||||
strut_rects = g_list_prepend (strut_rects, copy);
|
||||
else
|
||||
g_free (copy);
|
||||
|
||||
@@ -1170,7 +1240,7 @@ get_disjoint_strut_list_in_region (const GSList *old_struts,
|
||||
/* Now, loop over the list and check for intersections, fixing things up
|
||||
* where they do intersect.
|
||||
*/
|
||||
tmp = struts;
|
||||
tmp = strut_rects;
|
||||
while (tmp)
|
||||
{
|
||||
GList *compare;
|
||||
@@ -1197,10 +1267,10 @@ get_disjoint_strut_list_in_region (const GSList *old_struts,
|
||||
cur_leftover = g_list_prepend (cur_leftover, overlap_allocated);
|
||||
|
||||
/* Fix up tmp, compare, and cur -- maybe struts too */
|
||||
if (struts == tmp)
|
||||
if (strut_rects == tmp)
|
||||
{
|
||||
struts = replace_rect_with_list (tmp, cur_leftover);
|
||||
tmp = struts;
|
||||
strut_rects = replace_rect_with_list (tmp, cur_leftover);
|
||||
tmp = strut_rects;
|
||||
}
|
||||
else
|
||||
tmp = replace_rect_with_list (tmp, cur_leftover);
|
||||
@@ -1218,7 +1288,7 @@ get_disjoint_strut_list_in_region (const GSList *old_struts,
|
||||
tmp = tmp->next;
|
||||
}
|
||||
|
||||
return struts;
|
||||
return strut_rects;
|
||||
}
|
||||
|
||||
gint
|
||||
@@ -1326,7 +1396,7 @@ rectangle_and_edge_intersection (const MetaRectangle *rect,
|
||||
/* Find out if the intersection is empty; have to do it this way since
|
||||
* edges have a thickness of 0
|
||||
*/
|
||||
if ((result->width < 0 || result->height < 0) ||
|
||||
if ((result->width < 0 || result->height < 0) ||
|
||||
(result->width == 0 && result->height == 0))
|
||||
{
|
||||
result->width = 0;
|
||||
@@ -1376,6 +1446,8 @@ rectangle_and_edge_intersection (const MetaRectangle *rect,
|
||||
else
|
||||
*handle_type = 0;
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
}
|
||||
return intersect;
|
||||
@@ -1482,23 +1554,25 @@ split_edge (GList *cur_list,
|
||||
cur_list = g_list_prepend (cur_list, temp_edge);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
return cur_list;
|
||||
}
|
||||
|
||||
/* Split up edge and remove preliminary edges from strut_edges depending on
|
||||
* if and how strut and edge intersect.
|
||||
* if and how rect and edge intersect.
|
||||
*/
|
||||
static void
|
||||
fix_up_edges (MetaRectangle *strut, MetaEdge *edge,
|
||||
fix_up_edges (MetaRectangle *rect, MetaEdge *edge,
|
||||
GList **strut_edges, GList **edge_splits,
|
||||
gboolean *edge_needs_removal)
|
||||
{
|
||||
MetaEdge overlap;
|
||||
int handle_type;
|
||||
|
||||
if (!rectangle_and_edge_intersection (strut, edge, &overlap, &handle_type))
|
||||
if (!rectangle_and_edge_intersection (rect, edge, &overlap, &handle_type))
|
||||
return;
|
||||
|
||||
if (handle_type == 0 || handle_type == 1)
|
||||
@@ -1607,9 +1681,9 @@ meta_rectangle_find_onscreen_edges (const MetaRectangle *basic_rect,
|
||||
const GSList *all_struts)
|
||||
{
|
||||
GList *ret;
|
||||
GList *fixed_struts;
|
||||
GList *fixed_strut_rects;
|
||||
GList *edge_iter;
|
||||
const GList *strut_iter;
|
||||
const GList *strut_rect_iter;
|
||||
|
||||
/* The algorithm is basically as follows:
|
||||
* Make sure the struts are disjoint
|
||||
@@ -1627,18 +1701,19 @@ meta_rectangle_find_onscreen_edges (const MetaRectangle *basic_rect,
|
||||
*/
|
||||
|
||||
/* Make sure the struts are disjoint */
|
||||
fixed_struts = get_disjoint_strut_list_in_region (all_struts, basic_rect);
|
||||
fixed_strut_rects =
|
||||
get_disjoint_strut_rect_list_in_region (all_struts, basic_rect);
|
||||
|
||||
/* Start off the list with the edges of basic_rect */
|
||||
ret = add_edges (NULL, basic_rect, TRUE);
|
||||
|
||||
strut_iter = fixed_struts;
|
||||
while (strut_iter)
|
||||
strut_rect_iter = fixed_strut_rects;
|
||||
while (strut_rect_iter)
|
||||
{
|
||||
MetaRectangle *strut = (MetaRectangle*) strut_iter->data;
|
||||
MetaRectangle *strut_rect = (MetaRectangle*) strut_rect_iter->data;
|
||||
|
||||
/* Get the new possible edges we may need to add from the strut */
|
||||
GList *new_strut_edges = add_edges (NULL, strut, FALSE);
|
||||
GList *new_strut_edges = add_edges (NULL, strut_rect, FALSE);
|
||||
|
||||
edge_iter = ret;
|
||||
while (edge_iter)
|
||||
@@ -1647,7 +1722,7 @@ meta_rectangle_find_onscreen_edges (const MetaRectangle *basic_rect,
|
||||
GList *splits_of_cur_edge = NULL;
|
||||
gboolean edge_needs_removal = FALSE;
|
||||
|
||||
fix_up_edges (strut, cur_edge,
|
||||
fix_up_edges (strut_rect, cur_edge,
|
||||
&new_strut_edges, &splits_of_cur_edge,
|
||||
&edge_needs_removal);
|
||||
|
||||
@@ -1671,14 +1746,14 @@ meta_rectangle_find_onscreen_edges (const MetaRectangle *basic_rect,
|
||||
}
|
||||
|
||||
ret = g_list_concat (new_strut_edges, ret);
|
||||
strut_iter = strut_iter->next;
|
||||
strut_rect_iter = strut_rect_iter->next;
|
||||
}
|
||||
|
||||
/* Sort the list */
|
||||
ret = g_list_sort (ret, meta_rectangle_edge_cmp);
|
||||
|
||||
/* Free the fixed struts list */
|
||||
meta_rectangle_free_list_and_elements (fixed_struts);
|
||||
meta_rectangle_free_list_and_elements (fixed_strut_rects);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1695,6 +1770,7 @@ meta_rectangle_find_nonintersected_xinerama_edges (
|
||||
*/
|
||||
GList *ret;
|
||||
const GList *cur;
|
||||
GSList *temp_rects;
|
||||
|
||||
/* Initialize the return list to be empty */
|
||||
ret = NULL;
|
||||
@@ -1802,8 +1878,13 @@ meta_rectangle_find_nonintersected_xinerama_edges (
|
||||
cur = cur->next;
|
||||
}
|
||||
|
||||
temp_rects = NULL;
|
||||
for (; all_struts; all_struts = all_struts->next)
|
||||
temp_rects = g_slist_prepend (temp_rects,
|
||||
&((MetaStrut*)all_struts->data)->rect);
|
||||
ret = meta_rectangle_remove_intersections_with_boxes_from_edges (ret,
|
||||
all_struts);
|
||||
temp_rects);
|
||||
g_slist_free (temp_rects);
|
||||
|
||||
/* Sort the list */
|
||||
ret = g_list_sort (ret, meta_rectangle_edge_cmp);
|
||||
|
28
src/boxes.h
28
src/boxes.h
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Simple box operations */
|
||||
|
||||
/*
|
||||
@@ -26,7 +28,6 @@
|
||||
#include "common.h"
|
||||
|
||||
typedef struct _MetaRectangle MetaRectangle;
|
||||
|
||||
struct _MetaRectangle
|
||||
{
|
||||
int x;
|
||||
@@ -35,6 +36,13 @@ struct _MetaRectangle
|
||||
int height;
|
||||
};
|
||||
|
||||
typedef struct _MetaStrut MetaStrut;
|
||||
struct _MetaStrut
|
||||
{
|
||||
MetaRectangle rect;
|
||||
MetaDirection side;
|
||||
};
|
||||
|
||||
#define BOX_LEFT(box) ((box).x) /* Leftmost pixel of rect */
|
||||
#define BOX_RIGHT(box) ((box).x + (box).width) /* One pixel past right */
|
||||
#define BOX_TOP(box) ((box).y) /* Topmost pixel of rect */
|
||||
@@ -42,8 +50,9 @@ struct _MetaRectangle
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FIXED_DIRECTION_X = 1 << 0,
|
||||
FIXED_DIRECTION_Y = 1 << 1,
|
||||
FIXED_DIRECTION_NONE = 0,
|
||||
FIXED_DIRECTION_X = 1 << 0,
|
||||
FIXED_DIRECTION_Y = 1 << 1,
|
||||
} FixedDirections;
|
||||
|
||||
typedef enum
|
||||
@@ -164,6 +173,16 @@ GList* meta_rectangle_expand_region_conditionally (
|
||||
const int min_x,
|
||||
const int min_y);
|
||||
|
||||
/* Expand rect in direction to the size of expand_to, and then clip out any
|
||||
* overlapping struts oriented orthognal to the expansion direction. (Think
|
||||
* horizontal or vertical maximization)
|
||||
*/
|
||||
void meta_rectangle_expand_to_avoiding_struts (
|
||||
MetaRectangle *rect,
|
||||
const MetaRectangle *expand_to,
|
||||
const MetaDirection direction,
|
||||
const GSList *all_struts);
|
||||
|
||||
/* Free the list created by
|
||||
* meta_rectangle_get_minimal_spanning_set_for_region()
|
||||
* or
|
||||
@@ -183,6 +202,9 @@ gboolean meta_rectangle_could_fit_in_region (
|
||||
gboolean meta_rectangle_contained_in_region (
|
||||
const GList *spanning_rects,
|
||||
const MetaRectangle *rect);
|
||||
gboolean meta_rectangle_overlaps_with_region (
|
||||
const GList *spanning_rects,
|
||||
const MetaRectangle *rect);
|
||||
|
||||
/* Make the rectangle small enough to fit into one of the spanning_rects,
|
||||
* but make it no smaller than min_size.
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006 Red Hat, Inc.
|
||||
*
|
||||
@@ -336,8 +338,6 @@ meta_comp_screen_redirect (MetaCompScreen *info)
|
||||
|
||||
info->magnifier = cm_magnifier_new (CM_NODE (info->stacker), &source, &target);
|
||||
|
||||
g_object_unref (info->stacker);
|
||||
|
||||
if (g_getenv ("USE_MAGNIFIER"))
|
||||
cm_magnifier_set_active (info->magnifier, TRUE);
|
||||
else
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
#include "screen.h"
|
||||
#include "c-window.h"
|
||||
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006 Red Hat, Inc.
|
||||
*
|
||||
@@ -34,7 +36,8 @@
|
||||
#include "c-window.h"
|
||||
#include "window.h"
|
||||
#include "frame.h"
|
||||
#include "spring-model.h"
|
||||
#include "compositor.h"
|
||||
#include "workspace.h"
|
||||
|
||||
typedef struct UnminimizeInfo UnminimizeInfo;
|
||||
|
||||
@@ -1184,10 +1187,6 @@ typedef struct
|
||||
gdouble last_time;
|
||||
} FocusInfo;
|
||||
|
||||
/* XXX HATE */
|
||||
extern void get_patch_points (Model *model, CmPoint points[4][4]);
|
||||
extern void compute_window_rect (MetaWindow *window, MetaRectangle *rect);
|
||||
|
||||
static gboolean
|
||||
update_focus (gpointer data)
|
||||
{
|
||||
|
@@ -1,3 +1,4 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
/*
|
||||
* Copyright (C) 2006 Red Hat, Inc.
|
||||
*
|
||||
@@ -27,7 +28,7 @@
|
||||
typedef struct _MetaCompWindow MetaCompWindow;
|
||||
|
||||
typedef void (* MetaCompWindowDestroy) (MetaCompWindow *window,
|
||||
gpointer closure);
|
||||
gpointer closure);
|
||||
|
||||
MetaCompWindow *meta_comp_window_new (MetaScreen *screen,
|
||||
WsDrawable *drawable,
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity RGB color stuff */
|
||||
|
||||
/*
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity RGB color stuff */
|
||||
|
||||
/*
|
||||
|
59
src/common.h
59
src/common.h
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity common types shared by core.h and ui.h */
|
||||
|
||||
/*
|
||||
@@ -44,7 +46,8 @@ typedef enum
|
||||
META_FRAME_ALLOWS_SHADE = 1 << 10,
|
||||
META_FRAME_ALLOWS_MOVE = 1 << 11,
|
||||
META_FRAME_FULLSCREEN = 1 << 12,
|
||||
META_FRAME_IS_FLASHING = 1 << 13
|
||||
META_FRAME_IS_FLASHING = 1 << 13,
|
||||
META_FRAME_ABOVE = 1 << 14
|
||||
} MetaFrameFlags;
|
||||
|
||||
typedef enum
|
||||
@@ -74,7 +77,7 @@ typedef struct _MetaWindowMenu MetaWindowMenu;
|
||||
typedef void (* MetaWindowMenuFunc) (MetaWindowMenu *menu,
|
||||
Display *xdisplay,
|
||||
Window client_xwindow,
|
||||
Time timestamp,
|
||||
guint32 timestamp,
|
||||
MetaMenuOp op,
|
||||
int workspace,
|
||||
gpointer data);
|
||||
@@ -129,7 +132,13 @@ typedef enum
|
||||
META_GRAB_OP_CLICKING_MAXIMIZE,
|
||||
META_GRAB_OP_CLICKING_UNMAXIMIZE,
|
||||
META_GRAB_OP_CLICKING_DELETE,
|
||||
META_GRAB_OP_CLICKING_MENU
|
||||
META_GRAB_OP_CLICKING_MENU,
|
||||
META_GRAB_OP_CLICKING_SHADE,
|
||||
META_GRAB_OP_CLICKING_UNSHADE,
|
||||
META_GRAB_OP_CLICKING_ABOVE,
|
||||
META_GRAB_OP_CLICKING_UNABOVE,
|
||||
META_GRAB_OP_CLICKING_STICK,
|
||||
META_GRAB_OP_CLICKING_UNSTICK
|
||||
} MetaGrabOp;
|
||||
|
||||
typedef enum
|
||||
@@ -163,12 +172,14 @@ typedef enum
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_ACTION_DOUBLE_CLICK_TITLEBAR_TOGGLE_SHADE,
|
||||
META_ACTION_DOUBLE_CLICK_TITLEBAR_TOGGLE_MAXIMIZE,
|
||||
META_ACTION_DOUBLE_CLICK_TITLEBAR_MINIMIZE,
|
||||
META_ACTION_DOUBLE_CLICK_TITLEBAR_NONE,
|
||||
META_ACTION_DOUBLE_CLICK_TITLEBAR_LAST
|
||||
} MetaActionDoubleClickTitlebar;
|
||||
META_ACTION_TITLEBAR_TOGGLE_SHADE,
|
||||
META_ACTION_TITLEBAR_TOGGLE_MAXIMIZE,
|
||||
META_ACTION_TITLEBAR_MINIMIZE,
|
||||
META_ACTION_TITLEBAR_NONE,
|
||||
META_ACTION_TITLEBAR_LOWER,
|
||||
META_ACTION_TITLEBAR_MENU,
|
||||
META_ACTION_TITLEBAR_LAST
|
||||
} MetaActionTitlebar;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -206,12 +217,24 @@ typedef enum
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
META_DIRECTION_LEFT = 1 << 0,
|
||||
META_DIRECTION_RIGHT = 1 << 1,
|
||||
META_DIRECTION_TOP = 1 << 2,
|
||||
META_DIRECTION_BOTTOM = 1 << 3,
|
||||
META_DIRECTION_UP = 1 << 2, /* Alternate name for TOP */
|
||||
META_DIRECTION_DOWN = 1 << 3 /* Alternate name for BOTTOM */
|
||||
META_DIRECTION_LEFT = 1 << 0,
|
||||
META_DIRECTION_RIGHT = 1 << 1,
|
||||
META_DIRECTION_TOP = 1 << 2,
|
||||
META_DIRECTION_BOTTOM = 1 << 3,
|
||||
|
||||
/* Some aliases for making code more readable for various circumstances. */
|
||||
META_DIRECTION_UP = META_DIRECTION_TOP,
|
||||
META_DIRECTION_DOWN = META_DIRECTION_BOTTOM,
|
||||
|
||||
/* A few more definitions using aliases */
|
||||
META_DIRECTION_HORIZONTAL = META_DIRECTION_LEFT | META_DIRECTION_RIGHT,
|
||||
META_DIRECTION_VERTICAL = META_DIRECTION_UP | META_DIRECTION_DOWN,
|
||||
|
||||
/* And a few more aliases */
|
||||
META_SIDE_LEFT = META_DIRECTION_LEFT,
|
||||
META_SIDE_RIGHT = META_DIRECTION_RIGHT,
|
||||
META_SIDE_TOP = META_DIRECTION_TOP,
|
||||
META_SIDE_BOTTOM = META_DIRECTION_BOTTOM
|
||||
} MetaDirection;
|
||||
|
||||
/* Function a window button can have. Note, you can't add stuff here
|
||||
@@ -224,6 +247,12 @@ typedef enum
|
||||
META_BUTTON_FUNCTION_MINIMIZE,
|
||||
META_BUTTON_FUNCTION_MAXIMIZE,
|
||||
META_BUTTON_FUNCTION_CLOSE,
|
||||
META_BUTTON_FUNCTION_SHADE,
|
||||
META_BUTTON_FUNCTION_ABOVE,
|
||||
META_BUTTON_FUNCTION_STICK,
|
||||
META_BUTTON_FUNCTION_UNSHADE,
|
||||
META_BUTTON_FUNCTION_UNABOVE,
|
||||
META_BUTTON_FUNCTION_UNSTICK,
|
||||
META_BUTTON_FUNCTION_LAST
|
||||
} MetaButtonFunction;
|
||||
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2003, 2004, 2005, 2006 Red Hat, Inc.
|
||||
* Copyright (C) 2003 Keith Packard
|
||||
@@ -47,7 +49,6 @@
|
||||
#include <X11/extensions/Xdamage.h>
|
||||
#include <X11/extensions/Xfixes.h>
|
||||
#include <X11/extensions/Xrender.h>
|
||||
#include "spring-model.h"
|
||||
#include <cm/state.h>
|
||||
|
||||
#include "effects.h"
|
||||
@@ -96,6 +97,8 @@ handle_error (Display *dpy, XErrorEvent *ev, gpointer data)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
|
||||
static Window
|
||||
get_xid (MetaWindow *window)
|
||||
{
|
||||
@@ -105,8 +108,14 @@ get_xid (MetaWindow *window)
|
||||
return window->xwindow;
|
||||
}
|
||||
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
|
||||
/* This is called by Metacity's effect code when an effect needs to happen.
|
||||
* In compositor-less Metacity, this includes things like the wireframe
|
||||
* zoom when a window is minimised. We have a rather larger box of tricks.
|
||||
*/
|
||||
static void
|
||||
do_effect (MetaEffect *effect,
|
||||
gpointer data)
|
||||
@@ -115,6 +124,15 @@ do_effect (MetaEffect *effect,
|
||||
MetaCompWindow *window;
|
||||
|
||||
screen = meta_comp_screen_get_by_xwindow (get_xid (effect->window));
|
||||
|
||||
if (!screen)
|
||||
{
|
||||
/* sanity check: if no screen is found, bail */
|
||||
meta_warning ("No screen found for %s (%ld); aborting effect.\n",
|
||||
effect->window->desc, get_xid (effect->window));
|
||||
return;
|
||||
}
|
||||
|
||||
window = meta_comp_screen_lookup_window (screen, get_xid (effect->window));
|
||||
|
||||
switch (effect->type)
|
||||
@@ -152,6 +170,9 @@ do_effect (MetaEffect *effect,
|
||||
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
|
||||
/* Constructs a new compositor. The rest of Metacity knows whether the
|
||||
* compositor is turned on by whether this function returns NULL or not.
|
||||
*/
|
||||
MetaCompositor *
|
||||
meta_compositor_new (MetaDisplay *display)
|
||||
{
|
||||
@@ -196,7 +217,11 @@ meta_compositor_new (MetaDisplay *display)
|
||||
|
||||
compositor->enabled = TRUE;
|
||||
|
||||
meta_push_effect_handler (do_effect, compositor);
|
||||
/* Compositor without bling is the default, but leave the bling
|
||||
* accessible for now.
|
||||
*/
|
||||
if (getenv("METACITY_BLING")!=NULL)
|
||||
meta_push_effect_handler (do_effect, compositor);
|
||||
|
||||
return compositor;
|
||||
#else /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
@@ -204,6 +229,7 @@ meta_compositor_new (MetaDisplay *display)
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
}
|
||||
|
||||
#if 0
|
||||
void
|
||||
meta_compositor_set_debug_updates (MetaCompositor *compositor,
|
||||
gboolean debug_updates)
|
||||
@@ -212,6 +238,7 @@ meta_compositor_set_debug_updates (MetaCompositor *compositor,
|
||||
compositor->debug_updates = !!debug_updates;
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
}
|
||||
#endif /* 0 */
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
static void
|
||||
@@ -240,8 +267,29 @@ meta_compositor_unref (MetaCompositor *compositor)
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
}
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
/****************************************************************************
|
||||
*
|
||||
* HANDLING X EVENTS
|
||||
*
|
||||
* Here are several process_* functions, which are all called by
|
||||
* meta_compositor_process_event at the bottom.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
/* Handles the CirculateNotify XEvent.
|
||||
*/
|
||||
static void
|
||||
process_circulate_notify (MetaCompositor *compositor,
|
||||
XCirculateEvent* event)
|
||||
{
|
||||
/* FIXME: Do something here. */
|
||||
}
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
/* Handles the ConfigureNotify XEvent.
|
||||
*/
|
||||
static void
|
||||
process_configure_notify (MetaCompositor *compositor,
|
||||
XConfigureEvent *event)
|
||||
@@ -275,6 +323,9 @@ process_configure_notify (MetaCompositor *compositor,
|
||||
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
/* Handles the Expose XEvent.
|
||||
* XXX FIXME: This looks like it quite urgently needs looking into. --tthurman
|
||||
*/
|
||||
static void
|
||||
process_expose (MetaCompositor *compositor,
|
||||
XExposeEvent *event)
|
||||
@@ -286,6 +337,10 @@ process_expose (MetaCompositor *compositor,
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
|
||||
#if 0
|
||||
|
||||
/* Apparently never used. */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
CmDrawableNode *node;
|
||||
@@ -325,9 +380,12 @@ fade_out (gpointer data)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
#endif /* 0 */
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
/* Handles the MapNotify XEvent.
|
||||
*/
|
||||
static void
|
||||
process_map (MetaCompositor *compositor,
|
||||
XMapEvent *event)
|
||||
@@ -341,13 +399,13 @@ process_map (MetaCompositor *compositor,
|
||||
/* See if window was mapped as child of root */
|
||||
screen = meta_display_screen_for_root (compositor->meta_display,
|
||||
event->event);
|
||||
|
||||
|
||||
if (screen == NULL)
|
||||
{
|
||||
meta_topic (META_DEBUG_COMPOSITOR,
|
||||
"MapNotify received on non-root 0x%lx for 0x%lx\n",
|
||||
event->event, event->window);
|
||||
|
||||
|
||||
/* MapNotify wasn't for a child of the root */
|
||||
return;
|
||||
}
|
||||
@@ -359,6 +417,8 @@ process_map (MetaCompositor *compositor,
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
/* Handles the UnmapNotify XEvent.
|
||||
*/
|
||||
static void
|
||||
process_unmap (MetaCompositor *compositor,
|
||||
XUnmapEvent *event)
|
||||
@@ -385,6 +445,8 @@ process_unmap (MetaCompositor *compositor,
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
/* Handles the CreateNotify XEvent.
|
||||
*/
|
||||
static void
|
||||
process_create (MetaCompositor *compositor,
|
||||
XCreateWindowEvent *event)
|
||||
@@ -426,6 +488,8 @@ process_create (MetaCompositor *compositor,
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
/* Handles the DestroyNotify XEvent.
|
||||
*/
|
||||
static void
|
||||
process_destroy (MetaCompositor *compositor,
|
||||
XDestroyWindowEvent *event)
|
||||
@@ -459,6 +523,8 @@ process_destroy (MetaCompositor *compositor,
|
||||
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
/* Handles the ReparentNotify XEvent.
|
||||
*/
|
||||
static void
|
||||
process_reparent (MetaCompositor *compositor,
|
||||
XReparentEvent *event)
|
||||
@@ -501,6 +567,9 @@ process_reparent (MetaCompositor *compositor,
|
||||
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
|
||||
/* If the compositor is enabled, this function gets called with any XEvent
|
||||
* in case we want to deal with it specially.
|
||||
*/
|
||||
void
|
||||
meta_compositor_process_event (MetaCompositor *compositor,
|
||||
XEvent *event,
|
||||
@@ -510,9 +579,12 @@ meta_compositor_process_event (MetaCompositor *compositor,
|
||||
if (!compositor->enabled)
|
||||
return; /* no extension */
|
||||
|
||||
/* FIXME support CirculateNotify */
|
||||
|
||||
if (event->type == ConfigureNotify)
|
||||
if (event->type == CirculateNotify)
|
||||
{
|
||||
process_circulate_notify (compositor,
|
||||
(XCirculateEvent*) event);
|
||||
}
|
||||
else if (event->type == ConfigureNotify)
|
||||
{
|
||||
process_configure_notify (compositor,
|
||||
(XConfigureEvent*) event);
|
||||
@@ -551,9 +623,14 @@ meta_compositor_process_event (MetaCompositor *compositor,
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
}
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
#if 0
|
||||
static GTimer *timer;
|
||||
#endif /* 0 */
|
||||
#endif /* HAVE_COMPOSITE_EXTENSIONS */
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
#if 0
|
||||
static void
|
||||
dump_stacking_order (GList *nodes)
|
||||
{
|
||||
@@ -567,6 +644,7 @@ dump_stacking_order (GList *nodes)
|
||||
}
|
||||
g_print ("\n");
|
||||
}
|
||||
#endif /* 0 */
|
||||
#endif
|
||||
|
||||
/* This is called when metacity does its XQueryTree() on startup
|
||||
@@ -753,7 +831,7 @@ struct MoveInfo
|
||||
|
||||
void
|
||||
get_patch_points (Model *model,
|
||||
CmPoint points[4][4])
|
||||
CmPoint points[4][4])
|
||||
{
|
||||
int i, j;
|
||||
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity compositing manager */
|
||||
|
||||
/*
|
||||
@@ -24,6 +26,13 @@
|
||||
|
||||
#include "util.h"
|
||||
#include "display.h"
|
||||
#include "spring-model.h"
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
#include "cm/deform.h"
|
||||
/* FIXME: Needs namespacing. */
|
||||
void get_patch_points (Model *model, CmPoint points[4][4]);
|
||||
#endif
|
||||
|
||||
typedef void (* MetaAnimationFinishedFunc) (gpointer data);
|
||||
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity size/position constraints */
|
||||
|
||||
/*
|
||||
@@ -97,6 +99,7 @@ typedef enum
|
||||
PRIORITY_MAXIMIZATION = 2,
|
||||
PRIORITY_FULLSCREEN = 2,
|
||||
PRIORITY_SIZE_HINTS_LIMITS = 3,
|
||||
PRIORITY_TITLEBAR_VISIBLE = 4,
|
||||
PRIORITY_PARTIALLY_VISIBLE_ON_WORKAREA = 4,
|
||||
PRIORITY_MAXIMUM = 4 // Dummy value used for loop end = max(all priorities)
|
||||
} ConstraintPriority;
|
||||
@@ -165,6 +168,10 @@ static gboolean constrain_fully_onscreen (MetaWindow *window,
|
||||
ConstraintInfo *info,
|
||||
ConstraintPriority priority,
|
||||
gboolean check_only);
|
||||
static gboolean constrain_titlebar_visible (MetaWindow *window,
|
||||
ConstraintInfo *info,
|
||||
ConstraintPriority priority,
|
||||
gboolean check_only);
|
||||
static gboolean constrain_partially_onscreen (MetaWindow *window,
|
||||
ConstraintInfo *info,
|
||||
ConstraintPriority priority,
|
||||
@@ -209,6 +216,7 @@ static const Constraint all_constraints[] = {
|
||||
{constrain_aspect_ratio, "constrain_aspect_ratio"},
|
||||
{constrain_to_single_xinerama, "constrain_to_single_xinerama"},
|
||||
{constrain_fully_onscreen, "constrain_fully_onscreen"},
|
||||
{constrain_titlebar_visible, "constrain_titlebar_visible"},
|
||||
{constrain_partially_onscreen, "constrain_partially_onscreen"},
|
||||
{NULL, NULL}
|
||||
};
|
||||
@@ -342,7 +350,7 @@ setup_constraint_info (ConstraintInfo *info,
|
||||
else if (flags & META_IS_RESIZE_ACTION)
|
||||
info->action_type = ACTION_RESIZE;
|
||||
else if (flags & META_IS_MOVE_ACTION)
|
||||
info->action_type = ACTION_MOVE_AND_RESIZE;
|
||||
info->action_type = ACTION_MOVE;
|
||||
else
|
||||
g_error ("BAD, BAD developer! No treat for you! (Fix your calls to "
|
||||
"meta_window_move_resize_internal()).\n");
|
||||
@@ -357,7 +365,7 @@ setup_constraint_info (ConstraintInfo *info,
|
||||
* and (b) ignored it for aspect ratio windows -- at least in those
|
||||
* cases where both directions do actually change size.
|
||||
*/
|
||||
info->fixed_directions = 0;
|
||||
info->fixed_directions = FIXED_DIRECTION_NONE;
|
||||
/* If x directions don't change but either y direction does */
|
||||
if ( orig->x == new->x && orig->x + orig->width == new->x + new->width &&
|
||||
(orig->y != new->y || orig->y + orig->height != new->y + new->height))
|
||||
@@ -377,12 +385,13 @@ setup_constraint_info (ConstraintInfo *info,
|
||||
* aren't explicit user interaction, though, so just clear it out.
|
||||
*/
|
||||
if (!info->is_user_action)
|
||||
info->fixed_directions = 0;
|
||||
|
||||
meta_window_get_work_area_current_xinerama (window, &info->work_area_xinerama);
|
||||
info->fixed_directions = FIXED_DIRECTION_NONE;
|
||||
|
||||
xinerama_info =
|
||||
meta_screen_get_xinerama_for_window (window->screen, window);
|
||||
meta_screen_get_xinerama_for_rect (window->screen, &info->current);
|
||||
meta_window_get_work_area_for_xinerama (window,
|
||||
xinerama_info->number,
|
||||
&info->work_area_xinerama);
|
||||
info->entire_xinerama = xinerama_info->rect;
|
||||
|
||||
cur_workspace = window->screen->active_workspace;
|
||||
@@ -392,6 +401,23 @@ setup_constraint_info (ConstraintInfo *info,
|
||||
meta_workspace_get_onxinerama_region (cur_workspace,
|
||||
xinerama_info->number);
|
||||
|
||||
/* Workaround braindead legacy apps that don't know how to
|
||||
* fullscreen themselves properly.
|
||||
*/
|
||||
if (meta_rectangle_equal (new, &xinerama_info->rect) &&
|
||||
window->has_fullscreen_func &&
|
||||
!window->fullscreen)
|
||||
{
|
||||
/*
|
||||
meta_topic (META_DEBUG_GEOMETRY,
|
||||
*/
|
||||
meta_warning (
|
||||
"Treating resize request of legacy application %s as a "
|
||||
"fullscreen request\n",
|
||||
window->desc);
|
||||
meta_window_make_fullscreen_internal (window);
|
||||
}
|
||||
|
||||
/* Log all this information for debugging */
|
||||
meta_topic (META_DEBUG_GEOMETRY,
|
||||
"Setting up constraint info:\n"
|
||||
@@ -415,7 +441,7 @@ setup_constraint_info (ConstraintInfo *info,
|
||||
"Freakin' Invalid Stupid",
|
||||
(info->is_user_action) ? "true" : "false",
|
||||
meta_gravity_to_string (info->resize_gravity),
|
||||
(info->fixed_directions == 0) ? "None" :
|
||||
(info->fixed_directions == FIXED_DIRECTION_NONE) ? "None" :
|
||||
(info->fixed_directions == FIXED_DIRECTION_X) ? "X fixed" :
|
||||
(info->fixed_directions == FIXED_DIRECTION_Y) ? "Y fixed" :
|
||||
"Freakin' Invalid Stupid",
|
||||
@@ -434,13 +460,15 @@ place_window_if_needed(MetaWindow *window,
|
||||
|
||||
/* Do placement if any, so we go ahead and apply position
|
||||
* constraints in a move-only context. Don't place
|
||||
* maximized/fullscreen windows until they are unmaximized
|
||||
* and unfullscreened
|
||||
* maximized/minimized/fullscreen windows until they are
|
||||
* unmaximized, unminimized and unfullscreened.
|
||||
*/
|
||||
did_placement = FALSE;
|
||||
if (!window->placed &&
|
||||
window->calc_placement &&
|
||||
!META_WINDOW_MAXIMIZED (window) &&
|
||||
!(window->maximized_horizontally ||
|
||||
window->maximized_vertically) &&
|
||||
!window->minimized &&
|
||||
!window->fullscreen)
|
||||
{
|
||||
MetaRectangle placed_rect = info->orig;
|
||||
@@ -472,56 +500,50 @@ place_window_if_needed(MetaWindow *window,
|
||||
/* Since we just barely placed the window, there's no reason to
|
||||
* consider any of the directions fixed.
|
||||
*/
|
||||
info->fixed_directions = 0;
|
||||
info->fixed_directions = FIXED_DIRECTION_NONE;
|
||||
}
|
||||
|
||||
if ((window->maximize_horizontally_after_placement ||
|
||||
window->maximize_vertically_after_placement) &&
|
||||
(window->placed || did_placement))
|
||||
if (window->placed || did_placement)
|
||||
{
|
||||
/* define a sane saved_rect so that the user can unmaximize to
|
||||
* something reasonable.
|
||||
*/
|
||||
if (info->current.width >= info->work_area_xinerama.width)
|
||||
{
|
||||
info->current.width = .75 * info->work_area_xinerama.width;
|
||||
info->current.x = info->work_area_xinerama.x +
|
||||
.125 * info->work_area_xinerama.width;
|
||||
}
|
||||
if (info->current.height >= info->work_area_xinerama.height)
|
||||
{
|
||||
info->current.height = .75 * info->work_area_xinerama.height;
|
||||
info->current.y = info->work_area_xinerama.y +
|
||||
.083 * info->work_area_xinerama.height;
|
||||
}
|
||||
|
||||
if (window->maximize_horizontally_after_placement &&
|
||||
if (window->maximize_horizontally_after_placement ||
|
||||
window->maximize_vertically_after_placement)
|
||||
meta_window_maximize_internal (window,
|
||||
META_MAXIMIZE_HORIZONTAL |
|
||||
META_MAXIMIZE_VERTICAL,
|
||||
&info->current);
|
||||
else if (window->maximize_horizontally_after_placement)
|
||||
{
|
||||
info->current.x = info->work_area_xinerama.x
|
||||
+ info->fgeom->left_width;
|
||||
info->current.width = info->work_area_xinerama.width
|
||||
- info->fgeom->left_width - info->fgeom->right_width;
|
||||
/* define a sane saved_rect so that the user can unmaximize to
|
||||
* something reasonable.
|
||||
*/
|
||||
if (info->current.width >= info->work_area_xinerama.width)
|
||||
{
|
||||
info->current.width = .75 * info->work_area_xinerama.width;
|
||||
info->current.x = info->work_area_xinerama.x +
|
||||
.125 * info->work_area_xinerama.width;
|
||||
}
|
||||
if (info->current.height >= info->work_area_xinerama.height)
|
||||
{
|
||||
info->current.height = .75 * info->work_area_xinerama.height;
|
||||
info->current.y = info->work_area_xinerama.y +
|
||||
.083 * info->work_area_xinerama.height;
|
||||
}
|
||||
|
||||
if (window->maximize_horizontally_after_placement ||
|
||||
window->maximize_vertically_after_placement)
|
||||
meta_window_maximize_internal (window,
|
||||
(window->maximize_horizontally_after_placement ?
|
||||
META_MAXIMIZE_HORIZONTAL : 0 ) |
|
||||
(window->maximize_vertically_after_placement ?
|
||||
META_MAXIMIZE_VERTICAL : 0), &info->current);
|
||||
|
||||
/* maximization may have changed frame geometry */
|
||||
if (window->frame && !window->fullscreen)
|
||||
meta_frame_calc_geometry (window->frame, info->fgeom);
|
||||
|
||||
window->maximize_horizontally_after_placement = FALSE;
|
||||
window->maximize_vertically_after_placement = FALSE;
|
||||
}
|
||||
else if (window->maximize_vertically_after_placement);
|
||||
if (window->minimize_after_placement)
|
||||
{
|
||||
info->current.y = info->work_area_xinerama.y
|
||||
+ info->fgeom->top_height;
|
||||
info->current.height = info->work_area_xinerama.height
|
||||
- info->fgeom->top_height - info->fgeom->bottom_height;
|
||||
meta_window_minimize (window);
|
||||
window->minimize_after_placement = FALSE;
|
||||
}
|
||||
|
||||
/* maximization may have changed frame geometry */
|
||||
if (window->frame && !window->fullscreen)
|
||||
meta_frame_calc_geometry (window->frame, info->fgeom);
|
||||
|
||||
window->maximize_horizontally_after_placement = FALSE;
|
||||
window->maximize_vertically_after_placement = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -536,23 +558,33 @@ update_onscreen_requirements (MetaWindow *window,
|
||||
window->type == META_WINDOW_DOCK)
|
||||
return;
|
||||
|
||||
/* USABILITY NOTE: Naturally, I only want the require_fully_onscreen and
|
||||
* require_on_single_xinerama flags to *become false* due to user
|
||||
* interactions (which is allowed since certain constraints are ignored
|
||||
* for user interactions regardless of the setting of these flags).
|
||||
* However, whether to make these flags *become true* due to just an
|
||||
* application interaction is a little trickier. It's possible that
|
||||
* users may find not doing that strange since two application
|
||||
* interactions that resize in opposite ways don't necessarily end up
|
||||
* cancelling--but it may also be strange for the user to have an
|
||||
* application resize the window so that it's onscreen, the user forgets
|
||||
* about it, and then later the app is able to resize itself off the
|
||||
* screen. Anyway, for now, I'm think the latter is the more problematic
|
||||
* case but this may need to be revisited.
|
||||
/* We don't want to update the requirements for fullscreen windows;
|
||||
* fullscreen windows are specially handled anyway, and it updating
|
||||
* the requirements when windows enter fullscreen mode mess up the
|
||||
* handling of the window when it leaves that mode (especially when
|
||||
* the application sends a bunch of configurerequest events). See
|
||||
* #353699.
|
||||
*/
|
||||
if (window->fullscreen)
|
||||
return;
|
||||
|
||||
/* USABILITY NOTE: Naturally, I only want the require_fully_onscreen,
|
||||
* require_on_single_xinerama, and require_titlebar_visible flags to
|
||||
* *become false* due to user interactions (which is allowed since
|
||||
* certain constraints are ignored for user interactions regardless of
|
||||
* the setting of these flags). However, whether to make these flags
|
||||
* *become true* due to just an application interaction is a little
|
||||
* trickier. It's possible that users may find not doing that strange
|
||||
* since two application interactions that resize in opposite ways don't
|
||||
* necessarily end up cancelling--but it may also be strange for the user
|
||||
* to have an application resize the window so that it's onscreen, the
|
||||
* user forgets about it, and then later the app is able to resize itself
|
||||
* off the screen. Anyway, for now, I think the latter is the more
|
||||
* problematic case but this may need to be revisited.
|
||||
*/
|
||||
|
||||
/* The require onscreen/on-single-xinerama stuff is relative to the
|
||||
* outer window, not the inner
|
||||
/* The require onscreen/on-single-xinerama and titlebar_visible
|
||||
* stuff is relative to the outer window, not the inner
|
||||
*/
|
||||
extend_by_frame (&info->current, info->fgeom);
|
||||
|
||||
@@ -582,6 +614,26 @@ update_onscreen_requirements (MetaWindow *window,
|
||||
window->desc,
|
||||
window->require_on_single_xinerama ? "TRUE" : "FALSE");
|
||||
|
||||
/* Update whether we want future constraint runs to require the
|
||||
* titlebar to be visible.
|
||||
*/
|
||||
if (window->frame && window->decorated)
|
||||
{
|
||||
MetaRectangle titlebar_rect;
|
||||
|
||||
titlebar_rect = info->current;
|
||||
titlebar_rect.height = info->fgeom->top_height;
|
||||
old = window->require_titlebar_visible;
|
||||
window->require_titlebar_visible =
|
||||
meta_rectangle_overlaps_with_region (info->usable_screen_region,
|
||||
&titlebar_rect);
|
||||
if (old ^ window->require_titlebar_visible)
|
||||
meta_topic (META_DEBUG_GEOMETRY,
|
||||
"require_titlebar_visible for %s toggled to %s\n",
|
||||
window->desc,
|
||||
window->require_titlebar_visible ? "TRUE" : "FALSE");
|
||||
}
|
||||
|
||||
/* Don't forget to restore the position of the window */
|
||||
unextend_by_frame (&info->current, info->fgeom);
|
||||
}
|
||||
@@ -639,8 +691,9 @@ constrain_maximization (MetaWindow *window,
|
||||
ConstraintPriority priority,
|
||||
gboolean check_only)
|
||||
{
|
||||
MetaRectangle min_size, max_size, work_area;
|
||||
gboolean hminbad, vminbad, hmaxbad, vmaxbad;
|
||||
MetaRectangle target_size;
|
||||
MetaRectangle min_size, max_size;
|
||||
gboolean hminbad, vminbad;
|
||||
gboolean horiz_equal, vert_equal;
|
||||
gboolean constraint_already_satisfied;
|
||||
|
||||
@@ -651,22 +704,51 @@ constrain_maximization (MetaWindow *window,
|
||||
if (!window->maximized_horizontally && !window->maximized_vertically)
|
||||
return TRUE;
|
||||
|
||||
work_area = info->work_area_xinerama;
|
||||
unextend_by_frame (&work_area, info->fgeom);
|
||||
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
||||
/* Calculate target_size = maximized size of (window + frame) */
|
||||
if (window->maximized_horizontally && window->maximized_vertically)
|
||||
target_size = info->work_area_xinerama;
|
||||
else
|
||||
{
|
||||
/* Amount of maximization possible in a single direction depends
|
||||
* on which struts could occlude the window given its current
|
||||
* position. For example, a vertical partial strut on the right
|
||||
* is only relevant for a horizontally maximized window when the
|
||||
* window is at a vertical position where it could be occluded
|
||||
* by that partial strut.
|
||||
*/
|
||||
MetaDirection direction;
|
||||
GSList *active_workspace_struts;
|
||||
|
||||
hminbad = work_area.width < min_size.width && window->maximized_horizontally;
|
||||
vminbad = work_area.height < min_size.height && window->maximized_vertically;
|
||||
hmaxbad = work_area.width > max_size.width && window->maximized_horizontally;
|
||||
vmaxbad = work_area.height > max_size.height && window->maximized_vertically;
|
||||
if (hminbad || vminbad || hmaxbad || vmaxbad)
|
||||
if (window->maximized_horizontally)
|
||||
direction = META_DIRECTION_HORIZONTAL;
|
||||
else
|
||||
direction = META_DIRECTION_VERTICAL;
|
||||
active_workspace_struts = window->screen->active_workspace->all_struts;
|
||||
|
||||
target_size = info->current;
|
||||
extend_by_frame (&target_size, info->fgeom);
|
||||
meta_rectangle_expand_to_avoiding_struts (&target_size,
|
||||
&info->entire_xinerama,
|
||||
direction,
|
||||
active_workspace_struts);
|
||||
}
|
||||
/* Now make target_size = maximized size of client window */
|
||||
unextend_by_frame (&target_size, info->fgeom);
|
||||
|
||||
/* Check min size constraints; max size constraints are ignored for maximized
|
||||
* windows, as per bug 327543.
|
||||
*/
|
||||
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
||||
hminbad = target_size.width < min_size.width && window->maximized_horizontally;
|
||||
vminbad = target_size.height < min_size.height && window->maximized_vertically;
|
||||
if (hminbad || vminbad)
|
||||
return TRUE;
|
||||
|
||||
/* Determine whether constraint is already satisfied; exit if it is */
|
||||
horiz_equal = work_area.x == info->current.x &&
|
||||
work_area.width == info->current.width;
|
||||
vert_equal = work_area.y == info->current.y &&
|
||||
work_area.height == info->current.height;
|
||||
horiz_equal = target_size.x == info->current.x &&
|
||||
target_size.width == info->current.width;
|
||||
vert_equal = target_size.y == info->current.y &&
|
||||
target_size.height == info->current.height;
|
||||
constraint_already_satisfied =
|
||||
(horiz_equal || !window->maximized_horizontally) &&
|
||||
(vert_equal || !window->maximized_vertically);
|
||||
@@ -676,13 +758,13 @@ constrain_maximization (MetaWindow *window,
|
||||
/*** Enforce constraint ***/
|
||||
if (window->maximized_horizontally)
|
||||
{
|
||||
info->current.x = work_area.x;
|
||||
info->current.width = work_area.width;
|
||||
info->current.x = target_size.x;
|
||||
info->current.width = target_size.width;
|
||||
}
|
||||
if (window->maximized_vertically)
|
||||
{
|
||||
info->current.y = work_area.y;
|
||||
info->current.height = work_area.height;
|
||||
info->current.y = target_size.y;
|
||||
info->current.height = target_size.height;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@@ -727,6 +809,7 @@ constrain_size_increments (MetaWindow *window,
|
||||
gboolean check_only)
|
||||
{
|
||||
int bh, hi, bw, wi, extra_height, extra_width;
|
||||
int new_width, new_height;
|
||||
gboolean constraint_already_satisfied;
|
||||
|
||||
if (priority > PRIORITY_SIZE_HINTS_INCREMENTS)
|
||||
@@ -744,10 +827,12 @@ constrain_size_increments (MetaWindow *window,
|
||||
wi = window->size_hints.width_inc;
|
||||
extra_height = (info->current.height - bh) % hi;
|
||||
extra_width = (info->current.width - bw) % wi;
|
||||
/* ignore size increments for maximized windows */
|
||||
if (window->maximized_horizontally)
|
||||
extra_width *= 0;
|
||||
if (window->maximized_vertically)
|
||||
extra_height *= 0;
|
||||
/* constraint is satisfied iff there is no extra height or width */
|
||||
constraint_already_satisfied =
|
||||
(extra_height == 0 && extra_width == 0);
|
||||
|
||||
@@ -755,12 +840,24 @@ constrain_size_increments (MetaWindow *window,
|
||||
return constraint_already_satisfied;
|
||||
|
||||
/*** Enforce constraint ***/
|
||||
/* Shrink to base + N * inc */
|
||||
new_width = info->current.width - extra_width;
|
||||
new_height = info->current.height - extra_height;
|
||||
|
||||
/* Adjusting down instead of up (as done in the above two lines) may
|
||||
* violate minimum size constraints; fix the adjustment if this
|
||||
* happens.
|
||||
*/
|
||||
if (new_width < window->size_hints.min_width)
|
||||
new_width += ((window->size_hints.min_width - new_width)/wi + 1)*wi;
|
||||
if (new_height < window->size_hints.min_height)
|
||||
new_height += ((window->size_hints.min_height - new_height)/hi + 1)*hi;
|
||||
|
||||
/* Resize to the new size */
|
||||
meta_rectangle_resize_with_gravity (&info->orig,
|
||||
&info->current,
|
||||
info->resize_gravity,
|
||||
info->current.width - extra_width,
|
||||
info->current.height - extra_height);
|
||||
new_width,
|
||||
new_height);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -787,8 +884,13 @@ constrain_size_limits (MetaWindow *window,
|
||||
|
||||
/* Determine whether constraint is already satisfied; exit if it is */
|
||||
get_size_limits (window, info->fgeom, FALSE, &min_size, &max_size);
|
||||
too_big = !meta_rectangle_could_fit_rect (&info->current, &min_size);
|
||||
too_small = !meta_rectangle_could_fit_rect (&max_size, &info->current);
|
||||
/* We ignore max-size limits for maximized windows; see #327543 */
|
||||
if (window->maximized_horizontally)
|
||||
max_size.width = MAX (max_size.width, info->current.width);
|
||||
if (window->maximized_vertically)
|
||||
max_size.height = MAX (max_size.height, info->current.height);
|
||||
too_small = !meta_rectangle_could_fit_rect (&info->current, &min_size);
|
||||
too_big = !meta_rectangle_could_fit_rect (&max_size, &info->current);
|
||||
constraint_already_satisfied = !too_big && !too_small;
|
||||
if (check_only || constraint_already_satisfied)
|
||||
return constraint_already_satisfied;
|
||||
@@ -939,13 +1041,15 @@ do_screen_and_xinerama_relative_constraints (
|
||||
gboolean exit_early = FALSE, constraint_satisfied;
|
||||
MetaRectangle how_far_it_can_be_smushed, min_size, max_size;
|
||||
|
||||
#ifdef WITH_VERBOSE_MODE
|
||||
/* First, log some debugging information */
|
||||
char spanning_region[1 + 28 * g_list_length (region_spanning_rectangles)];
|
||||
(void) spanning_region; /* Avoid stupid & incorrect compiler warnings... */
|
||||
|
||||
meta_topic (META_DEBUG_GEOMETRY,
|
||||
"screen/xinerama constraint; region_spanning_rectangles: %s\n",
|
||||
meta_rectangle_region_to_string (region_spanning_rectangles, ", ",
|
||||
spanning_region));
|
||||
#endif
|
||||
|
||||
/* Determine whether constraint applies; exit if it doesn't */
|
||||
how_far_it_can_be_smushed = info->current;
|
||||
@@ -1042,6 +1146,7 @@ constrain_fully_onscreen (MetaWindow *window,
|
||||
*/
|
||||
if (window->type == META_WINDOW_DESKTOP ||
|
||||
window->type == META_WINDOW_DOCK ||
|
||||
window->fullscreen ||
|
||||
!window->require_fully_onscreen ||
|
||||
info->is_user_action)
|
||||
return TRUE;
|
||||
@@ -1053,6 +1158,91 @@ constrain_fully_onscreen (MetaWindow *window,
|
||||
check_only);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
constrain_titlebar_visible (MetaWindow *window,
|
||||
ConstraintInfo *info,
|
||||
ConstraintPriority priority,
|
||||
gboolean check_only)
|
||||
{
|
||||
gboolean unconstrained_user_action;
|
||||
gboolean retval;
|
||||
int bottom_amount;
|
||||
int horiz_amount_offscreen, vert_amount_offscreen;
|
||||
int horiz_amount_onscreen, vert_amount_onscreen;
|
||||
|
||||
if (priority > PRIORITY_TITLEBAR_VISIBLE)
|
||||
return TRUE;
|
||||
|
||||
/* Allow the titlebar beyond the top of the screen only if the user wasn't
|
||||
* clicking on the frame to start the move.
|
||||
*/
|
||||
unconstrained_user_action =
|
||||
info->is_user_action && !window->display->grab_frame_action;
|
||||
|
||||
/* Exit early if we know the constraint won't apply--note that this constraint
|
||||
* is only meant for normal windows (e.g. we don't want docks to be shoved
|
||||
* "onscreen" by their own strut).
|
||||
*/
|
||||
if (window->type == META_WINDOW_DESKTOP ||
|
||||
window->type == META_WINDOW_DOCK ||
|
||||
window->fullscreen ||
|
||||
!window->require_titlebar_visible ||
|
||||
!window->decorated ||
|
||||
unconstrained_user_action)
|
||||
return TRUE;
|
||||
|
||||
/* Determine how much offscreen things are allowed. We first need to
|
||||
* figure out how much must remain on the screen. For that, we use 25%
|
||||
* window width/height but clamp to the range of (10,75) pixels. This is
|
||||
* somewhat of a seat of my pants random guess at what might look good.
|
||||
* Then, the amount that is allowed off is just the window size minus
|
||||
* this amount (but no less than 0 for tiny windows).
|
||||
*/
|
||||
horiz_amount_onscreen = info->current.width / 4;
|
||||
vert_amount_onscreen = info->current.height / 4;
|
||||
horiz_amount_onscreen = CLAMP (horiz_amount_onscreen, 10, 75);
|
||||
vert_amount_onscreen = CLAMP (vert_amount_onscreen, 10, 75);
|
||||
horiz_amount_offscreen = info->current.width - horiz_amount_onscreen;
|
||||
vert_amount_offscreen = info->current.height - vert_amount_onscreen;
|
||||
horiz_amount_offscreen = MAX (horiz_amount_offscreen, 0);
|
||||
vert_amount_offscreen = MAX (vert_amount_offscreen, 0);
|
||||
/* Allow the titlebar to touch the bottom panel; If there is no titlebar,
|
||||
* require vert_amount to remain on the screen.
|
||||
*/
|
||||
if (window->frame)
|
||||
{
|
||||
bottom_amount = info->current.height + info->fgeom->bottom_height;
|
||||
vert_amount_onscreen = info->fgeom->top_height;
|
||||
}
|
||||
else
|
||||
bottom_amount = vert_amount_offscreen;
|
||||
|
||||
/* Extend the region, have a helper function handle the constraint,
|
||||
* then return the region to its original size.
|
||||
*/
|
||||
meta_rectangle_expand_region_conditionally (info->usable_screen_region,
|
||||
horiz_amount_offscreen,
|
||||
horiz_amount_offscreen,
|
||||
0, /* Don't let titlebar off */
|
||||
bottom_amount,
|
||||
horiz_amount_onscreen,
|
||||
vert_amount_onscreen);
|
||||
retval =
|
||||
do_screen_and_xinerama_relative_constraints (window,
|
||||
info->usable_screen_region,
|
||||
info,
|
||||
check_only);
|
||||
meta_rectangle_expand_region_conditionally (info->usable_screen_region,
|
||||
-horiz_amount_offscreen,
|
||||
-horiz_amount_offscreen,
|
||||
0, /* Don't let titlebar off */
|
||||
-bottom_amount,
|
||||
horiz_amount_onscreen,
|
||||
vert_amount_onscreen);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
constrain_partially_onscreen (MetaWindow *window,
|
||||
ConstraintInfo *info,
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity size/position constraints */
|
||||
|
||||
/*
|
||||
|
387
src/core.c
387
src/core.c
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity interface used by GTK+ UI to talk to core */
|
||||
|
||||
/*
|
||||
@@ -27,9 +29,20 @@
|
||||
#include "workspace.h"
|
||||
#include "prefs.h"
|
||||
|
||||
/* Looks up the MetaWindow representing the frame of the given X window.
|
||||
* Used as a helper function by a bunch of the functions below.
|
||||
*
|
||||
* FIXME: The functions that use this function throw the result away
|
||||
* after use. Many of these functions tend to be called in small groups,
|
||||
* which results in get_window() getting called several times in succession
|
||||
* with the same parameters. We should profile to see whether this wastes
|
||||
* much time, and if it does we should look into a generalised
|
||||
* meta_core_get_window_info() which takes a bunch of pointers to variables
|
||||
* to put its results in, and only fills in the non-null ones.
|
||||
*/
|
||||
static MetaWindow *
|
||||
get_window (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
MetaWindow *window;
|
||||
@@ -47,112 +60,156 @@ get_window (Display *xdisplay,
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_get_client_size (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int *width,
|
||||
int *height)
|
||||
meta_core_get (Display *xdisplay,
|
||||
Window xwindow,
|
||||
...)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
if (width)
|
||||
*width = window->rect.width;
|
||||
if (height)
|
||||
*height = window->rect.height;
|
||||
}
|
||||
va_list args;
|
||||
MetaCoreGetType request;
|
||||
|
||||
gboolean
|
||||
meta_core_titlebar_is_onscreen (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
MetaDisplay *display = meta_display_for_x_display (xdisplay);
|
||||
MetaWindow *window = meta_display_lookup_x_window (display, xwindow);
|
||||
|
||||
return meta_window_titlebar_is_onscreen (window);
|
||||
}
|
||||
va_start (args, xwindow);
|
||||
|
||||
Window
|
||||
meta_core_get_client_xwindow (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
request = va_arg (args, MetaCoreGetType);
|
||||
|
||||
return window->xwindow;
|
||||
}
|
||||
/* Now, we special-case the first request slightly. Mostly, requests
|
||||
* for information on windows which have no frame are errors.
|
||||
* But sometimes we may want to know *whether* a window has a frame.
|
||||
* In this case, pass the key META_CORE_WINDOW_HAS_FRAME
|
||||
* as the *first* request, with a pointer to a boolean; if the window
|
||||
* has no frame, this will be set to False and meta_core_get will
|
||||
* exit immediately (so the values of any other requests will be
|
||||
* undefined). Otherwise it will be set to True and meta_core_get will
|
||||
* continue happily on its way.
|
||||
*/
|
||||
|
||||
MetaFrameFlags
|
||||
meta_core_get_frame_flags (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
return meta_frame_get_flags (window->frame);
|
||||
}
|
||||
if (request != META_CORE_WINDOW_HAS_FRAME &&
|
||||
(window == NULL || window->frame == NULL)) {
|
||||
meta_bug ("No such frame window 0x%lx!\n", xwindow);
|
||||
return;
|
||||
}
|
||||
|
||||
MetaFrameType
|
||||
meta_core_get_frame_type (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaWindow *window;
|
||||
MetaFrameType base_type;
|
||||
while (request != META_CORE_GET_END) {
|
||||
|
||||
gpointer answer = va_arg (args, gpointer);
|
||||
|
||||
window = get_window (xdisplay, frame_xwindow);
|
||||
switch (request) {
|
||||
case META_CORE_WINDOW_HAS_FRAME:
|
||||
*((gboolean*)answer) = window != NULL && window->frame != NULL;
|
||||
if (!*((gboolean*)answer)) return; /* see above */
|
||||
break;
|
||||
case META_CORE_GET_CLIENT_WIDTH:
|
||||
*((gint*)answer) = window->rect.width;
|
||||
break;
|
||||
case META_CORE_GET_CLIENT_HEIGHT:
|
||||
*((gint*)answer) = window->rect.height;
|
||||
break;
|
||||
case META_CORE_IS_TITLEBAR_ONSCREEN:
|
||||
*((gboolean*)answer) = meta_window_titlebar_is_onscreen (window);
|
||||
break;
|
||||
case META_CORE_GET_CLIENT_XWINDOW:
|
||||
*((Window*)answer) = window->xwindow;
|
||||
break;
|
||||
case META_CORE_GET_FRAME_FLAGS:
|
||||
*((MetaFrameFlags*)answer) = meta_frame_get_flags (window->frame);
|
||||
break;
|
||||
case META_CORE_GET_FRAME_TYPE:
|
||||
{
|
||||
MetaFrameType base_type = META_FRAME_TYPE_LAST;
|
||||
|
||||
base_type = META_FRAME_TYPE_LAST;
|
||||
|
||||
switch (window->type)
|
||||
{
|
||||
case META_WINDOW_NORMAL:
|
||||
base_type = META_FRAME_TYPE_NORMAL;
|
||||
break;
|
||||
|
||||
case META_WINDOW_DIALOG:
|
||||
base_type = META_FRAME_TYPE_DIALOG;
|
||||
break;
|
||||
|
||||
case META_WINDOW_MODAL_DIALOG:
|
||||
base_type = META_FRAME_TYPE_MODAL_DIALOG;
|
||||
break;
|
||||
|
||||
case META_WINDOW_MENU:
|
||||
base_type = META_FRAME_TYPE_MENU;
|
||||
break;
|
||||
switch (window->type)
|
||||
{
|
||||
case META_WINDOW_NORMAL:
|
||||
base_type = META_FRAME_TYPE_NORMAL;
|
||||
break;
|
||||
|
||||
case META_WINDOW_UTILITY:
|
||||
base_type = META_FRAME_TYPE_UTILITY;
|
||||
break;
|
||||
|
||||
case META_WINDOW_DESKTOP:
|
||||
case META_WINDOW_DOCK:
|
||||
case META_WINDOW_TOOLBAR:
|
||||
case META_WINDOW_SPLASHSCREEN:
|
||||
/* No frame */
|
||||
base_type = META_FRAME_TYPE_LAST;
|
||||
break;
|
||||
case META_WINDOW_DIALOG:
|
||||
base_type = META_FRAME_TYPE_DIALOG;
|
||||
break;
|
||||
|
||||
case META_WINDOW_MODAL_DIALOG:
|
||||
base_type = META_FRAME_TYPE_MODAL_DIALOG;
|
||||
break;
|
||||
|
||||
case META_WINDOW_MENU:
|
||||
base_type = META_FRAME_TYPE_MENU;
|
||||
break;
|
||||
|
||||
case META_WINDOW_UTILITY:
|
||||
base_type = META_FRAME_TYPE_UTILITY;
|
||||
break;
|
||||
|
||||
case META_WINDOW_DESKTOP:
|
||||
case META_WINDOW_DOCK:
|
||||
case META_WINDOW_TOOLBAR:
|
||||
case META_WINDOW_SPLASHSCREEN:
|
||||
/* No frame */
|
||||
base_type = META_FRAME_TYPE_LAST;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (base_type == META_FRAME_TYPE_LAST)
|
||||
{
|
||||
/* can't add border if undecorated */
|
||||
*((MetaFrameType*)answer) = META_FRAME_TYPE_LAST;
|
||||
}
|
||||
else if (window->border_only)
|
||||
{
|
||||
/* override base frame type */
|
||||
*((MetaFrameType*)answer) = META_FRAME_TYPE_BORDER;
|
||||
}
|
||||
else
|
||||
{
|
||||
*((MetaFrameType*)answer) = base_type;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case META_CORE_GET_MINI_ICON:
|
||||
*((GdkPixbuf**)answer) = window->mini_icon;
|
||||
break;
|
||||
case META_CORE_GET_ICON:
|
||||
*((GdkPixbuf**)answer) = window->icon;
|
||||
break;
|
||||
case META_CORE_GET_X:
|
||||
meta_window_get_position (window, (int*)answer, NULL);
|
||||
break;
|
||||
case META_CORE_GET_Y:
|
||||
meta_window_get_position (window, NULL, (int*)answer);
|
||||
break;
|
||||
case META_CORE_GET_FRAME_WORKSPACE:
|
||||
*((gint*)answer) = meta_window_get_net_wm_desktop (window);
|
||||
break;
|
||||
case META_CORE_GET_FRAME_X:
|
||||
*((gint*)answer) = window->frame->rect.x;
|
||||
break;
|
||||
case META_CORE_GET_FRAME_Y:
|
||||
*((gint*)answer) = window->frame->rect.y;
|
||||
break;
|
||||
case META_CORE_GET_FRAME_WIDTH:
|
||||
*((gint*)answer) = window->frame->rect.width;
|
||||
break;
|
||||
case META_CORE_GET_FRAME_HEIGHT:
|
||||
*((gint*)answer) = window->frame->rect.height;
|
||||
break;
|
||||
case META_CORE_GET_SCREEN_WIDTH:
|
||||
*((gint*)answer) = window->screen->rect.width;
|
||||
break;
|
||||
case META_CORE_GET_SCREEN_HEIGHT:
|
||||
*((gint*)answer) = window->screen->rect.height;
|
||||
break;
|
||||
|
||||
default:
|
||||
meta_warning(_("Unknown window information request: %d"), request);
|
||||
}
|
||||
|
||||
if (base_type == META_FRAME_TYPE_LAST)
|
||||
return META_FRAME_TYPE_LAST; /* can't add border if undecorated */
|
||||
else if (window->border_only)
|
||||
return META_FRAME_TYPE_BORDER; /* override base frame type */
|
||||
else
|
||||
return base_type;
|
||||
}
|
||||
request = va_arg (args, MetaCoreGetType);
|
||||
}
|
||||
|
||||
GdkPixbuf*
|
||||
meta_core_get_mini_icon (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
return window->mini_icon;
|
||||
}
|
||||
|
||||
GdkPixbuf*
|
||||
meta_core_get_icon (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
return window->icon;
|
||||
va_end (args);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -161,7 +218,7 @@ meta_core_queue_frame_resize (Display *xdisplay,
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
meta_window_queue_move_resize (window);
|
||||
meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -199,7 +256,7 @@ meta_core_user_raise (Display *xdisplay,
|
||||
void
|
||||
meta_core_user_lower_and_unfocus (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
Time timestamp)
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
@@ -242,39 +299,13 @@ meta_core_user_lower_and_unfocus (Display *xdisplay,
|
||||
void
|
||||
meta_core_user_focus (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
Time timestamp)
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
meta_window_focus (window, timestamp);
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_get_position (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int *x,
|
||||
int *y)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
meta_window_get_position (window, x, y);
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_get_size (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int *width,
|
||||
int *height)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
if (width)
|
||||
*width = window->rect.width;
|
||||
if (height)
|
||||
*height = window->rect.height;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
meta_core_minimize (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
@@ -339,20 +370,22 @@ meta_core_delete (Display *xdisplay,
|
||||
|
||||
void
|
||||
meta_core_unshade (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
Window frame_xwindow,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
meta_window_unshade (window);
|
||||
meta_window_unshade (window, timestamp);
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_shade (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
Window frame_xwindow,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
meta_window_shade (window);
|
||||
meta_window_shade (window, timestamp);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -364,6 +397,24 @@ meta_core_unstick (Display *xdisplay,
|
||||
meta_window_unstick (window);
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_make_above (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
meta_window_make_above (window);
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_unmake_above (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
meta_window_unmake_above (window);
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_stick (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
@@ -405,43 +456,13 @@ meta_core_get_active_workspace (Screen *xscreen)
|
||||
return meta_workspace_index (screen->active_workspace);
|
||||
}
|
||||
|
||||
int
|
||||
meta_core_get_frame_workspace (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
return meta_window_get_net_wm_desktop (window);
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_get_frame_extents (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int *x,
|
||||
int *y,
|
||||
int *width,
|
||||
int *height)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
if (x)
|
||||
*x = window->frame->rect.x;
|
||||
if (y)
|
||||
*y = window->frame->rect.y;
|
||||
if (width)
|
||||
*width = window->frame->rect.width;
|
||||
if (height)
|
||||
*height = window->frame->rect.height;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
meta_core_show_window_menu (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int root_x,
|
||||
int root_y,
|
||||
int button,
|
||||
Time timestamp)
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_xwindow);
|
||||
|
||||
@@ -584,10 +605,10 @@ meta_core_begin_grab_op (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
MetaGrabOp op,
|
||||
gboolean pointer_already_grabbed,
|
||||
int event_serial,
|
||||
gboolean frame_action,
|
||||
int button,
|
||||
gulong modmask,
|
||||
Time timestamp,
|
||||
guint32 timestamp,
|
||||
int root_x,
|
||||
int root_y)
|
||||
{
|
||||
@@ -602,14 +623,14 @@ meta_core_begin_grab_op (Display *xdisplay,
|
||||
|
||||
return meta_display_begin_grab_op (display, screen, window,
|
||||
op, pointer_already_grabbed,
|
||||
event_serial,
|
||||
frame_action,
|
||||
button, modmask,
|
||||
timestamp, root_x, root_y);
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_end_grab_op (Display *xdisplay,
|
||||
Time timestamp)
|
||||
guint32 timestamp)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
|
||||
@@ -684,20 +705,6 @@ meta_core_set_screen_cursor (Display *xdisplay,
|
||||
meta_frame_set_screen_cursor (window->frame, cursor);
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_get_screen_size (Display *xdisplay,
|
||||
Window frame_on_screen,
|
||||
int *width,
|
||||
int *height)
|
||||
{
|
||||
MetaWindow *window = get_window (xdisplay, frame_on_screen);
|
||||
|
||||
if (width)
|
||||
*width = window->screen->rect.width;
|
||||
if (height)
|
||||
*height = window->screen->rect.height;
|
||||
}
|
||||
|
||||
void
|
||||
meta_core_increment_event_serial (Display *xdisplay)
|
||||
{
|
||||
@@ -708,3 +715,31 @@ meta_core_increment_event_serial (Display *xdisplay)
|
||||
meta_display_increment_event_serial (display);
|
||||
}
|
||||
|
||||
void
|
||||
meta_invalidate_default_icons (void)
|
||||
{
|
||||
GSList *displays, *windows;
|
||||
|
||||
for (displays = meta_displays_list ();
|
||||
displays != NULL;
|
||||
displays = displays->next)
|
||||
{
|
||||
|
||||
for (windows = meta_display_list_windows (displays->data);
|
||||
windows != NULL;
|
||||
windows = windows->next)
|
||||
{
|
||||
|
||||
MetaWindow *window = (MetaWindow*)windows->data;
|
||||
|
||||
if (window->icon_cache.origin == USING_FALLBACK_ICON)
|
||||
{
|
||||
meta_icon_cache_free (&(window->icon_cache));
|
||||
meta_window_update_icon_now (window);
|
||||
}
|
||||
}
|
||||
|
||||
g_slist_free (windows);
|
||||
}
|
||||
}
|
||||
|
||||
|
130
src/core.h
130
src/core.h
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity interface used by GTK+ UI to talk to core */
|
||||
|
||||
/*
|
||||
@@ -27,26 +29,68 @@
|
||||
#include <gdk/gdkx.h>
|
||||
#include "common.h"
|
||||
|
||||
void meta_core_get_client_size (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int *width,
|
||||
int *height);
|
||||
typedef enum
|
||||
{
|
||||
META_CORE_GET_END = 0,
|
||||
META_CORE_WINDOW_HAS_FRAME,
|
||||
META_CORE_GET_CLIENT_WIDTH,
|
||||
META_CORE_GET_CLIENT_HEIGHT,
|
||||
META_CORE_IS_TITLEBAR_ONSCREEN,
|
||||
META_CORE_GET_CLIENT_XWINDOW,
|
||||
META_CORE_GET_FRAME_FLAGS,
|
||||
META_CORE_GET_FRAME_TYPE,
|
||||
META_CORE_GET_MINI_ICON,
|
||||
META_CORE_GET_ICON,
|
||||
META_CORE_GET_X,
|
||||
META_CORE_GET_Y,
|
||||
META_CORE_GET_FRAME_WORKSPACE,
|
||||
META_CORE_GET_FRAME_X,
|
||||
META_CORE_GET_FRAME_Y,
|
||||
META_CORE_GET_FRAME_WIDTH,
|
||||
META_CORE_GET_FRAME_HEIGHT,
|
||||
META_CORE_GET_SCREEN_WIDTH,
|
||||
META_CORE_GET_SCREEN_HEIGHT,
|
||||
} MetaCoreGetType;
|
||||
|
||||
gboolean meta_core_titlebar_is_onscreen (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
|
||||
Window meta_core_get_client_xwindow (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
|
||||
MetaFrameFlags meta_core_get_frame_flags (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
MetaFrameType meta_core_get_frame_type (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
|
||||
GdkPixbuf* meta_core_get_mini_icon (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
GdkPixbuf* meta_core_get_icon (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
/* General information function about the given window. Pass in a sequence of
|
||||
* pairs of MetaCoreGetTypes and pointers to variables; the variables will be
|
||||
* filled with the requested values. End the list with META_CORE_GET_END.
|
||||
* For example:
|
||||
*
|
||||
* meta_core_get (my_display, my_window,
|
||||
* META_CORE_GET_X, &x,
|
||||
* META_CORE_GET_Y, &y,
|
||||
* META_CORE_GET_END);
|
||||
*
|
||||
* If the window doesn't have a frame, this will raise a meta_bug. To suppress
|
||||
* this behaviour, ask META_CORE_WINDOW_HAS_FRAME as the *first* question in
|
||||
* the list. If the window has no frame, the answer to this question will be
|
||||
* False, and anything else you asked will be undefined. Otherwise, the answer
|
||||
* will be True. The answer will necessarily be True if you ask the question
|
||||
* in any other position. The positions of all other questions don't matter.
|
||||
*
|
||||
* The reason for this function is that some parts of the program don't know
|
||||
* about MetaWindows. But they *can* see core.h. So we used to have a whole
|
||||
* load of functions which took a display and an X window, looked up the
|
||||
* relevant MetaWindow, and returned information about it. The trouble with
|
||||
* that is that looking up the MetaWindow is a nontrivial operation, and
|
||||
* consolidating the calls in this way makes (for example) frame exposes
|
||||
* 33% faster, according to valgrind.
|
||||
*
|
||||
* This function would perhaps be slightly better if the questions were
|
||||
* represented by pointers, perhaps gchar*s, because then we could take
|
||||
* advantage of gcc's automatic sentinel checking. On the other hand, this
|
||||
* immediately suggests string comparison, and that's slow.
|
||||
*
|
||||
* Another possible improvement is that core.h still has a bunch of
|
||||
* functions which can't be described by the formula "give a display and
|
||||
* an X window, get a single value" (meta_core_user_move, for example), but
|
||||
* which could theoretically be handled by this function if we relaxed the
|
||||
* requirement that all questions should have exactly one argument.
|
||||
*/
|
||||
void meta_core_get (Display *xdisplay,
|
||||
Window window,
|
||||
...);
|
||||
|
||||
void meta_core_queue_frame_resize (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
@@ -66,22 +110,11 @@ void meta_core_user_raise (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
void meta_core_user_lower_and_unfocus (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
Time timestamp);
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_core_user_focus (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
Time timestamp);
|
||||
|
||||
/* get position of client, same coord space expected by move */
|
||||
void meta_core_get_position (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int *x,
|
||||
int *y);
|
||||
|
||||
void meta_core_get_size (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int *width,
|
||||
int *height);
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_core_minimize (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
@@ -95,13 +128,19 @@ void meta_core_delete (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
guint32 timestamp);
|
||||
void meta_core_unshade (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
Window frame_xwindow,
|
||||
guint32 timestamp);
|
||||
void meta_core_shade (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
Window frame_xwindow,
|
||||
guint32 timestamp);
|
||||
void meta_core_unstick (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
void meta_core_stick (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
void meta_core_unmake_above (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
void meta_core_make_above (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
void meta_core_change_workspace (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int new_workspace);
|
||||
@@ -114,20 +153,12 @@ const char* meta_core_get_workspace_name_with_index (Display *xdisplay,
|
||||
Window xroot,
|
||||
int index);
|
||||
|
||||
void meta_core_get_frame_extents (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int *x,
|
||||
int *y,
|
||||
int *width,
|
||||
int *height);
|
||||
|
||||
|
||||
void meta_core_show_window_menu (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
int root_x,
|
||||
int root_y,
|
||||
int button,
|
||||
Time timestamp);
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_core_get_menu_accelerator (MetaMenuOp menu_op,
|
||||
int workspace,
|
||||
@@ -138,14 +169,14 @@ gboolean meta_core_begin_grab_op (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
MetaGrabOp op,
|
||||
gboolean pointer_already_grabbed,
|
||||
int event_serial,
|
||||
gboolean frame_action,
|
||||
int button,
|
||||
gulong modmask,
|
||||
Time timestamp,
|
||||
guint32 timestamp,
|
||||
int root_x,
|
||||
int root_y);
|
||||
void meta_core_end_grab_op (Display *xdisplay,
|
||||
Time timestamp);
|
||||
guint32 timestamp);
|
||||
MetaGrabOp meta_core_get_grab_op (Display *xdisplay);
|
||||
Window meta_core_get_grab_frame (Display *xdisplay);
|
||||
int meta_core_get_grab_button (Display *xdisplay);
|
||||
@@ -158,18 +189,13 @@ void meta_core_set_screen_cursor (Display *xdisplay,
|
||||
Window frame_on_screen,
|
||||
MetaCursor cursor);
|
||||
|
||||
void meta_core_get_screen_size (Display *xdisplay,
|
||||
Window frame_on_screen,
|
||||
int *width,
|
||||
int *height);
|
||||
|
||||
/* Used because we ignore EnterNotify when a window is unmapped that
|
||||
* really shouldn't cause focus changes, by comparing the event serial
|
||||
* of the EnterNotify and the UnmapNotify.
|
||||
*/
|
||||
void meta_core_increment_event_serial (Display *display);
|
||||
|
||||
int meta_ui_get_last_event_serial (Display *xdisplay);
|
||||
void meta_invalidate_default_icons (void);
|
||||
|
||||
#endif
|
||||
|
||||
|
20
src/delete.c
20
src/delete.c
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity window deletion */
|
||||
|
||||
/*
|
||||
@@ -34,12 +36,13 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
static void meta_window_present_delete_dialog (MetaWindow *window);
|
||||
static void meta_window_present_delete_dialog (MetaWindow *window,
|
||||
guint32 timestamp);
|
||||
|
||||
static void
|
||||
delete_ping_reply_func (MetaDisplay *display,
|
||||
Window xwindow,
|
||||
Time timestamp,
|
||||
guint32 timestamp,
|
||||
void *user_data)
|
||||
{
|
||||
meta_topic (META_DEBUG_PING,
|
||||
@@ -292,7 +295,7 @@ io_from_ping_dialog (GIOChannel *channel,
|
||||
static void
|
||||
delete_ping_timeout_func (MetaDisplay *display,
|
||||
Window xwindow,
|
||||
Time timestamp,
|
||||
guint32 timestamp,
|
||||
void *user_data)
|
||||
{
|
||||
MetaWindow *window = user_data;
|
||||
@@ -311,14 +314,14 @@ delete_ping_timeout_func (MetaDisplay *display,
|
||||
|
||||
if (window->dialog_pid >= 0)
|
||||
{
|
||||
meta_window_present_delete_dialog (window);
|
||||
meta_window_present_delete_dialog (window, timestamp);
|
||||
return;
|
||||
}
|
||||
|
||||
window_id_str = g_strdup_printf ("0x%lx", window->xwindow);
|
||||
|
||||
sprintf (numbuf, "%d", window->screen->number);
|
||||
sprintf (timestampbuf, "%lu", timestamp);
|
||||
sprintf (timestampbuf, "%u", timestamp);
|
||||
|
||||
argv[0] = METACITY_LIBEXECDIR"/metacity-dialog";
|
||||
argv[1] = "--screen";
|
||||
@@ -364,7 +367,7 @@ delete_ping_timeout_func (MetaDisplay *display,
|
||||
|
||||
void
|
||||
meta_window_delete (MetaWindow *window,
|
||||
Time timestamp)
|
||||
guint32 timestamp)
|
||||
{
|
||||
meta_error_trap_push (window->display);
|
||||
if (window->delete_window)
|
||||
@@ -476,7 +479,7 @@ meta_window_free_delete_dialog (MetaWindow *window)
|
||||
}
|
||||
|
||||
static void
|
||||
meta_window_present_delete_dialog (MetaWindow *window)
|
||||
meta_window_present_delete_dialog (MetaWindow *window, guint32 timestamp)
|
||||
{
|
||||
meta_topic (META_DEBUG_PING,
|
||||
"Presenting existing ping dialog for %s\n",
|
||||
@@ -501,8 +504,7 @@ meta_window_present_delete_dialog (MetaWindow *window)
|
||||
w->res_class &&
|
||||
g_strcasecmp (w->res_class, "metacity-dialog") == 0)
|
||||
{
|
||||
meta_window_activate (w,
|
||||
meta_display_get_current_time (w->display));
|
||||
meta_window_activate (w, timestamp);
|
||||
break;
|
||||
}
|
||||
|
||||
|
524
src/display.c
524
src/display.c
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity X display handler */
|
||||
|
||||
/*
|
||||
@@ -62,7 +64,7 @@ typedef struct MetaEdgeResistanceData MetaEdgeResistanceData;
|
||||
|
||||
typedef void (* MetaWindowPingFunc) (MetaDisplay *display,
|
||||
Window xwindow,
|
||||
Time timestamp,
|
||||
guint32 timestamp,
|
||||
gpointer user_data);
|
||||
|
||||
|
||||
@@ -83,6 +85,7 @@ struct _MetaDisplay
|
||||
Display *xdisplay;
|
||||
|
||||
Window leader_window;
|
||||
Window timestamp_pinging_window;
|
||||
|
||||
Atom atom_net_wm_name;
|
||||
Atom atom_wm_protocols;
|
||||
@@ -156,6 +159,8 @@ struct _MetaDisplay
|
||||
Atom atom_net_wm_action_maximize_vert;
|
||||
Atom atom_net_wm_action_change_desktop;
|
||||
Atom atom_net_wm_action_close;
|
||||
Atom atom_net_wm_action_above;
|
||||
Atom atom_net_wm_action_below;
|
||||
Atom atom_net_wm_state_above;
|
||||
Atom atom_net_wm_state_below;
|
||||
Atom atom_net_startup_id;
|
||||
@@ -178,6 +183,7 @@ struct _MetaDisplay
|
||||
Atom atom_metacity_version;
|
||||
Atom atom_net_wm_visible_name;
|
||||
Atom atom_net_wm_visible_icon_name;
|
||||
Atom atom_net_wm_user_time_window;
|
||||
|
||||
/* This is the actual window from focus events,
|
||||
* not the one we last set
|
||||
@@ -194,10 +200,10 @@ struct _MetaDisplay
|
||||
MetaWindow *expected_focus_window;
|
||||
|
||||
/* last timestamp passed to XSetInputFocus */
|
||||
Time last_focus_time;
|
||||
guint32 last_focus_time;
|
||||
|
||||
/* last user interaction time in any app */
|
||||
Time last_user_time;
|
||||
guint32 last_user_time;
|
||||
|
||||
/* whether we're using mousenav (only relevant for sloppy&mouse focus modes;
|
||||
* !mouse_mode means "keynav mode")
|
||||
@@ -250,7 +256,6 @@ struct _MetaDisplay
|
||||
MetaScreen *grab_screen;
|
||||
MetaWindow *grab_window;
|
||||
Window grab_xwindow;
|
||||
gulong grab_start_serial;
|
||||
int grab_button;
|
||||
int grab_anchor_root_x;
|
||||
int grab_anchor_root_y;
|
||||
@@ -261,7 +266,8 @@ struct _MetaDisplay
|
||||
guint grab_have_pointer : 1;
|
||||
guint grab_have_keyboard : 1;
|
||||
guint grab_wireframe_active : 1;
|
||||
guint grab_was_cancelled : 1;
|
||||
guint grab_was_cancelled : 1; /* Only used in wireframe mode */
|
||||
guint grab_frame_action : 1;
|
||||
MetaRectangle grab_wireframe_rect;
|
||||
MetaRectangle grab_wireframe_last_xor_rect;
|
||||
MetaRectangle grab_initial_window_pos;
|
||||
@@ -269,7 +275,7 @@ struct _MetaDisplay
|
||||
gboolean grab_threshold_movement_reached; /* raise_on_click == FALSE. */
|
||||
MetaResizePopup *grab_resize_popup;
|
||||
GTimeVal grab_last_moveresize_time;
|
||||
Time grab_motion_notify_time;
|
||||
guint32 grab_motion_notify_time;
|
||||
int grab_wireframe_last_display_width;
|
||||
int grab_wireframe_last_display_height;
|
||||
GList* grab_old_window_stacking;
|
||||
@@ -283,7 +289,7 @@ struct _MetaDisplay
|
||||
|
||||
#ifdef HAVE_XKB
|
||||
int xkb_base_event_type;
|
||||
Time last_bell_time;
|
||||
guint32 last_bell_time;
|
||||
#endif
|
||||
#ifdef HAVE_XSYNC
|
||||
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
|
||||
@@ -311,6 +317,9 @@ struct _MetaDisplay
|
||||
/* Xinerama cache */
|
||||
unsigned int xinerama_cache_invalidated : 1;
|
||||
|
||||
/* Opening the display */
|
||||
unsigned int display_opening : 1;
|
||||
|
||||
/* Closing down the display */
|
||||
int closing;
|
||||
|
||||
@@ -388,7 +397,8 @@ struct _MetaDisplay
|
||||
)
|
||||
|
||||
gboolean meta_display_open (void);
|
||||
void meta_display_close (MetaDisplay *display);
|
||||
void meta_display_close (MetaDisplay *display,
|
||||
guint32 timestamp);
|
||||
MetaScreen* meta_display_screen_for_root (MetaDisplay *display,
|
||||
Window xroot);
|
||||
MetaScreen* meta_display_screen_for_x_screen (MetaDisplay *display,
|
||||
@@ -399,10 +409,16 @@ void meta_display_grab (MetaDisplay *display);
|
||||
void meta_display_ungrab (MetaDisplay *display);
|
||||
|
||||
void meta_display_unmanage_screen (MetaDisplay *display,
|
||||
MetaScreen *screen);
|
||||
MetaScreen *screen,
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_display_unmanage_windows_for_screen (MetaDisplay *display,
|
||||
MetaScreen *screen);
|
||||
MetaScreen *screen,
|
||||
guint32 timestamp);
|
||||
|
||||
/* Utility function to compare the stacking of two windows */
|
||||
int meta_display_stack_cmp (const void *a,
|
||||
const void *b);
|
||||
|
||||
/* A given MetaWindow may have various X windows that "belong"
|
||||
* to it, such as the frame window.
|
||||
@@ -431,21 +447,21 @@ void meta_display_set_grab_op_cursor (MetaDisplay *display,
|
||||
MetaGrabOp op,
|
||||
gboolean change_pointer,
|
||||
Window grab_xwindow,
|
||||
Time timestamp);
|
||||
guint32 timestamp);
|
||||
|
||||
gboolean meta_display_begin_grab_op (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
MetaWindow *window,
|
||||
MetaGrabOp op,
|
||||
gboolean pointer_already_grabbed,
|
||||
int event_serial,
|
||||
gboolean frame_action,
|
||||
int button,
|
||||
gulong modmask,
|
||||
Time timestamp,
|
||||
guint32 timestamp,
|
||||
int root_x,
|
||||
int root_y);
|
||||
void meta_display_end_grab_op (MetaDisplay *display,
|
||||
Time timestamp);
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_display_check_threshold_reached (MetaDisplay *display,
|
||||
int x,
|
||||
@@ -482,12 +498,12 @@ void meta_display_retheme_all (void);
|
||||
void meta_display_set_cursor_theme (const char *theme,
|
||||
int size);
|
||||
|
||||
void meta_display_ping_window (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
Time timestamp,
|
||||
MetaWindowPingFunc ping_reply_func,
|
||||
MetaWindowPingFunc ping_timeout_func,
|
||||
void *user_data);
|
||||
void meta_display_ping_window (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
guint32 timestamp,
|
||||
MetaWindowPingFunc ping_reply_func,
|
||||
MetaWindowPingFunc ping_timeout_func,
|
||||
void *user_data);
|
||||
gboolean meta_display_window_has_pending_pings (MetaDisplay *display,
|
||||
MetaWindow *window);
|
||||
|
||||
@@ -546,7 +562,7 @@ gboolean meta_display_focus_sentinel_clear (MetaDisplay *display);
|
||||
void meta_display_set_input_focus_window (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
gboolean focus_frame,
|
||||
Time timestamp);
|
||||
guint32 timestamp);
|
||||
|
||||
/* meta_display_focus_the_no_focus_window is called when the
|
||||
* designated no_focus_window should be focused, but is otherwise the
|
||||
@@ -554,7 +570,7 @@ void meta_display_set_input_focus_window (MetaDisplay *display,
|
||||
*/
|
||||
void meta_display_focus_the_no_focus_window (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
Time timestamp);
|
||||
guint32 timestamp);
|
||||
|
||||
void meta_display_queue_autoraise_callback (MetaDisplay *display,
|
||||
MetaWindow *window);
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Draw a workspace */
|
||||
|
||||
/* This file should not be modified to depend on other files in
|
||||
@@ -64,21 +66,38 @@ get_window_rect (const WnckWindowDisplayInfo *win,
|
||||
}
|
||||
|
||||
static void
|
||||
draw_window (GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
draw_window (GtkWidget *widget,
|
||||
GdkDrawable *drawable,
|
||||
const WnckWindowDisplayInfo *win,
|
||||
const GdkRectangle *winrect)
|
||||
const GdkRectangle *winrect,
|
||||
GtkStateType state)
|
||||
{
|
||||
cairo_t *cr;
|
||||
GdkPixbuf *icon;
|
||||
int icon_x, icon_y, icon_w, icon_h;
|
||||
|
||||
gdk_draw_rectangle (drawable,
|
||||
win->is_active ?
|
||||
widget->style->bg_gc[GTK_STATE_SELECTED] :
|
||||
widget->style->bg_gc[GTK_STATE_NORMAL],
|
||||
TRUE,
|
||||
winrect->x + 1, winrect->y + 1,
|
||||
winrect->width - 2, winrect->height - 2);
|
||||
gboolean is_active;
|
||||
GdkColor *color;
|
||||
|
||||
is_active = win->is_active;
|
||||
|
||||
cr = gdk_cairo_create (drawable);
|
||||
cairo_rectangle (cr, winrect->x, winrect->y, winrect->width, winrect->height);
|
||||
cairo_clip (cr);
|
||||
|
||||
if (is_active)
|
||||
color = &widget->style->light[state];
|
||||
else
|
||||
color = &widget->style->bg[state];
|
||||
cairo_set_source_rgb (cr,
|
||||
color->red / 65535.,
|
||||
color->green / 65535.,
|
||||
color->blue / 65535.);
|
||||
|
||||
cairo_rectangle (cr,
|
||||
winrect->x + 1, winrect->y + 1,
|
||||
MAX (0, winrect->width - 2), MAX (0, winrect->height - 2));
|
||||
cairo_fill (cr);
|
||||
|
||||
|
||||
icon = win->icon;
|
||||
|
||||
@@ -101,7 +120,7 @@ draw_window (GtkWidget *widget,
|
||||
{
|
||||
icon_w = gdk_pixbuf_get_width (icon);
|
||||
icon_h = gdk_pixbuf_get_height (icon);
|
||||
|
||||
|
||||
/* Give up. */
|
||||
if (icon_w > (winrect->width - 2) ||
|
||||
icon_h > (winrect->height - 2))
|
||||
@@ -114,44 +133,31 @@ draw_window (GtkWidget *widget,
|
||||
{
|
||||
icon_x = winrect->x + (winrect->width - icon_w) / 2;
|
||||
icon_y = winrect->y + (winrect->height - icon_h) / 2;
|
||||
|
||||
{
|
||||
/* render_to_drawable should take a clip rect to save
|
||||
* us this mess...
|
||||
*/
|
||||
GdkRectangle pixbuf_rect;
|
||||
GdkRectangle draw_rect;
|
||||
|
||||
pixbuf_rect.x = icon_x;
|
||||
pixbuf_rect.y = icon_y;
|
||||
pixbuf_rect.width = icon_w;
|
||||
pixbuf_rect.height = icon_h;
|
||||
|
||||
if (gdk_rectangle_intersect ((GdkRectangle *)winrect, &pixbuf_rect,
|
||||
&draw_rect))
|
||||
{
|
||||
gdk_pixbuf_render_to_drawable_alpha (icon,
|
||||
drawable,
|
||||
draw_rect.x - pixbuf_rect.x,
|
||||
draw_rect.y - pixbuf_rect.y,
|
||||
draw_rect.x, draw_rect.y,
|
||||
draw_rect.width,
|
||||
draw_rect.height,
|
||||
GDK_PIXBUF_ALPHA_FULL,
|
||||
128,
|
||||
GDK_RGB_DITHER_NORMAL,
|
||||
0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
cairo_save (cr);
|
||||
gdk_cairo_set_source_pixbuf (cr, icon, icon_x, icon_y);
|
||||
cairo_rectangle (cr, icon_x, icon_y, icon_w, icon_h);
|
||||
cairo_clip (cr);
|
||||
cairo_paint (cr);
|
||||
cairo_restore (cr);
|
||||
}
|
||||
|
||||
gdk_draw_rectangle (drawable,
|
||||
win->is_active ?
|
||||
widget->style->fg_gc[GTK_STATE_SELECTED] :
|
||||
widget->style->fg_gc[GTK_STATE_NORMAL],
|
||||
FALSE,
|
||||
winrect->x, winrect->y,
|
||||
winrect->width - 1, winrect->height - 1);
|
||||
if (is_active)
|
||||
color = &widget->style->fg[state];
|
||||
else
|
||||
color = &widget->style->fg[state];
|
||||
|
||||
cairo_set_source_rgb (cr,
|
||||
color->red / 65535.,
|
||||
color->green / 65535.,
|
||||
color->blue / 65535.);
|
||||
cairo_set_line_width (cr, 1.0);
|
||||
cairo_rectangle (cr,
|
||||
winrect->x + 0.5, winrect->y + 0.5,
|
||||
MAX (0, winrect->width - 1), MAX (0, winrect->height - 1));
|
||||
cairo_stroke (cr);
|
||||
|
||||
cairo_destroy (cr);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -170,48 +176,56 @@ wnck_draw_workspace (GtkWidget *widget,
|
||||
{
|
||||
int i;
|
||||
GdkRectangle workspace_rect;
|
||||
|
||||
GtkStateType state;
|
||||
|
||||
workspace_rect.x = x;
|
||||
workspace_rect.y = y;
|
||||
workspace_rect.width = width;
|
||||
workspace_rect.height = height;
|
||||
|
||||
|
||||
if (is_active)
|
||||
gdk_draw_rectangle (drawable,
|
||||
GTK_WIDGET (widget)->style->dark_gc[GTK_STATE_SELECTED],
|
||||
TRUE,
|
||||
x, y, width, height);
|
||||
else if (workspace_background)
|
||||
state = GTK_STATE_SELECTED;
|
||||
else if (workspace_background)
|
||||
state = GTK_STATE_PRELIGHT;
|
||||
else
|
||||
state = GTK_STATE_NORMAL;
|
||||
|
||||
if (workspace_background)
|
||||
{
|
||||
gdk_pixbuf_render_to_drawable (workspace_background,
|
||||
drawable,
|
||||
GTK_WIDGET (widget)->style->dark_gc[GTK_STATE_SELECTED],
|
||||
0, 0,
|
||||
x, y,
|
||||
-1, -1,
|
||||
GDK_RGB_DITHER_MAX,
|
||||
0, 0);
|
||||
gdk_draw_pixbuf (drawable,
|
||||
GTK_WIDGET (widget)->style->dark_gc[state],
|
||||
workspace_background,
|
||||
0, 0,
|
||||
x, y,
|
||||
-1, -1,
|
||||
GDK_RGB_DITHER_MAX,
|
||||
0, 0);
|
||||
}
|
||||
else
|
||||
gdk_draw_rectangle (drawable,
|
||||
GTK_WIDGET (widget)->style->dark_gc[GTK_STATE_NORMAL],
|
||||
TRUE,
|
||||
x, y, width, height);
|
||||
|
||||
|
||||
{
|
||||
cairo_t *cr;
|
||||
|
||||
cr = gdk_cairo_create (widget->window);
|
||||
gdk_cairo_set_source_color (cr, &widget->style->dark[state]);
|
||||
cairo_rectangle (cr, x, y, width, height);
|
||||
cairo_fill (cr);
|
||||
cairo_destroy (cr);
|
||||
}
|
||||
|
||||
i = 0;
|
||||
while (i < n_windows)
|
||||
{
|
||||
const WnckWindowDisplayInfo *win = &windows[i];
|
||||
GdkRectangle winrect;
|
||||
|
||||
get_window_rect (win, screen_width, screen_height, &workspace_rect, &winrect);
|
||||
get_window_rect (win, screen_width,
|
||||
screen_height, &workspace_rect, &winrect);
|
||||
|
||||
draw_window (widget,
|
||||
drawable,
|
||||
win,
|
||||
&winrect);
|
||||
&winrect,
|
||||
state);
|
||||
|
||||
++i;
|
||||
}
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Draw a workspace */
|
||||
|
||||
/* This file should not be modified to depend on other files in
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Edge resistance for move/resize operations */
|
||||
|
||||
/*
|
||||
@@ -44,7 +46,6 @@ struct ResistanceDataForAnEdge
|
||||
GSourceFunc timeout_func;
|
||||
MetaWindow *window;
|
||||
int keyboard_buildup;
|
||||
gboolean allow_past_screen_edge;
|
||||
};
|
||||
typedef struct ResistanceDataForAnEdge ResistanceDataForAnEdge;
|
||||
|
||||
@@ -61,6 +62,9 @@ struct MetaEdgeResistanceData
|
||||
ResistanceDataForAnEdge bottom_data;
|
||||
};
|
||||
|
||||
/* !WARNING!: this function can return invalid indices (namely, either -1 or
|
||||
* edges->len); this is by design, but you need to remember this.
|
||||
*/
|
||||
static int
|
||||
find_index_of_edge_near_position (const GArray *edges,
|
||||
int position,
|
||||
@@ -299,9 +303,9 @@ movement_towards_edge (MetaDirection side, int increment)
|
||||
case META_DIRECTION_RIGHT:
|
||||
case META_DIRECTION_BOTTOM:
|
||||
return increment > 0;
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -329,6 +333,7 @@ apply_edge_resistance (MetaWindow *window,
|
||||
gboolean keyboard_op)
|
||||
{
|
||||
int i, begin, end;
|
||||
int last_edge;
|
||||
gboolean increasing = new_pos > old_pos;
|
||||
int increment = increasing ? 1 : -1;
|
||||
|
||||
@@ -365,6 +370,13 @@ apply_edge_resistance (MetaWindow *window,
|
||||
begin = find_index_of_edge_near_position (edges, old_pos, increasing, xdir);
|
||||
end = find_index_of_edge_near_position (edges, new_pos, !increasing, xdir);
|
||||
|
||||
/* begin and end can be outside the array index, if the window is partially
|
||||
* off the screen
|
||||
*/
|
||||
last_edge = edges->len - 1;
|
||||
begin = CLAMP (begin, 0, last_edge);
|
||||
end = CLAMP (end, 0, last_edge);
|
||||
|
||||
/* Loop over all these edges we're moving past/to. */
|
||||
i = begin;
|
||||
while ((increasing && i <= end) ||
|
||||
@@ -397,18 +409,6 @@ apply_edge_resistance (MetaWindow *window,
|
||||
{
|
||||
int threshold;
|
||||
|
||||
/* INFINITE RESISTANCE for screen edges under certain cases; If
|
||||
* the edge is relevant and we're moving towards it and it's a
|
||||
* screen edge and infinite resistance has been requested for
|
||||
* this particular grab op then don't allow movement past it.
|
||||
*/
|
||||
if (edge->edge_type == META_EDGE_SCREEN &&
|
||||
!resistance_data->allow_past_screen_edge &&
|
||||
movement_towards_edge (edge->side_type, increment))
|
||||
{
|
||||
return compare;
|
||||
}
|
||||
|
||||
/* TIMEOUT RESISTANCE: If the edge is relevant and we're moving
|
||||
* towards it, then we may want to have some kind of time delay
|
||||
* before the user can move past this edge.
|
||||
@@ -541,7 +541,8 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
|
||||
MetaRectangle *new_outer,
|
||||
GSourceFunc timeout_func,
|
||||
gboolean auto_snap,
|
||||
gboolean keyboard_op)
|
||||
gboolean keyboard_op,
|
||||
gboolean is_resize)
|
||||
{
|
||||
MetaEdgeResistanceData *edge_data;
|
||||
MetaRectangle modified_rect;
|
||||
@@ -588,47 +589,68 @@ apply_edge_resistance_to_each_side (MetaDisplay *display,
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Now, apply the normal edge resistance */
|
||||
new_left = apply_edge_resistance (window,
|
||||
BOX_LEFT (*old_outer),
|
||||
BOX_LEFT (*new_outer),
|
||||
old_outer,
|
||||
new_outer,
|
||||
edge_data->left_edges,
|
||||
&edge_data->left_data,
|
||||
timeout_func,
|
||||
TRUE,
|
||||
keyboard_op);
|
||||
new_right = apply_edge_resistance (window,
|
||||
BOX_RIGHT (*old_outer),
|
||||
BOX_RIGHT (*new_outer),
|
||||
old_outer,
|
||||
new_outer,
|
||||
edge_data->right_edges,
|
||||
&edge_data->right_data,
|
||||
timeout_func,
|
||||
TRUE,
|
||||
keyboard_op);
|
||||
new_top = apply_edge_resistance (window,
|
||||
BOX_TOP (*old_outer),
|
||||
BOX_TOP (*new_outer),
|
||||
old_outer,
|
||||
new_outer,
|
||||
edge_data->top_edges,
|
||||
&edge_data->top_data,
|
||||
timeout_func,
|
||||
FALSE,
|
||||
keyboard_op);
|
||||
new_bottom = apply_edge_resistance (window,
|
||||
BOX_BOTTOM (*old_outer),
|
||||
BOX_BOTTOM (*new_outer),
|
||||
old_outer,
|
||||
new_outer,
|
||||
edge_data->bottom_edges,
|
||||
&edge_data->bottom_data,
|
||||
timeout_func,
|
||||
FALSE,
|
||||
keyboard_op);
|
||||
/* Disable edge resistance for resizes when windows have size
|
||||
* increment hints; see #346782. For all other cases, apply
|
||||
* them.
|
||||
*/
|
||||
if (!is_resize || window->size_hints.width_inc == 1)
|
||||
{
|
||||
/* Now, apply the normal horizontal edge resistance */
|
||||
new_left = apply_edge_resistance (window,
|
||||
BOX_LEFT (*old_outer),
|
||||
BOX_LEFT (*new_outer),
|
||||
old_outer,
|
||||
new_outer,
|
||||
edge_data->left_edges,
|
||||
&edge_data->left_data,
|
||||
timeout_func,
|
||||
TRUE,
|
||||
keyboard_op);
|
||||
new_right = apply_edge_resistance (window,
|
||||
BOX_RIGHT (*old_outer),
|
||||
BOX_RIGHT (*new_outer),
|
||||
old_outer,
|
||||
new_outer,
|
||||
edge_data->right_edges,
|
||||
&edge_data->right_data,
|
||||
timeout_func,
|
||||
TRUE,
|
||||
keyboard_op);
|
||||
}
|
||||
else
|
||||
{
|
||||
new_left = new_outer->x;
|
||||
new_right = new_outer->x + new_outer->width;
|
||||
}
|
||||
/* Same for vertical resizes... */
|
||||
if (!is_resize || window->size_hints.height_inc == 1)
|
||||
{
|
||||
new_top = apply_edge_resistance (window,
|
||||
BOX_TOP (*old_outer),
|
||||
BOX_TOP (*new_outer),
|
||||
old_outer,
|
||||
new_outer,
|
||||
edge_data->top_edges,
|
||||
&edge_data->top_data,
|
||||
timeout_func,
|
||||
FALSE,
|
||||
keyboard_op);
|
||||
new_bottom = apply_edge_resistance (window,
|
||||
BOX_BOTTOM (*old_outer),
|
||||
BOX_BOTTOM (*new_outer),
|
||||
old_outer,
|
||||
new_outer,
|
||||
edge_data->bottom_edges,
|
||||
&edge_data->bottom_data,
|
||||
timeout_func,
|
||||
FALSE,
|
||||
keyboard_op);
|
||||
}
|
||||
else
|
||||
{
|
||||
new_top = new_outer->y;
|
||||
new_bottom = new_outer->y + new_outer->height;
|
||||
}
|
||||
}
|
||||
|
||||
/* Determine whether anything changed, and save the changes */
|
||||
@@ -913,12 +935,6 @@ initialize_grab_edge_resistance_data (MetaDisplay *display)
|
||||
edge_data->right_data.keyboard_buildup = 0;
|
||||
edge_data->top_data.keyboard_buildup = 0;
|
||||
edge_data->bottom_data.keyboard_buildup = 0;
|
||||
|
||||
edge_data->left_data.allow_past_screen_edge = TRUE;
|
||||
edge_data->right_data.allow_past_screen_edge = TRUE;
|
||||
edge_data->bottom_data.allow_past_screen_edge = TRUE;
|
||||
edge_data->top_data.allow_past_screen_edge =
|
||||
display->grab_anchor_root_y >= display->grab_initial_window_pos.y;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1121,6 +1137,7 @@ meta_window_edge_resistance_for_move (MetaWindow *window,
|
||||
gboolean is_keyboard_op)
|
||||
{
|
||||
MetaRectangle old_outer, proposed_outer, new_outer;
|
||||
gboolean is_resize;
|
||||
|
||||
if (window == window->display->grab_window &&
|
||||
window->display->grab_wireframe_active)
|
||||
@@ -1139,13 +1156,15 @@ meta_window_edge_resistance_for_move (MetaWindow *window,
|
||||
new_outer = proposed_outer;
|
||||
|
||||
window->display->grab_last_user_action_was_snap = snap;
|
||||
is_resize = FALSE;
|
||||
if (apply_edge_resistance_to_each_side (window->display,
|
||||
window,
|
||||
&old_outer,
|
||||
&new_outer,
|
||||
timeout_func,
|
||||
snap,
|
||||
is_keyboard_op))
|
||||
is_keyboard_op,
|
||||
is_resize))
|
||||
{
|
||||
/* apply_edge_resistance_to_each_side independently applies
|
||||
* resistance to both the right and left edges of new_outer as both
|
||||
@@ -1213,6 +1232,7 @@ meta_window_edge_resistance_for_resize (MetaWindow *window,
|
||||
{
|
||||
MetaRectangle old_outer, new_outer;
|
||||
int proposed_outer_width, proposed_outer_height;
|
||||
gboolean is_resize;
|
||||
|
||||
if (window == window->display->grab_window &&
|
||||
window->display->grab_wireframe_active)
|
||||
@@ -1234,13 +1254,15 @@ meta_window_edge_resistance_for_resize (MetaWindow *window,
|
||||
proposed_outer_height);
|
||||
|
||||
window->display->grab_last_user_action_was_snap = snap;
|
||||
is_resize = TRUE;
|
||||
if (apply_edge_resistance_to_each_side (window->display,
|
||||
window,
|
||||
&old_outer,
|
||||
&new_outer,
|
||||
timeout_func,
|
||||
snap,
|
||||
is_keyboard_op))
|
||||
is_keyboard_op,
|
||||
is_resize))
|
||||
{
|
||||
*new_width = old_width + (new_outer.width - old_outer.width);
|
||||
*new_height = old_height + (new_outer.height - old_outer.height);
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Edge resistance for move/resize operations */
|
||||
|
||||
/*
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity animation effects */
|
||||
|
||||
/*
|
||||
|
@@ -1,3 +1,5 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
|
||||
/* Metacity animation effects */
|
||||
|
||||
/*
|
||||
@@ -67,6 +69,8 @@ typedef struct
|
||||
MetaRectangle icon_rect;
|
||||
} MetaMinimizeEffect, MetaUnminimizeEffect;
|
||||
|
||||
#if 0
|
||||
/* Solaris abhors an empty struct. #397296. */
|
||||
typedef struct
|
||||
{
|
||||
|
||||
@@ -75,6 +79,7 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
} MetaFocusEffect;
|
||||
#endif
|
||||
|
||||
struct MetaEffect
|
||||
{
|
||||
@@ -86,8 +91,11 @@ struct MetaEffect
|
||||
{
|
||||
MetaMinimizeEffect minimize;
|
||||
MetaUnminimizeEffect unminimize;
|
||||
#if 0
|
||||
/* These don't currently exist, so we aren't using them. #397296. */
|
||||
MetaCloseEffect close;
|
||||
MetaFocusEffect focus;
|
||||
#endif
|
||||
} u;
|
||||
|
||||
MetaEffectPriv *priv;
|
||||
|
@@ -1,657 +0,0 @@
|
||||
/* eggaccelerators.c
|
||||
* Copyright (C) 2002 Red Hat, Inc.; Copyright 1998, 2001 Tim Janik
|
||||
* Developed by Havoc Pennington, Tim Janik
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "eggaccelerators.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <gdk/gdkx.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
|
||||
enum
|
||||
{
|
||||
EGG_MODMAP_ENTRY_SHIFT = 0,
|
||||
EGG_MODMAP_ENTRY_LOCK = 1,
|
||||
EGG_MODMAP_ENTRY_CONTROL = 2,
|
||||
EGG_MODMAP_ENTRY_MOD1 = 3,
|
||||
EGG_MODMAP_ENTRY_MOD2 = 4,
|
||||
EGG_MODMAP_ENTRY_MOD3 = 5,
|
||||
EGG_MODMAP_ENTRY_MOD4 = 6,
|
||||
EGG_MODMAP_ENTRY_MOD5 = 7,
|
||||
EGG_MODMAP_ENTRY_LAST = 8
|
||||
};
|
||||
|
||||
#define MODMAP_ENTRY_TO_MODIFIER(x) (1 << (x))
|
||||
|
||||
typedef struct
|
||||
{
|
||||
EggVirtualModifierType mapping[EGG_MODMAP_ENTRY_LAST];
|
||||
|
||||
} EggModmap;
|
||||
|
||||
static const EggModmap* egg_keymap_get_modmap (GdkKeymap *keymap);
|
||||
|
||||
static inline gboolean
|
||||
is_alt (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 'a' || string[1] == 'A') &&
|
||||
(string[2] == 'l' || string[2] == 'L') &&
|
||||
(string[3] == 't' || string[3] == 'T') &&
|
||||
(string[4] == '>'));
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
is_ctl (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 'c' || string[1] == 'C') &&
|
||||
(string[2] == 't' || string[2] == 'T') &&
|
||||
(string[3] == 'l' || string[3] == 'L') &&
|
||||
(string[4] == '>'));
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
is_modx (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 'm' || string[1] == 'M') &&
|
||||
(string[2] == 'o' || string[2] == 'O') &&
|
||||
(string[3] == 'd' || string[3] == 'D') &&
|
||||
(string[4] >= '1' && string[4] <= '5') &&
|
||||
(string[5] == '>'));
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
is_ctrl (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 'c' || string[1] == 'C') &&
|
||||
(string[2] == 't' || string[2] == 'T') &&
|
||||
(string[3] == 'r' || string[3] == 'R') &&
|
||||
(string[4] == 'l' || string[4] == 'L') &&
|
||||
(string[5] == '>'));
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
is_shft (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 's' || string[1] == 'S') &&
|
||||
(string[2] == 'h' || string[2] == 'H') &&
|
||||
(string[3] == 'f' || string[3] == 'F') &&
|
||||
(string[4] == 't' || string[4] == 'T') &&
|
||||
(string[5] == '>'));
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
is_shift (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 's' || string[1] == 'S') &&
|
||||
(string[2] == 'h' || string[2] == 'H') &&
|
||||
(string[3] == 'i' || string[3] == 'I') &&
|
||||
(string[4] == 'f' || string[4] == 'F') &&
|
||||
(string[5] == 't' || string[5] == 'T') &&
|
||||
(string[6] == '>'));
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
is_control (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 'c' || string[1] == 'C') &&
|
||||
(string[2] == 'o' || string[2] == 'O') &&
|
||||
(string[3] == 'n' || string[3] == 'N') &&
|
||||
(string[4] == 't' || string[4] == 'T') &&
|
||||
(string[5] == 'r' || string[5] == 'R') &&
|
||||
(string[6] == 'o' || string[6] == 'O') &&
|
||||
(string[7] == 'l' || string[7] == 'L') &&
|
||||
(string[8] == '>'));
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
is_release (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 'r' || string[1] == 'R') &&
|
||||
(string[2] == 'e' || string[2] == 'E') &&
|
||||
(string[3] == 'l' || string[3] == 'L') &&
|
||||
(string[4] == 'e' || string[4] == 'E') &&
|
||||
(string[5] == 'a' || string[5] == 'A') &&
|
||||
(string[6] == 's' || string[6] == 'S') &&
|
||||
(string[7] == 'e' || string[7] == 'E') &&
|
||||
(string[8] == '>'));
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
is_meta (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 'm' || string[1] == 'M') &&
|
||||
(string[2] == 'e' || string[2] == 'E') &&
|
||||
(string[3] == 't' || string[3] == 'T') &&
|
||||
(string[4] == 'a' || string[4] == 'A') &&
|
||||
(string[5] == '>'));
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
is_super (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 's' || string[1] == 'S') &&
|
||||
(string[2] == 'u' || string[2] == 'U') &&
|
||||
(string[3] == 'p' || string[3] == 'P') &&
|
||||
(string[4] == 'e' || string[4] == 'E') &&
|
||||
(string[5] == 'r' || string[5] == 'R') &&
|
||||
(string[6] == '>'));
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
is_hyper (const gchar *string)
|
||||
{
|
||||
return ((string[0] == '<') &&
|
||||
(string[1] == 'h' || string[1] == 'H') &&
|
||||
(string[2] == 'y' || string[2] == 'Y') &&
|
||||
(string[3] == 'p' || string[3] == 'P') &&
|
||||
(string[4] == 'e' || string[4] == 'E') &&
|
||||
(string[5] == 'r' || string[5] == 'R') &&
|
||||
(string[6] == '>'));
|
||||
}
|
||||
|
||||
/**
|
||||
* egg_accelerator_parse_virtual:
|
||||
* @accelerator: string representing an accelerator
|
||||
* @accelerator_key: return location for accelerator keyval
|
||||
* @accelerator_mods: return location for accelerator modifier mask
|
||||
*
|
||||
* Parses a string representing a virtual accelerator. The format
|
||||
* looks like "<Control>a" or "<Shift><Alt>F1" or
|
||||
* "<Release>z" (the last one is for key release). The parser
|
||||
* is fairly liberal and allows lower or upper case, and also
|
||||
* abbreviations such as "<Ctl>" and "<Ctrl>".
|
||||
*
|
||||
* If the parse fails, @accelerator_key and @accelerator_mods will
|
||||
* be set to 0 (zero) and %FALSE will be returned. If the string contains
|
||||
* only modifiers, @accelerator_key will be set to 0 but %TRUE will be
|
||||
* returned.
|
||||
*
|
||||
* The virtual vs. concrete accelerator distinction is a relic of
|
||||
* how the X Window System works; there are modifiers Mod2-Mod5 that
|
||||
* can represent various keyboard keys (numlock, meta, hyper, etc.),
|
||||
* the virtual modifier represents the keyboard key, the concrete
|
||||
* modifier the actual Mod2-Mod5 bits in the key press event.
|
||||
*
|
||||
* Returns: %TRUE on success.
|
||||
*/
|
||||
gboolean
|
||||
egg_accelerator_parse_virtual (const gchar *accelerator,
|
||||
guint *accelerator_key,
|
||||
EggVirtualModifierType *accelerator_mods)
|
||||
{
|
||||
guint keyval;
|
||||
GdkModifierType mods;
|
||||
gint len;
|
||||
gboolean bad_keyval;
|
||||
|
||||
if (accelerator_key)
|
||||
*accelerator_key = 0;
|
||||
if (accelerator_mods)
|
||||
*accelerator_mods = 0;
|
||||
|
||||
g_return_val_if_fail (accelerator != NULL, FALSE);
|
||||
|
||||
bad_keyval = FALSE;
|
||||
|
||||
keyval = 0;
|
||||
mods = 0;
|
||||
len = strlen (accelerator);
|
||||
while (len)
|
||||
{
|
||||
if (*accelerator == '<')
|
||||
{
|
||||
if (len >= 9 && is_release (accelerator))
|
||||
{
|
||||
accelerator += 9;
|
||||
len -= 9;
|
||||
mods |= EGG_VIRTUAL_RELEASE_MASK;
|
||||
}
|
||||
else if (len >= 9 && is_control (accelerator))
|
||||
{
|
||||
accelerator += 9;
|
||||
len -= 9;
|
||||
mods |= EGG_VIRTUAL_CONTROL_MASK;
|
||||
}
|
||||
else if (len >= 7 && is_shift (accelerator))
|
||||
{
|
||||
accelerator += 7;
|
||||
len -= 7;
|
||||
mods |= EGG_VIRTUAL_SHIFT_MASK;
|
||||
}
|
||||
else if (len >= 6 && is_shft (accelerator))
|
||||
{
|
||||
accelerator += 6;
|
||||
len -= 6;
|
||||
mods |= EGG_VIRTUAL_SHIFT_MASK;
|
||||
}
|
||||
else if (len >= 6 && is_ctrl (accelerator))
|
||||
{
|
||||
accelerator += 6;
|
||||
len -= 6;
|
||||
mods |= EGG_VIRTUAL_CONTROL_MASK;
|
||||
}
|
||||
else if (len >= 6 && is_modx (accelerator))
|
||||
{
|
||||
static const guint mod_vals[] = {
|
||||
EGG_VIRTUAL_ALT_MASK, EGG_VIRTUAL_MOD2_MASK, EGG_VIRTUAL_MOD3_MASK,
|
||||
EGG_VIRTUAL_MOD4_MASK, EGG_VIRTUAL_MOD5_MASK
|
||||
};
|
||||
|
||||
len -= 6;
|
||||
accelerator += 4;
|
||||
mods |= mod_vals[*accelerator - '1'];
|
||||
accelerator += 2;
|
||||
}
|
||||
else if (len >= 5 && is_ctl (accelerator))
|
||||
{
|
||||
accelerator += 5;
|
||||
len -= 5;
|
||||
mods |= EGG_VIRTUAL_CONTROL_MASK;
|
||||
}
|
||||
else if (len >= 5 && is_alt (accelerator))
|
||||
{
|
||||
accelerator += 5;
|
||||
len -= 5;
|
||||
mods |= EGG_VIRTUAL_ALT_MASK;
|
||||
}
|
||||
else if (len >= 6 && is_meta (accelerator))
|
||||
{
|
||||
accelerator += 6;
|
||||
len -= 6;
|
||||
mods |= EGG_VIRTUAL_META_MASK;
|
||||
}
|
||||
else if (len >= 7 && is_hyper (accelerator))
|
||||
{
|
||||
accelerator += 7;
|
||||
len -= 7;
|
||||
mods |= EGG_VIRTUAL_HYPER_MASK;
|
||||
}
|
||||
else if (len >= 7 && is_super (accelerator))
|
||||
{
|
||||
accelerator += 7;
|
||||
len -= 7;
|
||||
mods |= EGG_VIRTUAL_SUPER_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
gchar last_ch;
|
||||
|
||||
last_ch = *accelerator;
|
||||
while (last_ch && last_ch != '>')
|
||||
{
|
||||
last_ch = *accelerator;
|
||||
accelerator += 1;
|
||||
len -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
keyval = gdk_keyval_from_name (accelerator);
|
||||
|
||||
if (keyval == 0)
|
||||
bad_keyval = TRUE;
|
||||
|
||||
accelerator += len;
|
||||
len -= len;
|
||||
}
|
||||
}
|
||||
|
||||
if (accelerator_key)
|
||||
*accelerator_key = gdk_keyval_to_lower (keyval);
|
||||
if (accelerator_mods)
|
||||
*accelerator_mods = mods;
|
||||
|
||||
return !bad_keyval;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* egg_virtual_accelerator_name:
|
||||
* @accelerator_key: accelerator keyval
|
||||
* @accelerator_mods: accelerator modifier mask
|
||||
* @returns: a newly-allocated accelerator name
|
||||
*
|
||||
* Converts an accelerator keyval and modifier mask
|
||||
* into a string parseable by egg_accelerator_parse_virtual().
|
||||
* For example, if you pass in #GDK_q and #EGG_VIRTUAL_CONTROL_MASK,
|
||||
* this function returns "<Control>q".
|
||||
*
|
||||
* The caller of this function must free the returned string.
|
||||
*/
|
||||
gchar*
|
||||
egg_virtual_accelerator_name (guint accelerator_key,
|
||||
EggVirtualModifierType accelerator_mods)
|
||||
{
|
||||
static const gchar text_release[] = "<Release>";
|
||||
static const gchar text_shift[] = "<Shift>";
|
||||
static const gchar text_control[] = "<Control>";
|
||||
static const gchar text_mod1[] = "<Alt>";
|
||||
static const gchar text_mod2[] = "<Mod2>";
|
||||
static const gchar text_mod3[] = "<Mod3>";
|
||||
static const gchar text_mod4[] = "<Mod4>";
|
||||
static const gchar text_mod5[] = "<Mod5>";
|
||||
static const gchar text_meta[] = "<Meta>";
|
||||
static const gchar text_super[] = "<Super>";
|
||||
static const gchar text_hyper[] = "<Hyper>";
|
||||
guint l;
|
||||
gchar *keyval_name;
|
||||
gchar *accelerator;
|
||||
|
||||
accelerator_mods &= EGG_VIRTUAL_MODIFIER_MASK;
|
||||
|
||||
keyval_name = gdk_keyval_name (gdk_keyval_to_lower (accelerator_key));
|
||||
if (!keyval_name)
|
||||
keyval_name = "";
|
||||
|
||||
l = 0;
|
||||
if (accelerator_mods & EGG_VIRTUAL_RELEASE_MASK)
|
||||
l += sizeof (text_release) - 1;
|
||||
if (accelerator_mods & EGG_VIRTUAL_SHIFT_MASK)
|
||||
l += sizeof (text_shift) - 1;
|
||||
if (accelerator_mods & EGG_VIRTUAL_CONTROL_MASK)
|
||||
l += sizeof (text_control) - 1;
|
||||
if (accelerator_mods & EGG_VIRTUAL_ALT_MASK)
|
||||
l += sizeof (text_mod1) - 1;
|
||||
if (accelerator_mods & EGG_VIRTUAL_MOD2_MASK)
|
||||
l += sizeof (text_mod2) - 1;
|
||||
if (accelerator_mods & EGG_VIRTUAL_MOD3_MASK)
|
||||
l += sizeof (text_mod3) - 1;
|
||||
if (accelerator_mods & EGG_VIRTUAL_MOD4_MASK)
|
||||
l += sizeof (text_mod4) - 1;
|
||||
if (accelerator_mods & EGG_VIRTUAL_MOD5_MASK)
|
||||
l += sizeof (text_mod5) - 1;
|
||||
if (accelerator_mods & EGG_VIRTUAL_META_MASK)
|
||||
l += sizeof (text_meta) - 1;
|
||||
if (accelerator_mods & EGG_VIRTUAL_HYPER_MASK)
|
||||
l += sizeof (text_hyper) - 1;
|
||||
if (accelerator_mods & EGG_VIRTUAL_SUPER_MASK)
|
||||
l += sizeof (text_super) - 1;
|
||||
l += strlen (keyval_name);
|
||||
|
||||
accelerator = g_new (gchar, l + 1);
|
||||
|
||||
l = 0;
|
||||
accelerator[l] = 0;
|
||||
if (accelerator_mods & EGG_VIRTUAL_RELEASE_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_release);
|
||||
l += sizeof (text_release) - 1;
|
||||
}
|
||||
if (accelerator_mods & EGG_VIRTUAL_SHIFT_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_shift);
|
||||
l += sizeof (text_shift) - 1;
|
||||
}
|
||||
if (accelerator_mods & EGG_VIRTUAL_CONTROL_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_control);
|
||||
l += sizeof (text_control) - 1;
|
||||
}
|
||||
if (accelerator_mods & EGG_VIRTUAL_ALT_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_mod1);
|
||||
l += sizeof (text_mod1) - 1;
|
||||
}
|
||||
if (accelerator_mods & EGG_VIRTUAL_MOD2_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_mod2);
|
||||
l += sizeof (text_mod2) - 1;
|
||||
}
|
||||
if (accelerator_mods & EGG_VIRTUAL_MOD3_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_mod3);
|
||||
l += sizeof (text_mod3) - 1;
|
||||
}
|
||||
if (accelerator_mods & EGG_VIRTUAL_MOD4_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_mod4);
|
||||
l += sizeof (text_mod4) - 1;
|
||||
}
|
||||
if (accelerator_mods & EGG_VIRTUAL_MOD5_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_mod5);
|
||||
l += sizeof (text_mod5) - 1;
|
||||
}
|
||||
if (accelerator_mods & EGG_VIRTUAL_META_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_meta);
|
||||
l += sizeof (text_meta) - 1;
|
||||
}
|
||||
if (accelerator_mods & EGG_VIRTUAL_HYPER_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_hyper);
|
||||
l += sizeof (text_hyper) - 1;
|
||||
}
|
||||
if (accelerator_mods & EGG_VIRTUAL_SUPER_MASK)
|
||||
{
|
||||
strcpy (accelerator + l, text_super);
|
||||
l += sizeof (text_super) - 1;
|
||||
}
|
||||
|
||||
strcpy (accelerator + l, keyval_name);
|
||||
|
||||
return accelerator;
|
||||
}
|
||||
|
||||
void
|
||||
egg_keymap_resolve_virtual_modifiers (GdkKeymap *keymap,
|
||||
EggVirtualModifierType virtual_mods,
|
||||
GdkModifierType *concrete_mods)
|
||||
{
|
||||
GdkModifierType concrete;
|
||||
int i;
|
||||
const EggModmap *modmap;
|
||||
|
||||
g_return_if_fail (GDK_IS_KEYMAP (keymap));
|
||||
g_return_if_fail (concrete_mods != NULL);
|
||||
|
||||
modmap = egg_keymap_get_modmap (keymap);
|
||||
|
||||
/* Not so sure about this algorithm. */
|
||||
|
||||
concrete = 0;
|
||||
i = 0;
|
||||
while (i < EGG_MODMAP_ENTRY_LAST)
|
||||
{
|
||||
if (modmap->mapping[i] & virtual_mods)
|
||||
concrete |= (1 << i);
|
||||
|
||||
++i;
|
||||
}
|
||||
|
||||
*concrete_mods = concrete;
|
||||
}
|
||||
|
||||
void
|
||||
egg_keymap_virtualize_modifiers (GdkKeymap *keymap,
|
||||
GdkModifierType concrete_mods,
|
||||
EggVirtualModifierType *virtual_mods)
|
||||
{
|
||||
GdkModifierType virtual;
|
||||
int i;
|
||||
const EggModmap *modmap;
|
||||
|
||||
g_return_if_fail (GDK_IS_KEYMAP (keymap));
|
||||
g_return_if_fail (virtual_mods != NULL);
|
||||
|
||||
modmap = egg_keymap_get_modmap (keymap);
|
||||
|
||||
/* Not so sure about this algorithm. */
|
||||
|
||||
virtual = 0;
|
||||
i = 0;
|
||||
while (i < EGG_MODMAP_ENTRY_LAST)
|
||||
{
|
||||
if ((1 << i) & concrete_mods)
|
||||
{
|
||||
EggVirtualModifierType cleaned;
|
||||
|
||||
cleaned = modmap->mapping[i] & ~(EGG_VIRTUAL_MOD2_MASK |
|
||||
EGG_VIRTUAL_MOD3_MASK |
|
||||
EGG_VIRTUAL_MOD4_MASK |
|
||||
EGG_VIRTUAL_MOD5_MASK);
|
||||
|
||||
if (cleaned != 0)
|
||||
{
|
||||
virtual |= cleaned;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Rather than dropping mod2->mod5 if not bound,
|
||||
* go ahead and use the concrete names
|
||||
*/
|
||||
virtual |= modmap->mapping[i];
|
||||
}
|
||||
}
|
||||
|
||||
++i;
|
||||
}
|
||||
|
||||
*virtual_mods = virtual;
|
||||
}
|
||||
|
||||
static void
|
||||
reload_modmap (GdkKeymap *keymap,
|
||||
EggModmap *modmap)
|
||||
{
|
||||
XModifierKeymap *xmodmap;
|
||||
int map_size;
|
||||
int i;
|
||||
|
||||
/* FIXME multihead */
|
||||
xmodmap = XGetModifierMapping (gdk_x11_get_default_xdisplay ());
|
||||
|
||||
memset (modmap->mapping, 0, sizeof (modmap->mapping));
|
||||
|
||||
/* there are 8 modifiers, and the first 3 are shift, shift lock,
|
||||
* and control
|
||||
*/
|
||||
map_size = 8 * xmodmap->max_keypermod;
|
||||
i = 3 * xmodmap->max_keypermod;
|
||||
while (i < map_size)
|
||||
{
|
||||
/* get the key code at this point in the map,
|
||||
* see if its keysym is one we're interested in
|
||||
*/
|
||||
int keycode = xmodmap->modifiermap[i];
|
||||
GdkKeymapKey *keys;
|
||||
guint *keyvals;
|
||||
int n_entries;
|
||||
int j;
|
||||
EggVirtualModifierType mask;
|
||||
|
||||
keys = NULL;
|
||||
keyvals = NULL;
|
||||
n_entries = 0;
|
||||
|
||||
gdk_keymap_get_entries_for_keycode (keymap,
|
||||
keycode,
|
||||
&keys, &keyvals, &n_entries);
|
||||
|
||||
mask = 0;
|
||||
j = 0;
|
||||
while (j < n_entries)
|
||||
{
|
||||
if (keyvals[j] == GDK_Num_Lock)
|
||||
mask |= EGG_VIRTUAL_NUM_LOCK_MASK;
|
||||
else if (keyvals[j] == GDK_Scroll_Lock)
|
||||
mask |= EGG_VIRTUAL_SCROLL_LOCK_MASK;
|
||||
else if (keyvals[j] == GDK_Meta_L ||
|
||||
keyvals[j] == GDK_Meta_R)
|
||||
mask |= EGG_VIRTUAL_META_MASK;
|
||||
else if (keyvals[j] == GDK_Hyper_L ||
|
||||
keyvals[j] == GDK_Hyper_R)
|
||||
mask |= EGG_VIRTUAL_HYPER_MASK;
|
||||
else if (keyvals[j] == GDK_Super_L ||
|
||||
keyvals[j] == GDK_Super_R)
|
||||
mask |= EGG_VIRTUAL_SUPER_MASK;
|
||||
else if (keyvals[j] == GDK_Mode_switch)
|
||||
mask |= EGG_VIRTUAL_MODE_SWITCH_MASK;
|
||||
|
||||
++j;
|
||||
}
|
||||
|
||||
/* Mod1Mask is 1 << 3 for example, i.e. the
|
||||
* fourth modifier, i / keyspermod is the modifier
|
||||
* index
|
||||
*/
|
||||
modmap->mapping[i/xmodmap->max_keypermod] |= mask;
|
||||
|
||||
g_free (keyvals);
|
||||
g_free (keys);
|
||||
|
||||
++i;
|
||||
}
|
||||
|
||||
/* Add in the not-really-virtual fixed entries */
|
||||
modmap->mapping[EGG_MODMAP_ENTRY_SHIFT] |= EGG_VIRTUAL_SHIFT_MASK;
|
||||
modmap->mapping[EGG_MODMAP_ENTRY_CONTROL] |= EGG_VIRTUAL_CONTROL_MASK;
|
||||
modmap->mapping[EGG_MODMAP_ENTRY_LOCK] |= EGG_VIRTUAL_LOCK_MASK;
|
||||
modmap->mapping[EGG_MODMAP_ENTRY_MOD1] |= EGG_VIRTUAL_ALT_MASK;
|
||||
modmap->mapping[EGG_MODMAP_ENTRY_MOD2] |= EGG_VIRTUAL_MOD2_MASK;
|
||||
modmap->mapping[EGG_MODMAP_ENTRY_MOD3] |= EGG_VIRTUAL_MOD3_MASK;
|
||||
modmap->mapping[EGG_MODMAP_ENTRY_MOD4] |= EGG_VIRTUAL_MOD4_MASK;
|
||||
modmap->mapping[EGG_MODMAP_ENTRY_MOD5] |= EGG_VIRTUAL_MOD5_MASK;
|
||||
|
||||
XFreeModifiermap (xmodmap);
|
||||
}
|
||||
|
||||
const EggModmap*
|
||||
egg_keymap_get_modmap (GdkKeymap *keymap)
|
||||
{
|
||||
EggModmap *modmap;
|
||||
|
||||
/* This is all a hack, much simpler when we can just
|
||||
* modify GDK directly.
|
||||
*/
|
||||
|
||||
modmap = g_object_get_data (G_OBJECT (keymap),
|
||||
"egg-modmap");
|
||||
|
||||
if (modmap == NULL)
|
||||
{
|
||||
modmap = g_new0 (EggModmap, 1);
|
||||
|
||||
/* FIXME modify keymap change events with an event filter
|
||||
* and force a reload if we get one
|
||||
*/
|
||||
|
||||
reload_modmap (keymap, modmap);
|
||||
|
||||
g_object_set_data_full (G_OBJECT (keymap),
|
||||
"egg-modmap",
|
||||
modmap,
|
||||
g_free);
|
||||
}
|
||||
|
||||
g_assert (modmap != NULL);
|
||||
|
||||
return modmap;
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user