Compare commits
463 Commits
METACITY_2
...
METACITY_2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
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 | ||
![]() |
249c105d01 | ||
![]() |
a7116f94a6 | ||
![]() |
0aa903f0d4 | ||
![]() |
a0b192aa5e | ||
![]() |
459c6668fb | ||
![]() |
d11681e505 | ||
![]() |
114c7c0be5 | ||
![]() |
10c6e1de17 | ||
![]() |
0bde8fe275 | ||
![]() |
2b2b70e80e | ||
![]() |
6679c6cd9c | ||
![]() |
7aab9f97d9 | ||
![]() |
9057b7112e | ||
![]() |
959a997eba | ||
![]() |
84312194e8 | ||
![]() |
58b323e4cc | ||
![]() |
c39fb62e1d | ||
![]() |
e25ed00bfb | ||
![]() |
de5588c10e | ||
![]() |
03adcdac31 | ||
![]() |
36b0b6d4d5 | ||
![]() |
bb1783b999 | ||
![]() |
05928106c5 | ||
![]() |
3489defbe8 | ||
![]() |
490fe640ab | ||
![]() |
017aa0dfd5 | ||
![]() |
7961c987a7 | ||
![]() |
77854b808a | ||
![]() |
e2eb979ecd | ||
![]() |
51bbd0e1a8 | ||
![]() |
595c86f427 | ||
![]() |
a7c2bacd64 | ||
![]() |
dab5dc2c70 | ||
![]() |
5d8da70f33 | ||
![]() |
2f0f36eea0 | ||
![]() |
4e3243b122 | ||
![]() |
a1caa2ae9e | ||
![]() |
194eee175d | ||
![]() |
2aae99381f | ||
![]() |
aa2da7d82e | ||
![]() |
9221a550db | ||
![]() |
c66adff00d | ||
![]() |
7d0ef20a9c | ||
![]() |
cabf4fc359 | ||
![]() |
5389f135ce | ||
![]() |
1e580d1e52 | ||
![]() |
d93d26aaeb | ||
![]() |
0a95c706bf | ||
![]() |
b0d15aa44f | ||
![]() |
5fe06b5fff | ||
![]() |
fa5bc6ff51 | ||
![]() |
893309b372 | ||
![]() |
cf102c12f4 | ||
![]() |
ebaa77c312 | ||
![]() |
bb03725397 | ||
![]() |
49479d9b67 | ||
![]() |
ea4d4b7b3e | ||
![]() |
f388d1111f | ||
![]() |
f5984f4365 | ||
![]() |
a8347dfd2f | ||
![]() |
f31c57a049 | ||
![]() |
3afcb9c963 | ||
![]() |
640d793ce4 | ||
![]() |
b5529bc5e8 | ||
![]() |
2dcaa941b4 | ||
![]() |
145d134095 | ||
![]() |
1a5d738e68 | ||
![]() |
2d0d5e8cac | ||
![]() |
814cc4b698 | ||
![]() |
6630963a1d | ||
![]() |
667796d53b | ||
![]() |
686ce45a7b | ||
![]() |
11dc788fbe | ||
![]() |
a1cdbf6d03 | ||
![]() |
46ededed08 | ||
![]() |
47221dcce2 | ||
![]() |
48a6dd603a | ||
![]() |
89dd94bf1e | ||
![]() |
b8c8000b44 | ||
![]() |
00f7c002ba | ||
![]() |
7dce1a4b6f | ||
![]() |
2e465de233 | ||
![]() |
1830a35000 | ||
![]() |
d9e622b375 | ||
![]() |
7d747092a6 | ||
![]() |
be29c69653 | ||
![]() |
c0924402d4 | ||
![]() |
7549d1511a | ||
![]() |
7c8faf3eda | ||
![]() |
68b14b6b9a | ||
![]() |
9382d5810f | ||
![]() |
890ffe18f2 | ||
![]() |
78e54ee7ee | ||
![]() |
4e636d0951 | ||
![]() |
c74ab35c6c | ||
![]() |
0bf6bffb16 | ||
![]() |
1ce080d733 | ||
![]() |
aab8f21475 | ||
![]() |
ce8c2d9463 | ||
![]() |
d5a484479f | ||
![]() |
892cb8a8dd | ||
![]() |
e46fc46701 | ||
![]() |
f4f8699d84 | ||
![]() |
85d4c396d0 | ||
![]() |
575bbe7342 |
@@ -15,6 +15,7 @@ ltconfig
|
||||
ltmain.sh
|
||||
stamp-h
|
||||
stamp-h.in
|
||||
stamp-h1
|
||||
stamp.h
|
||||
version.h
|
||||
config.h.in
|
||||
|
302
HACKING
302
HACKING
@@ -1,109 +1,253 @@
|
||||
Making a release
|
||||
===
|
||||
Intro...
|
||||
|
||||
To make a release of metacity, do the following:
|
||||
Window managers have a few ways in which they are significantly different
|
||||
from other applications. This file, combined with the code overview in
|
||||
doc/code-overview.txt, should hopefully provide a series of relatively
|
||||
quick pointers (hopefully only a few minutes each) to some of the places
|
||||
one can look to orient themselves and get started. Some of this will be
|
||||
general to window managers on X, much will be specific to Metacity, and
|
||||
there's probably some information that's common to programs in general but
|
||||
is nonetheless useful.
|
||||
|
||||
- check out a fresh copy from CVS
|
||||
Overview
|
||||
Administrative issues
|
||||
Relevant standards and X properties
|
||||
Debugging and testing
|
||||
Debugging logs
|
||||
Adding information to the log
|
||||
Valgrind
|
||||
Testing Utilities
|
||||
Technical gotchas to keep in mind
|
||||
Other important reading
|
||||
Extra reading
|
||||
Ideas for tasks to work on
|
||||
|
||||
- increment the version number in configure.in,
|
||||
see the comment above the version for the next fibonacci number
|
||||
|
||||
- update the file NEWS based on the ChangeLog
|
||||
Administrative issues
|
||||
Don't commit substantive code in here without asking hp@redhat.com.
|
||||
Adding translations, no-brainer typo fixes, etc. is fine.
|
||||
|
||||
- add a ChangeLog entry containing the version number
|
||||
you're releasing ("Released 2.5.4" or something)
|
||||
so people can see which changes were before and after
|
||||
a given release.
|
||||
The code could use cleanup in a lot of places, feel free to do so.
|
||||
|
||||
- "make distcheck" (DO NOT just "make dist" - pass the check!)
|
||||
See http://developer.gnome.org/dotplan/for_maintainers.html for
|
||||
information on how to make a release. The only difference from those
|
||||
instructions is that the minor version number of a Metacity release
|
||||
should always be a number from the Fibonacci sequence.
|
||||
|
||||
- if make distcheck fails, fix it.
|
||||
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
|
||||
Manual) and EWMH (Extended Window Manager Hints). You can find these at
|
||||
the following locations:
|
||||
ICCCM - http://tronche.com/gui/x/icccm/
|
||||
EWMH - :pserver:anoncvs@pdx.freedesktop.org:/cvs
|
||||
The ICCCM is usually available in RPM or DEB format as well. There is
|
||||
actually an online version of the EWMH, but it is almost always woefully
|
||||
out of date. Just get it from cvs with these commands (the backslash
|
||||
means include the stuff from the next line):
|
||||
cvs -d :pserver:anoncvs@cvs.freedesktop.org:/cvs/icccm-extensions login
|
||||
cvs -d :pserver:anoncvs@cvs.freedesktop.org:/cvs/icccm-extensions \
|
||||
checkout wm-spec
|
||||
|
||||
- once distcheck succeeds, "cvs commit"
|
||||
DO NOT GO AND READ THOSE THINGS. THEY ARE REALLY, REALLY BORING.
|
||||
|
||||
- if someone else made changes and the commit fails,
|
||||
you have to "cvs up" and run "make distcheck" again
|
||||
If you do, you'll probably end up catching up on your sleep instead of
|
||||
hacking on Metacity. ;-) Instead, just look at the table of contents and
|
||||
glance at a page or two to get an idea of what's in there. Then only
|
||||
refer to it if you see something weird in the code and you don't know
|
||||
what it is but has some funny looking name like you see in one of those
|
||||
two documents.
|
||||
|
||||
- once the commit succeeds, WITHOUT cvs updating, "cvs tag
|
||||
METACITY_X_Y_Z" where
|
||||
X_Y_Z map to version X.Y.Z
|
||||
You can refer to the COMPLIANCE file for additional information on these
|
||||
specifications and Metacity's compliance therewith.
|
||||
|
||||
- scp the tarball to master.gnome.org
|
||||
One of the major things those documents cover that are useful to learn
|
||||
about immediately are X properties. The right way to learn about those,
|
||||
though, is through hand on experimentation with the xprop command (and
|
||||
then look up things you find from xprop in those two manuals if you're
|
||||
curious enough). First, try running
|
||||
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. 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" 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 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.
|
||||
|
||||
- run install-module on master.gnome.org to install the tarball
|
||||
on the ftp site
|
||||
Debugging information
|
||||
Trying to run a window manager under a typical debugger, such as gdb,
|
||||
unfortunately just doesn't work very well. So, we have to resort to
|
||||
other methods.
|
||||
|
||||
Misc stuff
|
||||
===
|
||||
Debugging logs
|
||||
|
||||
Don't commit substantive code in here without asking me,
|
||||
hp@redhat.com. Adding translations, no-brainer typo fixes, etc. is
|
||||
fine.
|
||||
First, note that you can start a new version of metacity to replace the
|
||||
existing one by running
|
||||
metacity --replace
|
||||
(which also comes in handy in the form "./src/metacity --replace" when
|
||||
trying to quickly test a small change while hacking on metacity without
|
||||
doing a full "make install", though I'm going off topic...) This will
|
||||
allow you to see any warnings printed at the terminal. Sometimes it's
|
||||
useful to have these directed to a logfile instead, which you can do by
|
||||
running
|
||||
METACITY_USE_LOGFILE=1 metacity --replace
|
||||
The logfile it uses will be printed in the terminal. Sometimes, it's
|
||||
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
|
||||
grep "METACITY_" * | grep getenv
|
||||
to find out what the other ones are.
|
||||
|
||||
The script src/run-metacity.sh is useful to hack on the window manager.
|
||||
It runs metacity in an Xnest. e.g.:
|
||||
CLIENTS=3 ./run-metacity.sh
|
||||
or
|
||||
DEBUG=memprof ./run-metacity.sh
|
||||
or
|
||||
DEBUG_TEST=1 ./run-metacity-sh
|
||||
or whatever.
|
||||
Adding information to the log
|
||||
|
||||
The tool metacity-message can be used as follows:
|
||||
metacity-message reload-theme
|
||||
metacity-message restart
|
||||
metacity-message enable-keybindings
|
||||
metacity-message disable-keybindings
|
||||
Since we can't single step with a debugger, we often have to fall back to
|
||||
the primitive method of getting information we want to know: adding
|
||||
"print" statements. Metacity has a fairly structured way to do this,
|
||||
using the functions meta_warning, meta_topic, and meta_verbose. All
|
||||
three have the same basic format as printf, except that meta_topic also
|
||||
takes a leading enumeration parameter to specify the type of message
|
||||
being shown (makes it easier for grepping in a verbose log). You'll find
|
||||
tons of examples in the source code if you need them; just do a quick
|
||||
grep or look in most any file. Note that meta_topic and meta_verbose
|
||||
messages only appear if verbosity is turned on. I tend to frequently add
|
||||
temporary meta_warning statements (or switch meta_topic or meta_verbose
|
||||
ones to meta_warning ones) and then undo the changes once I've learned
|
||||
the info that I needed.
|
||||
|
||||
metacity-window-demo is good for trying behavior of various kinds of window
|
||||
without launching a full desktop.
|
||||
There is also a meta_print_backtrace (which again is only active if
|
||||
verbosity is turned on) that can also be useful if you want to learn how
|
||||
a particular line of code gets called. And, of course, there's always
|
||||
g_assert if you want to make sure some section isn't executed (or isn't
|
||||
executed under certain conditions).
|
||||
|
||||
src/window.c is where all the guts of the window manager live. This is
|
||||
basically the only remotely scary file.
|
||||
Valgrind
|
||||
|
||||
src/frames.c is the GtkWidget that handles drawing window frames.
|
||||
Valgrind is awesome for finding memory leaks or corruption and
|
||||
uninitialized variables. But I also tend to use it in a non-traditional
|
||||
way as a partial substitute for a normal debugger: it can provide me with
|
||||
a stack trace of where metacity is crashing if I made a change that
|
||||
caused it to do so, which is one of the major uses of debuggers. (And,
|
||||
what makes it cooler than a debugger is that there will also often be
|
||||
warnings pinpointing the cause of the crash from either some kind of
|
||||
simple memory corruption or an uninitialized variable). Sometimes, when
|
||||
I merely want to know what is calling a particular function I'll just
|
||||
throw in an "int i; printf("%d\n", i);" just because valgrind will give
|
||||
me a full stacktrace whenever it sees that uninitialized variable being
|
||||
used (yes, I could use meta_print_backtrace, but that means I have to
|
||||
turn verbosity on).
|
||||
|
||||
src/core.h defines the interface used by the GTK portion of the window
|
||||
manager to talk to the other portions. There's some cruft in here
|
||||
that's unused, since nearly all window operations have moved out of
|
||||
this file so frameless apps can have window operations.
|
||||
To run metacity under valgrind, use options typical for any Gnome
|
||||
program, such as
|
||||
valgrind --logfile=metacity.log --tool=memcheck --num-callers=48 \
|
||||
--leak-check=yes --leak-resolution=high --show-reachable=yes \
|
||||
./src/metacity --replace
|
||||
where, again, the backslashes mean to join all the stuff on the following
|
||||
line with the previous one.
|
||||
|
||||
src/ui.h defines the interface the plain Xlib portion of the window
|
||||
manager uses to talk to the GTK portion.
|
||||
However, there is a downside. Things run a little bit slowly, and it
|
||||
appears that you'll need about 1.5GB of ram, which unfortunately prevents
|
||||
most people from trying this.
|
||||
|
||||
Files that include gdk.h or gtk.h are not supposed to include
|
||||
display.h or window.h or other core files.
|
||||
Testing Utilities
|
||||
|
||||
Files in the core (display.[hc], window.[hc]) are not supposed to
|
||||
include gdk.h or gtk.h.
|
||||
src/run-metacity.sh
|
||||
The script src/run-metacity.sh is useful to hack on the window manager.
|
||||
It runs metacity in an Xnest. e.g.:
|
||||
CLIENTS=3 ./run-metacity.sh
|
||||
or
|
||||
DEBUG=memprof ./run-metacity.sh
|
||||
or
|
||||
DEBUG_TEST=1 ./run-metacity-sh
|
||||
or whatever.
|
||||
|
||||
src/theme.c and src/theme-parser.c have the theme system; this is
|
||||
well-modularized from the rest of the code, since the theme viewer app
|
||||
links to these files in addition to the WM itself.
|
||||
metacity-message
|
||||
The tool metacity-message can be used as follows:
|
||||
metacity-message reload-theme
|
||||
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).
|
||||
|
||||
When hacking, remember that you can have multiple screens. The code is
|
||||
also written to support multiple displays, but this is useless, since
|
||||
you can just run two copies of the WM. Also, an XKillClient() or
|
||||
shutdown on any display causes Xlib to exit the app, so it would be
|
||||
broken. So the multi-display thing is mostly just for code
|
||||
cleanliness. Multi-screen on the other hand is important for some
|
||||
people.
|
||||
metacity-window-demo
|
||||
metacity-window-demo is good for trying behavior of various kinds
|
||||
of window without launching a full desktop.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
If you make any X request involving a client window, you have to
|
||||
meta_error_trap_push() around the call; this is not necessary for
|
||||
X requests on the frame windows.
|
||||
Files in the core (display.[hc], window.[hc]) are not supposed to include
|
||||
gdk.h or gtk.h.
|
||||
|
||||
Remember that not all windows have frames, and window->frame can
|
||||
be NULL.
|
||||
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.
|
||||
|
||||
The code could use cleanup in a lot of places, feel free to do so.
|
||||
If you make any X request involving a client window, you have to
|
||||
meta_error_trap_push() around the call; this is not necessary for X
|
||||
requests on the frame windows.
|
||||
|
||||
Metacity is ideally a fully ICCCM and EWMH-compliant window manager.
|
||||
Reading these specifications is a useful first step to understanding
|
||||
the role of a window manager on an X11 desktop and the standards and
|
||||
conventions on which X11 desktops are based. Please refer to the
|
||||
COMPLIANCE file for additional information on these specifications and
|
||||
metacity's compliance therewith.
|
||||
Remember that not all windows have frames, and window->frame can be NULL.
|
||||
|
||||
Other important reading & where to get started
|
||||
Extra reading
|
||||
|
||||
There are some other important things to read to get oriented as well.
|
||||
These are:
|
||||
http://pobox.com/~hp/features.html
|
||||
rationales.txt
|
||||
doc/code-overview.txt
|
||||
|
||||
It pays to read http://pobox.com/~hp/features.html in order
|
||||
to understand the philosophy of Metacity.
|
||||
|
||||
The rationales.txt file has two things: (1) a list of design choices with
|
||||
links in the form of bugzilla bugs that discuss the issue, and (2) a list
|
||||
outstanding bug categories, each of which is tracked by a particular
|
||||
tracker bug in bugzilla from which you can find several closely related
|
||||
bug reports.
|
||||
|
||||
doc/code-overview.txt provides a fairly good overview of the code,
|
||||
including coverage of the function of the various files, the main
|
||||
structures and their relationships, and places to start looking in the
|
||||
code tailored to general categories of tasks.
|
||||
|
||||
Ideas for tasks to work on
|
||||
|
||||
There are a variety of things you could work on in the code. You may
|
||||
have ideas of your own, but in case you don't, let me provide a list of
|
||||
ideas you could choose from:
|
||||
|
||||
If you're ambitious, there's a list of things Havoc made that he'd really
|
||||
like to see tackled, which you can find at
|
||||
http://log.ometer.com/2004-05.html. Be sure to double check with someone
|
||||
to make sure the item is still relevant if you're interested in one of
|
||||
these. Another place to look for ideas, of course, is bugzilla. One can
|
||||
just do queries and look for things that look fixable.
|
||||
|
||||
However, perhaps the best way of getting ideas of related tasks to work
|
||||
on, is to look at the second half of the rationales.txt file, which tries
|
||||
to group bugs by type.
|
||||
|
720
NEWS
720
NEWS
@@ -1,3 +1,719 @@
|
||||
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]
|
||||
|
||||
2.13.34
|
||||
==
|
||||
|
||||
Thanks to Damien Carbery, Havoc Pennington, S<>ren Sandmann,
|
||||
Bj<EFBFBD>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<42>rn) [#98340]
|
||||
- correctly handle window alt-tab outlines in showing desktop mode
|
||||
(Bj<42>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<42>rn Lindqvist, and Elijah Newren for
|
||||
improvements in this release.
|
||||
|
||||
- Remove C99 style variable initiailization (Jens) [#322622]
|
||||
- Fix a logic error (Bj<42>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<42>rn Lindqvist for
|
||||
improvements in this release.
|
||||
|
||||
- Make a debugging message actually correspond to the code (Bj<42>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<42>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<42>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<42>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<72>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),
|
||||
<20>ygimantas Berucka (lt), Michiel Sikkes (nl), Leonid Kanter (ru), Danilo
|
||||
<1B>egan(sr), Baris Cicek (tr)
|
||||
|
||||
2.11.3
|
||||
==
|
||||
|
||||
Thanks to Bj<42>rn Lindqvist and Elijah Newren for improvements in
|
||||
this release.
|
||||
|
||||
- Check for the right versions of glib and gtk+ (Bj<42>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<42>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<42>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), <20>ygimantas Berucka (lt),
|
||||
Reinout van Schouwen (nl), Mugurel Tudor (ro), Danilo <20>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<64>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
|
||||
==
|
||||
|
||||
This is an unstable release to coincide with the release of Gnome
|
||||
2.10.0 Beta 2 (2.9.91).
|
||||
|
||||
Thanks to Elijah Newren, Balamurali Viswanathan, Stephane Loeuillet,
|
||||
Benjamin Kahn, Garrett (LeSage?), Jose Moya, Dave Ahlswede, Arvind
|
||||
Samptur, John Paul Wallington, Tim Herold, Muktha Narayan, Sinisa
|
||||
Segvic, Owen Taylor, Crispin Flowerday, "RHEL-3", KWin, and Google for
|
||||
improvements in this release.
|
||||
|
||||
- Refuse to focus a window with a modal transient, and focus the
|
||||
transient instead (Elijah) [#164716]
|
||||
- Make sure we get gconf notifications about the terminal command
|
||||
changing (Balamurali) [#160934]
|
||||
- Specify encoding of src/metacity.desktop.in (Stephane) [#151850]
|
||||
- New 48x48 default icon (Benjamin, Garrett) [#160660]
|
||||
- Add man pages for metacity-window-demo and metacity-theme-viewer
|
||||
(Jose, Dave) [#143513]
|
||||
- Fix minimized window display in workspace switcher after relogin
|
||||
with a saved session (Elijah) [#164677]
|
||||
- Ignore sticky windows for non-active workspaces (Elijah) [#165259]
|
||||
- Don't wireframe when accessibility is on, it apparently causes a
|
||||
desktop wide freeze. (Arvind) [#159538]
|
||||
- Keep tooltip on screen horizontally for xinerama (John) [#165261]
|
||||
- Stick and unstick transients with their parent automatically
|
||||
(Elijah) [#152283]
|
||||
- Shaded windows should not show up in pagers (Elijah) [#165377]
|
||||
- Treat splashscreens same as other windows for stacking (Elijah)
|
||||
[#165243]
|
||||
- Plug a pair of leaks (Elijah) [#165378]
|
||||
- Take into account the appropriate list of windows when placing a
|
||||
new one (Elijah) [#165381]
|
||||
- Correct misleading and inaccurate wording (Elijah) [#165380]
|
||||
- Handle xcomposite pkgconfig version regression (Tim) [#149368]
|
||||
- Make the warn-about-buggy-session-management-apps dialog be sticky
|
||||
(Elijah) [#164745]
|
||||
- Fix the problem with fullscreen windows on a different xinerama
|
||||
monitor not staying on top ("RHEL-3") [#156511]
|
||||
- Make the unfocussed title bar distinguishable in cases where it
|
||||
otherwise isn't for the Atlanta, Simple, and Bright themes (Muktha)
|
||||
[#125291]
|
||||
- Correct the stacking when returning from fullscreen mode (Elijah)
|
||||
[#165718]
|
||||
- Focus parents of dismissed transient windows in preference to the
|
||||
window that most recently had keyboard focus (Elijah) [#157360]
|
||||
- Make sure window->border_only is initialized so we don't get random
|
||||
windows without decorations (Elijah, Sinisa, Owen) [#145131]
|
||||
- Add period to the end of reduced_resources' description (Dave)
|
||||
[#165780]
|
||||
- If activation requests are too old, set the demands_attention hint
|
||||
instead of actually activating (Elijah, Crispin) [#166395]
|
||||
- Ignore xconfigurerequest events for stacking when it should be safe
|
||||
to do so (Elijah, Crispin, KWin, Google) [#166395]
|
||||
- Set a _METACITY_VERSION property (a utf8 string) on the WM check
|
||||
window (Elijah) [#165350]
|
||||
|
||||
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), <20>ygimantas Berucka (lt),
|
||||
Kjartan Maraas (nb), Kjartan Maraas (no), Duarte Loreto (pt),
|
||||
Marcel Telka (sk), Christian Rose (sv),
|
||||
Theppitak Karoonboonyanan (th)
|
||||
|
||||
2.9.8
|
||||
==
|
||||
|
||||
This is a brown paper bag release to cover up the crash I introduced
|
||||
in version 2.9.5. Thanks to Sebastien Bacher and the bleeding edge
|
||||
Ubuntu users for quickly catching the occasional crash that my fix in
|
||||
#123576 could cause, and for verifying that the patch I made fixed
|
||||
this issue (I couldn't duplicate).
|
||||
|
||||
- Don't forget to initialize display->grab_old_window_stacking
|
||||
[#165093]
|
||||
|
||||
2.9.5
|
||||
==
|
||||
|
||||
This is an unstable release to coincide with the release of Gnome
|
||||
2.10.0 Beta 1 (2.9.90).
|
||||
|
||||
Thanks to Vincent Noel, Elijah Newren, and John Paul Wallington for
|
||||
fixes in this release.
|
||||
|
||||
- Restore original stacking when aborting an alt-esc window switch
|
||||
operation (Elijah) [#123576]
|
||||
- Fix vertical maximization for second screen (John) [#163420]
|
||||
- Show labels in bold for windows that demand attention (Vincent)
|
||||
[#164590]
|
||||
- In the tab task switcher popup, dim the window icon and put its
|
||||
name between brackets when the window is minimized (Vincent)
|
||||
[#136666]
|
||||
- Correct highlighting of windows in workspace switcher popup
|
||||
(Elijah) [#163450]
|
||||
|
||||
Translations
|
||||
zh_CN (Funda Wang), nb (Kjartan Maraas), nn (Kjartan Maraas), de
|
||||
(Frank Arnold)
|
||||
|
||||
2.9.3
|
||||
==
|
||||
|
||||
This is an unstable release to coincide with the release of Gnome 2.9.4.
|
||||
|
||||
Thanks to Leena Gunda, Thomas Fitzsimmons, and mild7 users sourceforge
|
||||
net, and Elijah Newren for fixes in this release.
|
||||
|
||||
- Don't focus the panel on click (Elijah) [#160470, and others]
|
||||
- Make sure the save session dialog appears focused (Elijah) [#162983]
|
||||
- Correctly restore size of window when double clicking the titlebar
|
||||
to unmaximize (Leena) [#161236]
|
||||
- Install schema data from builddir not srcdir (Thomas) [#161417]
|
||||
- Provide more documentation to make it easier for people to
|
||||
contribute to Metacity (Elijah) [#162646]
|
||||
- Allow users to move the window around immediately after
|
||||
double-clicking to shade (Elijah) [#90290]
|
||||
- Focus windows that manually position themselves too (Elijah) [#107347]
|
||||
- Don't show window menu if all options are invalid (Elijah) [#148915]
|
||||
- Exclude windows with skip_taskbar hint set from the alt-tab list;
|
||||
they'll appear in the ctrl-alt-tab list instead. (mild7 users
|
||||
sourceforge net) [#106249]
|
||||
- Wrap XSetInputFocus to make display->expected_focus_window more
|
||||
reliable (Elijah) [#154598]
|
||||
- Remove conflict between windows on multiple workspaces and hidden
|
||||
being a global quantity (Elijah) [#156182]
|
||||
|
||||
Translations
|
||||
es (Francisco Javier F. Serrador), sv (Christian Rose), cs (Miloslav
|
||||
Trmac), ja (Takeshi AIHANA)
|
||||
|
||||
2.9.2
|
||||
==
|
||||
|
||||
@@ -13,8 +729,8 @@ Mille-Mathias for fixes in this release.
|
||||
- Remove deprecated capplet (Alex, ash) [#160753]
|
||||
|
||||
Translations
|
||||
da (Martin Willemoes Hansen), bg (Alexander Shopov), en_CA (Adam
|
||||
Weinberger)
|
||||
da (Martin Willemoes Hansen), bg (Alexander Shopov), en_CA (Adam
|
||||
Weinberger)
|
||||
|
||||
2.9.1
|
||||
==
|
||||
|
5
README
5
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-6
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
COMPILING METACITY
|
||||
===
|
||||
|
36
configure.in
36
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.2],
|
||||
AC_INIT([metacity], [2.13.55],
|
||||
[http://bugzilla.gnome.org/enter_bug.cgi?product=metacity])
|
||||
|
||||
AC_CONFIG_SRCDIR(src/display.c)
|
||||
@@ -155,12 +155,15 @@ 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"
|
||||
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 hy id is it ja ko ku lt lv mk ml mn ms nb ne nl nn no 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"
|
||||
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"
|
||||
@@ -198,7 +201,7 @@ fi
|
||||
## or the render-specific check later
|
||||
have_xrender=no
|
||||
|
||||
XCOMPOSITE_VERSION=1.0
|
||||
XCOMPOSITE_VERSION=0.2
|
||||
AC_MSG_CHECKING([Xcomposite >= $XCOMPOSITE_VERSION])
|
||||
if $PKG_CONFIG --atleast-version $XCOMPOSITE_VERSION xcomposite; then
|
||||
have_xcomposite=yes
|
||||
@@ -219,7 +222,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 +261,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
|
||||
@@ -446,11 +463,15 @@ 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([
|
||||
Makefile
|
||||
doc/Makefile
|
||||
doc/man/Makefile
|
||||
src/Makefile
|
||||
src/wm-tester/Makefile
|
||||
src/libmetacity-private.pc
|
||||
@@ -497,6 +518,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.12.x for stable (gnome-2-12 branch in CVS)"
|
||||
|
@@ -1,2 +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
|
||||
|
185
doc/code-overview.txt
Normal file
185
doc/code-overview.txt
Normal file
@@ -0,0 +1,185 @@
|
||||
This is not meant to be comprehensive by any means. Rather it is
|
||||
meant as just a brief overview of some of the bigger structures and
|
||||
files, with guides for a variety of task categories providing places
|
||||
to start looking in the code and things to look for.
|
||||
|
||||
Overview
|
||||
Jobs of various files
|
||||
Major data structures and their relationships
|
||||
Getting started -- where to look
|
||||
|
||||
|
||||
Jobs of various files
|
||||
src/window.c is where all the guts of the window manager live. This is
|
||||
basically the only remotely scary file.
|
||||
|
||||
src/frames.c is the GtkWidget that handles drawing window frames.
|
||||
|
||||
src/core.h defines the interface used by the GTK portion of the window
|
||||
manager to talk to the other portions. There's some cruft in here that's
|
||||
unused, since nearly all window operations have moved out of this file so
|
||||
frameless apps can have window operations.
|
||||
|
||||
src/ui.h defines the interface the plain Xlib portion of the window
|
||||
manager uses to talk to the GTK portion.
|
||||
|
||||
src/theme.c and src/theme-parser.c have the theme system; this is
|
||||
well-modularized from the rest of the code, since the theme viewer app
|
||||
links to these files in addition to the WM itself.
|
||||
|
||||
Major data structures and their relationships
|
||||
Major structs have a "Meta" prefix, thus MetaDisplay, MetaScreen,
|
||||
MetaWindow, etc. This serves as a way of namespacing in C. It also has
|
||||
the side effect of avoiding conflicts with common names that X already
|
||||
uses such as Display, Screen, Window, etc. Note that when I refer to a
|
||||
display below, I'm meaning a MetaDisplay and not a Display.
|
||||
|
||||
Don't confuse displays and screens. While Metacity can run with multiple
|
||||
displays, it is kind of useless since you might as well just run two
|
||||
copies of Metacity. However, having multiple screens per display is
|
||||
useful and increasingly common (known as "multiscreen" and "xinerama"
|
||||
setups, where users make use of more than one monitor). You should
|
||||
basically think of a display as a combination of one or more monitors
|
||||
with a single keyboard (...and usually only one mouse).
|
||||
|
||||
There is also a significant difference between multiscreen and xinerama
|
||||
as well. Basically, each MetaScreen is a root window (root node in the
|
||||
tree of windows). With Xinerama, a single root window appears to span
|
||||
multiple monitors, whereas with multiscreen a root window is confined to
|
||||
a single monitor. To re-emphasize the distinction between a display and
|
||||
a screen, the pointer and keyboard are shared between all root windows
|
||||
for a given display.
|
||||
|
||||
The display keeps track of a lot of various global quantities, but in
|
||||
particular has a compositor and a list (GList) of screens.
|
||||
|
||||
A compositor is an opaque structure (only defined in compositor.c),
|
||||
meaning that you'll only reference the API for it. It handles (or will
|
||||
handle) cool stuff with the new X extensions, such as smooth resizing and
|
||||
alpha transparency.
|
||||
|
||||
A screen keeps track of a number of quantities as well, in particular a
|
||||
stack and a list of workspaces.
|
||||
|
||||
A stack is basically a list of windows, and the depth order they have
|
||||
relative to each other (which thus determines which windows are on top
|
||||
and which are obscured).
|
||||
|
||||
A workspace mostly contains a list of windows for the workspace, but also
|
||||
has a few other quantities as well (a list of struts which are areas
|
||||
where windows should not be placed and an mru_list or "most recently used
|
||||
window list").
|
||||
|
||||
A window has a huge list of quantities for keeping track of things about
|
||||
a window on the screen. (We want to avoid making this list larger
|
||||
because the memory for all these quantities is per window.) One item in
|
||||
particular that a window has, though, is a frame.
|
||||
|
||||
A frame is the decorations that surround the window (i.e. the titlebar and
|
||||
the minimize and close buttons and the part that you can use to resize),
|
||||
and contains a handful of variables related to that, but no other major
|
||||
structures.
|
||||
|
||||
Getting started -- where to look
|
||||
Getting started on developing free software projects can often be like
|
||||
being dropped off in a town that is unknown to you and being told to make
|
||||
a map, when various road and building signs are missing or fading. To
|
||||
try to alleviate that initial difficulty in orientation, below I list a
|
||||
variety of general task categories with file, function, variable, and x
|
||||
property names that may be useful to fixing bugs or writing features that
|
||||
fall within that category.
|
||||
|
||||
First, though, it's useful to note that most event and message passing
|
||||
goes through display.c:event_callback(), so that's often a good place to
|
||||
start reading for general familiarity with the code (actually, I'd
|
||||
suggest skipping down to the first switch statement within that
|
||||
function). Of course, not all events go through that function, as there
|
||||
are a few other places that handle events too such as frames.c.
|
||||
|
||||
Anyway, without further ado, here are the categories and (hopefully)
|
||||
useful things to look at for each:
|
||||
|
||||
Focus issues (i.e. issues with which window is active):
|
||||
doc/how-to-get-focus-right.txt
|
||||
meta_workspace_focus_default_window
|
||||
_NET_ACTIVE_WINDOW
|
||||
_NET_WM_USER_TIME
|
||||
meta_window_focus
|
||||
meta_display_(set_input|focus_the_no)_focus_window
|
||||
XSetInputFocus (only for purposes of understanding how X focus/input works)
|
||||
CurrentTime (mostly, you should just think "Bad; don't use it")
|
||||
|
||||
Compositor stuff (X extension for eye candy like transparency):
|
||||
compositor.c
|
||||
The luminocity module in CVS
|
||||
|
||||
Window depth (i.e. stacking or lowering/raising) issues:
|
||||
stack.c
|
||||
_NET_CLIENT_LIST_STACKING
|
||||
transient_for
|
||||
WM_TRANSIENT_FOR
|
||||
meta_window_(raise|lower)
|
||||
_NET_WM_WINDOW_TYPE
|
||||
_NET_WM_MOUSE_ACTION/_NET_WM_TAKE_ACTIVITY? (aren't yet in EWMH)
|
||||
|
||||
Window placement issues:
|
||||
place.c
|
||||
constraints.c
|
||||
_NET_WM_STRUT
|
||||
WM_SIZE_HINTS
|
||||
|
||||
Moving and resizing issues:
|
||||
constraints.c
|
||||
update_move
|
||||
update_resize
|
||||
meta_window_handle_mouse_grab_op_event
|
||||
_NET_MOVERESIZE_WINDOW
|
||||
_NET_WM_STRUT
|
||||
|
||||
Drag and drop issues:
|
||||
the XDND protocol (see http://www.newplanetsoftware.com/xdnd/ and
|
||||
http://freedesktop.org/Standards/XDND)
|
||||
_NET_WM_MOUSE_ACTION/_NET_WM_TAKE_ACTIVITY (aren't yet in EWMH)
|
||||
A general pointer: what causes the difficulty here is that when the
|
||||
application receives a mouse click to start a drag, it does a grab
|
||||
so that the window manager doesn't get any further events; thus
|
||||
correcting things require standards so that applications and window
|
||||
managers can collaborate correctly
|
||||
|
||||
Theme issues: ???
|
||||
doc/theme-format.txt
|
||||
theme.c
|
||||
theme-parser.c
|
||||
(ui.c, core.c, frames.c, frame.c? I dunno...)
|
||||
|
||||
Session management issues: ???
|
||||
session.c
|
||||
http://www.x.org/X11R6.8.1/doc/SM/xsmp.pdf ?
|
||||
http://www.x.org/X11R6.8.1/doc/SM/SMlib.pdf ?
|
||||
meta_window_apply_session_info
|
||||
|
||||
Tasklist and Workspace switcher issues:
|
||||
window-props.c
|
||||
various functions in screen.c (especially ones using XChangeProperty)
|
||||
xprops.c
|
||||
The libwnck module in cvs
|
||||
meta_window_client_message
|
||||
Lots of the EWMH
|
||||
|
||||
Window and workspace selection/changing issues:
|
||||
tabpopup.c
|
||||
keybindings.c, functions: *_workspace*, *_tab_*
|
||||
meta_screen_ensure_*_popup
|
||||
display.c, functions: *_tab*
|
||||
|
||||
Key and mouse binding actions:
|
||||
keybindings.c
|
||||
meta_frames_button_(press|release)_event
|
||||
display.c: event_callback, but only the (Key|Button)_(Press|Release) cases
|
||||
|
||||
Xinerama and multiscreen: ???
|
||||
In general, just search for Xinerama, but in particular see
|
||||
screen.c
|
||||
window.c
|
||||
place.c
|
||||
constraints.c
|
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.
|
@@ -37,6 +37,14 @@ Focus method Behavior
|
||||
mouse Focus the window containing the pointer if there is one,
|
||||
otherwise focus the designated "no_focus_window".
|
||||
|
||||
Note that "most recently used window", as used here, has a slightly
|
||||
different connotation than "most recent to have keyboard focus". This
|
||||
is because when a user activates a window that is a transient, its
|
||||
ancestor(s) should be considered to be more recently used than other
|
||||
windows that have had the keyboard focus more recently. (See bug
|
||||
157360; this may mean that the alt-tab order should also change
|
||||
simultaneously, although the current implementation does not do that.)
|
||||
|
||||
Also, sometimes a new window will be mapped (e.g. unminimizing a
|
||||
window or launching a new application). Most users want to interact
|
||||
with new windows right away, so these should typically be focused.
|
||||
@@ -71,14 +79,35 @@ 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. For all focus modes, we only focus
|
||||
these windows if the user clicks on them or uses Ctrl-Alt-Tab to
|
||||
navigate to them.
|
||||
the panel) present a special case, at least partially due to the lack
|
||||
of decorations. For WM_DESKTOP windows, we only focus them if the
|
||||
user explicitly requests it (e.g. clicks on the window, uses
|
||||
Ctrl-Alt-Tab to navigate to it, uses a keybinding to show the desktop,
|
||||
etc.). For WM_DOCK windows, we do not focus unless we receive a very
|
||||
explicit request (e.g. Ctrl-Alt-Tab or a _NET_ACTIVE_WINDOW message;
|
||||
not normal clicks).
|
||||
|
||||
|
||||
|
||||
@@ -91,10 +120,12 @@ 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=120100 (maybe a different bug?)
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=160470
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=120100
|
||||
|
||||
There were many bugs which had to be fixed to get all the above
|
||||
working; they helped form these policies and/or show the difficulties
|
||||
@@ -108,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
|
||||
@@ -115,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
|
||||
@@ -135,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
|
||||
@@ -143,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
|
||||
@@ -169,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
|
||||
|
2
doc/man/.cvsignore
Normal file
2
doc/man/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
||||
Makefile
|
||||
Makefile.in
|
3
doc/man/Makefile.am
Normal file
3
doc/man/Makefile.am
Normal file
@@ -0,0 +1,3 @@
|
||||
man_MANS = metacity-theme-viewer.1 metacity-window-demo.1
|
||||
|
||||
EXTRA_DIST = $(man_MANS)
|
43
doc/man/metacity-theme-viewer.1
Normal file
43
doc/man/metacity-theme-viewer.1
Normal file
@@ -0,0 +1,43 @@
|
||||
.\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection
|
||||
.\" other parms are allowed: see man(7), man(1)
|
||||
.\"
|
||||
.\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>.
|
||||
.\"
|
||||
.TH METACITY-THEME-VIEWER 1 "1 June 2004"
|
||||
.SH NAME
|
||||
metacity-theme-viewer \- view metacity themes
|
||||
.SH SYNOPSIS
|
||||
.B metacity-theme-viewer
|
||||
[
|
||||
.I THEMENAME
|
||||
]
|
||||
.SH DESCRIPTION
|
||||
.\" Putting a newline after each sentence can generate better output.
|
||||
.B metacity-theme-viewer
|
||||
allows you to preview any installed Metacity theme.
|
||||
.PP
|
||||
When designing a new Metacity theme, you can use
|
||||
.B metacity-theme-viewer
|
||||
to measure the performance of a window frame option, and to preview
|
||||
the option.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.I THEMENAME
|
||||
Name of the theme to be shown (\fIAtlanta\fR by default).
|
||||
It is case-sensitive.
|
||||
.SH FILES
|
||||
.br
|
||||
.nf
|
||||
.TP
|
||||
.I /usr/share/themes
|
||||
system themes directory
|
||||
.TP
|
||||
.I /usr/share/themes/*/metacity-1/metacity-theme-1.xml
|
||||
theme specification file
|
||||
.SH AUTHOR
|
||||
This manual page was written by Jose M. Moya <josem@die.upm.es>, for
|
||||
the Debian GNU/Linux system (but may be used by others).
|
||||
.SH "SEE ALSO"
|
||||
.\" Always quote multiple words for .SH
|
||||
.BR metacity (1),
|
||||
.BR metacity-window-demo (1).
|
25
doc/man/metacity-window-demo.1
Normal file
25
doc/man/metacity-window-demo.1
Normal file
@@ -0,0 +1,25 @@
|
||||
.\" In .TH, FOO should be all caps, SECTION should be 1-8, maybe w/ subsection
|
||||
.\" other parms are allowed: see man(7), man(1)
|
||||
.\"
|
||||
.\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>.
|
||||
.\"
|
||||
.TH METACITY-WINDOW-DEMO 1 "1 June 2004"
|
||||
.SH NAME
|
||||
metacity-window-demo \- demo of window features
|
||||
.SH SYNOPSIS
|
||||
.B metacity-window-demo
|
||||
.SH DESCRIPTION
|
||||
.\" Putting a newline after each sentence can generate better output.
|
||||
This program demonstrates various kinds of windows that window
|
||||
managers and window manager themes should handle.
|
||||
.PP
|
||||
Be sure to tear off the menu and toolbar, those are also a special
|
||||
kind of window.
|
||||
.SH AUTHOR
|
||||
This manual page was written by Jose M. Moya <josem@die.upm.es>, for
|
||||
the Debian GNU/Linux system (but may be used by others).
|
||||
.SH "SEE ALSO"
|
||||
.\" Always quote multiple words for .SH
|
||||
.BR x-window-manager (1),
|
||||
.BR metacity (1),
|
||||
.BR metacity-theme-viewer (1).
|
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.
|
792
po/ChangeLog
792
po/ChangeLog
@@ -1,3 +1,795 @@
|
||||
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.
|
||||
|
||||
2005-02-06 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2005-02-06 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2005-02-06 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Vladimir Petkov <vpetkov@i-space.org>
|
||||
|
||||
2005-02-06 Pauli Virtanen <pauli.virtanen@hut.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2005-02-05 Frank Arnold <farnold@cvs.gnome.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2005-02-05 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2005-02-05 Žygimantas Beručka <uid0@akl.lt>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2005-02-04 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2005-02-04 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2005-02-02 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2005-02-02 Frank Arnold <farnold@cvs.gnome.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2005-02-01 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Update
|
||||
* no.po: Update
|
||||
|
||||
2005-02-01 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2005-02-01 Žygimantas Beručka <uid0@akl.lt>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2005-01-31 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2005-01-31 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2005-01-31 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2005-01-30 Žygimantas Beručka <uid0@akl.lt>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2005-01-29 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2005-01-29 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2005-01-29 Marcel Telka <marcel@telka.sk>
|
||||
|
||||
* sk.po: Updated Slovak translation.
|
||||
|
||||
2005-01-29 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2005-01-28 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Update
|
||||
* no.po: Update
|
||||
|
||||
2005-01-26 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2005-01-26 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2005-01-26 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
* pt.po: Updated Portuguese translation.
|
||||
|
||||
2005-01-25 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2005-01-23 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2005-01-21 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Update this too while we're at it.
|
||||
|
||||
2005-01-21 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nn.po: Update
|
||||
|
||||
2005-01-15 Frank Arnold <farnold@cvs.gnome.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2005-01-01 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2004-12-28 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2004-12-25 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2004-12-21 Takeshi AIHANA <aihana@gnome.gr.jp>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2004-12-20 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
1120
po/en_CA.po
1120
po/en_CA.po
File diff suppressed because it is too large
Load Diff
1114
po/en_GB.po
1114
po/en_GB.po
File diff suppressed because it is too large
Load Diff
1564
po/pt_BR.po
1564
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
1095
po/sr@Latn.po
1095
po/sr@Latn.po
File diff suppressed because it is too large
Load Diff
1155
po/zh_CN.po
1155
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
@@ -59,3 +59,6 @@ Tracking bugs
|
||||
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,6 +13,8 @@ metacity_SOURCES= \
|
||||
async-getprop.h \
|
||||
bell.h \
|
||||
bell.c \
|
||||
boxes.h \
|
||||
boxes.c \
|
||||
common.h \
|
||||
compositor.c \
|
||||
compositor.h \
|
||||
@@ -25,6 +27,8 @@ metacity_SOURCES= \
|
||||
display.h \
|
||||
draw-workspace.c \
|
||||
draw-workspace.h \
|
||||
edge-resistance.c \
|
||||
edge-resistance.h \
|
||||
effects.c \
|
||||
effects.h \
|
||||
errors.c \
|
||||
@@ -133,11 +137,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@
|
||||
|
||||
@@ -155,7 +161,7 @@ schema_DATA = $(schema_in_files:.schemas.in=.schemas)
|
||||
|
||||
if GCONF_SCHEMAS_INSTALL
|
||||
install-data-local:
|
||||
GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$(schema_DATA)
|
||||
GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA)
|
||||
else
|
||||
install-data-local:
|
||||
endif
|
||||
|
@@ -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)
|
||||
|
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 */
|
26
src/common.h
26
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;
|
||||
@@ -153,6 +155,8 @@ 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 +188,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 +246,3 @@ struct _MetaButtonLayout
|
||||
(ycoord) < ((rect).y + (rect).height))
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
1500
src/compositor.c
1500
src/compositor.c
File diff suppressed because it is too large
Load Diff
@@ -25,6 +25,8 @@
|
||||
#include "util.h"
|
||||
#include "display.h"
|
||||
|
||||
typedef void (* MetaMinimizeFinishedFunc) (gpointer data);
|
||||
|
||||
MetaCompositor* meta_compositor_new (MetaDisplay *display);
|
||||
void meta_compositor_unref (MetaCompositor *compositor);
|
||||
void meta_compositor_process_event (MetaCompositor *compositor,
|
||||
@@ -35,22 +37,21 @@ void meta_compositor_add_window (MetaCompositor *compositor,
|
||||
XWindowAttributes *attrs);
|
||||
void meta_compositor_remove_window (MetaCompositor *compositor,
|
||||
Window xwindow);
|
||||
void meta_compositor_set_debug_updates (MetaCompositor *compositor,
|
||||
gboolean debug_updates);
|
||||
|
||||
void meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
MetaScreen *screen);
|
||||
void meta_compositor_unmanage_screen (MetaCompositor *compositor,
|
||||
MetaScreen *screen);
|
||||
|
||||
void meta_compositor_damage_window (MetaCompositor *compositor,
|
||||
MetaWindow *window);
|
||||
void meta_compositor_minimize (MetaCompositor *compositor,
|
||||
MetaWindow *window,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height,
|
||||
MetaMinimizeFinishedFunc finished_cb,
|
||||
gpointer finished_data);
|
||||
|
||||
#endif /* META_COMPOSITOR_H */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
2489
src/constraints.c
2489
src/constraints.c
File diff suppressed because it is too large
Load Diff
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2002 Red Hat, Inc.
|
||||
* 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
|
||||
@@ -28,32 +29,18 @@
|
||||
|
||||
typedef enum
|
||||
{
|
||||
META_RESIZE_LEFT_OR_TOP,
|
||||
META_RESIZE_CENTER,
|
||||
META_RESIZE_RIGHT_OR_BOTTOM
|
||||
} MetaResizeDirection;
|
||||
META_IS_CONFIGURE_REQUEST = 1 << 0,
|
||||
META_DO_GRAVITY_ADJUST = 1 << 1,
|
||||
META_IS_USER_ACTION = 1 << 2,
|
||||
META_IS_MOVE_ACTION = 1 << 3,
|
||||
META_IS_RESIZE_ACTION = 1 << 4
|
||||
} MetaMoveResizeFlags;
|
||||
|
||||
void meta_window_constrain (MetaWindow *window,
|
||||
MetaFrameGeometry *fgeom,
|
||||
MetaFrameGeometry *orig_fgeom,
|
||||
MetaMoveResizeFlags flags,
|
||||
int resize_gravity,
|
||||
const MetaRectangle *orig,
|
||||
int x_move_delta,
|
||||
int y_move_delta,
|
||||
MetaResizeDirection x_direction,
|
||||
int x_delta,
|
||||
MetaResizeDirection y_direction,
|
||||
int y_delta,
|
||||
MetaRectangle *new);
|
||||
|
||||
MetaResizeDirection meta_x_direction_from_gravity (int gravity);
|
||||
MetaResizeDirection meta_y_direction_from_gravity (int gravity);
|
||||
|
||||
#endif /* META_CONSTRAINTS_H */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
47
src/core.c
47
src/core.c
@@ -3,6 +3,7 @@
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2003 Rob Adams
|
||||
* Copyright (C) 2004-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
|
||||
@@ -47,6 +48,23 @@ meta_core_get_client_size (Display *xdisplay,
|
||||
*height = window->rect.height;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_core_titlebar_is_onscreen (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
{
|
||||
MetaDisplay *display;
|
||||
MetaWindow *window;
|
||||
|
||||
display = meta_display_for_x_display (xdisplay);
|
||||
window = meta_display_lookup_x_window (display, frame_xwindow);
|
||||
|
||||
if (window == NULL || window->frame == NULL)
|
||||
meta_bug ("No such frame window 0x%lx!\n", frame_xwindow);
|
||||
|
||||
return meta_window_titlebar_is_onscreen (window);
|
||||
}
|
||||
|
||||
|
||||
Window
|
||||
meta_core_get_client_xwindow (Display *xdisplay,
|
||||
Window frame_xwindow)
|
||||
@@ -251,14 +269,15 @@ meta_core_user_lower_and_unfocus (Display *xdisplay,
|
||||
|
||||
meta_window_lower (window);
|
||||
|
||||
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK)
|
||||
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK &&
|
||||
meta_prefs_get_raise_on_click ())
|
||||
{
|
||||
/* Move window to the back of the focusing workspace's MRU list.
|
||||
* Do extra sanity checks to avoid possible race conditions.
|
||||
* (Borrowed from window.c.)
|
||||
*/
|
||||
if (window->screen->active_workspace &&
|
||||
meta_window_visible_on_workspace (window,
|
||||
meta_window_located_on_workspace (window,
|
||||
window->screen->active_workspace))
|
||||
{
|
||||
GList* link;
|
||||
@@ -370,7 +389,8 @@ meta_core_maximize (Display *xdisplay,
|
||||
if (window == NULL || window->frame == NULL)
|
||||
meta_bug ("No such frame window 0x%lx!\n", frame_xwindow);
|
||||
|
||||
meta_window_maximize (window);
|
||||
meta_window_maximize (window,
|
||||
META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -386,10 +406,12 @@ meta_core_toggle_maximize (Display *xdisplay,
|
||||
if (window == NULL || window->frame == NULL)
|
||||
meta_bug ("No such frame window 0x%lx!\n", frame_xwindow);
|
||||
|
||||
if (window->maximized)
|
||||
meta_window_unmaximize (window);
|
||||
if (META_WINDOW_MAXIMIZED (window))
|
||||
meta_window_unmaximize (window,
|
||||
META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL);
|
||||
else
|
||||
meta_window_maximize (window);
|
||||
meta_window_maximize (window,
|
||||
META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -405,7 +427,8 @@ meta_core_unmaximize (Display *xdisplay,
|
||||
if (window == NULL || window->frame == NULL)
|
||||
meta_bug ("No such frame window 0x%lx!\n", frame_xwindow);
|
||||
|
||||
meta_window_unmaximize (window);
|
||||
meta_window_unmaximize (window,
|
||||
META_MAXIMIZE_HORIZONTAL | META_MAXIMIZE_VERTICAL);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -589,7 +612,8 @@ meta_core_show_window_menu (Display *xdisplay,
|
||||
if (window == NULL || window->frame == NULL)
|
||||
meta_bug ("No such frame window 0x%lx!\n", frame_xwindow);
|
||||
|
||||
meta_window_raise (window);
|
||||
if (meta_prefs_get_raise_on_click ())
|
||||
meta_window_raise (window);
|
||||
meta_window_focus (window, timestamp);
|
||||
|
||||
meta_window_show_menu (window, root_x, root_y, button, timestamp);
|
||||
@@ -690,6 +714,9 @@ meta_core_get_menu_accelerator (MetaMenuOp menu_op,
|
||||
case META_MENU_OP_MOVE_DOWN:
|
||||
name = META_KEYBINDING_MOVE_WORKSPACE_DOWN;
|
||||
break;
|
||||
case META_MENU_OP_RECOVER:
|
||||
/* No keybinding for this one */
|
||||
break;
|
||||
}
|
||||
|
||||
if (name)
|
||||
@@ -851,9 +878,9 @@ meta_core_get_screen_size (Display *xdisplay,
|
||||
meta_bug ("No such frame window 0x%lx!\n", frame_on_screen);
|
||||
|
||||
if (width)
|
||||
*width = window->screen->width;
|
||||
*width = window->screen->rect.width;
|
||||
if (height)
|
||||
*height = window->screen->height;
|
||||
*height = window->screen->rect.height;
|
||||
}
|
||||
|
||||
void
|
||||
|
@@ -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
|
||||
@@ -31,6 +32,9 @@ void meta_core_get_client_size (Display *xdisplay,
|
||||
int *width,
|
||||
int *height);
|
||||
|
||||
gboolean meta_core_titlebar_is_onscreen (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
|
||||
Window meta_core_get_client_xwindow (Display *xdisplay,
|
||||
Window frame_xwindow);
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user