Compare commits
529 Commits
METACITY_2
...
METACITY_2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
12d5978268 | ||
![]() |
d769484f35 | ||
![]() |
a524fb9c9c | ||
![]() |
239cf4a060 | ||
![]() |
984154e011 | ||
![]() |
14f120f131 | ||
![]() |
c118c50117 | ||
![]() |
89f01eb73a | ||
![]() |
ae85a33614 | ||
![]() |
fe47d4436d | ||
![]() |
fee1fb094a | ||
![]() |
83d21b97c4 | ||
![]() |
f908d78e4b | ||
![]() |
e2ea1cf722 | ||
![]() |
10f0cfd2dc | ||
![]() |
7e2d5185a0 | ||
![]() |
5bf3e39ef6 | ||
![]() |
a03e78210f | ||
![]() |
ecf75915b9 | ||
![]() |
2214fd75d9 | ||
![]() |
1dea155c8c | ||
![]() |
694a4352bc | ||
![]() |
4cbe4e7558 | ||
![]() |
4f99d7e17f | ||
![]() |
3d4717c8e1 | ||
![]() |
bf4172dc7c | ||
![]() |
4d097fbc18 | ||
![]() |
13cdd8ad3d | ||
![]() |
c7c9f0ee52 | ||
![]() |
ea50cc7239 | ||
![]() |
59d99fb9d1 | ||
![]() |
4b683fdbf2 | ||
![]() |
4730cb57bd | ||
![]() |
c2b4a65e75 | ||
![]() |
793c1d7a43 | ||
![]() |
123684d80b | ||
![]() |
8674051c58 | ||
![]() |
cb109b9637 | ||
![]() |
6445d16fd5 | ||
![]() |
21d5a43c29 | ||
![]() |
f7a202eb81 | ||
![]() |
eb102ab37f | ||
![]() |
aaafd14124 | ||
![]() |
3bf211c89f | ||
![]() |
127a89886b | ||
![]() |
82a6c99485 | ||
![]() |
d0564def9c | ||
![]() |
1f7446cd88 | ||
![]() |
cf3deef6ea | ||
![]() |
28aeacb247 | ||
![]() |
d75c170fef | ||
![]() |
ea1568c720 | ||
![]() |
9b6aeeef12 | ||
![]() |
25923105e4 | ||
![]() |
09a5c23585 | ||
![]() |
8f59776087 | ||
![]() |
905b4e8e0d | ||
![]() |
b11ac45352 | ||
![]() |
fd1e1c76e8 | ||
![]() |
c5d4cbd742 | ||
![]() |
fc7a246074 | ||
![]() |
bdb60c4e72 | ||
![]() |
d07fccc8b1 | ||
![]() |
543f85a1db | ||
![]() |
ab176cf831 | ||
![]() |
ef47c243c5 | ||
![]() |
01cd31f7f4 | ||
![]() |
ad2c7c6ce3 | ||
![]() |
4d6ee9ea49 | ||
![]() |
a401b82089 | ||
![]() |
54751db00a | ||
![]() |
16de3b603b | ||
![]() |
5f30265879 | ||
![]() |
0b5f11ae5a | ||
![]() |
6ef997d3ad | ||
![]() |
369ab5bc2b | ||
![]() |
188bc50a35 | ||
![]() |
042f5e3e6b | ||
![]() |
82a3cad018 | ||
![]() |
c910286c02 | ||
![]() |
07ef2db60c | ||
![]() |
5f3b961989 | ||
![]() |
3393f4707c | ||
![]() |
77b8ed579a | ||
![]() |
d02815b364 | ||
![]() |
9cfa08d4f4 | ||
![]() |
77440097e1 | ||
![]() |
985195858d | ||
![]() |
d161ddcff8 | ||
![]() |
e27bebc49b | ||
![]() |
9ac0eab5c3 | ||
![]() |
4d220adc32 | ||
![]() |
7750026603 | ||
![]() |
92ac98ef47 | ||
![]() |
1161cfdeba | ||
![]() |
8d0a3358c7 | ||
![]() |
20c9efaf82 | ||
![]() |
192943640e | ||
![]() |
46bdc87e94 | ||
![]() |
35674ae862 | ||
![]() |
04433e5b9d | ||
![]() |
f8cd8ae75f | ||
![]() |
94d4d039c2 | ||
![]() |
3c6b291641 | ||
![]() |
8c2a5dbc19 | ||
![]() |
92971d6377 | ||
![]() |
add8531eb4 | ||
![]() |
eed6f29b30 | ||
![]() |
832968ddd6 | ||
![]() |
7a8e3c94fd | ||
![]() |
4d0d192761 | ||
![]() |
c3ed3a3090 | ||
![]() |
b7c040be26 | ||
![]() |
e92403441a | ||
![]() |
9232b75ef4 | ||
![]() |
1b7d0fbc87 | ||
![]() |
0a1a7e523c | ||
![]() |
d3e27ed02a | ||
![]() |
3e01e149eb | ||
![]() |
04a4f7c363 | ||
![]() |
6a08faf99b | ||
![]() |
a3e7c9c222 | ||
![]() |
1a430825c3 | ||
![]() |
82664c5d76 | ||
![]() |
f8f6016970 | ||
![]() |
b1847959b1 | ||
![]() |
e4cf87c985 | ||
![]() |
928364e915 | ||
![]() |
78ce6d6a60 | ||
![]() |
a6b60a2024 | ||
![]() |
f5fdb07165 | ||
![]() |
f127b2bc98 | ||
![]() |
5352caac31 | ||
![]() |
d24fa066a4 | ||
![]() |
d010bbb5ed | ||
![]() |
636da5ebff | ||
![]() |
a42e4dac42 | ||
![]() |
f966ab041b | ||
![]() |
9e17747f3c | ||
![]() |
5a85bf18fe | ||
![]() |
833fc11c47 | ||
![]() |
8215a35993 | ||
![]() |
f3ade45b96 | ||
![]() |
71b27c6228 | ||
![]() |
053759fad6 | ||
![]() |
f6738a930c | ||
![]() |
0f48ff448c | ||
![]() |
ca539199b2 | ||
![]() |
c348794431 | ||
![]() |
0610f92f0f | ||
![]() |
b3e0208afa | ||
![]() |
8ceb613668 | ||
![]() |
500bbefc6a | ||
![]() |
d0e8371494 | ||
![]() |
ce3299e815 | ||
![]() |
0e8c8eb6b5 | ||
![]() |
cb298b9279 | ||
![]() |
74510389bc | ||
![]() |
0654163d8a | ||
![]() |
7aebefad3c | ||
![]() |
4b6a87acb5 | ||
![]() |
f39bcff434 | ||
![]() |
abde4a3769 | ||
![]() |
d49bb492fe | ||
![]() |
14f72c89e3 | ||
![]() |
b5c199c6e6 | ||
![]() |
63d978d228 | ||
![]() |
f839edda05 | ||
![]() |
d6ace0d2d4 | ||
![]() |
bcadc0ce3a | ||
![]() |
fdd47d79b4 | ||
![]() |
891e59e597 | ||
![]() |
297e0e466f | ||
![]() |
be036ca300 | ||
![]() |
5a49bc8f91 | ||
![]() |
2360ba0aeb | ||
![]() |
2bcbabf6ec | ||
![]() |
e7675e8069 | ||
![]() |
405e21a82a | ||
![]() |
9abec54da6 | ||
![]() |
095359b58d | ||
![]() |
99c3ce1ef9 | ||
![]() |
0375976ef0 | ||
![]() |
9a91c8066a | ||
![]() |
9ce85d7657 | ||
![]() |
8808c8b500 | ||
![]() |
5c29242d4a | ||
![]() |
c0f4b9d2d4 | ||
![]() |
e44e8c93aa | ||
![]() |
c8d135b353 | ||
![]() |
8e5425a86f | ||
![]() |
0ea8552531 | ||
![]() |
dcec11274a | ||
![]() |
6f318f1a75 | ||
![]() |
5568f75cb0 | ||
![]() |
e272295976 | ||
![]() |
a556a7334a | ||
![]() |
af14d9d2a1 | ||
![]() |
32d4bd6b63 | ||
![]() |
4c10722262 | ||
![]() |
cc790655f2 | ||
![]() |
1bce2c55fe | ||
![]() |
5f9a097d2c | ||
![]() |
24976318b5 | ||
![]() |
59d7d891db | ||
![]() |
8638300708 | ||
![]() |
a42d6647b5 | ||
![]() |
0a815fb8f8 | ||
![]() |
4dd216f5a8 | ||
![]() |
4d868c1ddc | ||
![]() |
97981e4322 | ||
![]() |
35dae65862 | ||
![]() |
fac7010411 | ||
![]() |
d552ca35f6 | ||
![]() |
9fdd3d165d | ||
![]() |
ef792fc1f7 | ||
![]() |
50bcc976bc | ||
![]() |
def12b85b8 | ||
![]() |
5a652acf88 | ||
![]() |
efe25a80ed | ||
![]() |
f9d11c0be6 | ||
![]() |
fea6191473 | ||
![]() |
0eab7bd14c | ||
![]() |
9ec589b3b8 | ||
![]() |
d0b1dab993 | ||
![]() |
4689944194 | ||
![]() |
1f6dbf75fa | ||
![]() |
51b8c402d8 | ||
![]() |
f0322ee76c | ||
![]() |
5913b8c5ab | ||
![]() |
52df880f32 | ||
![]() |
f6270596de | ||
![]() |
a4d1c6fd61 | ||
![]() |
0f8add8b37 | ||
![]() |
8c5b6c875a | ||
![]() |
ae52d731be | ||
![]() |
d884f9ce8a | ||
![]() |
ee54debd6a | ||
![]() |
24cfed8cf0 | ||
![]() |
008a811e10 | ||
![]() |
de65967b62 | ||
![]() |
35532d14cb | ||
![]() |
9516694385 | ||
![]() |
9eb56f151c | ||
![]() |
e3ff2316fe | ||
![]() |
ab0ba52f89 | ||
![]() |
339948fcf2 | ||
![]() |
ebd0c7e9a6 | ||
![]() |
d530c3e405 | ||
![]() |
be86740b3d | ||
![]() |
d4771cd9cf | ||
![]() |
a59f14adbc | ||
![]() |
703f58cdf7 | ||
![]() |
5e9f20e94c | ||
![]() |
a710235e86 | ||
![]() |
53cba6ed37 | ||
![]() |
7e821f37fd | ||
![]() |
830baad257 | ||
![]() |
6a9242b192 | ||
![]() |
013c8b82db | ||
![]() |
37fb0af742 | ||
![]() |
12193322a8 | ||
![]() |
d9721257d2 | ||
![]() |
c08a660368 | ||
![]() |
77b148afdc | ||
![]() |
b4635f2143 | ||
![]() |
b3f465c727 | ||
![]() |
616d778f6b | ||
![]() |
6fa00967a5 | ||
![]() |
35925d1cf1 | ||
![]() |
d74b0ce151 | ||
![]() |
ca6991d4a8 | ||
![]() |
ca2fe384bc | ||
![]() |
65168cf8c9 | ||
![]() |
b03d82661f | ||
![]() |
20e6b8d2f8 | ||
![]() |
3426844ad5 | ||
![]() |
a3902fb922 | ||
![]() |
0fdbdbd236 | ||
![]() |
9641bc5ee7 | ||
![]() |
d1da3438d4 | ||
![]() |
f9a4aea0cf | ||
![]() |
0ac220aecd | ||
![]() |
075d6d34db | ||
![]() |
dfbec3a4c3 | ||
![]() |
466ce4a936 | ||
![]() |
c78a98e066 | ||
![]() |
a5165ee24d | ||
![]() |
a7201d27d1 | ||
![]() |
cfb3bd081a | ||
![]() |
d0095e947f | ||
![]() |
ef486d855c | ||
![]() |
2e10145b33 | ||
![]() |
6677b55cd5 | ||
![]() |
7c1aa16c3b | ||
![]() |
e2e2c6401b | ||
![]() |
4752ef55c7 | ||
![]() |
55f62585d0 | ||
![]() |
a11e758b4b | ||
![]() |
828d2ca01e | ||
![]() |
064303e98e | ||
![]() |
094449d097 | ||
![]() |
ddd1d6616d | ||
![]() |
f2acdda740 | ||
![]() |
7c70749ae8 | ||
![]() |
37ced4cc32 | ||
![]() |
0bf176de5b | ||
![]() |
f4a587f05e | ||
![]() |
27b0a5e0b0 | ||
![]() |
62fb5e6eb4 | ||
![]() |
9292fe606a | ||
![]() |
7ef871f73a | ||
![]() |
29e38a2f53 | ||
![]() |
3e77dd1ace | ||
![]() |
5b28d889fa | ||
![]() |
fcf89cc2fa | ||
![]() |
0a13bf3270 | ||
![]() |
4aaf6e3eb4 | ||
![]() |
12daca5cb1 | ||
![]() |
1a8c2aa027 | ||
![]() |
26dbf9856b | ||
![]() |
ea4cd88285 | ||
![]() |
47f1a8634b | ||
![]() |
c3624745ae | ||
![]() |
2aee817a56 | ||
![]() |
ef5299ee92 | ||
![]() |
fcba59e685 | ||
![]() |
662da0ec3c | ||
![]() |
66c5548061 | ||
![]() |
9503b4ba21 | ||
![]() |
72c5649bc3 | ||
![]() |
43d72674e9 | ||
![]() |
943f4f66fb | ||
![]() |
997b5dcccf | ||
![]() |
94da2b94d7 | ||
![]() |
c502053ffc | ||
![]() |
213833f333 | ||
![]() |
9136686aa4 | ||
![]() |
8eed998780 | ||
![]() |
0d1c28948d | ||
![]() |
d02dc0e89a | ||
![]() |
b4f123c332 | ||
![]() |
422ee61608 | ||
![]() |
06df0d64ad | ||
![]() |
4c96a68427 | ||
![]() |
86bbde337c | ||
![]() |
809a1c173f | ||
![]() |
735188fd2b | ||
![]() |
6bb6566b86 | ||
![]() |
304a05b9a3 | ||
![]() |
7f90738dba | ||
![]() |
909de04b89 | ||
![]() |
b751ceb159 | ||
![]() |
feebb2f42e | ||
![]() |
2139d4e25e | ||
![]() |
3ed91c8e14 | ||
![]() |
02d6e62aec | ||
![]() |
8126d0953d | ||
![]() |
fc6dbd84b9 | ||
![]() |
e16863f783 | ||
![]() |
96c238bbc6 | ||
![]() |
2df2e18a9b | ||
![]() |
5305e17392 | ||
![]() |
cb19fdc3ce | ||
![]() |
7d1e1b042f | ||
![]() |
4b4d6cac42 | ||
![]() |
905a92a20a | ||
![]() |
f1bcb6b51a | ||
![]() |
a39cb116c7 | ||
![]() |
87f613fbbe | ||
![]() |
f38e760506 | ||
![]() |
05dcc58174 | ||
![]() |
ce42492db4 | ||
![]() |
893fadf7d6 | ||
![]() |
a182b353ce | ||
![]() |
f335b0c381 | ||
![]() |
2972ab6df6 | ||
![]() |
8e927fd300 | ||
![]() |
c50c8e6f7d | ||
![]() |
d8a1b9750b | ||
![]() |
1b2e5e56a8 | ||
![]() |
7a9be72bdf | ||
![]() |
d5705ef576 | ||
![]() |
20b7ee18ef | ||
![]() |
7311386172 | ||
![]() |
91e594863c | ||
![]() |
455dbdf67a | ||
![]() |
7f1fd68952 | ||
![]() |
9c97fd2b9b | ||
![]() |
266f78d9a8 | ||
![]() |
c25b8ec616 | ||
![]() |
c64bda776b | ||
![]() |
ef5c3f976a | ||
![]() |
7e2a44039f | ||
![]() |
225407f3b3 | ||
![]() |
845a7fe554 | ||
![]() |
969a4ab3ef | ||
![]() |
10ea37ec4a | ||
![]() |
b102891467 | ||
![]() |
4c143b3635 | ||
![]() |
eb04fe1ec7 | ||
![]() |
2126caf511 | ||
![]() |
b6fa0deff3 | ||
![]() |
10ee3e89dc | ||
![]() |
364b402e8d | ||
![]() |
65e2f2ba4b | ||
![]() |
4c7dc0bbb4 | ||
![]() |
1b52fa05e6 | ||
![]() |
3f214dd33d | ||
![]() |
b54ff6be9f | ||
![]() |
c62efca089 | ||
![]() |
6c023bfef7 | ||
![]() |
020736a42f | ||
![]() |
c635ac51cb | ||
![]() |
053c1b9d19 | ||
![]() |
241a44e69c | ||
![]() |
b22e85f81a | ||
![]() |
7bda73a415 | ||
![]() |
0e956c674f | ||
![]() |
d09fb9f806 | ||
![]() |
61c6519798 | ||
![]() |
786af7ea61 | ||
![]() |
8ce054b21b | ||
![]() |
7335b44d3e | ||
![]() |
e4bd174a7b | ||
![]() |
3a6a4966e2 | ||
![]() |
14d54719d7 | ||
![]() |
bd56f4ec07 | ||
![]() |
3b6f14fa6f | ||
![]() |
947e45d27d | ||
![]() |
a85aea8b18 | ||
![]() |
c35bc07c74 | ||
![]() |
4f98706852 | ||
![]() |
b5b0255e4c | ||
![]() |
e003ba87d1 | ||
![]() |
064a86e620 | ||
![]() |
1ff193b819 | ||
![]() |
3fdf721286 | ||
![]() |
90dc2116ad | ||
![]() |
d5eaa386dd | ||
![]() |
14b8de3727 | ||
![]() |
1799ef6006 | ||
![]() |
be49961944 | ||
![]() |
7b416a0a2d | ||
![]() |
2e0d27d0f1 | ||
![]() |
e1891161d0 | ||
![]() |
eb46b01e97 | ||
![]() |
b71671f94f | ||
![]() |
5f23d91c39 | ||
![]() |
54f2bb3648 | ||
![]() |
4223bc53f8 | ||
![]() |
7b1f4e8a8b | ||
![]() |
18f7f5f76d | ||
![]() |
9c4d95d9c8 | ||
![]() |
6f5fedcc7c | ||
![]() |
da578b2e4a | ||
![]() |
030ad7c7fc | ||
![]() |
2876a8ea4d | ||
![]() |
a11aaf96c7 | ||
![]() |
b49c0ec888 | ||
![]() |
1ba71ab9ff | ||
![]() |
82c8ca4588 | ||
![]() |
7d9d9f52cd | ||
![]() |
9cb157caf8 | ||
![]() |
8eb38bb871 | ||
![]() |
2b86f5d870 | ||
![]() |
0a7bbc9b06 | ||
![]() |
16012cb7f2 | ||
![]() |
c9592c587e | ||
![]() |
c48b52456b | ||
![]() |
48fa3d5fcb | ||
![]() |
5b2061b520 | ||
![]() |
c16108aba3 | ||
![]() |
de4ab5cede | ||
![]() |
1a9d5ef701 | ||
![]() |
4fd7ed876d | ||
![]() |
8c2b7c174c | ||
![]() |
c56b7d8334 | ||
![]() |
c897d3f17c | ||
![]() |
f58cf15ac2 | ||
![]() |
e881c2dbda | ||
![]() |
73b36aa64d | ||
![]() |
3b00d7a6a8 | ||
![]() |
c7ebe972e6 | ||
![]() |
fae2f68f24 | ||
![]() |
63d8f5faf6 | ||
![]() |
bea407e309 | ||
![]() |
6375bee8a2 | ||
![]() |
3c1a7cc190 | ||
![]() |
ebae340a1e | ||
![]() |
8ac94e45b5 | ||
![]() |
3a0277561a | ||
![]() |
15e8482635 | ||
![]() |
882432372a | ||
![]() |
0df4e194d3 | ||
![]() |
6e40e576a4 | ||
![]() |
612507260a | ||
![]() |
ad99427b49 | ||
![]() |
480c8bb085 | ||
![]() |
53a6545b04 | ||
![]() |
84fe920ff1 | ||
![]() |
987514c702 | ||
![]() |
992f237090 | ||
![]() |
8de466b582 | ||
![]() |
79f2b91679 | ||
![]() |
b93960ac9d | ||
![]() |
1f0fd137f5 | ||
![]() |
50312dd0e8 | ||
![]() |
11508ce27e | ||
![]() |
0b3e902319 | ||
![]() |
5e1b0c8764 | ||
![]() |
7d2f2fe632 | ||
![]() |
754a75546d | ||
![]() |
d1e630235d | ||
![]() |
37becd9a79 | ||
![]() |
626c5fcf54 | ||
![]() |
3fb2eb0856 | ||
![]() |
c729adfc5e | ||
![]() |
0488efc8c1 | ||
![]() |
9fa5c1d4b9 | ||
![]() |
d31a0829be | ||
![]() |
f8c41ca016 | ||
![]() |
450cee78b5 | ||
![]() |
f7aad0d647 | ||
![]() |
fe1416c65f | ||
![]() |
454e595ef8 | ||
![]() |
50596a6f97 | ||
![]() |
4726d89661 | ||
![]() |
ffceb7819f |
@@ -15,6 +15,7 @@ ltconfig
|
||||
ltmain.sh
|
||||
stamp-h
|
||||
stamp-h.in
|
||||
stamp-h1
|
||||
stamp.h
|
||||
version.h
|
||||
config.h.in
|
||||
|
79
HACKING
79
HACKING
@@ -11,6 +11,7 @@ is nonetheless useful.
|
||||
|
||||
Overview
|
||||
Administrative issues
|
||||
Minimal Building/Testing Environment
|
||||
Relevant standards and X properties
|
||||
Debugging and testing
|
||||
Debugging logs
|
||||
@@ -34,6 +35,27 @@ Administrative issues
|
||||
instructions is that the minor version number of a Metacity release
|
||||
should always be a number from the Fibonacci sequence.
|
||||
|
||||
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.
|
||||
|
||||
As long as you have gtk+ >= 2.6 with your distro, you should be able
|
||||
to install your distro's development packages (e.g. gtk2-devel,
|
||||
GConf2-devel, and startup-notification-devel on Fedora) and be ready
|
||||
to build and test Metacity. Steps to do so:
|
||||
|
||||
$ cvs -q -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome \
|
||||
checkout metacity
|
||||
$ cd metacity
|
||||
$ ./autogen.sh --prefix /usr
|
||||
$ make
|
||||
$ ./src/metacity --replace
|
||||
|
||||
Again, note that you do not need to run 'make install'.
|
||||
|
||||
Relevant standards and X properties
|
||||
There are two documents that describe some basics about how window
|
||||
managers should behave: the ICCCM (Inter-Client Communication Conventions
|
||||
@@ -69,16 +91,22 @@ Relevant standards and X properties
|
||||
xprop
|
||||
in a terminal and click on one of the windows on your screen. That gives
|
||||
you the x properties for that window. Look through them and get a basic
|
||||
idea of what's there for kicks. Next, try running
|
||||
idea of what's there for kicks. Note that you can get rid of some of the
|
||||
verboseness by grepping out the _NET_WM_ICON stuff, i.e.
|
||||
xprop | grep -v _NET_WM_ICON
|
||||
Next, try running
|
||||
xprop -root
|
||||
in a terminal. There's all the properties of the root window (which you
|
||||
can think of as the "main" window). You can also manually specify
|
||||
individual windows that you want the properties of with
|
||||
can think of as the "main" Xserver window). You can also manually
|
||||
specify individual windows that you want the properties of with
|
||||
xprop -id <id>
|
||||
if you know the id of the window in question (you can get this from the
|
||||
_NET_CLIENT_STACKING property of the root window). Finally, it can also
|
||||
be useful to add "-spy" (without the quotes) to the xprop command to get
|
||||
it to continually monitor that window and report any changes to you.
|
||||
if you know the id of the window in question. You can get the id of a
|
||||
given window by either running xwininfo, e.g.
|
||||
xwininfo | grep "Window id" | cut -f 4 -d ' '
|
||||
or by looking at the _NET_CLIENT_STACKING property of the root
|
||||
window. Finally, it can also be useful to add "-spy" (without the
|
||||
quotes) to the xprop command to get it to continually monitor that
|
||||
window and report any changes to you.
|
||||
|
||||
Debugging information
|
||||
Trying to run a window manager under a typical debugger, such as gdb,
|
||||
@@ -101,6 +129,9 @@ Debugging information
|
||||
useful to get more information than just warnings. You can set
|
||||
METACITY_VERBOSE to do that, like so:
|
||||
METACITY_VERBOSE=1 METACITY_USE_LOGFILE=1 metacity --replace
|
||||
(note that METACITY_VERBOSE=1 can be problematic without
|
||||
METACITY_USE_LOGFILE=1; avoid it unless running in from something that
|
||||
won't be managed by the new Metacity--see bug 305091 for more details).
|
||||
There are also other flags, such as METACITY_DEBUG, most of which I
|
||||
haven't tried and don't know what they do. Go to the source code
|
||||
directory and run
|
||||
@@ -175,17 +206,43 @@ Debugging information
|
||||
metacity-message restart
|
||||
metacity-message enable-keybindings
|
||||
metacity-message disable-keybindings
|
||||
The first of these is useful for testing themes, the second is just
|
||||
another way (besides the --restart flag to metacity itself) of
|
||||
restarting metacity, and the third is useful for testing Metacity when
|
||||
running it under an Xnest (typically, the Metacity under the Xnest
|
||||
wouldn't get keybinding notifications--making keyboard navigation not
|
||||
work--but if you disable the keybindings for the global Metacity then
|
||||
the Metacity under the Xnest can then get those keybinding notifications).
|
||||
|
||||
metacity-window-demo
|
||||
metacity-window-demo is good for trying behavior of various kinds
|
||||
of window without launching a full desktop.
|
||||
|
||||
Technical gotchas to keep in mind
|
||||
Files that include gdk.h or gtk.h are not supposed to include display.h
|
||||
or window.h or other core files.
|
||||
Files that include gdk.h or gtk.h are not supposed to include
|
||||
display.h or window.h or other core files. Files in the core
|
||||
(display.[hc], window.[hc]) are not supposed to include gdk.h or
|
||||
gtk.h. Reasons:
|
||||
|
||||
Files in the core (display.[hc], window.[hc]) are not supposed to include
|
||||
gdk.h or gtk.h.
|
||||
"Basically you don't want GDK most of the time. It adds
|
||||
abstractions that cause problems, because they aren't designed to
|
||||
be used in a WM where we do weird stuff (display grabs, and just
|
||||
being the WM). At best GDK adds inefficiency, at worst it breaks
|
||||
things in weird ways where you have to be a GDK guru to figure
|
||||
them out. Owen also told me that they didn't want to start adding
|
||||
a lot of hacks to GDK to let a WM use it; we both agreed back in
|
||||
the mists of time that metacity would only use it for the "UI"
|
||||
bits as it does.
|
||||
|
||||
Having the split in the source code contains and makes very clear
|
||||
the interface between the WM and GDK/GTK. This keeps people from
|
||||
introducing extra GDK/GTK usage when it isn't needed or
|
||||
appropriate. Also, it speeds up the compilation a bit, though this
|
||||
was perhaps more relevant 5 years ago than it is now.
|
||||
|
||||
There was also a very old worry that the GDK stuff might have to
|
||||
be in a separate process to work right; that turned out to be
|
||||
untrue. Though who knows what issues the CM will introduce."
|
||||
|
||||
Remember that strings stored in X properties are not in UTF-8, and they
|
||||
have to end up in UTF-8 before we try putting them through Pango.
|
||||
|
11
MAINTAINERS
Normal file
11
MAINTAINERS
Normal file
@@ -0,0 +1,11 @@
|
||||
Currently active maintainers
|
||||
----------------------------
|
||||
|
||||
Havoc Pennington
|
||||
E-mail: hp@redhat.com
|
||||
|
||||
Elijah Newren
|
||||
E-mail: newren@gmail.com
|
||||
|
||||
Søren Sandmann
|
||||
E-mail: sandmann@redhat.com
|
@@ -4,4 +4,4 @@ SUBDIRS=src po doc
|
||||
EXTRA_DIST=HACKING rationales.txt \
|
||||
intltool-extract.in intltool-merge.in intltool-update.in
|
||||
|
||||
DISTCLEANFILES = intltool-extract intltool-merge intltool-update
|
||||
DISTCLEANFILES = intltool-extract intltool-merge intltool-update po/stamp-it po/.intltool-merge-cache
|
||||
|
780
NEWS
780
NEWS
@@ -1,3 +1,771 @@
|
||||
2.15.1
|
||||
==
|
||||
|
||||
This release just fixes the control-center build (which depends upon
|
||||
libmetacity-private). Thanks to Vincent for catching the problem.
|
||||
|
||||
- Include boxes.h in the includes dir (Elijah) [#339708]
|
||||
|
||||
2.15.0
|
||||
==
|
||||
|
||||
Thanks to Thomas Thurman, Elijah Newren, Havoc Pennington, Björn
|
||||
Lindqvist, Gora Mohanty, Alejandro Andres, Andy Morum, Dan Sanders,
|
||||
Thomas Andersen, Brian Pepple, and Søren Sandmann for improvements in
|
||||
this release. (Note that "Thomas" below refers to Thomas Thurman if
|
||||
last name isn't specified)
|
||||
|
||||
- An endless array of compositor updates, not all of which are well
|
||||
explained in the ChangeLog. ;-) Includes an ability to enable and
|
||||
disable the compositor at runtime, fixed up wobbling effect and new
|
||||
explosion effect, special magnification handling, different opacity
|
||||
for different window types like menus, a way of scaling windows,
|
||||
handling of foreign displays, improved handling of window
|
||||
moving/resizing, various code restructuring, special runtime checks
|
||||
for correct extensions and other compositors, lots of bug fixes,
|
||||
and possibly other stuff I'm missing or not understanding (Søren)
|
||||
- Removed "move to another workspace" menu when there are exactly two
|
||||
workspaces (Thomas) [#151183]
|
||||
- fix type for compositing_manager schema entry (Elijah) [#335901]
|
||||
- Port more properties to our async system for code cleanliness and
|
||||
speed improvements (Havoc, Thomas)
|
||||
- Lots of code cleanup, even more code cleanup, wow our code was
|
||||
messy (Björn) [#335177, #337507, #336890, #338359]
|
||||
- Abstract out the functions for setting/unsetting demands attention
|
||||
hint and avoid doing it when the window isn't obscured (Thomas)
|
||||
[#305882]
|
||||
- Change strings to make them more readable, and more
|
||||
translatable (Gora) [#335720]
|
||||
- Reduce compiling warnings -- add a number of casts and change
|
||||
signedness on a number of variables (Björn) [#336032]
|
||||
- Fixed broken links in README (Alejandro) [#333303]
|
||||
- Add a tabbing function, bound to alt-f6 by default, to cycle
|
||||
through the windows of the current application (Thomas) [#94682]
|
||||
- Fix the build with --disable-xsync (Andy) [#336605]
|
||||
- Raise windows on maximize/unmaximize (Dan) [#335076]
|
||||
- Don't have confirmation windows make applications appear to be
|
||||
locked when closing via the window list (Dan) [#334899]
|
||||
- Allow any keybinding pref to be specified either with <foo>, a
|
||||
string, or <foo>_list, a list of strings, or both (Thomas)
|
||||
[#164831]
|
||||
- warn and ignore if transient_for is set to a non-top-level window
|
||||
(Thomas Andersen) [#335524]
|
||||
- Use po/LINGUAS for listing supported languages (Brian) [#337951]
|
||||
|
||||
Translations
|
||||
Vladimir Petkov (bg), Jordi Mallach (ca), Miloslav Trmac (cs), Rhys
|
||||
Jones (cy), Lasse Bang Mikkelsen (da), Frank Arnold (de), Kostas
|
||||
Papadimas (el), Francisco Javier F. Serrador (es), Ivar Smolin (et), Iñaki
|
||||
Larrañaga (eu), Farzaneh Sarafraz (fa), Ilkka Tuohela (fi), Ignacio Casal
|
||||
Quinteiro (gl), Ankit Patel (gu), Rajesh Ranjan (hi), Gabor Kelemen (hu),
|
||||
Satoru SATOH (ja), Alexander Didebulidze (ka), Žygimantas Beručka (lt),
|
||||
Kjartan Maraas (nb), Michiel Sikkes (nl), Åsmund Skjæveland (nn), Gora
|
||||
Mohanty (or), Raphael Higino (pt_BR), Duarte Loreto (pt), Mugurel Tudor (ro),
|
||||
Leonid Kanter (ru), Steve Murphy (rw), Laurent Dhima (sq), Слободан Д.
|
||||
Средојевић (sr), Daniel Nylander (sv), Theppitak Karoonboonyanan (th), Maxim
|
||||
Dziumanenko (uk), Clytie Siddall (vi), Funda Wang (zh_CN)
|
||||
|
||||
2.14.3
|
||||
==
|
||||
|
||||
This release just reverts the widely hated new focus behavior of Metacity
|
||||
2.14.x to the behavior found in 2.12.x. Patch came from Ron Yorston.
|
||||
See http://blogs.gnome.org/view/newren/2006/04/13/0 and
|
||||
http://mail.gnome.org/archives/release-team/2006-April/msg00025.html for
|
||||
more details.
|
||||
|
||||
- Add a focus_new_windows gconf key, change the default to 'smart' (2.12
|
||||
behavior) and add a 'strict' option to get 2.14 behavior. (Ron)
|
||||
[#326159]
|
||||
|
||||
Translations
|
||||
Vladimir Petkov (bg), Miloslav Trmac (cs), Frank Arnold (de), Francisco
|
||||
Javier F. Serrador (es), Ilkka Tuohela (fi), Tino Meinen (nl), Åsmund
|
||||
Skjæveland (nn), Raphael Higino (pt_BR), Daniel Nylander (sv)
|
||||
|
||||
2.14.2
|
||||
==
|
||||
|
||||
Thanks to Thomas Thurman, Paolo Borelli, Björn Lindqvist, and
|
||||
Elijah Newren for fixes in this release.
|
||||
|
||||
- Fix constraints bug causing negative width windows and crashes
|
||||
(Elijah) [#336651]
|
||||
- Fix window grouping with parent/child windows (Björn) [#336184]
|
||||
- use g_str_has_prefix instead of a local copy of the function
|
||||
(Paolo) [#334643]
|
||||
- Make sure pager can refresh when window is minimized on a different
|
||||
workspace (Thomas) [#315142]
|
||||
- Add debugging information for edge resistance (Elijah)
|
||||
|
||||
Translations
|
||||
|
||||
Vladimir Petkov (bg), tangi.bzh (br), Jordi Mallach (ca), Miloslav
|
||||
Trmac (cs), Rhys Jones (cy), Lasse Bang Mikkelsen (da), Frank
|
||||
Arnold (de), Mindu Dorji (dz), Kostas Papadimas (el), Francisco
|
||||
Javier F. Serrador (es), Ivar Smolin (et), Iñaki Larrañaga
|
||||
Murgoitio (eu), Elnaz Sarbar (fa), Ilkka Tuohela (fi),
|
||||
Ignacio Casal Quinteiro (gl), Ankit Patel (gu), Rajesh Ranjan (hi)
|
||||
Gabor Kelemen (hu), Luca Ferretti (it), Satoru SATOH (ja), Vladimer
|
||||
Sichinava (ka), Žygimantas Beručka (lt), Kjartan Maraas (nb),
|
||||
Tino Meinen (nl), Kjartan Maraas (no), Gora Mohanty (or), Gnome PL
|
||||
Team (pl), Evandro Fernandes Giovanini (pt_BR), Duarte Loreto (pt),
|
||||
Mugurel Tudor (ro), Leonid Kanter (ru), Laurent Dhima (sq),
|
||||
Слободан Д. Средојевић (sr), Daniel Nylander (sv), Theppitak
|
||||
Karoonboonyanan (th), Maxim Dziumanenko (uk), Clytie Siddall (vi),
|
||||
Funda Wang (zh_CN)
|
||||
|
||||
2.14.1
|
||||
==
|
||||
|
||||
The only change since 2.14.0 is to remove the "This is the UNSTABLE
|
||||
branch" warning from configure for those compiling Metacity from
|
||||
source.
|
||||
|
||||
2.14.0
|
||||
==
|
||||
|
||||
Thanks to Ryan Lortie and Thomas Thurman for fixes in this release.
|
||||
|
||||
- Mark the app-running-remotely-window-title string for translation
|
||||
(Thomas) [#334332]
|
||||
- Only unmaximise window before freeing if the window is actually
|
||||
maximised (Ryan) [#333563]
|
||||
|
||||
Translations
|
||||
Jordi Mallach (ca), Frank Arnold (de), Luca Ferretti (it), Evandro
|
||||
Fernandes Giovanini (pt_BR), Theppitak Karoonboonyanan (th)
|
||||
|
||||
2.13.144
|
||||
==
|
||||
|
||||
Thanks to Jens Granseuer, Kristian, Søren Sandmann, Sylvain
|
||||
Bertrand, and Thomas Thurman for improvements in this release.
|
||||
|
||||
- Fix build with gcc 2.95 (Jens) [#331166]
|
||||
- Compositor improvements [remember, still off by default]: add
|
||||
unused wobbly (un)minimize animation (Kristian), add support for
|
||||
turning updates on and off (Søren), use sync counter to make
|
||||
composited resizing tear free (Søren), add ability to unmanage
|
||||
the screen (Søren),
|
||||
- Fix build issue with library search order (Sylvain) [#330695]
|
||||
- Work around buggy application grouping with transient windows
|
||||
(Thomas) [#328211]
|
||||
- Prevent setting cycle_windows to keybindings that won't work.
|
||||
(Thomas) [#329676]
|
||||
|
||||
2.13.89
|
||||
==
|
||||
|
||||
Thanks to Søren Sandmann, Thomas Thurman, Thom May, Akira Tagoh,
|
||||
Luke Morton, and Philip O'Brien for improvements in this release.
|
||||
|
||||
- Compositor improvements [remember that the compositor is still
|
||||
disabled by default]: New fancy minimize animation that fades in
|
||||
and out, new debug stuff, various bug fixes (Søren)
|
||||
- When buggy apps create synthetic button or keypresses without a
|
||||
timestamp, produce a warning instead of failing an assertion
|
||||
(Thomas) [#313490]
|
||||
- Avoid a memory leak when checking which workspace(s) a window is
|
||||
on (Thomas) [#322059]
|
||||
- Add a man page for metacity (Thom, Akira, Luke, Philip) [#321279]
|
||||
- Disable alt-f7 if a window can't be moved, and alt-f8 if it can't
|
||||
be resized (Thomas) [#328920]
|
||||
- Allow alt-escape to cancel alt-tabbing, and vice versa (Thomas)
|
||||
[#141425]
|
||||
|
||||
Translations
|
||||
Miloslav Trmac (cs), Kjartan Maraas (nb), Tino Meinen (nl),
|
||||
Kjartan Maraas (no), Слободан Д. Средојевић (sr), Funda Wang (zh_CN)
|
||||
|
||||
2.13.55
|
||||
==
|
||||
|
||||
Thanks to Dick Marinus, Christian Kirbach, and Elijah Newren for
|
||||
improvements in this release.
|
||||
|
||||
- Add a minimize and none double-click-titlebar-action (Dick)
|
||||
[#300210]
|
||||
- Prevent a critical warning crasher when switching themes
|
||||
(Christian) [#327847]
|
||||
- Fix some uninitialized value problems (Elijah)
|
||||
- If the mouse enters a window on a different screen, activate the
|
||||
default window on the new screen (Elijah) [#319348]
|
||||
|
||||
Translations
|
||||
Jordi Mallach (ca), Adam Weinberger (en_CA), Francisco Javier
|
||||
F. Serrador (es), Ilkka Tuohela (fi), Ignacio Casal Quinteiro (gl),
|
||||
Ankit Patel (gu), Kjartan Maraas (nb), Kjartan Maraas (no), Evandro
|
||||
Fernandes Giovanini (pt_BR), Theppitak Karoonboonyanan (th), Clytie
|
||||
Siddall (vi), Funda Wang (zh_CN)
|
||||
|
||||
2.13.34
|
||||
==
|
||||
|
||||
Thanks to Damien Carbery, Havoc Pennington, Søren Sandmann,
|
||||
Björn Lindqvist, Kjartan Maraas, Elijah Newren for improvements in
|
||||
this release.
|
||||
|
||||
- manually define HOST_NAME_MAX if not already defined to fix Solaris
|
||||
compilation issue (Damien, Havoc) [#326745]
|
||||
- compositor improvements: port to changes in libcm, do it again, fix
|
||||
unrefing, make minimize animation update again (all done by Søren)
|
||||
- make sure an outline border is shown even if a window decoration's
|
||||
width is 0 (Björn) [#98340]
|
||||
- correctly handle window alt-tab outlines in showing desktop mode
|
||||
(Björn) [#98340]
|
||||
- fix lots of tiny issues spotted by the intel compiler (Kjartan)
|
||||
[#321439]
|
||||
- prevent rapidly repeated visual bells from hanging metacity
|
||||
(Elijah) [#322032]
|
||||
- more careful error handling of values returned by GConf (Elijah)
|
||||
[#326615]
|
||||
- fix various initialization and default issues, especially for
|
||||
running with --disable-gconf. Make --disable-gconf actually work.
|
||||
(Elijah) [#326661]
|
||||
- fix some reading-from-free'd-data errors (Søren) [#327575]
|
||||
- fix an unitialized value problem when in raise-on-click mode
|
||||
(Søren) [#327572]
|
||||
- avoid flashing original-sized window when closing a maximized
|
||||
window (Elijah) [#317254]
|
||||
- prevent windows from sometimes getting shoved and smashed by
|
||||
sliding (and possibly auto-hiding) panels (Elijah) [#327822]
|
||||
|
||||
Translations
|
||||
Ilkka Tuohela (fi), Ignacio Casal Quinteiro (gl), Tino Meinen (nl),
|
||||
Funda Wang (zh_CN)
|
||||
|
||||
2.13.21
|
||||
==
|
||||
|
||||
Thanks to Damien Carbery, Ray Strode, Søren Sandmann, Elijah
|
||||
Newren, Jens Granseuer, and Kyle Ambroff for improvements in this
|
||||
release.
|
||||
|
||||
- Fix Solaris compilation issues (Ray, Damien) [#326281, #326746]
|
||||
- Merge compositor work from branches to get the beginnings of an openGL
|
||||
based compositor. Still not ready and thus disabled by default.
|
||||
(Søren)
|
||||
- Composite fixes: Only update composite on damage events (Søren), get
|
||||
non-composite compilation working again (Elijah), Really turn off
|
||||
draw-in-a-loop (Søren)
|
||||
- Don't dereference a NULL string (Elijah) [#327013]
|
||||
- GCC 2.95 fix; remove more C99 style variable initiailizations (Jens)
|
||||
[#327050]
|
||||
- Fix accidental overzealous focus holding by the terminal (introduced in
|
||||
last release) so that windows launched from panel icons, the panel
|
||||
menu, or global keybindings should get focus now. (Elijah) [#326159]
|
||||
- If no valid window is found in the MRU list, then set focus to the
|
||||
desktop window. (Kyle) [#317405]
|
||||
|
||||
Translations
|
||||
Adam Weinberger (en_CA), Francisco Javier F. Serrador (es), Ankit
|
||||
Patel (gu), Takeshi AIHANA (ja), Theppitak Karoonboonyanan (th),
|
||||
Clytie Siddall (vi)
|
||||
|
||||
2.13.13
|
||||
==
|
||||
|
||||
Thanks to Jens Granseuer, Björn Lindqvist, and Elijah Newren for
|
||||
improvements in this release.
|
||||
|
||||
- Remove C99 style variable initiailization (Jens) [#322622]
|
||||
- Fix a logic error (Björn) [#322149]
|
||||
- Plug a few leaks (Elijah) [#309178]
|
||||
- Allow edge resistance at both sides of a window and also when edges
|
||||
don't overlap but are a single pixel away from doing so (Elijah)
|
||||
[part of #321905]
|
||||
- Remove the timeout resistance at screen/xinerama edges (Elijah)
|
||||
[part of #321905]
|
||||
- Revert to the old edge resistance behavior for keyboard
|
||||
movement/resizing based resistance (Elijah) [part of #321905]
|
||||
- Remove the "pull-away" edge resistance (Elijah) [part of #321905]
|
||||
- Avoid crashing when visual bell is in use and focus window is
|
||||
closed (Elijah) [#322031]
|
||||
- Be more strict about what is considered a valid region with partial
|
||||
struts (Elijah) [#322070]
|
||||
- Fix reduced resources resize handling for windows with sizing or
|
||||
resizing constraints (Elijah) [#325774]
|
||||
- Fix window outline for minimized windows when using alt-esc
|
||||
(Elijah) [#325092]
|
||||
- Make the taskbar less flash happy and fix up some related stacking
|
||||
issues (Elijah) [#326035]
|
||||
- More thorough handling of source indication (Elijah) [part of #326041]
|
||||
- Don't "steal" focus from terminal windows for new window mappings
|
||||
as the difference in usage between terminals and other apps seems
|
||||
to suggest this difference in treatment. See bug #326159 for
|
||||
details, feedback welcome (Elijah) [#326159]
|
||||
- Add a raise on click option, basically only because all the major
|
||||
distros are patching it in anyway (though each and every one of
|
||||
them has bugs in their implementations). (Elijah) [#326156]
|
||||
|
||||
Translations
|
||||
Kjartan Maraas (nb), Kjartan Maraas (no)
|
||||
|
||||
2.13.8
|
||||
==
|
||||
|
||||
Thanks to Kang Jeong-Hee and Elijah Newren for improvements in this
|
||||
release.
|
||||
|
||||
- Fix some compilation warnings and issues (Kang)
|
||||
- Escape the title since it is going to be treated as Markup (Elijah)
|
||||
[#324846]
|
||||
- Make the workspace switcher work with dual-head (non-xinerama)
|
||||
setups (Elijah) [#319423]
|
||||
|
||||
Translations
|
||||
Ilkka Tuohela (fi), Ankit Patel (gu), Kang Joeng-Hee (ko)
|
||||
|
||||
2.13.5
|
||||
==
|
||||
|
||||
Thanks to Davyd Madeley, Kjartan Maraas, and Björn Lindqvist for
|
||||
improvements in this release.
|
||||
|
||||
- Make a debugging message actually correspond to the code (Björn)
|
||||
[#322051]
|
||||
- Make the wireframe a bit slimmer (Kjartan) [#320051]
|
||||
- Display hostname in titlebar for remote X clients (Davyd) [#322202]
|
||||
|
||||
Translations
|
||||
Miloslav Trmac (cs), Adam Weinberger (en_CA), Ankit Patel (gu),
|
||||
Kjartan Maraas (nb), Kjartan Maraas (no), Marcel Telka (sk)
|
||||
|
||||
2.13.3
|
||||
==
|
||||
|
||||
This is a special edition release just for gicmo, code-named 'elijah,
|
||||
please do a release so magic seb can bring it to me'. It fixes a
|
||||
number of issues due to the major constraints changes found since the
|
||||
last release.
|
||||
|
||||
Thanks to Davyd Madeley and Elijah Newren for improvements in this release.
|
||||
|
||||
- Differentiate between movement towards an edge and movement away from
|
||||
one for edge-resistance. Pick smaller constants for movement away from
|
||||
an edge (Elijah)
|
||||
- Use GPOINTER_TO_INT() macro instead of cast to allow compilation on
|
||||
64-bit architectures without warning (Davyd)
|
||||
- compute the frame geometry due to maximization only after actually
|
||||
maximizing (Elijah) [#321902]
|
||||
- add some developer documentation on updating struts, workareas, regions,
|
||||
and edges (Elijah)
|
||||
- When updating the xinerama due to placement, update which
|
||||
maximal/spanning rect set to use as well (Elijah) [#322068]
|
||||
- Relax the partially onscreen constraint to allow the titlebar to touch
|
||||
the bottom panel in order to make the new constraints code function the
|
||||
same as the old version (Elijah) [#322071]
|
||||
- Don't allow removing a window from maximized or fullscreened state to
|
||||
place the titlebar under the top panel (Elijah) [#322075]
|
||||
|
||||
Translations
|
||||
Vladimir Petkov (bg), Francisco Javier F. Serrador (es), Ignacio Casal
|
||||
Quinteiro (gl), Takeshi AIHANA (ja), Theppitak Karoonboonyanan (th)
|
||||
|
||||
2.13.2
|
||||
==
|
||||
|
||||
This release just contains a merge of all the changes on the
|
||||
constraints_experiments branch.
|
||||
|
||||
Thanks to Havoc Pennington for reviewing the gargantuan patch and
|
||||
suggesting lots of little fixes for making it better, to Rob Adams and
|
||||
Soeren Sandmann for grilling me on how some of the difficult internals work
|
||||
-- allowing me to improve the documentation, to Olav Vitters for finding an
|
||||
easy-to-fix crasher bug in early testing and for repeatedly extending my
|
||||
deadline for switching from working on Metacity to Bugzilla, to Ray Strode
|
||||
for finding two crashers and fixing one of them in early testing, to Bryan
|
||||
Clark for usability advice, to Davyd Madeley and Christian Kellner for
|
||||
testing Xinerama stuff, to Sebastien Bacher for packaging an early version
|
||||
and finding some obscure bugs (that I unfortunately still can't duplicate
|
||||
and will probably still need to fix once I can),
|
||||
|
||||
Bugs fixed:
|
||||
unfiled - constraints.c is overly complicated[1]
|
||||
unfiled - constraints.c is not robust when all constraints cannot
|
||||
simultaneously be met (constraints need to be prioritized)
|
||||
unfiled - keep-titlebar-onscreen constraint is decoration unaware (since
|
||||
get_outermost_onscreen_positions() forgets to include
|
||||
decorations)
|
||||
unfiled - keyboard snap-moving and snap-resizing snap to hidden edges
|
||||
86644 - resize should have a shift option like move does
|
||||
109553 - gravity w/ simultaneous move & resize doesn't work
|
||||
113601 - maximize vertical and horizontal should toggle and be
|
||||
constrained
|
||||
122196 - windows show up under vertical panels
|
||||
122670 - jerky/random resizing of window via keyboard[2]
|
||||
124582 - keyboard and mouse snap-resizing and snap-moving erroneously
|
||||
moves the window multidimensionally
|
||||
136307 - don't allow apps to resize themselves off the screen (*cough*
|
||||
filechooser *cough*)
|
||||
142016, 143784 - windows should not span multiple xineramas unless
|
||||
placed there by the user
|
||||
143145 - clamp new windows to screensize and force them onscreen, if
|
||||
they'll fit
|
||||
144126 - Handle pathological strut lists sanely[3]
|
||||
149867 - fixed aspect ratio windows are difficult to resize[4]
|
||||
152898 - make screen edges consistent; allow easy slamming of windows
|
||||
into the left, right, and bottom edges of the screen too.
|
||||
154706 - bouncing weirdness at screen edge with keyboard moving or
|
||||
resizing
|
||||
156699 - avoid struts when placing windows, if possible (nasty a11y
|
||||
blocker)
|
||||
302456 - dragging offscreen too restrictive
|
||||
304857 - wireframe moving off the top of the screen is misleading
|
||||
308521 - make uni-directional resizing easier with alt-middle-drag and
|
||||
prevent the occasional super annoying resize-the-wrong-side(s)
|
||||
behavior
|
||||
312007 - snap-resize moves windows with a minimum size constraint
|
||||
312104 - resizing the top of a window can cause the bottom to grow
|
||||
319351 - don't instantly snap on mouse-move-snapping, remove
|
||||
braindeadedness of having order of releasing shift and
|
||||
releasing button press matter so much
|
||||
|
||||
[1] fixed in my opinion, anyway.
|
||||
[2] Actually, it's not totally fixed--it's just annoying
|
||||
instead of almost completely unusable. Matthias had a
|
||||
suggestion that may fix the remainder of the problems (see
|
||||
http://tinyurl.com/bwzuu).
|
||||
[3] This bug was originally about not-quite-so-pathological
|
||||
cases but was left open for the worse cases. The code from
|
||||
the branch handles the remainder of the cases mentioned in
|
||||
this bug.
|
||||
[4] Actually, although it's far better there's still some minor
|
||||
issues left: a slight drift that's only noticeable after
|
||||
lots of resizing, and potential problems with partially
|
||||
onscreen constraints due to not clearing any
|
||||
fixed_directions flags (aspect ratio windows get resized in
|
||||
both directions and thus aren't fixed in one of them)
|
||||
|
||||
New feature:
|
||||
81704 - edge resistance for user move and resize operations; in
|
||||
particular 3 different kinds of resistance are implemented:
|
||||
Pixel-Distance: window movement is resisted when it aligns with an
|
||||
edge unless the movement is greater than a threshold number of
|
||||
pixels
|
||||
Timeout: window movement past an edge is prevented until a certain
|
||||
amount of time has elapsed during the operation since the first
|
||||
request to move it past that edge
|
||||
Keyboard-Buildup: when moving or resizing with the keyboard, once a
|
||||
window is aligned with a certain edge it cannot move past until the
|
||||
correct direction has been pressed enough times (e.g. 2 or 3 times)
|
||||
|
||||
Major code changes:
|
||||
- constraints.c has been rewritten; very few lines of code from the old
|
||||
version remain. There is a comment near the top of the function
|
||||
explaining the basics of how the new framework works. A more detailed
|
||||
explanation can be found in doc/how-constraints-works.txt
|
||||
- edge-resistance.[ch] are new files implementing edge-resistance.
|
||||
- boxes.[ch] are new files containing low-level error-prone functions
|
||||
used heavily in constraints.c and edge-resistance.c, among various
|
||||
places throughout the code. testboxes.c contains a thorough testsuite
|
||||
for the boxes.[ch] functions compiled into a program, testboxes.
|
||||
- meta_window_move_resize_internal() *must* be told the gravity of the
|
||||
associated operation (if it's just a move operation, the gravity will
|
||||
be ignored, but for resize and move+resize the correct value is needed)
|
||||
- the craziness of different values that
|
||||
meta_window_move_resize_internal() accepts has been documented in a
|
||||
large comment at the beginning of the function. It may be possible to
|
||||
clean this up some, but until then things will remain as they were
|
||||
before--caller beware.
|
||||
- screen and xinerama usable areas (i.e. places not covered by
|
||||
e.g. panels) are cached in the workspace now, as are the screen and
|
||||
xinerama edges. These get updated with the workarea in
|
||||
src/workspace.c:ensure_work_areas_validated()
|
||||
|
||||
Translation
|
||||
Michiel Sikkes (nl)
|
||||
|
||||
2.13.1
|
||||
==
|
||||
|
||||
Thanks to Philip O'Brien, Kjartan Maraas, and Aidan Delaney for
|
||||
improvements in this release.
|
||||
|
||||
- add handling for META_PREF_CURSOR_THEME and META_PREF_CURSOR_SIZE
|
||||
for more complete debug info (Philip) [#318976]
|
||||
- Remove possible g_source leak in #ifdef'd out code, in case anyone uses
|
||||
it in the future (Kjartan) [#320050]
|
||||
- Changed the 'minimized' field of the MetaTabEntry struct to 'hidden'
|
||||
(Aidan) [#168455]
|
||||
|
||||
Translations
|
||||
Miloslav Trmac (cs), Francisco Javier F. Serrador (es), Takeshi AIHANA (ja),
|
||||
Erdal Ronahi (ku), Theppitak Karoonboonyanan (th)
|
||||
|
||||
2.13.0
|
||||
==
|
||||
|
||||
Thanks to Björn Lindqvist, Kjartan Maraas, Søren Sandmann,
|
||||
Elijah Newren, Ross Cohen, and Muktha for improvements in this release
|
||||
since 2.12.1.
|
||||
|
||||
- Mave ancestors come along with the transient when moving the window from
|
||||
one workspace to another (Björn) [#314977]
|
||||
- Fix the workspace switcher tabpopup to display the right windows and to
|
||||
fix the pick-a-new-window-to-focus algorithm in order to not select
|
||||
windows that aren't showing (Björn) [#170475]
|
||||
- Fix a couple memory leaks (Kjartan, Søren, Elijah) [#313030]
|
||||
- Make alt-esc (the "switch between windows immediately" keybinding)
|
||||
actually show minimized windows too (Ross) [#107072]
|
||||
- Make alt-esc consistent with alt-tab by leaving stacking of unselected
|
||||
windows unchanged (Ross) [#314285]
|
||||
- Clarify the meaning of the auto_raise preference (Elijah) [#312421]
|
||||
- Fix a crash that occurs when removing some virtual desktops and windows
|
||||
happen to be on those desktops (Elijah) [#318306]
|
||||
- Make the unfocussed Simple window border visible with high contrast
|
||||
inverse theme (Muktha) [#121361]
|
||||
- Fix edge snapping for multi-screen (non-xinerama) setups (Elijah)
|
||||
[#319425]
|
||||
|
||||
Translations
|
||||
Vladimir Petkov (bg), Kostas Papadimas (el), Adam Weinberger (en_CA),
|
||||
Ivar Smolin (et), Michiel Sikkes (nl), Marcel Telka (sk), Funda
|
||||
Wang (zh_CN)
|
||||
|
||||
2.12.1
|
||||
==
|
||||
|
||||
Thanks to Ray Strode, Havoc Pennington, and Elijah Newren for
|
||||
improvements in this release.
|
||||
|
||||
- Truncate ridiculously long titles to avoid crashing or letting the
|
||||
pager crash (Ray, Havoc, Elijah) [#315070]
|
||||
- Get the tabbing window outline to work with gtk+ 2.8.4 again
|
||||
(Elijah) [#317528]
|
||||
|
||||
Translations
|
||||
Mahay Alam Khan (bn), Francisco Javier F. Serrador (es), Ivar Smolin (et),
|
||||
Iñaki Larrañaga Murgoitio (eu), Luca Ferretti (it), Christian Rose (sv),
|
||||
Clytie Siddall (vi), Funda Wang (zh_CN)
|
||||
|
||||
2.12.0
|
||||
==
|
||||
|
||||
Thanks to Brent Smith for finding the crasher in the release candidate!
|
||||
|
||||
- Fix an uninitialized variable problem causing crashes (Brent) [#315000]
|
||||
|
||||
Translations
|
||||
Bryn Salisbury (cy), Hendrik Richter (de), Christophe Merlet (RedFox) (fr),
|
||||
Ignacio Casal Quinteiro (gl), Norayr Chilingaryan (hy), Young-Ho Cha (ko),
|
||||
Žygimantas Berucka (lt), Michiel Sikkes (nl), Leonid Kanter (ru), Danilo
|
||||
Šegan (sr), Baris Cicek (tr)
|
||||
|
||||
2.11.3
|
||||
==
|
||||
|
||||
Thanks to Björn Lindqvist and Elijah Newren for improvements in
|
||||
this release.
|
||||
|
||||
- Check for the right versions of glib and gtk+ (Björn) [#314116]
|
||||
- Avoid obscuring centered-on-desktop windows which are denied focus
|
||||
(Elijah) [#313234]
|
||||
|
||||
Translations
|
||||
Vladimir Petkov (bg), Jordi Mallach (ca), Kostas Papadimas (el),
|
||||
Ivar Smolin (et), Gabor Kelemen (hu), Mohammad DAMT (id), Duarte
|
||||
Loreto (pt), Mugurel Tudor (ro), Laurent Dhima (sq), Maxim
|
||||
Dziumanenko (uk)
|
||||
|
||||
2.11.2
|
||||
==
|
||||
|
||||
Thanks to Elijah Newren, Jaap Haitsma, Ray Strode, and Brent Smith for
|
||||
improvements in this release.
|
||||
|
||||
- Fix an easy to trigger crasher in 2.11.1 caused by unneeded
|
||||
debugging spew (Elijah) [#311819]
|
||||
- Make sure that Metacity dialogs have icons (Jaap) [#309876]
|
||||
- Fix an infinite restacking flicker loop in sloppy and mouse focus
|
||||
with fullscreen windows (Elijah) [#311400]
|
||||
- Change default theme from Simple to Clearlooks (Elijah)
|
||||
- Vastly improve the behavior of keyboard move/resize and edge
|
||||
snapping (Ray) [#310888]
|
||||
- Remove a duplicate string (Brent) [#309774]
|
||||
|
||||
Translations
|
||||
Yuval Tanny (he), Gnome PL Team (pl), Raphael Higino (pt_BR),
|
||||
Chao-Hsiung Liao (zh_TW)
|
||||
|
||||
2.11.1
|
||||
==
|
||||
|
||||
Thanks to Elijah Newren, Ken Harris, Matthias Clasen, Christian
|
||||
Persch, and Billy Biggs for improvements in this release.
|
||||
|
||||
- Fix a miscoloring of parts of the titlebar introduced in the last
|
||||
unstable release (Elijah) [follow-up to #169982]
|
||||
- Provide a more lenient threshold for drawing rounded corners (Ken)
|
||||
[#122065]
|
||||
- Make the Xcursor changes in the last unstable release effective
|
||||
(Matthias) [follow-up to #308106]
|
||||
- Revert the _NET_ACTIVE_WINDOW behavior change made in the 2.9.x
|
||||
unstable series; activation includes changing a window to the
|
||||
current workspace again (Elijah) [reversion of #128380]
|
||||
- Restore original window size if the window was maximized upon
|
||||
withdrawing it (Elijah, Christian) [#137185]
|
||||
- Fix a raising bug with a window that has more than one child window
|
||||
(Elijah, Billy) [part of #307875]
|
||||
- Try to place windows denied focus near the focus window and fix a
|
||||
xinerama bug with the placement (Elijah) [part of #307875]
|
||||
- Avoid modal dialogs being obscured in somewhat pathologically
|
||||
strange circumstances that Eclipse seems to be good at triggering
|
||||
(Elijah) [part of #307875]
|
||||
|
||||
Translations
|
||||
Miloslav Trmac (cs), Kostas Papadimas (el), Adam Weinberger (en_CA),
|
||||
Francisco Javier F. Serrador (es), Ilkka Tuohela (fi), Christophe
|
||||
Merlet (RedFox) (fr), Ignacio Casal Quinteiro (gl), Ankit
|
||||
Patel (gu), Yair Hershkovitz (he), Takeshi AIHANA (ja), Kjartan
|
||||
Maraas (nb), Kjartan Maraas (no), Marcel Telka (sk), Theppitak
|
||||
Karoonboonyanan (th), Clytie Siddall (vi), Funda Wang (zh_CN)
|
||||
|
||||
2.11.0
|
||||
==
|
||||
|
||||
This release contains all fixes up to Metacity 2.10.2 plus some new goodies.
|
||||
|
||||
Thanks to Matthias Clasen, Aivars Kalvans, Björn Lindqvist, and
|
||||
Andrew Johnson for improvements in this release.
|
||||
|
||||
- React to cursor theme changes (Matthias) [#308106]
|
||||
- Plug a small leak with xinerama information (Aivars) [#307884]
|
||||
- Split up main() into more manageable chunks and make use of GOpt
|
||||
(Björn) [#305331]
|
||||
- Speed up vertical gradients (Andrew) [#169982]
|
||||
|
||||
Translations
|
||||
Hendrik Richter (de), Ivar Smolin (et), Ignacio Casal
|
||||
Quinteiro (gl), Clytie Siddall (vi)
|
||||
|
||||
2.10.2
|
||||
==
|
||||
|
||||
Thanks to Billy Biggs, Greg Hudson, Elijah Newren, Ray Strode, Ryan
|
||||
Lortie, and Soeren Sandmann for improvements in this release.
|
||||
|
||||
- Makes metacity a bit faster when dragging windows around (Soeren) [#141813]
|
||||
- Fix simple memory error, using the address of a local variable as a
|
||||
hash key (Ryan) [#307209]
|
||||
- Fix a small leak in the case of a SYNC_COUNTER property value and
|
||||
HAVE_XSYNC not defined (Ryan) [#307214]
|
||||
- Cleanup font data when done with it (Ray) [#306720]
|
||||
- If the window has a modal transient which is being unmanaged, don't
|
||||
focus it (Elijah) [#305362]
|
||||
- Make sure window position is calculated correctly for reconfigure
|
||||
requests when part of the XWindowChanges structure is uninitialized
|
||||
(Greg) [#305257]
|
||||
- Add a resize popup when resizing constrained windows (Ray) [#305564]
|
||||
- Don't accidentally treat maximize vertically as maximize in both
|
||||
directions (Elijah) [#302204]
|
||||
- Put all transients of the new window, if any exist, in the
|
||||
calc_showing queue (Elijah, Billy) [#303284]
|
||||
|
||||
Translations
|
||||
Kostas Papadimas (el), Priit Laes (et), Pauli Virtanen (fi), Ignacio
|
||||
Casal Quinteiro (gl), Theppitak Karoonboonyanan (th), Canonical
|
||||
Ltd (xh), Woodman Tuen (zh_TW)
|
||||
|
||||
2.10.1
|
||||
==
|
||||
|
||||
This is a stable release to coincide with the release of Gnome 2.10.0.
|
||||
|
||||
Thanks to Dan Winship and Lex Hider for fixes in this release.
|
||||
|
||||
- Make sure the "Close" button has the focus in the
|
||||
buggy-session-management-applications-warning dialog instead of the
|
||||
table (Dan) [#172703]
|
||||
- add doc/code-overview.txt and doc/how-to-get-focus-right.txt to the
|
||||
distributed files (Lex) [#170519]
|
||||
|
||||
Translations
|
||||
Adam Weinberger (en_CA), Christopher Orr (en_GB), Elnaz Sarbar (fa),
|
||||
Gabor Kelemen (hu), Jyotsna Shrestha (ne), Steve Murphy (rw),
|
||||
Baris Cicek (tr), Canonical Ltd (xh)
|
||||
|
||||
2.10.0
|
||||
==
|
||||
|
||||
This is a stable release to coincide with the release of Gnome 2.10.0.
|
||||
The only difference between this version and 2.9.34 is some
|
||||
translation updates.
|
||||
|
||||
Translations
|
||||
Vladimir Petkov (bg), Gabor Kelemen (hu), Žygimantas Berucka (lt),
|
||||
Reinout van Schouwen (nl), Mugurel Tudor (ro), Danilo Šegan (sr),
|
||||
Woodman Tuen (zh_TW)
|
||||
|
||||
2.9.34
|
||||
==
|
||||
|
||||
This is an unstable release to coincide with the release of Gnome
|
||||
2.10.0 release candidate 1 (2.9.92).
|
||||
|
||||
Thanks to Aidan Delaney, Elijah Newren, and Joe Marcus Clarke for
|
||||
fixes in this release.
|
||||
|
||||
- Fix crash that occurs when stupid apps claim that a window is its
|
||||
own parent (Elijah, Joe) [#168207]
|
||||
- Prevent the visual bell from changing the focus window (Elijah)
|
||||
[#123366]
|
||||
- Make sure that icons in the alt-tab popup are dimmed for all hidden
|
||||
windows, not just minimized ones (Aidan) [#168455]
|
||||
|
||||
Translations
|
||||
Elnaz Sarbar (fa), Ankit Patel (gu), Luca Ferretti (it),
|
||||
Reinout van Schouwen (nl), Gnome PL Team (pl),
|
||||
Alexandre Folle de Menezes (pt_BR)
|
||||
|
||||
2.9.21
|
||||
==
|
||||
|
||||
This is an unstable release heading towards Gnome 2.10. Since there
|
||||
have been an awful lot of fixes since Gnome 2.10 Beta 2, we are hoping
|
||||
to get an extra week of wider testing of all these changes before hard
|
||||
code freeze.
|
||||
|
||||
Thanks to Aidan Delaney, Crispin Flowerday, Elijah Newren, and Joe
|
||||
Marcus Clarke for fixes in this release.
|
||||
|
||||
- Make sure we get a valid timestamp if one doesn't come with the
|
||||
_NET_ACTIVE_WINDOW message (Elijah, Crispin) [#166728]
|
||||
- Avoid sending CurrentTime to our XSetInputFocus wrappers, but
|
||||
handle it better in case we miss any cases (Elijah) [#166732]
|
||||
- Remove useless function call (Aidan) [#166730]
|
||||
- Avoid new windows being obscured by the focus window and thus
|
||||
possibly lost (Elijah) [#166524]
|
||||
- Don't unconditionally place not-to-be-focused windows, such as
|
||||
splashscreens, below the focus window (Elijah) [#167042]
|
||||
- Raise the ancestor of a window instead of the window itself
|
||||
(Elijah) [#166894]
|
||||
- Cover half a dozen issues needed to fix a variety of rare timestamp
|
||||
bugs (Elijah) [#167358]
|
||||
- Fix a possible crash on logout (Joe) [#167935]
|
||||
- Fix an obscure xinerama placement bug with windows that are too
|
||||
large to fit in the workarea in both dimensions (Elijah) [#166757]
|
||||
- Ignore all focus and focus-stealing-prevention code in
|
||||
meta_window_show when not showing the window for the first time
|
||||
(Elijah) [#167199]
|
||||
- when receiving a _NET_ACTIVE_WINDOW message, switch to the desktop
|
||||
where the window is located before activating instead of moving the
|
||||
window to the current desktop (Elijah) [#128380]
|
||||
- Handle _NET_CURRENT_DESKTOP messages that come with timestamps
|
||||
(Elijah) [#161361]
|
||||
- Handle keynav vs. mousenav in mouse and sloppy focus modes (Elijah)
|
||||
[#167545]
|
||||
|
||||
Translations
|
||||
Jordi Mallach (ca), Martin Willemoes Hansen (da),
|
||||
Kostas Papadimas (el), David Lodge (en_GB),
|
||||
Francisco Javier F. Serrador (es), Tõivo Leedjärv (et),
|
||||
Christophe Merlet (RedFox) (fr), Takeshi AIHANA (ja),
|
||||
Young-Ho, Cha (ko), Kjartan Maraas (nb), Michiel Sikkes (nl),
|
||||
Kjartan Maraas (no), Duarte Loreto (pt), Leonid Kanter (ru),
|
||||
Marcel Telka (sk), Laurent Dhima (sq), Maxim Dziumanenko (uk)
|
||||
|
||||
2.9.13
|
||||
==
|
||||
|
||||
@@ -60,7 +828,7 @@ Translations
|
||||
Vladimir Petkov (bg), Miloslav Trmac (cs), Frank Arnold (de),
|
||||
Adam Weinberger (en_CA), David Lodge (en_GB),
|
||||
Francisco Javier F. Serrador (es), Pauli Virtanen (fi),
|
||||
Young-Ho, Changwoo Ryu (ko), <EFBFBD>ygimantas Berucka (lt),
|
||||
Young-Ho, Changwoo Ryu (ko), Žygimantas Berucka (lt),
|
||||
Kjartan Maraas (nb), Kjartan Maraas (no), Duarte Loreto (pt),
|
||||
Marcel Telka (sk), Christian Rose (sv),
|
||||
Theppitak Karoonboonyanan (th)
|
||||
@@ -167,7 +935,7 @@ Vincent Untz for fixes/features in this release.
|
||||
|
||||
Translations
|
||||
da (Martin Willemoes Hansen), fr(Christophe Merlet, Baptiste
|
||||
Mille-Mathias), lt(<EFBFBD>ygimantas Berucka), ja(Takeshi AIHANA)
|
||||
Mille-Mathias), lt(Žygimantas Berucka), ja(Takeshi AIHANA)
|
||||
|
||||
2.9.0
|
||||
==
|
||||
@@ -198,7 +966,7 @@ and Vincent Untz for fixes and features in this release.
|
||||
- Re-enable focus stealing prevention (Elijah)
|
||||
|
||||
Translations
|
||||
es(Francisco Javier F. Serrador), sq(Laurent Dhima), sr(Danilo <EFBFBD>egan),
|
||||
es(Francisco Javier F. Serrador), sq(Laurent Dhima), sr(Danilo Šegan),
|
||||
cs(Miloslav Trmac), en_CA(Adam Weinberger), en_GB(David Lodge)
|
||||
|
||||
2.8.6
|
||||
@@ -233,7 +1001,7 @@ Translations
|
||||
|
||||
* ar(Abdulaziz Al-Arfaj), cs(Miloslav Trmac), cy(Dafydd Harries),
|
||||
en_GB(David Lodge), fr(Christophe Merlet (RedFox)),
|
||||
nn(<EFBFBD>smund Skj<EFBFBD>veland), or(Gora Mohanty),
|
||||
nn(Åsmund Skjæveland), or(Gora Mohanty),
|
||||
pr_BR(Gustavo Noronha Silva), ro(Mugurel Tudor),
|
||||
th(Paisa Seeluangsawat), tr(Baris Cicek), zh_TW(Woodman Tuen)
|
||||
|
||||
@@ -271,7 +1039,7 @@ Fixes
|
||||
Translations
|
||||
* az(Metin Amiroff), bs(Kemal Sanjta), ca(Jordi Mallach),
|
||||
el(Kostas Papadimas), es(Francisco Javier F. Serrador),
|
||||
eu(I<EFBFBD><EFBFBD>aki Larra<EFBFBD><EFBFBD>aga Murgoitio), fi(Pauli Virtanen),
|
||||
eu(Iñaki Larrañaga Murgoitio), fi(Pauli Virtanen),
|
||||
nb(Kjartan Maraas), sq(Laurent Dhima), uk(Maxim Dziumanenko)
|
||||
|
||||
|
||||
@@ -299,7 +1067,7 @@ Fixes
|
||||
|
||||
Translations
|
||||
* fi (Pauli Virtanen), ja (Takeshi AIHANA), ko (Young-Ho, Cha),
|
||||
pl (Gnome PL Team), ru (Dmitry G. Mastrukov), sr (Danilo <EFBFBD>Ł<EFBFBD>egan),
|
||||
pl (Gnome PL Team), ru (Dmitry G. Mastrukov), sr (Danilo Šegan),
|
||||
tk (Gurban M. Tewekgeli), zh_CN (Funda Wang)
|
||||
|
||||
2.8.2
|
||||
|
9
README
9
README
@@ -6,9 +6,10 @@ 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.0, 2.8.1, 2.8.1.x, 2.8.5-
|
||||
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.
|
||||
|
||||
Unstable branches are 2.3.x, 2.5.x, 2.8.2-4, 2.9.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
|
||||
|
||||
COMPILING METACITY
|
||||
===
|
||||
@@ -314,8 +315,8 @@ A: Metacity only stores sizes/positions for apps that are session
|
||||
archaic than twm - and you should flame them. ;-)
|
||||
|
||||
Docs on session management:
|
||||
ftp://ftp.x.org/pub/R6.4/xc/doc/hardcopy/SM/xsmp.PS.gz
|
||||
ftp://ftp.x.org:21/pub/R6.4/xc/doc/hardcopy/SM/SMlib.PS.gz
|
||||
http://www.fifi.org/doc/xspecs/xsmp.txt.gz
|
||||
http://www.fifi.org/doc/xspecs/SMlib.txt.gz
|
||||
|
||||
See also the ICCCM section on SM. For GNOME apps, use the
|
||||
GnomeClient object. For a simple example of using libSM directly,
|
||||
|
42
configure.in
42
configure.in
@@ -2,7 +2,7 @@ AC_PREREQ(2.50)
|
||||
|
||||
# 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.9.13],
|
||||
AC_INIT([metacity], [2.15.1],
|
||||
[http://bugzilla.gnome.org/enter_bug.cgi?product=metacity])
|
||||
|
||||
AC_CONFIG_SRCDIR(src/display.c)
|
||||
@@ -18,7 +18,7 @@ GETTEXT_PACKAGE=metacity
|
||||
AC_SUBST(GETTEXT_PACKAGE)
|
||||
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Name of default gettext domain])
|
||||
|
||||
AC_PROG_INTLTOOL([0.21])
|
||||
IT_PROG_INTLTOOL([0.34.90])
|
||||
AC_PROG_CC
|
||||
AC_ISC_POSIX
|
||||
AC_HEADER_STDC
|
||||
@@ -155,12 +155,14 @@ AC_ARG_ENABLE(shape,
|
||||
## try definining HAVE_BACKTRACE
|
||||
AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)])
|
||||
|
||||
ALL_LINGUAS="am ar az be bg bn bs ca cs cy da de el en_CA en_GB es et eu fa fi fr ga gl gu he hi hr hu id is it ja ko lt lv mk ml mn ms nb nl nn no or pa pl pt pt_BR ro ru sl sk sq sr sr@Latn sv ta th tk tr uk vi wa zh_CN zh_TW"
|
||||
AM_GLIB_GNU_GETTEXT
|
||||
|
||||
## here we get the flags we'll actually use
|
||||
PKG_CHECK_MODULES(METACITY_MESSAGE, gtk+-2.0 >= 2.2.0)
|
||||
PKG_CHECK_MODULES(METACITY_WINDOW_DEMO, gtk+-2.0 >= 2.2.0)
|
||||
# GOptionEntry requires glib-2.6.0
|
||||
PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.6.0)
|
||||
# gtk_window_set_icon_name requires gtk2+-2.60
|
||||
PKG_CHECK_MODULES(METACITY_MESSAGE, gtk+-2.0 >= 2.6.0)
|
||||
PKG_CHECK_MODULES(METACITY_WINDOW_DEMO, gtk+-2.0 >= 2.6.0)
|
||||
|
||||
if $PKG_CONFIG --atleast-version 1.2.0 pangoxft; then
|
||||
echo "pangoxft found"
|
||||
@@ -219,7 +221,7 @@ fi
|
||||
|
||||
if test x$have_xcomposite = xyes; then
|
||||
echo "Building with CompositeExt"
|
||||
METACITY_PC_MODULES="$METACITY_PC_MODULES xcomposite >= $XCOMPOSITE_VERSION xfixes xrender xdamage"
|
||||
METACITY_PC_MODULES="$METACITY_PC_MODULES xcomposite >= $XCOMPOSITE_VERSION xfixes xrender xdamage cm"
|
||||
AC_DEFINE(HAVE_COMPOSITE_EXTENSIONS, , [Building with compositing manager support])
|
||||
|
||||
## force on render also
|
||||
@@ -258,6 +260,20 @@ if test x$have_xrender = xyes; then
|
||||
AC_DEFINE(HAVE_RENDER, , [Building with Render extension support])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([Xcursor])
|
||||
if $PKG_CONFIG xcursor; then
|
||||
have_xcursor=yes
|
||||
else
|
||||
have_xcursor=no
|
||||
fi
|
||||
AC_MSG_RESULT($have_xcursor)
|
||||
|
||||
if test x$have_xcursor = xyes; then
|
||||
echo "Building with Xcursor"
|
||||
METACITY_PC_MODULES="$METACITY_PC_MODULES xcursor"
|
||||
AC_DEFINE(HAVE_XCURSOR, , [Building with Xcursor support])
|
||||
fi
|
||||
|
||||
PKG_CHECK_MODULES(METACITY, $METACITY_PC_MODULES)
|
||||
|
||||
AC_PATH_XTRA
|
||||
@@ -387,10 +403,10 @@ if test "x$found_xsync" = "xyes"; then
|
||||
AC_DEFINE(HAVE_XSYNC, , [Have the Xsync extension library])
|
||||
fi
|
||||
|
||||
METACITY_LIBS="$XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $METACITY_LIBS"
|
||||
METACITY_MESSAGE_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $METACITY_MESSAGE_LIBS"
|
||||
METACITY_WINDOW_DEMO_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $METACITY_WINDOW_DEMO_LIBS"
|
||||
METACITY_PROPS_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $METACITY_PROPS_LIBS"
|
||||
METACITY_LIBS="$METACITY_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
|
||||
METACITY_MESSAGE_LIBS="$METACITY_MESSAGE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
|
||||
METACITY_WINDOW_DEMO_LIBS="$METACITY_WINDOW_DEMO_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
|
||||
METACITY_PROPS_LIBS="$METACITY_PROPS_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
|
||||
|
||||
found_sm=no
|
||||
case "$METACITY_LIBS" in
|
||||
@@ -446,6 +462,9 @@ if test x$enable_gconf = xyes; then
|
||||
fi
|
||||
|
||||
AM_GCONF_SOURCE_2
|
||||
else
|
||||
GCONF_SCHEMAS_INSTALL_TRUE='#'
|
||||
GCONF_SCHEMAS_INSTALL_FALSE=
|
||||
fi
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
@@ -498,6 +517,7 @@ metacity-$VERSION:
|
||||
Resize-and-rotate: ${found_randr}
|
||||
Xsync: ${found_xsync}
|
||||
Render: ${have_xrender}
|
||||
Xcursor: ${have_xcursor}
|
||||
"
|
||||
echo "This is the UNSTABLE branch of metacity"
|
||||
echo "Use 2.8.x (where x > 5) for stable (gnome-2-8 branch in CVS)"
|
||||
echo "Use 2.14.x for stable (gnome-2-14 branch in CVS)"
|
||||
|
@@ -1,3 +1,4 @@
|
||||
SUBDIRS = man
|
||||
|
||||
EXTRA_DIST=theme-format.txt metacity-theme.dtd dialogs.txt
|
||||
EXTRA_DIST=theme-format.txt metacity-theme.dtd dialogs.txt code-overview.txt \
|
||||
how-to-get-focus-right.txt
|
||||
|
283
doc/how-constraints-works.txt
Normal file
283
doc/how-constraints-works.txt
Normal file
@@ -0,0 +1,283 @@
|
||||
File contents:
|
||||
Basic Ideas
|
||||
Important points to remember
|
||||
Explanation of fields in the ConstraintInfo struct
|
||||
Gory details of resize_gravity vs. fixed_directions
|
||||
|
||||
IMPORTANT NOTE: There's a big comment at the top of constraints.c
|
||||
explaining how to add extra constraints or tweak others. Read it. I put
|
||||
that information there because it may be enough information by itself for
|
||||
people to hack on constraints.c. I won't duplicate that information in
|
||||
this file; this file is for deeper details.
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
Basic Ideas
|
||||
---------------------------------------------------------------------------
|
||||
There are a couple basic ideas behind how this constraints.c code works and
|
||||
why it works that way:
|
||||
|
||||
1) Split the low-level error-prone operations into a special file
|
||||
2) Add robustness by prioritizing constraints
|
||||
3) Make use of a minimal spanning set of rectangles for the
|
||||
"onscreen region" (screen minus struts).
|
||||
4) Constraints can be user-action vs app-action oriented
|
||||
5) Avoid over-complification ;-)
|
||||
|
||||
Some more details explaining these basic ideas:
|
||||
|
||||
1) Split tedious operations out
|
||||
|
||||
boxes.[ch] have been added which contain many common, tedious, and
|
||||
error-prone operations. I find that this separation helps a lot for
|
||||
managing the complexity and ensuring that things work correctly.
|
||||
Also, note that testboxes.c thoroughly tests all functionality in
|
||||
boxes.[ch] and a testboxes program is automatically compiled.
|
||||
|
||||
Note that functions have also been added to this file to handle some
|
||||
of the tedium necessary for edge resistance as well.
|
||||
|
||||
2) Prioritize constraints
|
||||
|
||||
In the old code, if each and every constraint could not be
|
||||
simultaneously satisfied, then it would result in some
|
||||
difficult-to-predict set of constraints being violated. This was
|
||||
because constraints were applied in order, with the possibility for
|
||||
each making changes that violated previous constraints, with no
|
||||
checking done at the end.
|
||||
|
||||
Now, all constraints have an associated priority, defined in the
|
||||
ConstraintPriority enum near the top of constraints.c. The
|
||||
constraints are all applied, and then are all checked; if not all are
|
||||
satisfied then the least important constraints are dropped and the
|
||||
process is repeated. This ensures that the most important constraints
|
||||
are satisfied.
|
||||
|
||||
A special note to make here is that if any one given constraint is
|
||||
impossible to satisfy even individually (e.g. if minimum size hints
|
||||
specify a larger window than the screen size, making the
|
||||
fully-onscreen constraint impossible to satisfy) then we treat the
|
||||
constraint as being satisfied. This sounds counter-intuitive, but the
|
||||
idea is that we want to satisfy as many constraints as possible and if
|
||||
we treat it as a violation then all constraints with a lesser priority
|
||||
also get dropped along with the impossible to satisfy one.
|
||||
|
||||
3) Using maximal/spanning rectangles
|
||||
|
||||
The constraints rely heavily on something I call spanning rectangles
|
||||
(which Soeren referred to as maximal rectangles, a name which I think
|
||||
I like better but I don't want to go change all the code now). These
|
||||
spanning rectangles have the property that a window will fit on the
|
||||
screen if and only if it fits within at least one of the rectangles.
|
||||
Soeren had an alternative way of describing these rectangles, namely
|
||||
that they were rectangles with the property that if you made any of
|
||||
them larger in any direction, they would overlap with struts or be
|
||||
offscreen (with the implicit assumption that there are enough of these
|
||||
rectangles that combined they cover all relevant parts of the screen).
|
||||
Note that, by necessity, these spanning/maximal rectangles will often
|
||||
overlap each other.
|
||||
|
||||
Such a list makes it relatively easy to define operations like
|
||||
window-is-onscreen or clamp-window-to-region or
|
||||
shove-window-into-region. Since we have a on-single-xinerama
|
||||
constraint in addition to the onscreen constraint(s), we cache
|
||||
number_xineramas + 1 of these lists in the workspace. These lists
|
||||
then only need to be updated whenever the workarea is (e.g. when strut
|
||||
list change or screen or xinerama size changes).
|
||||
|
||||
4) Constraints can be user-action vs app-action oriented
|
||||
|
||||
Such differentiation requires special care for the constraints to be
|
||||
consistent; e.g. if the user does something and one constraint
|
||||
applies, then the app does something you have to be careful that the
|
||||
constraint on the app action doesn't result in some jarring motion.
|
||||
|
||||
In particular, the constraints currently allow offscreen movement or
|
||||
resizing for user actions only. The way consistency is handled is
|
||||
that at the end of the constraints, update_onscreen_requirements()
|
||||
checks to see if the window is offscreen or split across xineramas and
|
||||
updates window->require_fully_onscreen and
|
||||
window->require_on_single_xinerama appropriately.
|
||||
|
||||
5) Avoid over-complification
|
||||
|
||||
The previous code tried to reform the constraints into terms of a
|
||||
single variable. This made the code rather difficult to
|
||||
understand. ("This is a rather complicated fix for an obscure bug
|
||||
that happened when resizing a window and encountering a constraint
|
||||
such as the top edge of the screen.") It also failed, even on the
|
||||
very example for which it used as justification for the complexity
|
||||
(bug 312104 -- when keyboard resizing the top of the window,
|
||||
Metacity extends the bottom once the titlebar hits the top panel),
|
||||
though the reason why it failed is somewhat mysterious as it should
|
||||
have worked. Further, it didn't really reform the constraints in
|
||||
terms of a single variable -- there was both an x_move_delta and an
|
||||
x_resize_delta, and the existence of both caused bug 109553
|
||||
(gravity with simultaneous move and resize doesn't work)
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
Important points to remember
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
- Inner vs Outer window
|
||||
|
||||
Note that because of how configure requests work and
|
||||
meta_window_move_resize_internal() and friends are set up, that the
|
||||
rectangles passed to meta_window_constrain() are with respect to inner
|
||||
window positions instead of outer window positions (meaning that window
|
||||
manager decorations are not included in the position/size). For the
|
||||
constraints that need to be enforced with respect to outer window
|
||||
positions, you'll need to make use of the extend_by_frame() and
|
||||
unextend_by_frame() functions.
|
||||
|
||||
- meta_window_move_resize_internal() accepts a really hairy set of
|
||||
inputs. See the huge comment at the beginning of that function.
|
||||
constraints gets screwed up if that function can't sanitize the input,
|
||||
so be very careful about that. It used to be pretty busted.
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
Explanation of fields in the ConstraintInfo strut
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
As of the time of this writing, ConstraintInfo had the following fields:
|
||||
orig
|
||||
current
|
||||
fgeom
|
||||
action_type
|
||||
is_user_action
|
||||
resize_gravity
|
||||
fixed_directions
|
||||
work_area_xinerama
|
||||
entire_xinerama
|
||||
usable_screen_region
|
||||
usable_xinerama_region
|
||||
|
||||
A brief description of each and/or pointers to more information are found
|
||||
below:
|
||||
orig
|
||||
The previous position and size of the window, ignoring any window
|
||||
decorations
|
||||
current
|
||||
The requested position and size of the window, ignoring any window
|
||||
decorations. This rectangle gets modified by the various constraints
|
||||
to specify the allowed position closest to the requested position.
|
||||
fgeom
|
||||
The geometry of the window frame (i.e. "decorations"), if it exists.
|
||||
Otherwise, it's a dummy 0-size frame for convenience (i.e. this pointer
|
||||
is guaranteed to be non-NULL so you don't have to do the stupid check).
|
||||
action_type
|
||||
Whether the action being constrained is a move, resize, or a combined
|
||||
move and resize. Some constraints can run faster with this information
|
||||
(e.g. constraining size increment hints or min size hints don't need to
|
||||
do anything for pure move operations). This may also be used for
|
||||
providing slightly different behavior (e.g. clip-to-region instead of
|
||||
shove-into-region for resize vs. moving operations), but doesn't
|
||||
currently have a lot of use for this.
|
||||
is_user_action
|
||||
Used to determine whether the action being constrained is a user
|
||||
action. If so, certain parts of the constraint may be relaxed. Note
|
||||
that this requires care to get right; see item 4 of the basic ideas
|
||||
section for more details.
|
||||
resize_gravity
|
||||
The gravity used in the resize operation, used in order to make sure
|
||||
windows are resized correctly if constraints specify that their size
|
||||
must be modified. Explained further in the resize_gravity
|
||||
vs. fixed_directions section.
|
||||
fixed_directions
|
||||
There may be multiple solutions to shoving a window back onscreen.
|
||||
Typically, the shortest distance used is the solution picked, but if
|
||||
e.g. an application only moved its window in a single direction, it's
|
||||
more desirable that the window is shoved back in that direction than in
|
||||
a different one. fixed_directions facilitates that. Explained further
|
||||
in the resize_gravity vs. fixed_directions section.
|
||||
work_area_xinerama
|
||||
This region is defined in the workspace and just cached here for
|
||||
convenience. It is basically the area obtained by taking the current
|
||||
xinerama, treating all partial struts as full struts, and then
|
||||
subtracting all struts from the current xinerama region. Useful
|
||||
e.g. for enforcing maximization constraints.
|
||||
entire_xinerama
|
||||
Just a cache of the rectangle corresponding to the entire current
|
||||
xinerama, including struts. Useful e.g. for enforcing fullscreen
|
||||
constraints.
|
||||
usable_screen_region
|
||||
The set of maximal/spanning rectangles for the entire screen; this
|
||||
region doesn't overlap with any struts and helps to enforce
|
||||
e.g. onscreen constraints.
|
||||
usable_xinerama_region
|
||||
The set of maximal/spanning rectangles for the current xinerama; this
|
||||
region doesn't overlap with any struts on the xinerama and helps to
|
||||
enforce e.g. the on-single-xinerama constraint.
|
||||
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
Gory details of resize_gravity vs. fixed_directions
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Note that although resize_gravity and fixed_directions look similar, they
|
||||
are used for different purposes:
|
||||
|
||||
- resize_gravity is only for resize operations and is used for
|
||||
constraints unrelated to keeping a window within a certain region
|
||||
- fixed_directions is for both move and resize operations and is
|
||||
specifically for keeping a window within a specified region.
|
||||
|
||||
Examples of where each are used:
|
||||
|
||||
- If a window is simultaneously moved and resized to the southeast corner
|
||||
with SouthEastGravity, but it turns out that the window was sized to
|
||||
something smaller than the minimum size hint, then the size_hints
|
||||
constraint should resize the window using the resize_gravity to ensure
|
||||
that the southeast corner doesn't move.
|
||||
- If an application resizes itself so that it grows downward only (which
|
||||
I note could be using any of three different gravities, most likely
|
||||
NorthWest), and happens to put the southeast part of the window under a
|
||||
partial strut, then the window needs to be forced back on screen.
|
||||
(Yes, shoved onscreen and not clipped; see bug 136307). It may be the
|
||||
case that moving the window to the left results in less movement of the
|
||||
window than moving the window up, which, in the absence of fixed
|
||||
directions would cause us to chose moving to the left. But since the
|
||||
user knows that only the height of the window is changing, they would
|
||||
find moving to the left weird (especially if this were a dialog that
|
||||
had been centered on its parent). It'd be better to shove the window
|
||||
upwards so we make sure to keep the left and right sides fixed in this
|
||||
case. Note that moving the window upwards (or leftwards) is probably
|
||||
totally against the gravity in this case; but that's okay because
|
||||
gravity typically assumes there's more than enough onscreen space for
|
||||
the resize and we only override the gravity when that assumption is
|
||||
wrong.
|
||||
|
||||
For the paranoid, a fixed directions might give an impossible to fulfill
|
||||
constraint (I don't think that's true currently in the code, but I haven't
|
||||
thought it through in a while). If this ever becomes a problem, it should
|
||||
be relatively simple to throw out the fixed directions when this happens
|
||||
and rerun the constraint. Of course, it might be better to rethink things
|
||||
to just avoid such a problem.
|
||||
|
||||
The nitty gritty of what gets fixed:
|
||||
User move:
|
||||
in x direction - y direction fixed
|
||||
in y direction - x direction fixed
|
||||
in both dirs. - neither direction fixed
|
||||
User resize: (note that for clipping, only 1 side ever changed)
|
||||
in x direction - y direction fixed (technically opposite x side fixed too)
|
||||
in y direction - x direction fixed (technically opposite y side fixed too)
|
||||
in both dirs. - neither direction fixed
|
||||
App move:
|
||||
in x direction - y direction fixed
|
||||
in y direction - x direction fixed
|
||||
in both dirs. - neither direction fixed
|
||||
App resize
|
||||
in x direction - y direction fixed
|
||||
in y direction - x direction fixed
|
||||
in 2 parallel directions (center side gravity) - other dir. fixed
|
||||
in 2 orthogonal directions (corner gravity) - neither dir. fixed
|
||||
in 3 or 4 directions (a center-like gravity) - neither dir. fixed
|
||||
Move & resize
|
||||
Treat like resize case though this will usually mean all four sides
|
||||
change and result in neither direction being fixed
|
||||
Note that in all cases, if neither direction moves it is likely do to a
|
||||
change in struts and thus neither direction should be fixed despite the
|
||||
lack of movement.
|
@@ -79,9 +79,26 @@ to alert the user that there is a window to work with:
|
||||
Additionally, the user may decide to use the keyboard instead of the mouse
|
||||
to navigate between windows (referred to as "keynav"). This poses no
|
||||
problems for click-to-focus (because the same invariant can be
|
||||
maintained), but for sloppy and mouse focus it means that EnterNotify
|
||||
and LeaveNotify events should be ignored (they can be generated
|
||||
without using the mouse, for example, by grabs).
|
||||
maintained), but for sloppy and mouse focus it requires extra work to
|
||||
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
|
||||
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.
|
||||
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.
|
||||
Note that grabs present a special case since they can generate EnterNotify
|
||||
and LeaveNotify events without using the mouse, thus these events should be
|
||||
ignored when the crossing mode is NotifyGrab or NotifyUngrab. THIS
|
||||
MOUSENAV/KEYNAV MODERATION METHOD IS NOT PERFECT--there are corner cases
|
||||
when trying to mix-and-match between mousenav and keynav simultaneously
|
||||
that cause problems; but it appears to be the most reasonable tradeoff and
|
||||
works well in most cases, especially if the user sticks to just mousenav
|
||||
for a long time or just keynav for a long time.
|
||||
|
||||
Finally, windows of type WM_DOCK or WM_DESKTOP (e.g. the desktop and
|
||||
the panel) present a special case, at least partially due to the lack
|
||||
@@ -103,7 +120,8 @@ To read more about the bugs that inspired these choices:
|
||||
Also, the EWMH spec, especially the parts relating to _NET_WM_USER_TIME
|
||||
- Modal vs. non-modal dialogs that get denied focus when mapped
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=151996
|
||||
- Ignoring EnterNotify and LeaveNotify events during keynav
|
||||
- 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
|
||||
- Not focusing panels
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=160470
|
||||
@@ -121,6 +139,7 @@ the ones I'm the most familiar with):
|
||||
bug 95747 should ignore EnterNotify events with NotifyInferior detail set
|
||||
bug 97635 sticky windows always keep focus when switching workspaces
|
||||
bug 102665 a window unminimized from the tasklist should be focused
|
||||
bug 107347 focus windows that manually position themselves too
|
||||
bug 108643 focus in MRU order instead of stack order
|
||||
bug 110970 moving a window to another workspace loses focus
|
||||
bug 112031 closing a dialog can result in a strange focus window
|
||||
@@ -128,6 +147,7 @@ the ones I'm the most familiar with):
|
||||
bug 120100 panel shouldn't be focused after workspace applet usage
|
||||
bug 123803 need final EnterNotify after workspace switch (see also 124798)
|
||||
bug 124981 focus clicked window in pager only if on current workspace
|
||||
bug 125492 catch the xserver unfocusing everything and fix its braindeadedness
|
||||
bug 128200 focus correct window on libwnck window minimize (see 107681 too)
|
||||
bug 131582 fix race condition on window minimize/close
|
||||
bug 133120 wrong window focused when changing workspaces
|
||||
@@ -148,6 +168,18 @@ the ones I'm the most familiar with):
|
||||
bug 151990 prevent focus inconsistencies by only providing one focus method
|
||||
bug 151996 modal dialogs denied focus should not be lowered
|
||||
bug 152000 fix race on window close followed by rapid mouse movement
|
||||
bug 152004 ways to handle new window versus mouse invariants
|
||||
bug 153220 catch the root window getting focus and reset to default window
|
||||
bug 157360 focus parents of dismissed transient windows in preference to
|
||||
the window that most recently had focus
|
||||
bug 159257 focus the desktop when showing it
|
||||
bug 160470 don't focus panels on click
|
||||
bug 163450 correct highlighting in workspace switcher popup
|
||||
bug 164716 refuse to focus a window with a modal transient, and focus
|
||||
the transient instead
|
||||
bug 166524 avoid new windows being obscured by the focus window
|
||||
bug 167545 mousenav vs. keynav in mouse and sloppy focus modes
|
||||
<a massive heap of bugs relating to focus stealing prevention...>
|
||||
|
||||
|
||||
Addendum on sloppy and mouse focus
|
||||
@@ -156,7 +188,7 @@ Addendum on sloppy and mouse focus
|
||||
|
||||
1) Keynav doesn't maintain the same invariants as mouse navigation
|
||||
for these focus modes; switching back and forth between
|
||||
navigation methods, therefore, may appear to have
|
||||
navigation methods, therefore, may have or appear to have
|
||||
inconsistencies. Examples:
|
||||
a) If the user uses Alt-Tab to change the window with focus, then
|
||||
starts to move the mouse, at that moment the window where the
|
||||
@@ -182,6 +214,15 @@ Addendum on sloppy and mouse focus
|
||||
containing the menu) but is one of those hard-to-get-right
|
||||
keynav and mouse focus mixture cases. (See bug 101190 for
|
||||
more details)
|
||||
d) Similar to (c), moving the mouse off the menu doesn't immediately
|
||||
focus the window that the mouse goes over, due to an application
|
||||
grab (we couldn't change this and wouldn't want to, but
|
||||
technically it does break the invariant).
|
||||
e) If mouse_mode is off and the user does something to cause focus to
|
||||
change (e.g. switch workspaces, close or minimize a window, etc.)
|
||||
and simultaneously tries to move the mouse, the choice of which
|
||||
window to focus is inherently race-y. (You probably can't satisfy
|
||||
both keynav and mousenav invariants simultaneously...)
|
||||
2) The sloppy/mouse invariants are often not strictly maintained;
|
||||
for example, we provide an exception to the invariant for newly
|
||||
mapped windows. (Most find that not allowing this exception is
|
||||
|
@@ -1,3 +1,3 @@
|
||||
man_MANS = metacity-theme-viewer.1 metacity-window-demo.1
|
||||
man_MANS = metacity.1 metacity-theme-viewer.1 metacity-window-demo.1
|
||||
|
||||
EXTRA_DIST = $(man_MANS)
|
||||
|
60
doc/man/metacity.1
Normal file
60
doc/man/metacity.1
Normal file
@@ -0,0 +1,60 @@
|
||||
.\" Hey, EMACS: -*- nroff -*-
|
||||
.\" First parameter, NAME, should be all caps
|
||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||
.\" other parameters are allowed: see man(7), man(1)
|
||||
.TH METACITY 1 "11 February 2006"
|
||||
.\" Please adjust this date whenever revising the manpage.
|
||||
.\"
|
||||
.\" Some roff macros, for reference:
|
||||
.\" .nh disable hyphenation
|
||||
.\" .hy enable hyphenation
|
||||
.\" .ad l left justify
|
||||
.\" .ad b justify to both left and right margins
|
||||
.\" .nf disable filling
|
||||
.\" .fi enable filling
|
||||
.\" .br insert line break
|
||||
.\" .sp <n> insert n+1 empty lines
|
||||
.\" for manpage-specific macros, see man(7)
|
||||
.SH NAME
|
||||
METACITY \- minimal GTK2 Window Manager
|
||||
.SH SYNOPSIS
|
||||
.B metacity
|
||||
[\-\-display=\fIDISPLAY\fP] [\-\-replace] [\-\-sm\-client\-id=\fIID\fP] [\-\-sm\-disable] [\-\-sm\-save\-file=\fIFILENAME\fP] [\-\-version] [\-\-help]
|
||||
.SH DESCRIPTION
|
||||
This manual page documents briefly
|
||||
.B metacity\fP.
|
||||
.PP
|
||||
.\" TeX users may be more comfortable with the \fB<whatever>\fP and
|
||||
.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
|
||||
.\" respectively.
|
||||
\fBmetacity\fP is a minimal X window manager aimed at nontechnical users and is designed to integrate well with the GNOME desktop. \fBmetacity\fP lacks some features that may be expected by traditional UNIX or other technical users; these users may want to investigate other available window managers for use with GNOME or standalone.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B \-\-display=DISPLAY
|
||||
Connect to X display \fIDISPLAY\fP.
|
||||
.TP
|
||||
.B \-\-replace
|
||||
a window manager which is running is replaced by \fBmetacity\fP. Users are encouraged to change the GNOME window manager by running the new WM with the --replace or -replace option, and subsequently saving the session.
|
||||
.TP
|
||||
.B \-\-sm\-client\-id=ID
|
||||
Specify a session management \fIID\fP.
|
||||
.TP
|
||||
.B \-\-sm\-disable
|
||||
Disable the session management.
|
||||
.TP
|
||||
.B \-\-sm\-save\-file=FILENAME
|
||||
Load a session from \fIFILENAME\fP.
|
||||
.TP
|
||||
.B \-\-version
|
||||
Print the version number.
|
||||
.TP
|
||||
.B \-?, \-\-help
|
||||
Show summary of options.
|
||||
.SH CONFIGURATION
|
||||
\fBmetacity\fP configuration can be found under \fIPreferences\fP->\fIWindows\fP and \fIPreferences\fP->\fIKeyboard Shortcuts\fP on the menu-panel. Advanced configuration can be achieved directly through gconf editing (gconf-editor or gconftool-2).
|
||||
.SH SEE ALSO
|
||||
.BR metacity-message (1)
|
||||
.SH AUTHOR
|
||||
The original manual page was written by Thom May <thom@debian.org>. It was updated by Akira TAGOH <tagoh@debian.org>
|
||||
for the Debian GNU/Linux system (with permission to use by others), and then updated by Luke Morton and Philip O'Brien
|
||||
for inclusion in metacity.
|
54
doc/strut-and-related-updating.txt
Normal file
54
doc/strut-and-related-updating.txt
Normal file
@@ -0,0 +1,54 @@
|
||||
How updates happen for struts, workareas, and screen/xinerama regions/edges:
|
||||
One of three things causes meta_window_update_struts to be called
|
||||
(a) initial window map (window.c:meta_window_new_with_attrs())
|
||||
(b) update of _net_wm_strut* properties (window.c:process_property_notify())
|
||||
(c) screen resizes (e.g. via xrandr; from screen.c:meta_screen_resize_func())
|
||||
meta_window_update_struts (MetaWindow *window)
|
||||
- Gets new list of struts from window properties
|
||||
- Makes sure window doesn't single-handedly fill the screen
|
||||
- records new struts if different and calls invalidate_work_areas()
|
||||
invalidate_work_areas ()
|
||||
- Calls meta_workspace_invalidate_work_area() for each workspace it's on
|
||||
meta_workspace_invalidate_work_area()
|
||||
- Cleans out all strut lists
|
||||
- queues all windows for resizing
|
||||
- Calls meta_screen_queue_workarea_recalc (workspace->screen);
|
||||
meta_screen_queue_workarea_recalc()
|
||||
- Adds set_work_area_idle_func() as an idle handler
|
||||
|
||||
set_work_area_idle_func()
|
||||
- Calls set_work_area_hint()
|
||||
set_work_area_hint()
|
||||
- Calls meta_workspace_get_work_area_all_xineramas()
|
||||
- Sets _NET_WORKAREA property
|
||||
meta_workspace_get_work_area_all_xineramas()
|
||||
- Calls ensure_work_areas_validated()
|
||||
ensure_work_areas_validated()
|
||||
- Loops over xineramas
|
||||
- Loops over windows, then struts:
|
||||
- Adds struts to list first time through xinerama loop
|
||||
- Find the amount of the strut on the given xinerama for <dir>_strut
|
||||
- Just max the amount of the strut with the all_<dir>_strut
|
||||
- Makes sure there's a non-empty xinerama workarea
|
||||
- Record the xinerama workarea
|
||||
- Make sure there's a non-empty screen workarea
|
||||
- Record the screen workarea
|
||||
- Cache the spanning rects for the screen and xinerama regions
|
||||
- Cache the screen and xinerama edges
|
||||
|
||||
Alternatively to all the above, if the idle function for the screen
|
||||
has not yet fired, constraints.c:setup_constraint_info() can call
|
||||
either workspace.c:meta_workspace_get_onscreen_region() or
|
||||
workspace.c:meta_workspace_get_onxinerama_region() which in turn
|
||||
call workspace.c:ensure_work_areas_validated().
|
||||
|
||||
Meaning of related functions that might be difficult to tell apart:
|
||||
screen.c:meta_screen_get_current_xinerama ()
|
||||
- Finds out which xinerama the mouse is on with an XQueryPointer
|
||||
window.c:meta_window_get_work_area_current_xinerama()
|
||||
window.c:meta_window_get_work_area_for_xinerama()
|
||||
window.c:meta_window_get_work_area_all_xineramas ()
|
||||
- All three are for finding the intersection of workareas across
|
||||
multiple workspaces so that placement of windows can be
|
||||
determined in such a way that they remain in the workarea for
|
||||
all workspaces that they are on.
|
956
po/ChangeLog
956
po/ChangeLog
@@ -1,3 +1,959 @@
|
||||
2006-04-21 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2006-04-20 Ankit Patel <ankit644@yahoo.com>
|
||||
|
||||
* gu.po: Updated Gujarati Translation.
|
||||
|
||||
2006-04-19 Ankit Patel <ankit644@yahoo.com>
|
||||
|
||||
* gu.po: Updated Gujarati Translation.
|
||||
|
||||
2006-04-17 Clytie Siddall <clytie@riverland.net.au>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2006-04-17 Josep Puigdemont Casamajó <josep.puigdemont@gmail.com>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2006-04-16 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2006-04-14 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2006-04-14 Raphael Higino <raphaelh@cvs.gnome.org>
|
||||
|
||||
* pt_BR.po: Updated Brazilian Portuguese translation.
|
||||
|
||||
2006-04-14 Åsmund Skjæveland <aasmunds@fys.uio.no>
|
||||
|
||||
* nn.po: Updated Norwegian Nynorsk translation.
|
||||
|
||||
2006-04-14 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2006-04-14 Wouter Bolsterlee <uws+gnome@xs4all.nl>
|
||||
|
||||
* nl.po: Translation updated by Wouter Bolsterlee.
|
||||
|
||||
2006-04-14 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Alexander Shopov <ash@contact.bg>
|
||||
|
||||
2006-04-09 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Michiel Sikkes.
|
||||
|
||||
2006-04-02 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
* no.po: Same.
|
||||
|
||||
2006-03-24 Gora Mohanty <gmohanty@cvs.gnome.org>
|
||||
|
||||
* or.po: Updated Oriya translation.
|
||||
|
||||
2006-03-21 Priit Laes <amd@store20.com>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2006-03-17 Priit Laes <amd@store20.com>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2006-03-15 Žygimantas Beručka <zygis@gnome.org>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2006-03-14 Mugurel Tudor <mugurelu@gnome.ro>
|
||||
|
||||
* ro.po: Updated Romanian translation
|
||||
|
||||
2006-03-14 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2006-03-13 Jordi Mallach <jordi@sindominio.net>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2006-03-13 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Tino Meinen.
|
||||
|
||||
2006-03-13 Danilo Šegan <danilo@gnome.org>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation.
|
||||
|
||||
2006-03-13 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Alexander Shopov <ash@contact.bg>
|
||||
|
||||
2006-03-13 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2006-03-13 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2006-03-13 Maxim Dziumanenko <mvd@mylinux.ua>
|
||||
|
||||
* uk.po: Updated Ukrainian translation.
|
||||
|
||||
2006-03-13 Rajesh Ranjan <rranjan@redhat.com>
|
||||
|
||||
* hi.po: Updated Hindi Translation.
|
||||
|
||||
2006-03-13 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation (merged from gnome-2-14 branch).
|
||||
|
||||
2006-03-13 Satoru SATOH <ss@gnome.gr.jp>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2006-03-13 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
* pt.po: Updated Portuguese translation.
|
||||
|
||||
2006-03-12 Guilherme de S. Pastore <gpastore@gnome.org>
|
||||
|
||||
* pt_BR.po: Updated Brazilian Portuguese translation.
|
||||
|
||||
2006-03-13 Frank Arnold <farnold@cvs.gnome.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2006-03-13 Daniel Nylander <po@danielnylander.se>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2006-03-12 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
||||
|
||||
* gl.po: Updated Galician Translation.
|
||||
|
||||
2006-03-12 Raphael Higino <raphaelh@cvs.gnome.org>
|
||||
|
||||
* pt_BR.po: Updated Brazilian Portuguese translation.
|
||||
|
||||
2006-03-12 Priit Laes <amd@store20.com>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2006-03-12 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation by Petr Tomeš.
|
||||
|
||||
2006-03-12 Roozbeh Pournader <roozbeh@farsiweb.info>
|
||||
|
||||
* fa.po: Updated Persian translation by Meelad Zakaria,
|
||||
Elnaz Sarbar, and Farzaneh Sarafraz.
|
||||
|
||||
2006-03-09 Hendrik Richter <hendrikr@gnome.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2006-03-09 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2006-03-08 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2006-03-08 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Hungarian translation updated.
|
||||
|
||||
2006-03-06 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2006-03-06 Daniel Nylander <po@danielnylander.se>
|
||||
|
||||
* sv.po: Updated Swedish translation
|
||||
|
||||
2006-03-05 Mugurel Tudor <mugurelu@gnome.ro>
|
||||
|
||||
* ro.po: Updated Romanian translation
|
||||
|
||||
2006-03-05 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Alexander Shopov <ash@contact.bg>
|
||||
|
||||
2006-03-04 Hendrik Richter <hendrikr@gnome.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2006-03-03 Maxim Dziumanenko <mvd@mylinux.ua>
|
||||
|
||||
* uk.po: Updated Ukrainian translation.
|
||||
|
||||
2006-03-02 Hendrik Richter <hendrikr@gnome.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2006-03-02 Hendrik Richter <hendrikr@gnome.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2006-03-02 Rhys Jones <rhys@sucs.org>
|
||||
|
||||
* cy.po: Updated Welsh translation.
|
||||
|
||||
2006-03-01 Leonid Kanter <leon@asplinux.ru>
|
||||
|
||||
* ru.po: Updated Russian translation
|
||||
|
||||
2006-03-01 Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2006-02-27 Leonid Kanter <leon@asplinux.ru>
|
||||
|
||||
* ru.po: Updated Russian translation
|
||||
|
||||
2006-02-27 Lasse Bang Mikkelsen <lbm@fatalerror.dk>
|
||||
|
||||
* da.po: Updated Danish translation.
|
||||
|
||||
2006-02-25 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2006-02-23 Inaki Larranaga <dooteo@euskalgnu.org>
|
||||
|
||||
* eu.po: Updated Basque translation.
|
||||
|
||||
2006-02-23 Clytie Siddall <clytie@riverland.net.au>
|
||||
|
||||
* ka.po: Added Georgian translation by Alexander Didebulidze <didebuli@in.tum.de>.
|
||||
|
||||
2006-02-23 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
* pt.po: Updated Portuguese translation.
|
||||
|
||||
2006-02-23 Žygimantas Beručka <zygis@gnome.org>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2006-02-21 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Tino Meinen.
|
||||
|
||||
2006-02-21 Clytie Siddall <clytie@riverland.net.au>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2006-02-21 Slobodan D. Sredojevic <slobo@akrep.be>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation
|
||||
|
||||
2006-02-21 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
||||
|
||||
* gl.po: Updated Galician Translation.
|
||||
|
||||
2006-02-01 Ankit Patel <ankit644@yahoo.com>
|
||||
|
||||
* gu.po: Updated Gujarati Translation.
|
||||
|
||||
2006-02-20 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2006-02-20 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2006-02-18 Takeshi AIHANA <takeshi.aihana@gmail.com>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2006-02-18 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2006-02-18 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
* no.po: Same.
|
||||
|
||||
2006-02-13 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2006-02-06 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2006-02-03 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
* no.po: Same.
|
||||
|
||||
2006-01-31 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Tino Meinen.
|
||||
|
||||
2006-01-31 Slobodan D. Sredojevic <slobo@akrep.be>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation
|
||||
|
||||
2006-01-28 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2006-01-27 Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2006-01-26 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2006-01-26 Evandro Fernandes Giovanini <evandrofg@ig.com.br>
|
||||
|
||||
* pt_BR.po: Updated Brazilian Portuguese translation.
|
||||
|
||||
2006-01-24 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
||||
|
||||
* gl.po: Updated Galician Translation.
|
||||
|
||||
2006-01-23 Ankit Patel <ankit644@yahoo.com>
|
||||
|
||||
* gu.po: Updated Gujarati Translation.
|
||||
|
||||
2006-01-23 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2006-01-22 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
* no.po: Same.
|
||||
|
||||
2006-01-21 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2006-01-22 Clytie Siddall <clytie@riverland.net.au>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2006-01-21 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2006-01-21 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish tranlation.
|
||||
|
||||
2006-01-21 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
||||
|
||||
* gl.po: Updated Galician Translation.
|
||||
|
||||
2006-01-20 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Tino Meinen.
|
||||
|
||||
2006-01-18 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2006-01-17 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
||||
|
||||
* gl.po: Updated Galician Translation.
|
||||
|
||||
2006-01-16 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2006-01-15 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2006-01-15 Takeshi AIHANA <takeshi.aihana@gmail.com>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2006-01-11 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2006-01-11 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2006-01-11 Ankit Patel <ankit644@yahoo.com>
|
||||
|
||||
* gu.po: Updated Gujarati Translation.
|
||||
|
||||
2006-01-11 Clytie Siddall <clytie@riverland.net.au>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2005-12-30 Clytie Siddall <clytie@riverland.net.au>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2006-01-06 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
* no.po: Same
|
||||
|
||||
2005-12-31 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2005-12-25 Kang Jeong-Hee <Keizi@mail.co.kr>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2005-12-11 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2005-12-11 Ankit Patel <ankit644@yahoo.com>
|
||||
|
||||
* gu.po: Updated Gujarati Translation.
|
||||
|
||||
2005-12-03 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2005-12-03 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
* no.po: Same
|
||||
|
||||
2005-11-22 Marcel Telka <marcel@telka.sk>
|
||||
|
||||
* sk.po: Updated Slovak translation.
|
||||
|
||||
2005-11-22 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Alexander Shopov <ash@contact.bg>
|
||||
|
||||
2005-11-22 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2005-11-21 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2005-11-20 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2005-11-20 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
||||
|
||||
* gl.po: Updated Galician Translation.
|
||||
|
||||
2005-11-20 Takeshi AIHANA <aihana@gnome.gr.jp>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2005-11-17 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Wouter Bolsterlee.
|
||||
|
||||
2005-11-13 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2005-11-03 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2005-10-28 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2005-10-28 Takeshi AIHANA <aihana@gnome.gr.jp>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2005-10-27 Erdal Ronahi <erdal.ronahi@gmail.com>
|
||||
|
||||
* ku.po: Added Kurdish translation.
|
||||
|
||||
2005-10-17 Marcel Telka <marcel@telka.sk>
|
||||
|
||||
* sk.po: Updated Slovak translation.
|
||||
|
||||
2005-10-15 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated.
|
||||
|
||||
2005-10-14 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated.
|
||||
|
||||
2005-10-14 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2005-10-10 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2005-10-04 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Alexander Shopov <ash@contact.bg>
|
||||
|
||||
2005-10-04 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2005-10-04 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2005-10-03 Runa Bhattacharjee <runa@bengalinux.org>
|
||||
* bn.po: Updated Bengali Translation by Mahay Alam Khan <makl10n@yahoo.com>
|
||||
|
||||
2005-10-02 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* sv.po: Reverted unauthorized changes made by
|
||||
user 'kloczek'.
|
||||
|
||||
2005-09-26 Alessio Frusciante <algol@firenze.linux.it>
|
||||
|
||||
* it.po: Updated Italian translation by
|
||||
Luca Ferretti <elle.uca@infinito.it>.
|
||||
|
||||
2005-09-24 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2005-09-21 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2005-09-20 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2005-09-16 Clytie Siddall <clytie@riverland.net.au>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2005-09-08 Inaki Larranaga <dooteo@euskalgnu.org>
|
||||
|
||||
* eu.po: Updated Basque translation.
|
||||
|
||||
2005-09-07 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2005-09-04 Danilo Šegan <danilo@gnome.org>
|
||||
|
||||
* hy.po: Added Armenian translation by Norayr Chilingaryan
|
||||
<asprayama@yahoo.com>.
|
||||
|
||||
2005-09-04 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
||||
|
||||
* gl.po: Updated Galician Translation.
|
||||
|
||||
2005-09-03 Danilo Šegan <danilo@gnome.org>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated.
|
||||
|
||||
2005-09-02 Leonid Kanter <leon@asplinux.ru>
|
||||
|
||||
* ru.po: Updated Russian translation
|
||||
|
||||
2005-09-01 Baris Cicek <baris@teamforce.name.tr>
|
||||
|
||||
* tr.po: Updated Turkish Translation
|
||||
|
||||
2005-08-31 Žygimantas Beručka <zygis@gnome.org>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2005-08-30 Hendrik Richter <hendi@gnome-de.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2005-08-30 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation by Young-Ho Cha.
|
||||
|
||||
2005-08-29 Telsa Gwynne <hobbit@aloss.ukuu.org.uk>
|
||||
|
||||
* cy.po: Updated Welsh translation.
|
||||
|
||||
2005-08-28 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation.
|
||||
|
||||
2005-08-25 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Michiel Sikkes.
|
||||
|
||||
2005-08-20 Josep Puigdemont i Casamajó <josep.puigdemont@gmail.com>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2005-08-19 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2005-08-17 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2005-08-15 Maxim Dziumanenko <mvd@mylinux.ua>
|
||||
|
||||
* uk.po: Updated Ukrainian translation.
|
||||
|
||||
2005-08-15 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Hungarian translation updated.
|
||||
|
||||
2005-08-15 Mugurel Tudor <mugurelu@gnome.ro>
|
||||
|
||||
* ro.po: Updated Romanian translation
|
||||
|
||||
2005-08-14 Mohammad DAMT <mdamt@gnome.org>
|
||||
|
||||
* id.po: Updated Indonesian translation
|
||||
|
||||
2005-08-13 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2005-08-11 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
* pt.po: Updated Portuguese translation.
|
||||
|
||||
2005-08-10 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Rostislav Raykov <zbrox@i-space.org>
|
||||
|
||||
2005-08-02 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
|
||||
|
||||
* zh_TW.po: Updated Traditional Chinese translation.
|
||||
|
||||
2005-07-31 Yair Hershkovitz <yairhr@gmail.com>
|
||||
|
||||
* he.po: Updated Hebrew translation by Yuval Tanai.
|
||||
|
||||
2005-07-28 Artur Flinta <aflinta@cvs.gnome.org>
|
||||
|
||||
* pl.po: Updated Polish translation by GNOME PL Team.
|
||||
|
||||
2005-07-26 Raphael Higino <raphaelh@cvs.gnome.org>
|
||||
|
||||
* pt_BR.po: Converted to UTF-8.
|
||||
|
||||
2005-07-26 Raphael Higino <raphaelh@cvs.gnome.org>
|
||||
|
||||
* pt_BR.po: Updated Brazilian Portuguese translation.
|
||||
|
||||
2005-07-24 Ilkka Tuohela <hile@iki.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2005-07-24 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Updated Norwegian bokmål translation.
|
||||
* no.po: Same
|
||||
|
||||
2005-07-23 Clytie Siddall <clytie@riverland.net.au>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2005-07-23 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2005-07-21 Ankit Patel <ankit644@yahoo.com>
|
||||
|
||||
* gu.po: Updated Gujarati Translation.
|
||||
|
||||
2005-07-20 Marcel Telka <marcel@telka.sk>
|
||||
|
||||
* sk.po: Updated Slovak translation.
|
||||
|
||||
2005-07-18 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2005-07-17 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation.
|
||||
|
||||
2005-07-17 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2005-07-17 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2005-07-17 Nikos Charonitakis <charosn@her.forthenet.gr>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2005-07-16 Takeshi AIHANA <aihana@gnome.gr.jp>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2005-07-15 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
||||
|
||||
* gl.po: Updated Galician Translation.
|
||||
|
||||
2005-07-14 Yair Hershkovitz <yairhr@gmail.com>
|
||||
|
||||
* he.po: Updated Hebrew translation.
|
||||
|
||||
2005-07-14 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2005-07-13 Marcel Telka <marcel@telka.sk>
|
||||
|
||||
* sk.po: Updated Slovak translation.
|
||||
|
||||
2005-07-12 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2005-07-08 Clytie Siddall <clytie@riverland.net.au>
|
||||
|
||||
* vi.po: Updated Vietnamese translation.
|
||||
|
||||
2004-07-06 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* gl.po: Updated Galician translation by
|
||||
Ignacio Casal Quinteiro <nacho.resa@gmail.com>.
|
||||
|
||||
2005-07-04 Hendrik Richter <hendi@gnome-de.org>
|
||||
|
||||
* de.po: Fixed German translation by
|
||||
Jens Seidel <jensseidel@users.sf.net>.
|
||||
|
||||
2005-06-23 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
|
||||
|
||||
* gl.po: Updated Galician translation.
|
||||
|
||||
2005-06-22 Abel Cheung <maddog@linuxhall.org>
|
||||
|
||||
* zh_TW.po: Fix language team reference.
|
||||
|
||||
2005-06-05 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2005-06-01 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated.
|
||||
|
||||
2005-05-19 Nikos Charonitakis <charosn@her.forthnet.gr>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2005-05-11 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek Translation.
|
||||
|
||||
2005-05-10 Adi Attar <aattar@cvs.gnome.org>
|
||||
|
||||
* xh.po: Updated Xhosa translation.
|
||||
|
||||
2005-04-28 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek translation
|
||||
|
||||
2005-04-25 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated by Ivar Smolin.
|
||||
|
||||
2005-04-17 Pauli Virtanen <pauli.virtanen@hut.fi>
|
||||
|
||||
* fi.po: Fix a small mistranslation.
|
||||
|
||||
2005-04-09 Christopher Orr <chris@protactin.co.uk>
|
||||
|
||||
* en_GB.po: Updated British English translation.
|
||||
|
||||
2005-04-06 Roozbeh Pournader <roozbeh@farsiweb.info>
|
||||
|
||||
* fa.po: Updated Persian translation by
|
||||
Elnaz Sarbar <elnaz@farsiweb.info>.
|
||||
|
||||
2005-04-05 Pawan Chitrakar <pawan@nplinux.org>
|
||||
|
||||
* ne.po: Added Nepali Translation.
|
||||
|
||||
2005-04-03 Gabor Kelemen <kelemeng@gnome.hu>
|
||||
|
||||
* hu.po: Hungarian translation updated.
|
||||
|
||||
2005-03-31 Steve Murphy <murf@e-tools.com>
|
||||
|
||||
* rw.po: Added Kinyarwanda translation.
|
||||
|
||||
2005-03-29 Adi Attar <aattar@cvs.gnome.org>
|
||||
|
||||
* xh.po: Updated Xhosa translation.
|
||||
|
||||
2005-03-17 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2005-03-12 Baris Cicek <baris@teamforce.name.tr>
|
||||
|
||||
* tr.po: Updated Turkish Translation
|
||||
|
||||
2005-03-10 Adi Attar <aattar@cvs.gnome.org>
|
||||
|
||||
* xh.po: Added Xhosa translation.
|
||||
|
||||
2005-03-07 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Reinout van Schouwen.
|
||||
|
||||
2005-03-07 Mugurel Tudor <mugurelu@go.ro>
|
||||
|
||||
* ro.po: Updated Romanian translation.
|
||||
|
||||
2005-03-04 Laszlo Dvornik <dvornik@gnome.hu>
|
||||
|
||||
* hu.po: Hungarian translation updated by Gabor Kelemen.
|
||||
|
||||
2005-03-03 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Vladimir Petkov <vpetkov@i-space.org>
|
||||
|
||||
2005-03-03 Žygimantas Beručka <uid0@akl.lt>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2005-03-02 Danilo Šegan <dsegan@gmx.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation.
|
||||
|
||||
2005-03-02 Abel Cheung <maddog@linuxhall.org>
|
||||
|
||||
* zh_TW.po: Updated traditional Chinese translation from GNOME HK Team
|
||||
|
||||
2005-02-28 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Reinout van Schouwen.
|
||||
|
||||
2005-02-27 Alessio Frusciante <algol@firenze.linux.it>
|
||||
|
||||
* it.po: Updated Italian translation by
|
||||
Luca Ferretti <elle.uca@infinito.it>.
|
||||
|
||||
2005-02-24 Artur Flinta <aflinta@cvs.gnome.org>
|
||||
|
||||
* pl.po: Updated Polish translation by GNOME PL Team.
|
||||
|
||||
2005-02-24 Ankit Patel <ankit644@yahoo.com>
|
||||
|
||||
* gu.po: Updated Gujarati Translation.
|
||||
|
||||
2005-02-23 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Michiel Sikkes.
|
||||
|
||||
2004-02-22 Roozbeh Pournader <roozbeh@farsiweb.info>
|
||||
|
||||
* fa.po: Updated Persian translation by
|
||||
Elnaz Sarbar <elnaz@farsiweb.info>.
|
||||
|
||||
2005-02-22 Raphael Higino <raphaelh@cvs.gnome.org>
|
||||
|
||||
* pt_BR.po: Updated Brazilian Portuguese translation.
|
||||
|
||||
2005-02-21 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation.
|
||||
|
||||
2005-02-21 Bastien Nocera <hadess@hadess.net>
|
||||
|
||||
* en_GB.po: the file is actually in UTF-8
|
||||
|
||||
2005-02-21 Martin Willemoes Hansen <mwh@sysrq.dk>
|
||||
|
||||
* da.po: Updated Danish translation.
|
||||
|
||||
2005-02-21 Priit Laes <plaes@cvs.gnome.org>
|
||||
|
||||
* et.po: Translation updated by Tõivo Leedjärv.
|
||||
|
||||
2005-02-18 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2005-02-18 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
* pt.po: Updated Portuguese translation.
|
||||
|
||||
2005-02-17 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Tino Meinen.
|
||||
|
||||
2005-02-17 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2005-02-16 Jordi Mallach <jordi@sindominio.net>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2005-02-15 Maxim Dziumanenko <mvd@mylinux.com.ua>
|
||||
|
||||
* uk.po: Updated Ukrainian translation.
|
||||
|
||||
2005-02-15 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: s/applikasjon/program
|
||||
* no.po: Same
|
||||
|
||||
2005-02-12 Marcel Telka <marcel@telka.sk>
|
||||
|
||||
* sk.po: Updated Slovak translation.
|
||||
|
||||
2005-02-12 Takeshi AIHANA <aihana@gnome.gr.jp>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2005-02-11 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2005-02-10 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2005-02-08 Leonid Kanter <leon@asplinux.ru>
|
||||
|
||||
* ru.po: Updated Russian translation
|
||||
|
||||
2005-02-08 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Update
|
||||
* no.po: Update
|
||||
|
||||
2005-02-07 David Lodge <dave@cirt.net>
|
||||
|
||||
* en_GB.po: Updated British translation.
|
||||
|
71
po/LINGUAS
Normal file
71
po/LINGUAS
Normal file
@@ -0,0 +1,71 @@
|
||||
# please keep this list sorted alphabetically
|
||||
#
|
||||
am
|
||||
ar
|
||||
az
|
||||
be
|
||||
bg
|
||||
bn
|
||||
bs
|
||||
ca
|
||||
cs
|
||||
cy
|
||||
da
|
||||
de
|
||||
el
|
||||
en_CA
|
||||
en_GB
|
||||
es
|
||||
et
|
||||
eu
|
||||
fa
|
||||
fi
|
||||
fr
|
||||
ga
|
||||
gl
|
||||
gu
|
||||
he
|
||||
hi
|
||||
hr
|
||||
hu
|
||||
hy
|
||||
id
|
||||
is
|
||||
it
|
||||
ja
|
||||
ko
|
||||
ku
|
||||
lt
|
||||
lv
|
||||
mk
|
||||
ml
|
||||
mn
|
||||
ms
|
||||
nb
|
||||
ne
|
||||
nl
|
||||
nn
|
||||
or
|
||||
pa
|
||||
pl
|
||||
pt
|
||||
pt_BR
|
||||
ro
|
||||
ru
|
||||
rw
|
||||
sl
|
||||
sk
|
||||
sq
|
||||
sr
|
||||
sr@Latn
|
||||
sv
|
||||
ta
|
||||
th
|
||||
tk
|
||||
tr
|
||||
uk
|
||||
vi
|
||||
wa
|
||||
xh
|
||||
zh_CN
|
||||
zh_TW
|
1106
po/en_CA.po
1106
po/en_CA.po
File diff suppressed because it is too large
Load Diff
2701
po/en_GB.po
2701
po/en_GB.po
File diff suppressed because it is too large
Load Diff
2985
po/pt_BR.po
2985
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
1523
po/sr@Latn.po
1523
po/sr@Latn.po
File diff suppressed because it is too large
Load Diff
1127
po/zh_CN.po
1127
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
1252
po/zh_TW.po
1252
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@@ -39,10 +39,16 @@ workspace wrapping:
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=89315
|
||||
|
||||
raise windows on click:
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=326156
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=86108
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=115072
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=115753
|
||||
|
||||
Pointer warping:
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=134353
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=134352
|
||||
(Think about tasklist & window selector too; this would be a very bad idea)
|
||||
|
||||
|
||||
Tracking bugs
|
||||
====
|
||||
@@ -60,3 +66,5 @@ moving/resizing (constraints): http://bugzilla.gnome.org/show_bug.cgi?id=155458
|
||||
window placement: http://bugzilla.gnome.org/show_bug.cgi?id=155460
|
||||
logout/system-monitor keys: http://bugzilla.gnome.org/show_bug.cgi?id=155462
|
||||
modal dialogs: http://bugzilla.gnome.org/show_bug.cgi?id=164841
|
||||
multi-head sans xinerama: http://bugzilla.gnome.org/show_bug.cgi?id=324772
|
||||
xinerama: http://bugzilla.gnome.org/show_bug.cgi?id=324773
|
||||
|
@@ -5,6 +5,7 @@ Makefile
|
||||
metacity
|
||||
metacity-theme-viewer
|
||||
metacity-dialog
|
||||
testboxes
|
||||
testgradient
|
||||
inlinepixbufs.h
|
||||
metacity.desktop
|
||||
|
@@ -13,7 +13,11 @@ metacity_SOURCES= \
|
||||
async-getprop.h \
|
||||
bell.h \
|
||||
bell.c \
|
||||
boxes.h \
|
||||
boxes.c \
|
||||
common.h \
|
||||
c-screen.c \
|
||||
c-screen.h \
|
||||
compositor.c \
|
||||
compositor.h \
|
||||
constraints.c \
|
||||
@@ -25,6 +29,8 @@ metacity_SOURCES= \
|
||||
display.h \
|
||||
draw-workspace.c \
|
||||
draw-workspace.h \
|
||||
edge-resistance.c \
|
||||
edge-resistance.h \
|
||||
effects.c \
|
||||
effects.h \
|
||||
errors.c \
|
||||
@@ -66,6 +72,8 @@ metacity_SOURCES= \
|
||||
screen.h \
|
||||
session.c \
|
||||
session.h \
|
||||
spring-model.c \
|
||||
spring-model.h \
|
||||
stack.c \
|
||||
stack.h \
|
||||
tabpopup.c \
|
||||
@@ -94,6 +102,8 @@ metacity_SOURCES= \
|
||||
# metacity proper will be compiled with different names.
|
||||
libmetacity_private_la_CFLAGS =
|
||||
libmetacity_private_la_SOURCES= \
|
||||
boxes.c \
|
||||
boxes.h \
|
||||
gradient.c \
|
||||
gradient.h \
|
||||
preview-widget.c \
|
||||
@@ -112,6 +122,7 @@ libmetacity_private_la_LIBADD = @METACITY_LIBS@
|
||||
libmetacityincludedir = $(includedir)/metacity-1/metacity-private
|
||||
|
||||
libmetacityinclude_HEADERS = \
|
||||
boxes.h \
|
||||
common.h \
|
||||
gradient.h \
|
||||
preview-widget.h \
|
||||
@@ -133,11 +144,13 @@ metacity_LDADD=@METACITY_LIBS@ $(EFENCE)
|
||||
metacity_theme_viewer_LDADD= @METACITY_LIBS@ libmetacity-private.la
|
||||
metacity_dialog_LDADD=@METACITY_LIBS@
|
||||
|
||||
testboxes_SOURCES=util.h util.c boxes.h boxes.c testboxes.c
|
||||
testgradient_SOURCES=gradient.h gradient.c testgradient.c
|
||||
testasyncgetprop_SOURCES=async-getprop.h async-getprop.c testasyncgetprop.c
|
||||
|
||||
noinst_PROGRAMS=testgradient testasyncgetprop
|
||||
noinst_PROGRAMS=testboxes testgradient testasyncgetprop
|
||||
|
||||
testboxes_LDADD= @METACITY_LIBS@
|
||||
testgradient_LDADD= @METACITY_LIBS@
|
||||
testasyncgetprop_LDADD= @METACITY_LIBS@
|
||||
|
||||
|
@@ -66,7 +66,7 @@ struct _AgGetPropertyTask
|
||||
|
||||
unsigned long n_items;
|
||||
unsigned long bytes_after;
|
||||
unsigned char *data;
|
||||
char *data;
|
||||
|
||||
Bool have_reply;
|
||||
};
|
||||
@@ -316,7 +316,7 @@ async_get_property_handler (Display *dpy,
|
||||
/* there's padding to word boundary */
|
||||
netbytes = ALIGN_VALUE (nbytes, 4);
|
||||
if (nbytes + 1 > 0 &&
|
||||
(task->data = (unsigned char *) Xmalloc ((unsigned)nbytes + 1)))
|
||||
(task->data = (char *) Xmalloc ((unsigned)nbytes + 1)))
|
||||
{
|
||||
#ifdef DEBUG_SPEW
|
||||
printf ("%s: already read %d bytes using %ld, more eating %ld more\n",
|
||||
@@ -334,7 +334,7 @@ async_get_property_handler (Display *dpy,
|
||||
netbytes = reply->nItems << 1;
|
||||
netbytes = ALIGN_VALUE (netbytes, 4); /* align to word boundary */
|
||||
if (nbytes + 1 > 0 &&
|
||||
(task->data = (unsigned char *) Xmalloc ((unsigned)nbytes + 1)))
|
||||
(task->data = (char *) Xmalloc ((unsigned)nbytes + 1)))
|
||||
{
|
||||
#ifdef DEBUG_SPEW
|
||||
printf ("%s: already read %d bytes using %ld more, eating %ld more\n",
|
||||
@@ -351,7 +351,7 @@ async_get_property_handler (Display *dpy,
|
||||
nbytes = reply->nItems * sizeof (long);
|
||||
netbytes = reply->nItems << 2; /* wire size is always 32 bits though */
|
||||
if (nbytes + 1 > 0 &&
|
||||
(task->data = (unsigned char *) Xmalloc ((unsigned)nbytes + 1)))
|
||||
(task->data = (char *) Xmalloc ((unsigned)nbytes + 1)))
|
||||
{
|
||||
#ifdef DEBUG_SPEW
|
||||
printf ("%s: already read %d bytes using %ld more, eating %ld more\n",
|
||||
@@ -363,9 +363,9 @@ async_get_property_handler (Display *dpy,
|
||||
*/
|
||||
if (sizeof (long) == 8)
|
||||
{
|
||||
unsigned char *netdata;
|
||||
unsigned char *lptr;
|
||||
unsigned char *end_lptr;
|
||||
char *netdata;
|
||||
char *lptr;
|
||||
char *end_lptr;
|
||||
|
||||
/* Store the 32-bit values in the end of the array */
|
||||
netdata = task->data + nbytes / 2;
|
||||
@@ -522,7 +522,6 @@ ag_task_create (Display *dpy,
|
||||
{
|
||||
AgGetPropertyTask *task;
|
||||
xGetPropertyReq *req;
|
||||
xError error;
|
||||
AgPerDisplayData *dd;
|
||||
|
||||
/* Fire up our request */
|
||||
@@ -543,8 +542,6 @@ ag_task_create (Display *dpy,
|
||||
req->longOffset = offset;
|
||||
req->longLength = length;
|
||||
|
||||
error.sequenceNumber = dpy->request;
|
||||
|
||||
/* Queue up our async task */
|
||||
task = Xcalloc (1, sizeof (AgGetPropertyTask));
|
||||
if (task == NULL)
|
||||
@@ -587,7 +584,7 @@ ag_task_get_reply_and_free (AgGetPropertyTask *task,
|
||||
int *actual_format,
|
||||
unsigned long *nitems,
|
||||
unsigned long *bytesafter,
|
||||
unsigned char **prop)
|
||||
char **prop)
|
||||
{
|
||||
Display *dpy;
|
||||
|
||||
|
@@ -45,7 +45,7 @@ Status ag_task_get_reply_and_free (AgGetPropertyTask *task,
|
||||
int *actual_format,
|
||||
unsigned long *nitems,
|
||||
unsigned long *bytesafter,
|
||||
unsigned char **prop);
|
||||
char **prop);
|
||||
|
||||
Bool ag_task_have_reply (AgGetPropertyTask *task);
|
||||
Atom ag_task_get_property (AgGetPropertyTask *task);
|
||||
|
12
src/bell.c
12
src/bell.c
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2002 Sun Microsystems Inc.
|
||||
* Copyright (C) 2005, 2006 Elijah Newren
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -29,8 +30,8 @@ meta_bell_flash_screen (MetaDisplay *display,
|
||||
MetaScreen *screen)
|
||||
{
|
||||
Window root = screen->xroot;
|
||||
int width = screen->width;
|
||||
int height = screen->height;
|
||||
int width = screen->rect.width;
|
||||
int height = screen->rect.height;
|
||||
|
||||
if (screen->flash_window == None)
|
||||
{
|
||||
@@ -77,7 +78,12 @@ meta_bell_flash_screen (MetaDisplay *display,
|
||||
XFlush (display->xdisplay);
|
||||
XSync (display->xdisplay, False);
|
||||
XUnmapWindow (display->xdisplay, screen->flash_window);
|
||||
XFreeGC (display->xdisplay, gc);
|
||||
}
|
||||
|
||||
if (meta_prefs_get_focus_mode () != META_FOCUS_MODE_CLICK &&
|
||||
!display->mouse_mode)
|
||||
meta_display_increment_focus_sentinel (display);
|
||||
XFlush (display->xdisplay);
|
||||
}
|
||||
|
||||
@@ -246,5 +252,5 @@ void
|
||||
meta_bell_notify_frame_destroy (MetaFrame *frame)
|
||||
{
|
||||
if (frame->is_flashing)
|
||||
g_idle_remove_by_data (frame);
|
||||
g_source_remove_by_funcs_user_data (&g_timeout_funcs, frame);
|
||||
}
|
||||
|
1812
src/boxes.c
Normal file
1812
src/boxes.c
Normal file
File diff suppressed because it is too large
Load Diff
263
src/boxes.h
Normal file
263
src/boxes.h
Normal file
@@ -0,0 +1,263 @@
|
||||
/* Simple box operations */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2005, 2006 Elijah Newren
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_BOXES_H
|
||||
#define META_BOXES_H
|
||||
|
||||
#include <glib.h>
|
||||
#include "common.h"
|
||||
|
||||
typedef struct _MetaRectangle MetaRectangle;
|
||||
|
||||
struct _MetaRectangle
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int width;
|
||||
int height;
|
||||
};
|
||||
|
||||
#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 */
|
||||
#define BOX_BOTTOM(box) ((box).y + (box).height) /* One pixel past bottom */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
FIXED_DIRECTION_X = 1 << 0,
|
||||
FIXED_DIRECTION_Y = 1 << 1,
|
||||
} FixedDirections;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_EDGE_WINDOW,
|
||||
META_EDGE_XINERAMA,
|
||||
META_EDGE_SCREEN
|
||||
} MetaEdgeType;
|
||||
|
||||
typedef struct _MetaEdge MetaEdge;
|
||||
struct _MetaEdge
|
||||
{
|
||||
MetaRectangle rect; /* width or height should be 1 */
|
||||
MetaDirection side_type; /* should only have 1 of the 4 directions set */
|
||||
MetaEdgeType edge_type;
|
||||
};
|
||||
|
||||
/* Output functions -- note that the output buffer had better be big enough:
|
||||
* rect_to_string: RECT_LENGTH
|
||||
* region_to_string: (RECT_LENGTH+strlen(separator_string)) *
|
||||
* g_list_length (region)
|
||||
* edge_to_string: EDGE_LENGTH
|
||||
* edge_list_to_...: (EDGE_LENGTH+strlen(separator_string)) *
|
||||
* g_list_length (edge_list)
|
||||
*/
|
||||
#define RECT_LENGTH 27
|
||||
#define EDGE_LENGTH 37
|
||||
char* meta_rectangle_to_string (const MetaRectangle *rect,
|
||||
char *output);
|
||||
char* meta_rectangle_region_to_string (GList *region,
|
||||
const char *separator_string,
|
||||
char *output);
|
||||
char* meta_rectangle_edge_to_string (const MetaEdge *edge,
|
||||
char *output);
|
||||
char* meta_rectangle_edge_list_to_string (
|
||||
GList *edge_list,
|
||||
const char *separator_string,
|
||||
char *output);
|
||||
|
||||
/* Function to make initializing a rect with a single line of code easy */
|
||||
MetaRectangle meta_rect (int x, int y, int width, int height);
|
||||
|
||||
/* Basic comparison functions */
|
||||
int meta_rectangle_area (const MetaRectangle *rect);
|
||||
gboolean meta_rectangle_intersect (const MetaRectangle *src1,
|
||||
const MetaRectangle *src2,
|
||||
MetaRectangle *dest);
|
||||
gboolean meta_rectangle_equal (const MetaRectangle *src1,
|
||||
const MetaRectangle *src2);
|
||||
|
||||
/* overlap is similar to intersect but doesn't provide location of
|
||||
* intersection information.
|
||||
*/
|
||||
gboolean meta_rectangle_overlap (const MetaRectangle *rect1,
|
||||
const MetaRectangle *rect2);
|
||||
|
||||
/* vert_overlap means ignore the horizontal location and ask if the
|
||||
* vertical parts overlap. An alternate way to think of it is "Does there
|
||||
* exist a way to shift either rect horizontally so that the two rects
|
||||
* overlap?" horiz_overlap is similar.
|
||||
*/
|
||||
gboolean meta_rectangle_vert_overlap (const MetaRectangle *rect1,
|
||||
const MetaRectangle *rect2);
|
||||
gboolean meta_rectangle_horiz_overlap (const MetaRectangle *rect1,
|
||||
const MetaRectangle *rect2);
|
||||
|
||||
/* could_fit_rect determines whether "outer_rect" is big enough to contain
|
||||
* inner_rect. contains_rect checks whether it actually contains it.
|
||||
*/
|
||||
gboolean meta_rectangle_could_fit_rect (const MetaRectangle *outer_rect,
|
||||
const MetaRectangle *inner_rect);
|
||||
gboolean meta_rectangle_contains_rect (const MetaRectangle *outer_rect,
|
||||
const MetaRectangle *inner_rect);
|
||||
|
||||
/* Resize old_rect to the given new_width and new_height, but store the
|
||||
* result in rect. NOTE THAT THIS IS RESIZE ONLY SO IT CANNOT BE USED FOR
|
||||
* A MOVERESIZE OPERATION (that simplies the routine a little bit as it
|
||||
* means there's no difference between NorthWestGravity and StaticGravity.
|
||||
* Also, I lied a little bit--technically, you could use it in a MoveResize
|
||||
* operation if you muck with old_rect just right).
|
||||
*/
|
||||
void meta_rectangle_resize_with_gravity (const MetaRectangle *old_rect,
|
||||
MetaRectangle *rect,
|
||||
int gravity,
|
||||
int new_width,
|
||||
int new_height);
|
||||
|
||||
/* find a list of rectangles with the property that a window is contained
|
||||
* in the given region if and only if it is contained in one of the
|
||||
* rectangles in the list.
|
||||
*
|
||||
* In this case, the region is given by taking basic_rect, removing from
|
||||
* it the intersections with all the rectangles in the all_struts list,
|
||||
* then expanding all the rectangles in the resulting list by the given
|
||||
* amounts on each side.
|
||||
*
|
||||
* See boxes.c for more details.
|
||||
*/
|
||||
GList* meta_rectangle_get_minimal_spanning_set_for_region (
|
||||
const MetaRectangle *basic_rect,
|
||||
const GSList *all_struts);
|
||||
|
||||
/* Expand all rectangles in region by the given amount on each side */
|
||||
GList* meta_rectangle_expand_region (GList *region,
|
||||
const int left_expand,
|
||||
const int right_expand,
|
||||
const int top_expand,
|
||||
const int bottom_expand);
|
||||
/* Same as for meta_rectangle_expand_region except that rectangles not at
|
||||
* least min_x or min_y in size are not expanded in that direction
|
||||
*/
|
||||
GList* meta_rectangle_expand_region_conditionally (
|
||||
GList *region,
|
||||
const int left_expand,
|
||||
const int right_expand,
|
||||
const int top_expand,
|
||||
const int bottom_expand,
|
||||
const int min_x,
|
||||
const int min_y);
|
||||
|
||||
/* Free the list created by
|
||||
* meta_rectangle_get_minimal_spanning_set_for_region()
|
||||
* or
|
||||
* meta_rectangle_find_onscreen_edges ()
|
||||
* or
|
||||
* meta_rectangle_find_nonintersected_xinerama_edges()
|
||||
*/
|
||||
void meta_rectangle_free_list_and_elements (GList *filled_list);
|
||||
|
||||
/* could_fit_in_region determines whether one of the spanning_rects is
|
||||
* big enough to contain rect. contained_in_region checks whether one
|
||||
* actually contains it.
|
||||
*/
|
||||
gboolean meta_rectangle_could_fit_in_region (
|
||||
const GList *spanning_rects,
|
||||
const MetaRectangle *rect);
|
||||
gboolean meta_rectangle_contained_in_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.
|
||||
*/
|
||||
void meta_rectangle_clamp_to_fit_into_region (
|
||||
const GList *spanning_rects,
|
||||
FixedDirections fixed_directions,
|
||||
MetaRectangle *rect,
|
||||
const MetaRectangle *min_size);
|
||||
|
||||
/* Clip the rectangle so that it fits into one of the spanning_rects, assuming
|
||||
* it overlaps with at least one of them
|
||||
*/
|
||||
void meta_rectangle_clip_to_region (const GList *spanning_rects,
|
||||
FixedDirections fixed_directions,
|
||||
MetaRectangle *rect);
|
||||
|
||||
/* Shove the rectangle into one of the spanning_rects, assuming it fits in
|
||||
* one of them.
|
||||
*/
|
||||
void meta_rectangle_shove_into_region(
|
||||
const GList *spanning_rects,
|
||||
FixedDirections fixed_directions,
|
||||
MetaRectangle *rect);
|
||||
|
||||
/* Finds the point on the line connecting (x1,y1) to (x2,y2) which is closest
|
||||
* to (px, py). Useful for finding an optimal rectangle size when given a
|
||||
* range between two sizes that are all candidates.
|
||||
*/
|
||||
void meta_rectangle_find_linepoint_closest_to_point (double x1, double y1,
|
||||
double x2, double y2,
|
||||
double px, double py,
|
||||
double *valx, double *valy);
|
||||
|
||||
/***************************************************************************/
|
||||
/* */
|
||||
/* Switching gears to code for edges instead of just rectangles */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
/* Return whether an edge overlaps or is adjacent to the rectangle in the
|
||||
* nonzero-width dimension of the edge.
|
||||
*/
|
||||
gboolean meta_rectangle_edge_aligns (const MetaRectangle *rect,
|
||||
const MetaEdge *edge);
|
||||
|
||||
/* Compare two edges, so that sorting functions can put a list of edges in
|
||||
* canonical order.
|
||||
*/
|
||||
gint meta_rectangle_edge_cmp (gconstpointer a, gconstpointer b);
|
||||
|
||||
/* Compare two edges, so that sorting functions can put a list of edges in
|
||||
* order. This function doesn't separate left edges first, then right edges,
|
||||
* etc., but rather compares only upon location.
|
||||
*/
|
||||
gint meta_rectangle_edge_cmp_ignore_type (gconstpointer a, gconstpointer b);
|
||||
|
||||
/* Removes an parts of edges in the given list that intersect any box in the
|
||||
* given rectangle list. Returns the result.
|
||||
*/
|
||||
GList* meta_rectangle_remove_intersections_with_boxes_from_edges (
|
||||
GList *edges,
|
||||
const GSList *rectangles);
|
||||
|
||||
/* Finds all the edges of an onscreen region, returning a GList* of
|
||||
* MetaEdgeRect's.
|
||||
*/
|
||||
GList* meta_rectangle_find_onscreen_edges (const MetaRectangle *basic_rect,
|
||||
const GSList *all_struts);
|
||||
|
||||
/* Finds edges between adjacent xineramas which are not covered by the given
|
||||
* struts.
|
||||
*/
|
||||
GList* meta_rectangle_find_nonintersected_xinerama_edges (
|
||||
const GList *xinerama_rects,
|
||||
const GSList *all_struts);
|
||||
|
||||
#endif /* META_BOXES_H */
|
810
src/c-screen.c
Normal file
810
src/c-screen.c
Normal file
@@ -0,0 +1,810 @@
|
||||
/*
|
||||
* Copyright (C) 2006 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
#include <cm/ws.h>
|
||||
#include <cm/stacker.h>
|
||||
#include <cm/wsint.h>
|
||||
#include <cm/drawable-node.h>
|
||||
#include <cm/state.h>
|
||||
#include <cm/magnifier.h>
|
||||
#include <cm/square.h>
|
||||
|
||||
#include "screen.h"
|
||||
#include "c-screen.h"
|
||||
|
||||
typedef struct WindowInfo WindowInfo;
|
||||
|
||||
struct WindowInfo
|
||||
{
|
||||
Window xwindow;
|
||||
CmNode *node;
|
||||
gboolean updates;
|
||||
|
||||
WsRectangle size;
|
||||
};
|
||||
|
||||
struct MetaScreenInfo
|
||||
{
|
||||
WsDisplay *display;
|
||||
CmStacker *stacker;
|
||||
CmMagnifier *magnifier;
|
||||
|
||||
WsWindow *gl_window;
|
||||
WsWindow *root_window;
|
||||
|
||||
WsScreen *screen;
|
||||
MetaScreen *meta_screen;
|
||||
|
||||
GHashTable *window_infos_by_xid;
|
||||
|
||||
int repaint_id;
|
||||
int idle_id;
|
||||
|
||||
WsWindow *selection_window;
|
||||
};
|
||||
|
||||
#if 0
|
||||
static void
|
||||
update_frame_counter (void)
|
||||
{
|
||||
#define BUFSIZE 128
|
||||
static GTimer *timer;
|
||||
static double buffer [BUFSIZE];
|
||||
static int next = 0;
|
||||
|
||||
if (!timer)
|
||||
timer = g_timer_new ();
|
||||
|
||||
buffer[next++] = g_timer_elapsed (timer, NULL);
|
||||
|
||||
if (next == BUFSIZE)
|
||||
{
|
||||
int i;
|
||||
double total;
|
||||
|
||||
next = 0;
|
||||
|
||||
total = 0.0;
|
||||
for (i = 1; i < BUFSIZE; ++i)
|
||||
total += buffer[i] - buffer[i - 1];
|
||||
|
||||
g_print ("frames per second: %f\n", 1 / (total / (BUFSIZE - 1)));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
dump_stacking_order (GList *nodes)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
for (list = nodes; list != NULL; list = list->next)
|
||||
{
|
||||
CmDrawableNode *node = list->data;
|
||||
|
||||
if (node)
|
||||
g_print ("%lx, ", WS_RESOURCE_XID (node->drawable));
|
||||
}
|
||||
g_print ("\n");
|
||||
}
|
||||
|
||||
static gboolean
|
||||
repaint (gpointer data)
|
||||
{
|
||||
MetaScreenInfo *info = data;
|
||||
CmState *state;
|
||||
#if 0
|
||||
g_print ("repaint\n");
|
||||
#endif
|
||||
glViewport (0, 0,
|
||||
info->meta_screen->rect.width,
|
||||
info->meta_screen->rect.height);
|
||||
|
||||
glLoadIdentity();
|
||||
|
||||
#if 0
|
||||
glClearColor (0, 0, 0, 1.0);
|
||||
glClear (GL_COLOR_BUFFER_BIT);
|
||||
#endif
|
||||
|
||||
ws_window_raise (info->gl_window);
|
||||
|
||||
#if 0
|
||||
glDisable (GL_TEXTURE_2D);
|
||||
glDisable (GL_TEXTURE_RECTANGLE_ARB);
|
||||
glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
|
||||
glColor4f (0.0, 1.0, 0.0, 1.0);
|
||||
glRectf (-1.0, -1.0, 1.0, 1.0);
|
||||
glFinish();
|
||||
#endif
|
||||
|
||||
state = cm_state_new ();
|
||||
|
||||
cm_state_disable_depth_buffer_update (state);
|
||||
|
||||
cm_node_render (CM_NODE (info->magnifier), state);
|
||||
|
||||
cm_state_enable_depth_buffer_update (state);
|
||||
|
||||
g_object_unref (state);
|
||||
|
||||
ws_window_gl_swap_buffers (info->gl_window);
|
||||
glFinish();
|
||||
|
||||
#if 0
|
||||
dump_stacking_order (info->stacker->children);
|
||||
#endif
|
||||
|
||||
info->idle_id = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static WindowInfo *
|
||||
find_win_info (MetaScreenInfo *info,
|
||||
Window xwindow)
|
||||
{
|
||||
WindowInfo *win_info =
|
||||
g_hash_table_lookup (info->window_infos_by_xid, (gpointer)xwindow);
|
||||
|
||||
return win_info;
|
||||
}
|
||||
|
||||
static CmNode *
|
||||
find_node (MetaScreenInfo *info,
|
||||
Window xwindow)
|
||||
{
|
||||
WindowInfo *win_info = find_win_info (info, xwindow);
|
||||
|
||||
if (win_info)
|
||||
return win_info->node;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static GList *all_screen_infos;
|
||||
|
||||
MetaScreenInfo *
|
||||
meta_screen_info_get_by_xwindow (Window xwindow)
|
||||
{
|
||||
GList *list;
|
||||
|
||||
for (list = all_screen_infos; list != NULL; list = list->next)
|
||||
{
|
||||
MetaScreenInfo *info = list->data;
|
||||
|
||||
if (find_node (info, xwindow))
|
||||
return info;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
MetaScreenInfo *
|
||||
meta_screen_info_new (WsDisplay *display,
|
||||
MetaScreen *screen)
|
||||
{
|
||||
MetaScreenInfo *scr_info = g_new0 (MetaScreenInfo, 1);
|
||||
|
||||
scr_info->screen = ws_display_get_screen_from_number (
|
||||
display, screen->number);
|
||||
scr_info->root_window = ws_screen_get_root_window (scr_info->screen);
|
||||
scr_info->display = display;
|
||||
scr_info->window_infos_by_xid =
|
||||
g_hash_table_new_full (g_direct_hash, g_direct_equal,
|
||||
NULL, g_free);
|
||||
scr_info->meta_screen = screen;
|
||||
|
||||
all_screen_infos = g_list_prepend (all_screen_infos, scr_info);
|
||||
|
||||
return scr_info;
|
||||
}
|
||||
|
||||
static char *
|
||||
make_selection_name (MetaScreenInfo *info)
|
||||
{
|
||||
char *buffer;
|
||||
|
||||
buffer = g_strdup_printf ("_NET_WM_CM_S%d", info->meta_screen->number);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
static void
|
||||
on_selection_clear (WsWindow *window,
|
||||
WsSelectionClearEvent *event,
|
||||
gpointer data)
|
||||
{
|
||||
MetaScreenInfo *info = data;
|
||||
char *buffer = make_selection_name (info);
|
||||
|
||||
if (strcmp (event->selection, buffer))
|
||||
{
|
||||
/* We lost the selection */
|
||||
meta_screen_info_unredirect (info);
|
||||
}
|
||||
}
|
||||
|
||||
static WsWindow *
|
||||
claim_selection (MetaScreenInfo *info)
|
||||
{
|
||||
WsWindow *window = ws_window_new (info->root_window);
|
||||
char *buffer = make_selection_name (info);
|
||||
|
||||
#if 0
|
||||
g_print ("selection window: %lx\n", WS_RESOURCE_XID (window));
|
||||
#endif
|
||||
|
||||
ws_window_own_selection (window, buffer, WS_CURRENT_TIME);
|
||||
|
||||
g_signal_connect (window, "selection_clear_event", G_CALLBACK (on_selection_clear), info);
|
||||
|
||||
g_free (buffer);
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
static void
|
||||
queue_paint (CmNode *node,
|
||||
MetaScreenInfo *info)
|
||||
{
|
||||
#if 0
|
||||
g_print ("queueing %s\n", G_OBJECT_TYPE_NAME (node));
|
||||
#endif
|
||||
meta_screen_info_queue_paint (info);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_redirect (MetaScreenInfo *info)
|
||||
{
|
||||
WsWindow *root = ws_screen_get_root_window (info->screen);
|
||||
WsRectangle source;
|
||||
WsRectangle target;
|
||||
WsServerRegion *region;
|
||||
int screen_w;
|
||||
int screen_h;
|
||||
CmSquare *square;
|
||||
|
||||
#if 0
|
||||
g_print ("redirecting %lx\n", WS_RESOURCE_XID (root));
|
||||
#endif
|
||||
|
||||
ws_window_redirect_subwindows (root);
|
||||
info->gl_window = ws_screen_get_gl_window (info->screen);
|
||||
/* FIXME: This should probably happen in libcm */
|
||||
ws_window_set_override_redirect (info->gl_window, TRUE);
|
||||
region = ws_server_region_new (info->display);
|
||||
ws_window_set_input_shape (info->gl_window, region);
|
||||
g_object_unref (G_OBJECT (region));
|
||||
|
||||
ws_display_begin_error_trap (info->display);
|
||||
|
||||
ws_window_unredirect (info->gl_window);
|
||||
|
||||
ws_display_end_error_trap (info->display);
|
||||
|
||||
info->selection_window = claim_selection (info);
|
||||
|
||||
ws_window_map (info->gl_window);
|
||||
|
||||
info->stacker = cm_stacker_new ();
|
||||
|
||||
square = cm_square_new (0.3, 0.3, 0.8, 1.0);
|
||||
|
||||
cm_stacker_add_child (info->stacker, CM_NODE (square));
|
||||
|
||||
g_object_unref (square);
|
||||
|
||||
screen_w = ws_screen_get_width (info->screen);
|
||||
screen_h = ws_screen_get_height (info->screen);
|
||||
|
||||
#if 0
|
||||
g_print ("width: %d height %d\n", screen_w, screen_h);
|
||||
#endif
|
||||
|
||||
source.x = (screen_w - (screen_w / 4)) / 2;
|
||||
source.y = screen_h / 16;
|
||||
source.width = screen_w / 4;
|
||||
source.height = screen_h / 16;
|
||||
|
||||
target.x = 0;
|
||||
target.y = screen_h - screen_h / 4;
|
||||
target.width = screen_w;
|
||||
target.height = screen_h / 4;
|
||||
|
||||
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
|
||||
cm_magnifier_set_active (info->magnifier, FALSE);
|
||||
|
||||
info->repaint_id =
|
||||
g_signal_connect (info->magnifier, "need_repaint",
|
||||
G_CALLBACK (queue_paint), info);
|
||||
|
||||
ws_display_sync (info->display);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_unredirect (MetaScreenInfo *info)
|
||||
{
|
||||
WsScreen *ws_screen = info->screen;
|
||||
WsWindow *root = ws_screen_get_root_window (ws_screen);
|
||||
|
||||
#if 0
|
||||
g_print ("unredirecting %lx\n", WS_RESOURCE_XID (root));
|
||||
#endif
|
||||
|
||||
g_signal_handler_disconnect (info->magnifier, info->repaint_id);
|
||||
g_object_unref (info->magnifier);
|
||||
|
||||
ws_window_unredirect_subwindows (root);
|
||||
#if 0
|
||||
ws_window_unmap (info->gl_window);
|
||||
#endif
|
||||
ws_screen_release_gl_window (ws_screen);
|
||||
|
||||
ws_display_sync (info->display);
|
||||
|
||||
/* FIXME: libcm needs a way to guarantee that a window is destroyed,
|
||||
* without relying on ref counting having it as a side effect
|
||||
*/
|
||||
g_object_unref (info->selection_window);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_queue_paint (MetaScreenInfo *info)
|
||||
{
|
||||
#if 0
|
||||
g_print ("queuing\n");
|
||||
#endif
|
||||
if (!info->idle_id)
|
||||
info->idle_id = g_idle_add (repaint, info);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_restack (MetaScreenInfo *info,
|
||||
Window window,
|
||||
Window above_this)
|
||||
{
|
||||
CmNode *window_node = find_node (info, window);
|
||||
CmNode *above_node = find_node (info, above_this);
|
||||
|
||||
#if 0
|
||||
g_print ("restack %lx over %lx \n", window, above_this);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
dump_stacking_order (info->stacker->children);
|
||||
#endif
|
||||
|
||||
if (window_node == above_node)
|
||||
return;
|
||||
|
||||
if (window_node && above_this == WS_RESOURCE_XID (info->gl_window))
|
||||
{
|
||||
cm_stacker_raise_child (info->stacker, window_node);
|
||||
}
|
||||
else if (window_node && above_this == None)
|
||||
{
|
||||
cm_stacker_lower_child (info->stacker, window_node);
|
||||
}
|
||||
else if (window_node && above_node)
|
||||
{
|
||||
cm_stacker_restack_child (info->stacker, window_node, above_node);
|
||||
}
|
||||
#if 0
|
||||
else
|
||||
g_print ("nothing happened\n");
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
g_print ("done restacking; new order:\n");
|
||||
#endif
|
||||
#if 0
|
||||
dump_stacking_order (info->stacker->children);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_raise_window (MetaScreenInfo *info,
|
||||
Window window)
|
||||
{
|
||||
CmNode *node = find_node (info, window);
|
||||
|
||||
if (node)
|
||||
cm_stacker_raise_child (info->stacker, node);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_set_size (MetaScreenInfo *info,
|
||||
Window window,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height)
|
||||
{
|
||||
CmDrawableNode *node = CM_DRAWABLE_NODE (find_node (info, window));
|
||||
WindowInfo *winfo = find_win_info (info, window);
|
||||
WsRectangle rect;
|
||||
|
||||
rect.x = x;
|
||||
rect.y = y;
|
||||
rect.width = width;
|
||||
rect.height = height;
|
||||
|
||||
if (node)
|
||||
{
|
||||
WsRegion *shape;
|
||||
|
||||
if (winfo && winfo->updates)
|
||||
{
|
||||
WsWindow *window = WS_WINDOW (node->drawable);
|
||||
WsDisplay *display = WS_RESOURCE (window)->display;
|
||||
|
||||
ws_display_begin_error_trap (display);
|
||||
|
||||
#if 0
|
||||
g_print ("meta screen info set: %d %d %d %d\n",
|
||||
x, y, width, height);
|
||||
#endif
|
||||
|
||||
cm_drawable_node_set_geometry (CM_DRAWABLE_NODE (node), &rect);
|
||||
shape = ws_window_get_output_shape (window);
|
||||
cm_drawable_node_set_shape (node, shape);
|
||||
ws_region_destroy (shape);
|
||||
|
||||
if (rect.width != winfo->size.width ||
|
||||
rect.height != winfo->size.height)
|
||||
{
|
||||
cm_drawable_node_update_pixmap (node);
|
||||
}
|
||||
|
||||
winfo->size = rect;
|
||||
|
||||
ws_display_end_error_trap (display);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
print_child_titles (WsWindow *window)
|
||||
{
|
||||
GList *children = ws_window_query_subwindows (window);
|
||||
GList *list;
|
||||
int i;
|
||||
|
||||
g_print ("window: %lx %s\n", WS_RESOURCE_XID (window), ws_window_query_title (window));
|
||||
|
||||
i = 0;
|
||||
for (list = children; list != NULL; list = list->next)
|
||||
{
|
||||
WsWindow *child = list->data;
|
||||
|
||||
g_print (" %d adding: %lx %s\n", i++, WS_RESOURCE_XID (child), ws_window_query_title (child));
|
||||
}
|
||||
}
|
||||
|
||||
static WindowInfo *
|
||||
window_info_new (Window xwindow,
|
||||
CmNode *node)
|
||||
{
|
||||
WindowInfo *win_info = g_new0 (WindowInfo, 1);
|
||||
win_info->xwindow = xwindow;
|
||||
win_info->node = node;
|
||||
win_info->updates = TRUE;
|
||||
return win_info;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
has_type (WsWindow *window, const char *check_type)
|
||||
{
|
||||
gchar **types = ws_window_get_property_atom_list (window, "_NET_WM_WINDOW_TYPE");
|
||||
int i;
|
||||
gboolean result;
|
||||
|
||||
if (!types)
|
||||
return FALSE;
|
||||
|
||||
result = FALSE;
|
||||
|
||||
for (i = 0; types[i] != NULL; ++i)
|
||||
{
|
||||
gchar *type = types[i];
|
||||
|
||||
g_print ("type: %s\n", type);
|
||||
|
||||
if (strcmp (type, check_type) == 0)
|
||||
{
|
||||
result = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_strfreev (types);
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_add_window (MetaScreenInfo *info,
|
||||
Window xwindow)
|
||||
{
|
||||
CmNode *node;
|
||||
WsDrawable *drawable;
|
||||
WsRectangle geometry;
|
||||
double alpha = 1.0;
|
||||
|
||||
ws_display_begin_error_trap (info->display);
|
||||
|
||||
node = find_node (info, xwindow);
|
||||
#if 0
|
||||
g_print ("lookup %lx\n", xwindow);
|
||||
#endif
|
||||
drawable = WS_DRAWABLE (ws_window_lookup (info->display, xwindow));
|
||||
|
||||
if (node)
|
||||
goto out;
|
||||
|
||||
if (ws_window_query_input_only (WS_WINDOW (drawable)))
|
||||
goto out;
|
||||
|
||||
if (WS_WINDOW (drawable) == info->gl_window ||
|
||||
WS_WINDOW (drawable) == info->screen->overlay_window)
|
||||
{
|
||||
#if 0
|
||||
g_print ("gl window\n");
|
||||
#endif
|
||||
goto out;
|
||||
}
|
||||
|
||||
ws_drawable_query_geometry (drawable, &geometry);
|
||||
|
||||
node = CM_NODE (cm_drawable_node_new (drawable, &geometry));
|
||||
|
||||
#if 0
|
||||
g_print ("alpha: %f\n", alpha);
|
||||
#endif
|
||||
cm_drawable_node_set_alpha (node, alpha);
|
||||
|
||||
#if 0
|
||||
print_child_titles (WS_WINDOW (drawable));
|
||||
#endif
|
||||
|
||||
cm_stacker_add_child (info->stacker, node);
|
||||
|
||||
g_hash_table_insert (info->window_infos_by_xid,
|
||||
(gpointer)xwindow,
|
||||
window_info_new (xwindow, node));
|
||||
|
||||
g_object_unref (node);
|
||||
out:
|
||||
if (node)
|
||||
{
|
||||
#if 0
|
||||
g_print ("drawable %lx is now ", WS_RESOURCE_XID (drawable));
|
||||
#endif
|
||||
if (ws_window_query_mapped (WS_WINDOW (drawable)))
|
||||
{
|
||||
#if 0
|
||||
g_print ("mapped\n");
|
||||
#endif
|
||||
cm_drawable_node_unset_patch (node);
|
||||
#if 0
|
||||
g_print ("set alpha %f\n", alpha);
|
||||
#endif
|
||||
|
||||
if (has_type (drawable, "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU"))
|
||||
{
|
||||
#if 0
|
||||
g_print ("is menu\n");
|
||||
#endif
|
||||
alpha = 0.9;
|
||||
}
|
||||
else if (has_type (drawable, "_NET_WM_WINDOW_TYPE_POPUP_MENU"))
|
||||
{
|
||||
alpha = 0.9;
|
||||
}
|
||||
else
|
||||
{
|
||||
#if 0
|
||||
g_print ("is not menu\n");
|
||||
#endif
|
||||
alpha = 1.0;
|
||||
}
|
||||
cm_drawable_node_set_alpha (node, alpha);
|
||||
cm_drawable_node_set_viewable (node, TRUE);
|
||||
cm_drawable_node_update_pixmap (node);
|
||||
}
|
||||
else
|
||||
{
|
||||
#if 0
|
||||
g_print ("unmapped\n");
|
||||
#endif
|
||||
cm_drawable_node_set_viewable (node, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
ws_display_end_error_trap (info->display);
|
||||
|
||||
#if 0
|
||||
g_print ("done checking\n");
|
||||
#endif
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
meta_screen_info_remove_window (MetaScreenInfo *info,
|
||||
Window xwindow)
|
||||
{
|
||||
CmNode *node = find_node (info, xwindow);
|
||||
|
||||
#if 0
|
||||
g_print ("removing %lx\n", xwindow);
|
||||
#endif
|
||||
|
||||
if (node)
|
||||
{
|
||||
g_hash_table_remove (info->window_infos_by_xid, (gpointer)xwindow);
|
||||
|
||||
cm_stacker_remove_child (info->stacker, node);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_set_updates (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
gboolean updates)
|
||||
{
|
||||
WindowInfo *win_info = find_win_info (info, xwindow);
|
||||
CmDrawableNode *node = CM_DRAWABLE_NODE (win_info->node);
|
||||
|
||||
#if 0
|
||||
g_print ("setting updates to %s\n", updates? "on" : "off");
|
||||
#endif
|
||||
|
||||
win_info->updates = updates;
|
||||
|
||||
if (node)
|
||||
cm_drawable_node_set_updates (node, updates);
|
||||
|
||||
if (updates)
|
||||
{
|
||||
WsRectangle rect;
|
||||
WsRegion *shape;
|
||||
WsDisplay *display = WS_RESOURCE (node->drawable)->display;
|
||||
|
||||
ws_display_begin_error_trap (display);
|
||||
ws_drawable_query_geometry (node->drawable, &rect);
|
||||
cm_drawable_node_update_pixmap (node);
|
||||
cm_drawable_node_set_geometry (node, &rect);
|
||||
shape = ws_window_get_output_shape (WS_WINDOW (node->drawable));
|
||||
cm_drawable_node_set_shape (node, shape);
|
||||
ws_region_destroy (shape);
|
||||
ws_display_end_error_trap (display);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
meta_screen_info_set_patch (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
CmPoint points[4][4])
|
||||
{
|
||||
CmDrawableNode *node = CM_DRAWABLE_NODE (find_node (info, xwindow));
|
||||
|
||||
if (node)
|
||||
cm_drawable_node_set_patch (node, points);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_unset_patch (MetaScreenInfo *info,
|
||||
Window xwindow)
|
||||
{
|
||||
CmDrawableNode *node = CM_DRAWABLE_NODE (find_node (info, xwindow));
|
||||
|
||||
if (node)
|
||||
cm_drawable_node_unset_patch (node);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_set_alpha (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
gdouble alpha)
|
||||
{
|
||||
CmDrawableNode *node = CM_DRAWABLE_NODE (find_node (info, xwindow));
|
||||
#if 0
|
||||
g_print ("alpha: %f\n", alpha);
|
||||
#endif
|
||||
cm_drawable_node_set_alpha (node, alpha);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_get_real_size (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
WsRectangle *size)
|
||||
{
|
||||
CmDrawableNode *node = CM_DRAWABLE_NODE (find_node (info, xwindow));
|
||||
|
||||
if (!size)
|
||||
return;
|
||||
|
||||
cm_drawable_node_get_clipbox (node, size);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_unmap (MetaScreenInfo *info,
|
||||
Window xwindow)
|
||||
{
|
||||
CmDrawableNode *node = CM_DRAWABLE_NODE (find_node (info, xwindow));
|
||||
|
||||
#if 0
|
||||
g_print ("unmapping: %lx\n", xwindow);
|
||||
#endif
|
||||
|
||||
if (node)
|
||||
cm_drawable_node_set_viewable (node, FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_set_target_rect (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
WsRectangle *rect)
|
||||
{
|
||||
CmDrawableNode *node = CM_DRAWABLE_NODE (find_node (info, xwindow));
|
||||
|
||||
if (node)
|
||||
cm_drawable_node_set_scale_rect (node, rect);
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_set_explode (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
gdouble level)
|
||||
{
|
||||
CmDrawableNode *node = CM_DRAWABLE_NODE (find_node (info, xwindow));
|
||||
|
||||
if (node)
|
||||
{
|
||||
#if 0
|
||||
g_print ("level: %f\n", level);
|
||||
#endif
|
||||
|
||||
cm_drawable_node_set_explosion_level (node, level);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_info_hide_window (MetaScreenInfo *info,
|
||||
Window xwindow)
|
||||
{
|
||||
CmDrawableNode *node = CM_DRAWABLE_NODE (find_node (info, xwindow));
|
||||
|
||||
cm_drawable_node_set_viewable (node, FALSE);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
49
src/c-screen.h
Normal file
49
src/c-screen.h
Normal file
@@ -0,0 +1,49 @@
|
||||
#include "screen.h"
|
||||
|
||||
typedef struct MetaScreenInfo MetaScreenInfo;
|
||||
|
||||
MetaScreenInfo *meta_screen_info_new (WsDisplay *display,
|
||||
MetaScreen *screen);
|
||||
MetaScreenInfo *meta_screen_info_get_by_xwindow (Window xwindow);
|
||||
void meta_screen_info_destroy (MetaScreenInfo *scr_info);
|
||||
void meta_screen_info_redirect (MetaScreenInfo *info);
|
||||
void meta_screen_info_unredirect (MetaScreenInfo *info);
|
||||
void meta_screen_info_add_window (MetaScreenInfo *scr_info,
|
||||
Window xwindow);
|
||||
void meta_screen_info_remove_window (MetaScreenInfo *scr_info,
|
||||
Window xwindow);
|
||||
void meta_screen_info_restack (MetaScreenInfo *scr_info,
|
||||
Window window,
|
||||
Window above_this);
|
||||
void meta_screen_info_set_size (MetaScreenInfo *info,
|
||||
Window window,
|
||||
gint x,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height);
|
||||
void meta_screen_info_raise_window (MetaScreenInfo *scr_info,
|
||||
Window window);
|
||||
void meta_screen_info_queue_paint (MetaScreenInfo *info);
|
||||
void meta_screen_info_set_updates (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
gboolean updates);
|
||||
void meta_screen_info_set_patch (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
CmPoint points[4][4]);
|
||||
void meta_screen_info_unset_patch (MetaScreenInfo *info,
|
||||
Window xwindow);
|
||||
void meta_screen_info_set_alpha (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
gdouble alpha);
|
||||
void meta_screen_info_get_real_size (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
WsRectangle *size);
|
||||
void meta_screen_info_set_target_rect (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
WsRectangle *rect);
|
||||
|
||||
void meta_screen_info_set_explode (MetaScreenInfo *info,
|
||||
Window xwindow,
|
||||
gdouble level);
|
||||
void meta_screen_info_hide_window (MetaScreenInfo *info,
|
||||
Window xwindow);
|
37
src/common.h
37
src/common.h
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2005 Elijah Newren
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -64,7 +65,8 @@ typedef enum
|
||||
META_MENU_OP_MOVE_LEFT = 1 << 13,
|
||||
META_MENU_OP_MOVE_RIGHT = 1 << 14,
|
||||
META_MENU_OP_MOVE_UP = 1 << 15,
|
||||
META_MENU_OP_MOVE_DOWN = 1 << 16
|
||||
META_MENU_OP_MOVE_DOWN = 1 << 16,
|
||||
META_MENU_OP_RECOVER = 1 << 17
|
||||
} MetaMenuOp;
|
||||
|
||||
typedef struct _MetaWindowMenu MetaWindowMenu;
|
||||
@@ -114,6 +116,11 @@ typedef enum
|
||||
/* Alt+Esc */
|
||||
META_GRAB_OP_KEYBOARD_ESCAPING_NORMAL,
|
||||
META_GRAB_OP_KEYBOARD_ESCAPING_DOCK,
|
||||
|
||||
META_GRAB_OP_KEYBOARD_ESCAPING_GROUP,
|
||||
|
||||
/* Alt+F6 */
|
||||
META_GRAB_OP_KEYBOARD_TABBING_GROUP,
|
||||
|
||||
META_GRAB_OP_KEYBOARD_WORKSPACE_SWITCHING,
|
||||
|
||||
@@ -149,10 +156,18 @@ typedef enum
|
||||
META_FOCUS_MODE_MOUSE
|
||||
} MetaFocusMode;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_FOCUS_NEW_WINDOWS_SMART,
|
||||
META_FOCUS_NEW_WINDOWS_STRICT
|
||||
} MetaFocusNewWindows;
|
||||
|
||||
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;
|
||||
|
||||
@@ -184,6 +199,22 @@ typedef enum
|
||||
META_VIRTUAL_MOD5_MASK = 1 << 14
|
||||
} MetaVirtualModifier;
|
||||
|
||||
/* Relative directions or sides seem to come up all over the place... */
|
||||
/* FIXME: Replace
|
||||
* place.[ch]:MetaWindowEdgePosition,
|
||||
* screen.[ch]:MetaScreenDirection,
|
||||
* workspace.[ch]:MetaMotionDirection,
|
||||
* with the use of MetaDirection.
|
||||
*/
|
||||
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 */
|
||||
} MetaDirection;
|
||||
|
||||
/* Function a window button can have. Note, you can't add stuff here
|
||||
* without extending the theme format to draw a new function and
|
||||
@@ -226,7 +257,3 @@ struct _MetaButtonLayout
|
||||
(ycoord) < ((rect).y + (rect).height))
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
2170
src/compositor.c
2170
src/compositor.c
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user