Compare commits
325 Commits
METACITY_2
...
METACITY_2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
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 |
@@ -15,6 +15,7 @@ ltconfig
|
||||
ltmain.sh
|
||||
stamp-h
|
||||
stamp-h.in
|
||||
stamp-h1
|
||||
stamp.h
|
||||
version.h
|
||||
config.h.in
|
||||
|
23
HACKING
23
HACKING
@@ -69,16 +69,22 @@ Relevant standards and X properties
|
||||
xprop
|
||||
in a terminal and click on one of the windows on your screen. That gives
|
||||
you the x properties for that window. Look through them and get a basic
|
||||
idea of what's there for kicks. Next, try running
|
||||
idea of what's there for kicks. Note that you can get rid of some of the
|
||||
verboseness by grepping out the _NET_WM_ICON stuff, i.e.
|
||||
xprop | grep -v _NET_WM_ICON
|
||||
Next, try running
|
||||
xprop -root
|
||||
in a terminal. There's all the properties of the root window (which you
|
||||
can think of as the "main" window). You can also manually specify
|
||||
individual windows that you want the properties of with
|
||||
can think of as the "main" Xserver window). You can also manually
|
||||
specify individual windows that you want the properties of with
|
||||
xprop -id <id>
|
||||
if you know the id of the window in question (you can get this from the
|
||||
_NET_CLIENT_STACKING property of the root window). Finally, it can also
|
||||
be useful to add "-spy" (without the quotes) to the xprop command to get
|
||||
it to continually monitor that window and report any changes to you.
|
||||
if you know the id of the window in question. You can get the id of a
|
||||
given window by either running xwininfo, e.g.
|
||||
xwininfo | grep "Window id" | cut -f 4 -d ' '
|
||||
or by looking at the _NET_CLIENT_STACKING property of the root
|
||||
window. Finally, it can also be useful to add "-spy" (without the
|
||||
quotes) to the xprop command to get it to continually monitor that
|
||||
window and report any changes to you.
|
||||
|
||||
Debugging information
|
||||
Trying to run a window manager under a typical debugger, such as gdb,
|
||||
@@ -101,6 +107,9 @@ Debugging information
|
||||
useful to get more information than just warnings. You can set
|
||||
METACITY_VERBOSE to do that, like so:
|
||||
METACITY_VERBOSE=1 METACITY_USE_LOGFILE=1 metacity --replace
|
||||
(note that METACITY_VERBOSE=1 can be problematic without
|
||||
METACITY_USE_LOGFILE=1; avoid it unless running in from something that
|
||||
won't be managed by the new Metacity--see bug 305091 for more details).
|
||||
There are also other flags, such as METACITY_DEBUG, most of which I
|
||||
haven't tried and don't know what they do. Go to the source code
|
||||
directory and run
|
||||
|
505
NEWS
505
NEWS
@@ -1,3 +1,508 @@
|
||||
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
|
||||
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
|
||||
==
|
||||
|
||||
|
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
|
||||
===
|
||||
|
31
configure.in
31
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.3],
|
||||
AC_INIT([metacity], [2.13.2],
|
||||
[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
|
||||
@@ -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
|
||||
@@ -451,6 +468,7 @@ fi
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
doc/Makefile
|
||||
doc/man/Makefile
|
||||
src/Makefile
|
||||
src/wm-tester/Makefile
|
||||
src/libmetacity-private.pc
|
||||
@@ -497,6 +515,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
|
||||
|
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,9 +79,26 @@ to alert the user that there is a window to work with:
|
||||
Additionally, the user may decide to use the keyboard instead of the mouse
|
||||
to navigate between windows (referred to as "keynav"). This poses no
|
||||
problems for click-to-focus (because the same invariant can be
|
||||
maintained), but for sloppy and mouse focus it means that EnterNotify
|
||||
and LeaveNotify events should be ignored (they can be generated
|
||||
without using the mouse, for example, by grabs).
|
||||
maintained), but for sloppy and mouse focus it requires extra work to
|
||||
attempt to handle the INHERENTLY CONFLICTING CONSTRAINTS. Metacity does
|
||||
this by having a mouse_mode boolean used to determine which of the two
|
||||
sets of invariants holds. This mode is set according to which method was
|
||||
most recently used to choose a focus window:
|
||||
1) When receiving EnterNotify/LeaveNotify events from mouse movement, set
|
||||
mouse_mode to TRUE.
|
||||
2) When using keynav to choose a focus window (e.g. alt-tab, alt-esc,
|
||||
move-window-to-workspace keybindings), set mouse_mode to FALSE.
|
||||
3) When handling events that don't choose a focus window but rather need
|
||||
a focus_window chosen for them (e.g. switch-to-workspace keybindings),
|
||||
don't change the mouse_mode and just use the current value.
|
||||
Note that grabs present a special case since they can generate EnterNotify
|
||||
and LeaveNotify events without using the mouse, thus these events should be
|
||||
ignored when the crossing mode is NotifyGrab or NotifyUngrab. THIS
|
||||
MOUSENAV/KEYNAV MODERATION METHOD IS NOT PERFECT--there are corner cases
|
||||
when trying to mix-and-match between mousenav and keynav simultaneously
|
||||
that cause problems; but it appears to be the most reasonable tradeoff and
|
||||
works well in most cases, especially if the user sticks to just mousenav
|
||||
for a long time or just keynav for a long time.
|
||||
|
||||
Finally, windows of type WM_DOCK or WM_DESKTOP (e.g. the desktop and
|
||||
the panel) present a special case, at least partially due to the lack
|
||||
@@ -95,7 +120,8 @@ To read more about the bugs that inspired these choices:
|
||||
Also, the EWMH spec, especially the parts relating to _NET_WM_USER_TIME
|
||||
- Modal vs. non-modal dialogs that get denied focus when mapped
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=151996
|
||||
- Ignoring EnterNotify and LeaveNotify events during keynav
|
||||
- Mousenav vs. Keynav in mouse and sloppy focus modes
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=167545
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=101190
|
||||
- Not focusing panels
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=160470
|
||||
@@ -113,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
|
||||
@@ -120,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
|
||||
@@ -140,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
|
||||
@@ -148,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
|
||||
@@ -174,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).
|
620
po/ChangeLog
620
po/ChangeLog
@@ -1,3 +1,623 @@
|
||||
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.
|
||||
|
246
po/en_CA.po
246
po/en_CA.po
@@ -1,17 +1,17 @@
|
||||
# English/Canada translation of metacity.
|
||||
# Copyright (C) 2004 Adam Weinberger and the GNOME Foundation
|
||||
# Copyright (C) 2004-2005 Adam Weinberger and the GNOME Foundation
|
||||
# This file is distributed under the same licence as the metacity package.
|
||||
# Maintainer: Adam Weinberger <adamw@gnome.org>.
|
||||
# Adam Weinberger <adamw@gnome.org>, 2004, 2005.
|
||||
#
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: metacity\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2005-01-09 21:23-0700\n"
|
||||
"PO-Revision-Date: 2004-12-20 18:28-0400\n"
|
||||
"POT-Creation-Date: 2005-10-04 00:04-0400\n"
|
||||
"PO-Revision-Date: 2005-07-18 18:28-0400\n"
|
||||
"Last-Translator: Adam Weinberger <adamw@gnome.org>\n"
|
||||
"Language-Team: English/Canada <adamw@FreeBSD.org>\n"
|
||||
"Language-Team: Canadian English <adamw@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@@ -59,7 +59,7 @@ msgstr ""
|
||||
msgid "Failed to get hostname: %s\n"
|
||||
msgstr "Failed to get hostname: %s\n"
|
||||
|
||||
#: src/display.c:306
|
||||
#: src/display.c:307
|
||||
#, c-format
|
||||
msgid "Failed to open X Window System display '%s'\n"
|
||||
msgstr "Failed to open X Window System display '%s'\n"
|
||||
@@ -80,23 +80,23 @@ msgstr ""
|
||||
msgid "Fatal IO error %d (%s) on display '%s'.\n"
|
||||
msgstr "Fatal IO error %d (%s) on display '%s'.\n"
|
||||
|
||||
#: src/frames.c:1020
|
||||
#: src/frames.c:1122
|
||||
msgid "Close Window"
|
||||
msgstr "Close Window"
|
||||
|
||||
#: src/frames.c:1023
|
||||
#: src/frames.c:1125
|
||||
msgid "Window Menu"
|
||||
msgstr "Window Menu"
|
||||
|
||||
#: src/frames.c:1026
|
||||
#: src/frames.c:1128
|
||||
msgid "Minimize Window"
|
||||
msgstr "Minimize Window"
|
||||
|
||||
#: src/frames.c:1029
|
||||
#: src/frames.c:1131
|
||||
msgid "Maximize Window"
|
||||
msgstr "Maximize Window"
|
||||
|
||||
#: src/frames.c:1032
|
||||
#: src/frames.c:1134
|
||||
msgid "Unmaximize Window"
|
||||
msgstr "Unmaximize Window"
|
||||
|
||||
@@ -109,30 +109,22 @@ msgstr ""
|
||||
"Some other program is already using the key %s with modifiers %x as a "
|
||||
"binding\n"
|
||||
|
||||
#: src/keybindings.c:2554
|
||||
#: src/keybindings.c:2654
|
||||
#, c-format
|
||||
msgid "Error launching metacity-dialog to print an error about a command: %s\n"
|
||||
msgstr ""
|
||||
"Error launching metacity-dialogue to print an error about a command: %s\n"
|
||||
|
||||
#: src/keybindings.c:2659
|
||||
#: src/keybindings.c:2759
|
||||
#, c-format
|
||||
msgid "No command %d has been defined.\n"
|
||||
msgstr "No command %d has been defined.\n"
|
||||
|
||||
#: src/keybindings.c:3489
|
||||
#: src/keybindings.c:3609
|
||||
msgid "No terminal command has been defined.\n"
|
||||
msgstr "No terminal command has been defined.\n"
|
||||
|
||||
#: src/main.c:69
|
||||
msgid ""
|
||||
"metacity [--sm-disable] [--sm-client-id=ID] [--sm-save-file=FILENAME] [--"
|
||||
"display=DISPLAY] [--replace] [--version]\n"
|
||||
msgstr ""
|
||||
"metacity [--sm-disable] [--sm-client-id=ID] [--sm-save-file=FILENAME] [--"
|
||||
"display=DISPLAY] [--replace] [--version]\n"
|
||||
|
||||
#: src/main.c:76
|
||||
#, c-format
|
||||
msgid ""
|
||||
"metacity %s\n"
|
||||
@@ -147,19 +139,43 @@ msgstr ""
|
||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
|
||||
"PARTICULAR PURPOSE.\n"
|
||||
|
||||
#: src/main.c:443
|
||||
#: src/main.c:257
|
||||
msgid "Disable connection to session manager"
|
||||
msgstr "Disable connection to session manager"
|
||||
|
||||
#: src/main.c:263
|
||||
msgid "Replace the running window manager with Metacity"
|
||||
msgstr "Replace the running window manager with Metacity"
|
||||
|
||||
#: src/main.c:269
|
||||
msgid "Specify session management ID"
|
||||
msgstr "Specify session management ID"
|
||||
|
||||
#: src/main.c:274
|
||||
msgid "X Display to use"
|
||||
msgstr "X Display to use"
|
||||
|
||||
#: src/main.c:280
|
||||
msgid "Initialize session from savefile"
|
||||
msgstr "Initialize session from savefile"
|
||||
|
||||
#: src/main.c:286
|
||||
msgid "Print version"
|
||||
msgstr "Print version"
|
||||
|
||||
#: src/main.c:440
|
||||
#, c-format
|
||||
msgid "Failed to scan themes directory: %s\n"
|
||||
msgstr "Failed to scan themes directory: %s\n"
|
||||
|
||||
#: src/main.c:459
|
||||
#: src/main.c:456
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes."
|
||||
msgstr ""
|
||||
"Could not find a theme! Be sure %s exists and contains the usual themes."
|
||||
|
||||
#: src/main.c:521
|
||||
#: src/main.c:518
|
||||
#, c-format
|
||||
msgid "Failed to restart: %s\n"
|
||||
msgstr "Failed to restart: %s\n"
|
||||
@@ -203,12 +219,12 @@ msgstr "_Close"
|
||||
|
||||
#. separator
|
||||
#: src/menu.c:66
|
||||
msgid "Put on _All Workspaces"
|
||||
msgstr "Put on _All Workspaces"
|
||||
msgid "_Always on Visible Workspace"
|
||||
msgstr "_Always on Visible Workspace"
|
||||
|
||||
#: src/menu.c:67
|
||||
msgid "Only on _This Workspace"
|
||||
msgstr "Only on _This Workspace"
|
||||
msgid "_Only on This Workspace"
|
||||
msgstr "_Only on This Workspace"
|
||||
|
||||
#: src/menu.c:68
|
||||
msgid "Move to Workspace _Left"
|
||||
@@ -226,7 +242,7 @@ msgstr "Move to Workspace _Up"
|
||||
msgid "Move to Workspace _Down"
|
||||
msgstr "Move to Workspace _Down"
|
||||
|
||||
#: src/menu.c:162 src/prefs.c:1942
|
||||
#: src/menu.c:162 src/prefs.c:2106
|
||||
#, c-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Workspace %d"
|
||||
@@ -345,19 +361,19 @@ msgid ""
|
||||
msgstr ""
|
||||
"Forcing this application to quit will cause you to lose any unsaved changes."
|
||||
|
||||
#: src/metacity-dialog.c:128
|
||||
#: src/metacity-dialog.c:129
|
||||
msgid "_Force Quit"
|
||||
msgstr "_Force Quit"
|
||||
|
||||
#: src/metacity-dialog.c:225
|
||||
#: src/metacity-dialog.c:226
|
||||
msgid "Title"
|
||||
msgstr "Title"
|
||||
|
||||
#: src/metacity-dialog.c:237
|
||||
#: src/metacity-dialog.c:238
|
||||
msgid "Class"
|
||||
msgstr "Class"
|
||||
|
||||
#: src/metacity-dialog.c:262
|
||||
#: src/metacity-dialog.c:264
|
||||
msgid ""
|
||||
"These windows do not support \"save current setup\" and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
@@ -365,7 +381,7 @@ msgstr ""
|
||||
"These windows do not support \"save current setup\" and will have to be "
|
||||
"restarted manually next time you log in."
|
||||
|
||||
#: src/metacity-dialog.c:323
|
||||
#: src/metacity-dialog.c:330
|
||||
#, c-format
|
||||
msgid ""
|
||||
"There was an error running \"%s\":\n"
|
||||
@@ -483,11 +499,25 @@ msgstr "Hide all windows and focus desktop"
|
||||
msgid ""
|
||||
"If true, and the focus mode is either \"sloppy\" or \"mouse\" then the "
|
||||
"focused window will be automatically raised after a delay (the delay is "
|
||||
"specified by the auto_raise_delay key)."
|
||||
"specified by the auto_raise_delay key). This preference is poorly named, but "
|
||||
"kept for backwards compatibility. To try to be more clear (at least to the "
|
||||
"technically inclined), its meaning is \"automatically raise the window "
|
||||
"following a timeout which is triggered by non-grabbed mouse entry in sloppy "
|
||||
"or mouse focus modes\". It is unrelated to clicking behavior (i.e. this is "
|
||||
"not related to raise-on-click/orthogonal-raise). It is unrelated to entering "
|
||||
"a window during drag and drop (because that results in the application "
|
||||
"grabbing the mouse)"
|
||||
msgstr ""
|
||||
"If true, and the focus mode is either \"sloppy\" or \"mouse\" then the "
|
||||
"If true, and the focus mode is either \"sloppy\" or \"mouse\", then the "
|
||||
"focused window will be automatically raised after a delay (the delay is "
|
||||
"specified by the auto_raise_delay key)."
|
||||
"specified by the auto_raise_delay key). This preference is poorly named, but "
|
||||
"kept for backwards compatibility. To try to be more clear (at least to the "
|
||||
"technically inclined), its meaning is \"automatically raise the window "
|
||||
"following a timeout which is triggered by non-grabbed mouse entry in sloppy "
|
||||
"or mouse focus modes\". It is unrelated to clicking behaviour (i.e. this is "
|
||||
"not related to raise-on-click/orthogonal-raise). It is unrelated to entering "
|
||||
"a window during drag and drop (because that results in the application "
|
||||
"grabbing the mouse)"
|
||||
|
||||
#: src/metacity.schemas.in.h:18
|
||||
msgid ""
|
||||
@@ -503,13 +533,15 @@ msgid ""
|
||||
"\"direct manipulation\", by using wireframes, avoiding animations, or other "
|
||||
"means. This is a significant reduction in usability for many users, but may "
|
||||
"allow legacy applications and terminal servers to function when they would "
|
||||
"otherwise be impractical."
|
||||
"otherwise be impractical. However, the wireframe feature is disabled when "
|
||||
"accessibility is on to avoid weird desktop breakages."
|
||||
msgstr ""
|
||||
"If true, metacity will give the user less feedback and less sense of "
|
||||
"\"direct manipulation\", by using wireframes, avoiding animations, or other "
|
||||
"means. This is a significant reduction in usability for many users, but may "
|
||||
"allow legacy applications and terminal servers to function when they would "
|
||||
"otherwise be impractical."
|
||||
"otherwise be impractical. However, the wireframe feature is disabled when "
|
||||
"accessibility is on to avoid weird desktop breakages."
|
||||
|
||||
#: src/metacity.schemas.in.h:20
|
||||
msgid ""
|
||||
@@ -1921,17 +1953,17 @@ msgstr "Window focus mode"
|
||||
msgid "Window title font"
|
||||
msgstr "Window title font"
|
||||
|
||||
#: src/prefs.c:476 src/prefs.c:492 src/prefs.c:508 src/prefs.c:524
|
||||
#: src/prefs.c:540 src/prefs.c:560 src/prefs.c:576 src/prefs.c:592
|
||||
#: src/prefs.c:608 src/prefs.c:624 src/prefs.c:640 src/prefs.c:656
|
||||
#: src/prefs.c:672 src/prefs.c:689 src/prefs.c:705 src/prefs.c:721
|
||||
#: src/prefs.c:737 src/prefs.c:753 src/prefs.c:768 src/prefs.c:783
|
||||
#: src/prefs.c:798
|
||||
#: src/prefs.c:528 src/prefs.c:544 src/prefs.c:560 src/prefs.c:576
|
||||
#: src/prefs.c:592 src/prefs.c:612 src/prefs.c:628 src/prefs.c:644
|
||||
#: src/prefs.c:660 src/prefs.c:676 src/prefs.c:692 src/prefs.c:708
|
||||
#: src/prefs.c:724 src/prefs.c:741 src/prefs.c:757 src/prefs.c:773
|
||||
#: src/prefs.c:789 src/prefs.c:805 src/prefs.c:820 src/prefs.c:835
|
||||
#: src/prefs.c:850 src/prefs.c:866 src/prefs.c:882 src/prefs.c:898
|
||||
#, c-format
|
||||
msgid "GConf key \"%s\" is set to an invalid type\n"
|
||||
msgstr "GConf key \"%s\" is set to an invalid type\n"
|
||||
|
||||
#: src/prefs.c:843
|
||||
#: src/prefs.c:943
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
@@ -1940,17 +1972,17 @@ msgstr ""
|
||||
"\"%s\" found in configuration database is not a valid value for mouse button "
|
||||
"modifier\n"
|
||||
|
||||
#: src/prefs.c:867 src/prefs.c:1277
|
||||
#: src/prefs.c:967 src/prefs.c:1428
|
||||
#, c-format
|
||||
msgid "GConf key '%s' is set to an invalid value\n"
|
||||
msgstr "GConf key '%s' is set to an invalid value\n"
|
||||
|
||||
#: src/prefs.c:994
|
||||
#: src/prefs.c:1145
|
||||
#, c-format
|
||||
msgid "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
msgstr "Could not parse font description \"%s\" from GConf key %s\n"
|
||||
|
||||
#: src/prefs.c:1179
|
||||
#: src/prefs.c:1330
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%d stored in GConf key %s is not a reasonable number of workspaces, current "
|
||||
@@ -1959,7 +1991,7 @@ msgstr ""
|
||||
"%d stored in GConf key %s is not a reasonable number of workspaces, current "
|
||||
"maximum is %d\n"
|
||||
|
||||
#: src/prefs.c:1239
|
||||
#: src/prefs.c:1390
|
||||
msgid ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
@@ -1967,17 +1999,17 @@ msgstr ""
|
||||
"Workarounds for broken applications disabled. Some applications may not "
|
||||
"behave properly.\n"
|
||||
|
||||
#: src/prefs.c:1304
|
||||
#: src/prefs.c:1455
|
||||
#, c-format
|
||||
msgid "%d stored in GConf key %s is out of range 0 to %d\n"
|
||||
msgstr "%d stored in GConf key %s is out of range 0 to %d\n"
|
||||
|
||||
#: src/prefs.c:1425
|
||||
#: src/prefs.c:1589
|
||||
#, c-format
|
||||
msgid "Error setting number of workspaces to %d: %s\n"
|
||||
msgstr "Error setting number of workspaces to %d: %s\n"
|
||||
|
||||
#: src/prefs.c:1669
|
||||
#: src/prefs.c:1833
|
||||
#, c-format
|
||||
msgid ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
@@ -1986,7 +2018,7 @@ msgstr ""
|
||||
"\"%s\" found in configuration database is not a valid value for keybinding "
|
||||
"\"%s\"\n"
|
||||
|
||||
#: src/prefs.c:2023
|
||||
#: src/prefs.c:2187
|
||||
#, c-format
|
||||
msgid "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
msgstr "Error setting name for workspace %d to \"%s\": %s\n"
|
||||
@@ -2022,7 +2054,7 @@ msgstr ""
|
||||
msgid "Screen %d on display \"%s\" already has a window manager\n"
|
||||
msgstr "Screen %d on display \"%s\" already has a window manager\n"
|
||||
|
||||
#: src/screen.c:699
|
||||
#: src/screen.c:716
|
||||
#, c-format
|
||||
msgid "Could not release screen %d on display \"%s\"\n"
|
||||
msgstr "Could not release screen %d on display \"%s\"\n"
|
||||
@@ -2153,15 +2185,11 @@ msgstr ""
|
||||
"Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium,"
|
||||
"large,x-large,xx-large)\n"
|
||||
|
||||
#: src/theme-parser.c:729 src/theme-parser.c:737 src/theme-parser.c:2936
|
||||
#: src/theme-parser.c:3025 src/theme-parser.c:3032 src/theme-parser.c:3039
|
||||
#, c-format
|
||||
msgid "No \"%s\" attribute on element <%s>"
|
||||
msgstr "No \"%s\" attribute on element <%s>"
|
||||
|
||||
#: src/theme-parser.c:807 src/theme-parser.c:897 src/theme-parser.c:935
|
||||
#: src/theme-parser.c:1012 src/theme-parser.c:1062 src/theme-parser.c:1070
|
||||
#: src/theme-parser.c:1126 src/theme-parser.c:1134
|
||||
#: src/theme-parser.c:729 src/theme-parser.c:737 src/theme-parser.c:807
|
||||
#: src/theme-parser.c:897 src/theme-parser.c:935 src/theme-parser.c:1012
|
||||
#: src/theme-parser.c:1062 src/theme-parser.c:1070 src/theme-parser.c:1126
|
||||
#: src/theme-parser.c:1134 src/theme-parser.c:2936 src/theme-parser.c:3025
|
||||
#: src/theme-parser.c:3032 src/theme-parser.c:3039
|
||||
#, c-format
|
||||
msgid "No \"%s\" attribute on <%s> element"
|
||||
msgstr "No \"%s\" attribute on <%s> element"
|
||||
@@ -2848,11 +2876,11 @@ msgstr "Button aspect ratio %g is not reasonable"
|
||||
msgid "Frame geometry does not specify size of buttons"
|
||||
msgstr "Frame geometry does not specify size of buttons"
|
||||
|
||||
#: src/theme.c:849
|
||||
#: src/theme.c:843
|
||||
msgid "Gradients should have at least two colors"
|
||||
msgstr "Gradients should have at least two colours"
|
||||
|
||||
#: src/theme.c:975
|
||||
#: src/theme.c:969
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have the state in brackets, e.g. gtk:fg[NORMAL] "
|
||||
@@ -2861,7 +2889,7 @@ msgstr ""
|
||||
"GTK colour specification must have the state in brackets, e.g. gtk:fg"
|
||||
"[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
|
||||
#: src/theme.c:989
|
||||
#: src/theme.c:983
|
||||
#, c-format
|
||||
msgid ""
|
||||
"GTK color specification must have a close bracket after the state, e.g. gtk:"
|
||||
@@ -2870,17 +2898,17 @@ msgstr ""
|
||||
"GTK colour specification must have a close bracket after the state, e.g. gtk:"
|
||||
"fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
|
||||
|
||||
#: src/theme.c:1000
|
||||
#: src/theme.c:994
|
||||
#, c-format
|
||||
msgid "Did not understand state \"%s\" in color specification"
|
||||
msgstr "Did not understand state \"%s\" in colour specification"
|
||||
|
||||
#: src/theme.c:1013
|
||||
#: src/theme.c:1007
|
||||
#, c-format
|
||||
msgid "Did not understand color component \"%s\" in color specification"
|
||||
msgstr "Did not understand colour component \"%s\" in colour specification"
|
||||
|
||||
#: src/theme.c:1043
|
||||
#: src/theme.c:1037
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit the "
|
||||
@@ -2889,44 +2917,44 @@ msgstr ""
|
||||
"Blend format is \"blend/bg_colour/fg_colour/alpha\", \"%s\" does not fit the "
|
||||
"format"
|
||||
|
||||
#: src/theme.c:1054
|
||||
#: src/theme.c:1048
|
||||
#, c-format
|
||||
msgid "Could not parse alpha value \"%s\" in blended color"
|
||||
msgstr "Could not parse alpha value \"%s\" in blended colour"
|
||||
|
||||
#: src/theme.c:1064
|
||||
#: src/theme.c:1058
|
||||
#, c-format
|
||||
msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
|
||||
msgstr "Alpha value \"%s\" in blended colour is not between 0.0 and 1.0"
|
||||
|
||||
#: src/theme.c:1111
|
||||
#: src/theme.c:1105
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Shade format is \"shade/base_color/factor\", \"%s\" does not fit the format"
|
||||
msgstr ""
|
||||
"Shade format is \"shade/base_colour/factor\", \"%s\" does not fit the format"
|
||||
|
||||
#: src/theme.c:1122
|
||||
#: src/theme.c:1116
|
||||
#, c-format
|
||||
msgid "Could not parse shade factor \"%s\" in shaded color"
|
||||
msgstr "Could not parse shade factor \"%s\" in shaded colour"
|
||||
|
||||
#: src/theme.c:1132
|
||||
#: src/theme.c:1126
|
||||
#, c-format
|
||||
msgid "Shade factor \"%s\" in shaded color is negative"
|
||||
msgstr "Shade factor \"%s\" in shaded colour is negative"
|
||||
|
||||
#: src/theme.c:1161
|
||||
#: src/theme.c:1155
|
||||
#, c-format
|
||||
msgid "Could not parse color \"%s\""
|
||||
msgstr "Could not parse colour \"%s\""
|
||||
|
||||
#: src/theme.c:1423
|
||||
#: src/theme.c:1417
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains character '%s' which is not allowed"
|
||||
msgstr "Coordinate expression contains character '%s' which is not allowed"
|
||||
|
||||
#: src/theme.c:1450
|
||||
#: src/theme.c:1444
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
@@ -2935,12 +2963,12 @@ msgstr ""
|
||||
"Coordinate expression contains floating point number '%s' which could not be "
|
||||
"parsed"
|
||||
|
||||
#: src/theme.c:1464
|
||||
#: src/theme.c:1458
|
||||
#, c-format
|
||||
msgid "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
msgstr "Coordinate expression contains integer '%s' which could not be parsed"
|
||||
|
||||
#: src/theme.c:1531
|
||||
#: src/theme.c:1525
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
@@ -2949,36 +2977,36 @@ msgstr ""
|
||||
"Coordinate expression contained unknown operator at the start of this text: "
|
||||
"\"%s\""
|
||||
|
||||
#: src/theme.c:1588
|
||||
#: src/theme.c:1582
|
||||
msgid "Coordinate expression was empty or not understood"
|
||||
msgstr "Coordinate expression was empty or not understood"
|
||||
|
||||
#: src/theme.c:1731 src/theme.c:1741 src/theme.c:1775
|
||||
#: src/theme.c:1725 src/theme.c:1735 src/theme.c:1769
|
||||
msgid "Coordinate expression results in division by zero"
|
||||
msgstr "Coordinate expression results in division by zero"
|
||||
|
||||
#: src/theme.c:1783
|
||||
#: src/theme.c:1777
|
||||
msgid ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
msgstr ""
|
||||
"Coordinate expression tries to use mod operator on a floating-point number"
|
||||
|
||||
#: src/theme.c:1840
|
||||
#: src/theme.c:1834
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
msgstr ""
|
||||
"Coordinate expression has an operator \"%s\" where an operand was expected"
|
||||
|
||||
#: src/theme.c:1849
|
||||
#: src/theme.c:1843
|
||||
msgid "Coordinate expression had an operand where an operator was expected"
|
||||
msgstr "Coordinate expression had an operand where an operator was expected"
|
||||
|
||||
#: src/theme.c:1857
|
||||
#: src/theme.c:1851
|
||||
msgid "Coordinate expression ended with an operator instead of an operand"
|
||||
msgstr "Coordinate expression ended with an operator instead of an operand"
|
||||
|
||||
#: src/theme.c:1867
|
||||
#: src/theme.c:1861
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
@@ -2987,7 +3015,7 @@ msgstr ""
|
||||
"Coordinate expression has operator \"%c\" following operator \"%c\" with no "
|
||||
"operand in between"
|
||||
|
||||
#: src/theme.c:1986
|
||||
#: src/theme.c:1980
|
||||
msgid ""
|
||||
"Coordinate expression parser overflowed its buffer, this is really a "
|
||||
"Metacity bug, but are you sure you need a huge expression like that?"
|
||||
@@ -2995,30 +3023,30 @@ msgstr ""
|
||||
"Coordinate expression parser overflowed its buffer, this is really a "
|
||||
"Metacity bug, but are you sure you need a huge expression like that?"
|
||||
|
||||
#: src/theme.c:2015
|
||||
#: src/theme.c:2009
|
||||
msgid "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
msgstr "Coordinate expression had a close parenthesis with no open parenthesis"
|
||||
|
||||
#: src/theme.c:2078
|
||||
#: src/theme.c:2072
|
||||
#, c-format
|
||||
msgid "Coordinate expression had unknown variable or constant \"%s\""
|
||||
msgstr "Coordinate expression had unknown variable or constant \"%s\""
|
||||
|
||||
#: src/theme.c:2135
|
||||
#: src/theme.c:2129
|
||||
msgid "Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
msgstr ""
|
||||
"Coordinate expression had an open parenthesis with no close parenthesis"
|
||||
|
||||
#: src/theme.c:2146
|
||||
#: src/theme.c:2140
|
||||
msgid "Coordinate expression doesn't seem to have any operators or operands"
|
||||
msgstr "Coordinate expression doesn't seem to have any operators or operands"
|
||||
|
||||
#: src/theme.c:2390 src/theme.c:2412 src/theme.c:2433
|
||||
#: src/theme.c:2384 src/theme.c:2406 src/theme.c:2427
|
||||
#, c-format
|
||||
msgid "Theme contained an expression \"%s\" that resulted in an error: %s\n"
|
||||
msgstr "Theme contained an expression \"%s\" that resulted in an error: %s\n"
|
||||
|
||||
#: src/theme.c:3919
|
||||
#: src/theme.c:3913
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -3027,25 +3055,25 @@ msgstr ""
|
||||
"<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
"specified for this frame style"
|
||||
|
||||
#: src/theme.c:4369 src/theme.c:4401
|
||||
#: src/theme.c:4363 src/theme.c:4395
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
msgstr ""
|
||||
"Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/>"
|
||||
|
||||
#: src/theme.c:4452
|
||||
#: src/theme.c:4446
|
||||
#, c-format
|
||||
msgid "Failed to load theme \"%s\": %s\n"
|
||||
msgstr "Failed to load theme \"%s\": %s\n"
|
||||
|
||||
#: src/theme.c:4598 src/theme.c:4605 src/theme.c:4612 src/theme.c:4619
|
||||
#: src/theme.c:4626
|
||||
#: src/theme.c:4592 src/theme.c:4599 src/theme.c:4606 src/theme.c:4613
|
||||
#: src/theme.c:4620
|
||||
#, c-format
|
||||
msgid "No <%s> set for theme \"%s\""
|
||||
msgstr "No <%s> set for theme \"%s\""
|
||||
|
||||
#: src/theme.c:4636
|
||||
#: src/theme.c:4630
|
||||
#, c-format
|
||||
msgid ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
@@ -3054,7 +3082,7 @@ msgstr ""
|
||||
"No frame style set for window type \"%s\" in theme \"%s\", add a <window "
|
||||
"type=\"%s\" style_set=\"whatever\"/> element"
|
||||
|
||||
#: src/theme.c:4658
|
||||
#: src/theme.c:4652
|
||||
#, c-format
|
||||
msgid ""
|
||||
"<menu_icon function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
@@ -3063,14 +3091,14 @@ msgstr ""
|
||||
"<menu_icon function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
|
||||
"specified for this theme"
|
||||
|
||||
#: src/theme.c:5047 src/theme.c:5109
|
||||
#: src/theme.c:5041 src/theme.c:5103
|
||||
#, c-format
|
||||
msgid ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
msgstr ""
|
||||
"User-defined constants must begin with a capital letter; \"%s\" does not"
|
||||
|
||||
#: src/theme.c:5055 src/theme.c:5117
|
||||
#: src/theme.c:5049 src/theme.c:5111
|
||||
#, c-format
|
||||
msgid "Constant \"%s\" has already been defined"
|
||||
msgstr "Constant \"%s\" has already been defined"
|
||||
@@ -3090,19 +3118,19 @@ msgstr "Failed to fdopen() log file %s: %s\n"
|
||||
msgid "Opened log file %s\n"
|
||||
msgstr "Opened log file %s\n"
|
||||
|
||||
#: src/util.c:203
|
||||
#: src/util.c:217
|
||||
msgid "Window manager: "
|
||||
msgstr "Window manager: "
|
||||
|
||||
#: src/util.c:349
|
||||
#: src/util.c:363
|
||||
msgid "Bug in window manager: "
|
||||
msgstr "Bug in window manager: "
|
||||
|
||||
#: src/util.c:378
|
||||
#: src/util.c:392
|
||||
msgid "Window manager warning: "
|
||||
msgstr "Window manager warning: "
|
||||
|
||||
#: src/util.c:402
|
||||
#: src/util.c:416
|
||||
msgid "Window manager error: "
|
||||
msgstr "Window manager error: "
|
||||
|
||||
@@ -3112,7 +3140,7 @@ msgid "Application set a bogus _NET_WM_PID %ld\n"
|
||||
msgstr "Application set a bogus _NET_WM_PID %ld\n"
|
||||
|
||||
#. first time through
|
||||
#: src/window.c:4829
|
||||
#: src/window.c:5208
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets SM_CLIENT_ID on itself, instead of on the WM_CLIENT_LEADER "
|
||||
@@ -3128,7 +3156,7 @@ msgstr ""
|
||||
#. * MWM but not WM_NORMAL_HINTS are basically broken. We complain
|
||||
#. * about these apps but make them work.
|
||||
#.
|
||||
#: src/window.c:5500
|
||||
#: src/window.c:5879
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Window %s sets an MWM hint indicating it isn't resizable, but sets min size %"
|
||||
|
1114
po/en_GB.po
1114
po/en_GB.po
File diff suppressed because it is too large
Load Diff
1489
po/pt_BR.po
1489
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
1107
po/zh_CN.po
1107
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,4 @@ 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
|
||||
|
@@ -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@
|
||||
|
||||
|
10
src/bell.c
10
src/bell.c
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2002 Sun Microsystems 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
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
1745
src/boxes.c
Normal file
1745
src/boxes.c
Normal file
File diff suppressed because it is too large
Load Diff
239
src/boxes.h
Normal file
239
src/boxes.h
Normal file
@@ -0,0 +1,239 @@
|
||||
/* Simple box operations */
|
||||
|
||||
/*
|
||||
* 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
|
||||
* 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);
|
||||
|
||||
GList* meta_rectangle_expand_region (GList *region,
|
||||
const int left_expand,
|
||||
const int right_expand,
|
||||
const int top_expand,
|
||||
const int bottom_expand);
|
||||
|
||||
/* 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 */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
/* 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);
|
||||
|
||||
/* 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 */
|
24
src/common.h
24
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;
|
||||
@@ -184,6 +186,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 +244,3 @@ struct _MetaButtonLayout
|
||||
(ycoord) < ((rect).y + (rect).height))
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
2445
src/constraints.c
2445
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 */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
39
src/core.c
39
src/core.c
@@ -3,6 +3,7 @@
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2003 Rob Adams
|
||||
* Copyright (C) 2004, 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
|
||||
@@ -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)
|
||||
@@ -370,7 +388,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 +405,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 +426,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
|
||||
@@ -690,6 +712,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 +876,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);
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 273 B After Width: | Height: | Size: 1.2 KiB |
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001, 2002 Havoc Pennington
|
||||
* Copyright (C) 2004 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
|
||||
|
482
src/display.c
482
src/display.c
@@ -4,6 +4,7 @@
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2002, 2003, 2004 Red Hat, Inc.
|
||||
* Copyright (C) 2003, 2004 Rob Adams
|
||||
* Copyright (C) 2004, 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
|
||||
@@ -59,10 +60,19 @@
|
||||
#ifdef HAVE_XKB
|
||||
#include <X11/XKBlib.h>
|
||||
#endif
|
||||
#ifdef HAVE_XCURSOR
|
||||
#include <X11/Xcursor/Xcursor.h>
|
||||
#endif
|
||||
#include <string.h>
|
||||
|
||||
#define USE_GDK_DISPLAY
|
||||
|
||||
#define GRAB_OP_IS_WINDOW_SWITCH(g) \
|
||||
(g == META_GRAB_OP_KEYBOARD_TABBING_NORMAL || \
|
||||
g == META_GRAB_OP_KEYBOARD_TABBING_DOCK || \
|
||||
g == META_GRAB_OP_KEYBOARD_ESCAPING_NORMAL || \
|
||||
g == META_GRAB_OP_KEYBOARD_ESCAPING_DOCK)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
MetaDisplay *display;
|
||||
@@ -109,19 +119,8 @@ static void update_window_grab_modifiers (MetaDisplay *display);
|
||||
static void prefs_changed_callback (MetaPreference pref,
|
||||
void *data);
|
||||
|
||||
static void
|
||||
set_utf8_string_hint (MetaDisplay *display,
|
||||
Window xwindow,
|
||||
Atom atom,
|
||||
const char *val)
|
||||
{
|
||||
meta_error_trap_push (display);
|
||||
XChangeProperty (display->xdisplay,
|
||||
xwindow, atom,
|
||||
display->atom_utf8_string,
|
||||
8, PropModeReplace, (guchar*) val, strlen (val));
|
||||
meta_error_trap_pop (display, FALSE);
|
||||
}
|
||||
static void sanity_check_timestamps (MetaDisplay *display,
|
||||
Time known_good_timestamp);
|
||||
|
||||
static void
|
||||
ping_data_free (MetaPingData *ping_data)
|
||||
@@ -289,7 +288,10 @@ meta_display_open (const char *name)
|
||||
"_NET_RESTACK_WINDOW",
|
||||
"_NET_MOVERESIZE_WINDOW",
|
||||
"_NET_DESKTOP_GEOMETRY",
|
||||
"_NET_DESKTOP_VIEWPORT"
|
||||
"_NET_DESKTOP_VIEWPORT",
|
||||
"_METACITY_VERSION",
|
||||
"_NET_WM_VISIBLE_NAME",
|
||||
"_NET_WM_VISIBLE_ICON_NAME"
|
||||
};
|
||||
Atom atoms[G_N_ELEMENTS(atom_names)];
|
||||
|
||||
@@ -331,6 +333,9 @@ meta_display_open (const char *name)
|
||||
display->autoraise_window = NULL;
|
||||
display->focus_window = NULL;
|
||||
display->expected_focus_window = NULL;
|
||||
display->grab_old_window_stacking = NULL;
|
||||
|
||||
display->mouse_mode = TRUE; /* Only relevant for mouse or sloppy focus */
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
display->grab_sync_request_alarm = None;
|
||||
@@ -443,6 +448,9 @@ meta_display_open (const char *name)
|
||||
display->atom_net_moveresize_window = atoms[88];
|
||||
display->atom_net_desktop_geometry = atoms[89];
|
||||
display->atom_net_desktop_viewport = atoms[90];
|
||||
display->atom_metacity_version = atoms[91];
|
||||
display->atom_net_wm_visible_name = atoms[92];
|
||||
display->atom_net_wm_visible_icon_name = atoms[93];
|
||||
|
||||
display->prop_hooks = NULL;
|
||||
meta_display_init_window_prop_hooks (display);
|
||||
@@ -511,6 +519,8 @@ meta_display_open (const char *name)
|
||||
display->grab_screen = NULL;
|
||||
display->grab_resize_popup = NULL;
|
||||
|
||||
display->grab_edge_resistance_data = NULL;
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
{
|
||||
int major, minor;
|
||||
@@ -595,7 +605,16 @@ meta_display_open (const char *name)
|
||||
#else /* HAVE_RENDER */
|
||||
meta_verbose ("Not compiled with Render support\n");
|
||||
#endif /* !HAVE_RENDER */
|
||||
|
||||
|
||||
#ifdef HAVE_XCURSOR
|
||||
{
|
||||
XcursorSetTheme (display->xdisplay, meta_prefs_get_cursor_theme ());
|
||||
XcursorSetDefaultSize (display->xdisplay, meta_prefs_get_cursor_size ());
|
||||
}
|
||||
#else /* HAVE_XCURSOR */
|
||||
meta_verbose ("Not compiled with Xcursor support\n");
|
||||
#endif /* !HAVE_XCURSOR */
|
||||
|
||||
/* Create the leader window here. Set its properties and
|
||||
* use the timestamp from one of the PropertyNotify events
|
||||
* that will follow.
|
||||
@@ -611,11 +630,16 @@ meta_display_open (const char *name)
|
||||
display->leader_window = meta_create_offscreen_window (display->xdisplay,
|
||||
DefaultRootWindow (display->xdisplay));
|
||||
|
||||
set_utf8_string_hint (display,
|
||||
display->leader_window,
|
||||
display->atom_net_wm_name,
|
||||
"Metacity");
|
||||
meta_prop_set_utf8_string_hint (display,
|
||||
display->leader_window,
|
||||
display->atom_net_wm_name,
|
||||
"Metacity");
|
||||
|
||||
meta_prop_set_utf8_string_hint (display,
|
||||
display->leader_window,
|
||||
display->atom_metacity_version,
|
||||
VERSION);
|
||||
|
||||
data[0] = display->leader_window;
|
||||
XChangeProperty (display->xdisplay,
|
||||
display->leader_window,
|
||||
@@ -632,6 +656,7 @@ meta_display_open (const char *name)
|
||||
}
|
||||
|
||||
display->last_focus_time = timestamp;
|
||||
display->last_user_time = timestamp;
|
||||
display->compositor = meta_compositor_new (display);
|
||||
|
||||
screens = NULL;
|
||||
@@ -790,6 +815,9 @@ meta_display_close (MetaDisplay *display)
|
||||
meta_prefs_remove_listener (prefs_changed_callback, display);
|
||||
|
||||
meta_display_remove_autoraise_callback (display);
|
||||
|
||||
if (display->grab_old_window_stacking)
|
||||
g_list_free (display->grab_old_window_stacking);
|
||||
|
||||
#ifdef USE_GDK_DISPLAY
|
||||
/* Stop caring about events */
|
||||
@@ -1130,6 +1158,8 @@ meta_display_get_current_time_roundtrip (MetaDisplay *display)
|
||||
timestamp = property_event.xproperty.time;
|
||||
}
|
||||
|
||||
sanity_check_timestamps (display, timestamp);
|
||||
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
@@ -1308,6 +1338,15 @@ handle_net_moveresize_window (MetaDisplay* display,
|
||||
|
||||
if (window)
|
||||
{
|
||||
/* FIXME!!!! I'm pretty sure this is wrong except _maybe_ for the
|
||||
* resize-only case; see comment at beginning of
|
||||
* meta_window_move_resize_internal(). Basically, this should act
|
||||
* like a configure request--meaning that it should count as an app
|
||||
* specified change instead of a user one, and the position needs to
|
||||
* be fixed up with adjust_for_gravity(). In particular,
|
||||
* meta_window_resize_with_gravity(), meta_window_resize(), and
|
||||
* meta_window_move_resize() should probably NOT be called.
|
||||
*/
|
||||
meta_window_get_gravity_position (window, &x, &y);
|
||||
width = window->rect.width;
|
||||
height = window->rect.height;
|
||||
@@ -1363,10 +1402,14 @@ handle_net_restack_window (MetaDisplay* display,
|
||||
|
||||
if (window)
|
||||
{
|
||||
/*
|
||||
* The EWMH includes a sibling for the restack request, but we
|
||||
* don't currently support these types of raises.
|
||||
/* FIXME: The EWMH includes a sibling for the restack request, but we
|
||||
* (stupidly) don't currently support these types of raises.
|
||||
*
|
||||
* Also, unconditionally following these is REALLY stupid--we should
|
||||
* combine this code with the stuff in
|
||||
* meta_window_configure_request() which is smart about whether to
|
||||
* follow the request or do something else (though not smart enough
|
||||
* and is also too stupid to handle the sibling stuff).
|
||||
*/
|
||||
switch (event->xclient.data.l[2])
|
||||
{
|
||||
@@ -1547,11 +1590,8 @@ event_callback (XEvent *event,
|
||||
if (window && ((event->type == KeyPress) || (event->type == ButtonPress)))
|
||||
{
|
||||
g_assert (CurrentTime != display->current_time);
|
||||
meta_topic (META_DEBUG_WINDOW_STATE,
|
||||
"Metacity set %s's net_wm_user_time to %d.\n",
|
||||
window->desc, display->current_time);
|
||||
window->net_wm_user_time_set = TRUE;
|
||||
window->net_wm_user_time = display->current_time;
|
||||
meta_window_set_user_time (window, display->current_time);
|
||||
sanity_check_timestamps (display, display->current_time);
|
||||
}
|
||||
|
||||
switch (event->type)
|
||||
@@ -1574,6 +1614,16 @@ event_callback (XEvent *event,
|
||||
(display->grab_window ?
|
||||
display->grab_window->desc :
|
||||
"none"));
|
||||
if (GRAB_OP_IS_WINDOW_SWITCH (display->grab_op))
|
||||
{
|
||||
MetaScreen *screen;
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Syncing to old stack positions.\n");
|
||||
screen =
|
||||
meta_display_screen_for_root (display, event->xany.window);
|
||||
meta_stack_set_positions (screen->stack,
|
||||
display->grab_old_window_stacking);
|
||||
}
|
||||
meta_display_end_grab_op (display,
|
||||
event->xbutton.time);
|
||||
}
|
||||
@@ -1635,36 +1685,49 @@ event_callback (XEvent *event,
|
||||
{
|
||||
if (window->has_resize_func)
|
||||
{
|
||||
gboolean north;
|
||||
gboolean west;
|
||||
gboolean north, south;
|
||||
gboolean west, east;
|
||||
int root_x, root_y;
|
||||
MetaGrabOp op;
|
||||
|
||||
meta_window_get_position (window, &root_x, &root_y);
|
||||
|
||||
west = event->xbutton.x_root < (root_x + window->rect.width / 2);
|
||||
north = event->xbutton.y_root < (root_y + window->rect.height / 2);
|
||||
west = event->xbutton.x_root < (root_x + 1 * window->rect.width / 3);
|
||||
east = event->xbutton.x_root > (root_x + 2 * window->rect.width / 3);
|
||||
north = event->xbutton.y_root < (root_y + 1 * window->rect.height / 3);
|
||||
south = event->xbutton.y_root > (root_y + 2 * window->rect.height / 3);
|
||||
|
||||
if (west && north)
|
||||
if (north && west)
|
||||
op = META_GRAB_OP_RESIZING_NW;
|
||||
else if (west)
|
||||
op = META_GRAB_OP_RESIZING_SW;
|
||||
else if (north)
|
||||
else if (north && east)
|
||||
op = META_GRAB_OP_RESIZING_NE;
|
||||
else
|
||||
else if (south && west)
|
||||
op = META_GRAB_OP_RESIZING_SW;
|
||||
else if (south && east)
|
||||
op = META_GRAB_OP_RESIZING_SE;
|
||||
else if (north)
|
||||
op = META_GRAB_OP_RESIZING_N;
|
||||
else if (west)
|
||||
op = META_GRAB_OP_RESIZING_W;
|
||||
else if (east)
|
||||
op = META_GRAB_OP_RESIZING_E;
|
||||
else if (south)
|
||||
op = META_GRAB_OP_RESIZING_S;
|
||||
else /* Middle region is no-op to avoid user triggering wrong action */
|
||||
op = META_GRAB_OP_NONE;
|
||||
|
||||
meta_display_begin_grab_op (display,
|
||||
window->screen,
|
||||
window,
|
||||
op,
|
||||
TRUE,
|
||||
event->xbutton.serial,
|
||||
event->xbutton.button,
|
||||
0,
|
||||
event->xbutton.time,
|
||||
event->xbutton.x_root,
|
||||
event->xbutton.y_root);
|
||||
if (op != META_GRAB_OP_NONE)
|
||||
meta_display_begin_grab_op (display,
|
||||
window->screen,
|
||||
window,
|
||||
op,
|
||||
TRUE,
|
||||
event->xbutton.serial,
|
||||
event->xbutton.button,
|
||||
0,
|
||||
event->xbutton.time,
|
||||
event->xbutton.x_root,
|
||||
event->xbutton.y_root);
|
||||
}
|
||||
}
|
||||
else if (event->xbutton.button == 3)
|
||||
@@ -1755,10 +1818,15 @@ event_callback (XEvent *event,
|
||||
window->type != META_WINDOW_DESKTOP)
|
||||
{
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Focusing %s due to enter notify with serial %lu\n",
|
||||
window->desc, event->xany.serial);
|
||||
"Focusing %s due to enter notify with serial %lu "
|
||||
"at time %lu, and setting display->mouse_mode to "
|
||||
"TRUE.\n",
|
||||
window->desc,
|
||||
event->xany.serial,
|
||||
event->xcrossing.time);
|
||||
|
||||
meta_window_focus (window, event->xcrossing.time);
|
||||
display->mouse_mode = TRUE;
|
||||
meta_window_focus (window, event->xcrossing.time);
|
||||
|
||||
/* stop ignoring stuff */
|
||||
reset_ignores (display);
|
||||
@@ -1792,16 +1860,29 @@ event_callback (XEvent *event,
|
||||
switch (meta_prefs_get_focus_mode ())
|
||||
{
|
||||
case META_FOCUS_MODE_MOUSE:
|
||||
if (window == display->expected_focus_window &&
|
||||
(window->frame == NULL || frame_was_receiver) &&
|
||||
event->xcrossing.mode != NotifyGrab &&
|
||||
event->xcrossing.mode != NotifyUngrab &&
|
||||
event->xcrossing.detail != NotifyInferior)
|
||||
if ((window->frame == NULL || frame_was_receiver) &&
|
||||
event->xcrossing.mode != NotifyGrab &&
|
||||
event->xcrossing.mode != NotifyUngrab &&
|
||||
event->xcrossing.detail != NotifyInferior &&
|
||||
meta_display_focus_sentinel_clear (display))
|
||||
{
|
||||
meta_verbose ("Unsetting focus from %s due to LeaveNotify\n",
|
||||
window->desc);
|
||||
meta_display_focus_the_no_focus_window (display,
|
||||
event->xcrossing.time);
|
||||
if (window == display->expected_focus_window)
|
||||
{
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Unsetting focus from %s due to LeaveNotify\n",
|
||||
window->desc);
|
||||
meta_display_focus_the_no_focus_window (display,
|
||||
event->xcrossing.time);
|
||||
}
|
||||
if (window->type != META_WINDOW_DOCK &&
|
||||
window->type != META_WINDOW_DESKTOP)
|
||||
{
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Setting display->mouse_mode to TRUE due to "
|
||||
"LeaveNotify at time %lu.\n",
|
||||
event->xcrossing.time);
|
||||
display->mouse_mode = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case META_FOCUS_MODE_SLOPPY:
|
||||
@@ -2124,18 +2205,25 @@ event_callback (XEvent *event,
|
||||
{
|
||||
int space;
|
||||
MetaWorkspace *workspace;
|
||||
guint32 time;
|
||||
|
||||
space = event->xclient.data.l[0];
|
||||
time = event->xclient.data.l[1];
|
||||
|
||||
meta_verbose ("Request to change current workspace to %d\n",
|
||||
space);
|
||||
|
||||
meta_verbose ("Request to change current workspace to %d with "
|
||||
"specified timestamp of %lu\n",
|
||||
space, (unsigned long)time);
|
||||
|
||||
workspace =
|
||||
meta_screen_get_workspace_by_index (screen,
|
||||
space);
|
||||
|
||||
/* Handle clients using the older version of the spec... */
|
||||
if (time == 0 && workspace)
|
||||
time = meta_display_get_current_time_roundtrip (display);
|
||||
|
||||
if (workspace)
|
||||
meta_workspace_activate (workspace, meta_display_get_current_time_roundtrip (display));
|
||||
meta_workspace_activate (workspace, time);
|
||||
else
|
||||
meta_verbose ("Don't know about workspace %d\n", space);
|
||||
}
|
||||
@@ -3181,8 +3269,10 @@ meta_display_begin_grab_op (MetaDisplay *display,
|
||||
display->grab_last_moveresize_time.tv_sec = 0;
|
||||
display->grab_last_moveresize_time.tv_usec = 0;
|
||||
display->grab_motion_notify_time = 0;
|
||||
display->grab_old_window_stacking = NULL;
|
||||
#ifdef HAVE_XSYNC
|
||||
display->grab_sync_request_alarm = None;
|
||||
display->grab_last_user_action_was_snap = FALSE;
|
||||
#endif
|
||||
display->grab_was_cancelled = FALSE;
|
||||
|
||||
@@ -3201,29 +3291,14 @@ meta_display_begin_grab_op (MetaDisplay *display,
|
||||
display->grab_anchor_window_pos = display->grab_initial_window_pos;
|
||||
|
||||
display->grab_wireframe_active =
|
||||
meta_prefs_get_reduced_resources () &&
|
||||
(meta_prefs_get_reduced_resources () && !meta_prefs_get_gnome_accessibility ()) &&
|
||||
(meta_grab_op_is_resizing (display->grab_op) ||
|
||||
meta_grab_op_is_moving (display->grab_op));
|
||||
|
||||
if (display->grab_wireframe_active)
|
||||
{
|
||||
MetaRectangle xor_rect;
|
||||
|
||||
display->grab_wireframe_rect = window->rect;
|
||||
if (window->frame)
|
||||
{
|
||||
display->grab_wireframe_rect.x += window->frame->rect.x;
|
||||
display->grab_wireframe_rect.y += window->frame->rect.y;
|
||||
}
|
||||
|
||||
meta_window_calc_showing (display->grab_window);
|
||||
|
||||
meta_window_get_xor_rect (window, &display->grab_wireframe_rect,
|
||||
&xor_rect);
|
||||
|
||||
meta_effects_begin_wireframe (display->grab_window->screen,
|
||||
&xor_rect);
|
||||
display->grab_wireframe_last_xor_rect = xor_rect;
|
||||
meta_window_begin_wireframe (window);
|
||||
}
|
||||
|
||||
#ifdef HAVE_XSYNC
|
||||
@@ -3289,6 +3364,28 @@ meta_display_begin_grab_op (MetaDisplay *display,
|
||||
g_assert (display->grab_window != NULL || display->grab_screen != NULL);
|
||||
g_assert (display->grab_op != META_GRAB_OP_NONE);
|
||||
|
||||
/* If this is a move or resize, cache the window edges for
|
||||
* resistance/snapping
|
||||
*/
|
||||
if (meta_grab_op_is_resizing (display->grab_op) ||
|
||||
meta_grab_op_is_moving (display->grab_op))
|
||||
{
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Computing edges to resist-movement or snap-to for %s.\n",
|
||||
window->desc);
|
||||
meta_display_compute_resistance_and_snapping_edges (display);
|
||||
}
|
||||
|
||||
/* Save the old stacking */
|
||||
if (GRAB_OP_IS_WINDOW_SWITCH (display->grab_op))
|
||||
{
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Saving old stack positions; old pointer was %p.\n",
|
||||
display->grab_old_window_stacking);
|
||||
display->grab_old_window_stacking =
|
||||
meta_stack_get_positions (screen->stack);
|
||||
}
|
||||
|
||||
/* Do this last, after everything is set up. */
|
||||
switch (op)
|
||||
{
|
||||
@@ -3340,10 +3437,7 @@ meta_display_end_grab_op (MetaDisplay *display,
|
||||
if (display->grab_window != NULL)
|
||||
display->grab_window->shaken_loose = FALSE;
|
||||
|
||||
if (display->grab_op == META_GRAB_OP_KEYBOARD_TABBING_NORMAL ||
|
||||
display->grab_op == META_GRAB_OP_KEYBOARD_TABBING_DOCK ||
|
||||
display->grab_op == META_GRAB_OP_KEYBOARD_ESCAPING_NORMAL ||
|
||||
display->grab_op == META_GRAB_OP_KEYBOARD_ESCAPING_DOCK ||
|
||||
if (GRAB_OP_IS_WINDOW_SWITCH (display->grab_op) ||
|
||||
display->grab_op == META_GRAB_OP_KEYBOARD_WORKSPACE_SWITCHING)
|
||||
{
|
||||
meta_ui_tab_popup_free (display->grab_screen->tab_popup);
|
||||
@@ -3355,11 +3449,29 @@ meta_display_end_grab_op (MetaDisplay *display,
|
||||
display->ungrab_should_not_cause_focus_window = display->grab_xwindow;
|
||||
}
|
||||
|
||||
/* If this was a move or resize clear out the edge cache */
|
||||
if (meta_grab_op_is_resizing (display->grab_op) ||
|
||||
meta_grab_op_is_moving (display->grab_op))
|
||||
{
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Clearing out the edges for resistance/snapping");
|
||||
meta_display_cleanup_edges (display);
|
||||
}
|
||||
|
||||
if (display->grab_old_window_stacking != NULL)
|
||||
{
|
||||
meta_topic (META_DEBUG_WINDOW_OPS,
|
||||
"Clearing out the old stack position, which was %p.\n",
|
||||
display->grab_old_window_stacking);
|
||||
g_list_free (display->grab_old_window_stacking);
|
||||
display->grab_old_window_stacking = NULL;
|
||||
}
|
||||
|
||||
if (display->grab_wireframe_active)
|
||||
{
|
||||
display->grab_wireframe_active = FALSE;
|
||||
meta_effects_end_wireframe (display->grab_window->screen,
|
||||
&display->grab_wireframe_last_xor_rect);
|
||||
meta_window_end_wireframe (display->grab_window);
|
||||
|
||||
if (!display->grab_was_cancelled)
|
||||
meta_window_move_resize (display->grab_window,
|
||||
TRUE,
|
||||
@@ -3703,6 +3815,36 @@ meta_display_retheme_all (void)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_display_set_cursor_theme (const char *theme,
|
||||
int size)
|
||||
{
|
||||
#ifdef HAVE_XCURSOR
|
||||
GSList *tmp, *tmp2;
|
||||
|
||||
tmp = meta_displays_list ();
|
||||
while (tmp != NULL)
|
||||
{
|
||||
MetaDisplay *display = tmp->data;
|
||||
|
||||
XcursorSetTheme (display->xdisplay, theme);
|
||||
XcursorSetDefaultSize (display->xdisplay, size);
|
||||
|
||||
tmp2 = display->screens;
|
||||
while (tmp2 != NULL)
|
||||
{
|
||||
MetaScreen *screen = tmp2->data;
|
||||
|
||||
meta_screen_update_cursor (screen);
|
||||
|
||||
tmp2 = tmp2->next;
|
||||
}
|
||||
|
||||
tmp = tmp->next;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static gboolean is_syncing = FALSE;
|
||||
|
||||
gboolean
|
||||
@@ -4184,53 +4326,6 @@ meta_resize_gravity_from_grab_op (MetaGrabOp op)
|
||||
return gravity;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_rectangle_intersect (MetaRectangle *src1,
|
||||
MetaRectangle *src2,
|
||||
MetaRectangle *dest)
|
||||
{
|
||||
int dest_x, dest_y;
|
||||
int dest_w, dest_h;
|
||||
int return_val;
|
||||
|
||||
g_return_val_if_fail (src1 != NULL, FALSE);
|
||||
g_return_val_if_fail (src2 != NULL, FALSE);
|
||||
g_return_val_if_fail (dest != NULL, FALSE);
|
||||
|
||||
return_val = FALSE;
|
||||
|
||||
dest_x = MAX (src1->x, src2->x);
|
||||
dest_y = MAX (src1->y, src2->y);
|
||||
dest_w = MIN (src1->x + src1->width, src2->x + src2->width) - dest_x;
|
||||
dest_h = MIN (src1->y + src1->height, src2->y + src2->height) - dest_y;
|
||||
|
||||
if (dest_w > 0 && dest_h > 0)
|
||||
{
|
||||
dest->x = dest_x;
|
||||
dest->y = dest_y;
|
||||
dest->width = dest_w;
|
||||
dest->height = dest_h;
|
||||
return_val = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
dest->width = 0;
|
||||
dest->height = 0;
|
||||
}
|
||||
|
||||
return return_val;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_rectangle_equal (const MetaRectangle *src1,
|
||||
const MetaRectangle *src2)
|
||||
{
|
||||
return ((src1->x == src2->x) &&
|
||||
(src1->y == src2->y) &&
|
||||
(src1->width == src2->width) &&
|
||||
(src1->height == src2->height));
|
||||
}
|
||||
|
||||
static MetaScreen*
|
||||
find_screen_for_selection (MetaDisplay *display,
|
||||
Window owner,
|
||||
@@ -4605,20 +4700,114 @@ meta_display_focus_sentinel_clear (MetaDisplay *display)
|
||||
return (display->sentinel_counter == 0);
|
||||
}
|
||||
|
||||
static void
|
||||
sanity_check_timestamps (MetaDisplay *display,
|
||||
Time timestamp)
|
||||
{
|
||||
if (XSERVER_TIME_IS_BEFORE (timestamp, display->last_focus_time))
|
||||
{
|
||||
meta_warning ("last_focus_time (%lu) is greater than comparison "
|
||||
"timestamp (%lu). This most likely represents a buggy "
|
||||
"client sending inaccurate timestamps in messages such as "
|
||||
"_NET_ACTIVE_WINDOW. Trying to work around...\n",
|
||||
display->last_focus_time, (unsigned long)timestamp);
|
||||
display->last_focus_time = timestamp;
|
||||
}
|
||||
if (XSERVER_TIME_IS_BEFORE (timestamp, display->last_user_time))
|
||||
{
|
||||
GSList *windows;
|
||||
GSList *tmp;
|
||||
|
||||
meta_warning ("last_user_time (%lu) is greater than comparison "
|
||||
"timestamp (%lu). This most likely represents a buggy "
|
||||
"client sending inaccurate timestamps in messages such as "
|
||||
"_NET_ACTIVE_WINDOW. Trying to work around...\n",
|
||||
display->last_user_time, (unsigned long)timestamp);
|
||||
display->last_user_time = timestamp;
|
||||
|
||||
windows = meta_display_list_windows (display);
|
||||
tmp = windows;
|
||||
while (tmp != NULL)
|
||||
{
|
||||
MetaWindow *window = tmp->data;
|
||||
|
||||
if (XSERVER_TIME_IS_BEFORE (timestamp, window->net_wm_user_time))
|
||||
{
|
||||
meta_warning ("%s appears to be one of the offending windows "
|
||||
"with a timestamp of %lu. Working around...\n",
|
||||
window->desc, window->net_wm_user_time);
|
||||
window->net_wm_user_time = timestamp;
|
||||
}
|
||||
|
||||
tmp = tmp->next;
|
||||
}
|
||||
|
||||
g_slist_free (windows);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
timestamp_too_old (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
Time *timestamp)
|
||||
{
|
||||
/* FIXME: If Soeren's suggestion in bug 151984 is implemented, it will allow
|
||||
* us to sanity check the timestamp here and ensure it doesn't correspond to
|
||||
* a future time (though we would want to rename to
|
||||
* timestamp_too_old_or_in_future).
|
||||
*/
|
||||
|
||||
MetaWindow *focus_window;
|
||||
focus_window = display->focus_window;
|
||||
|
||||
if (*timestamp == CurrentTime)
|
||||
{
|
||||
meta_warning ("Got a request to focus %s with a timestamp of 0. This "
|
||||
"shouldn't happen!\n",
|
||||
window ? window->desc : "the no_focus_window");
|
||||
meta_print_backtrace ();
|
||||
*timestamp = meta_display_get_current_time_roundtrip (display);
|
||||
return FALSE;
|
||||
}
|
||||
else if (XSERVER_TIME_IS_BEFORE (*timestamp, display->last_focus_time))
|
||||
{
|
||||
if (XSERVER_TIME_IS_BEFORE (*timestamp, display->last_user_time))
|
||||
{
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Ignoring focus request for %s since %lu "
|
||||
"is less than %lu and %lu.\n",
|
||||
window ? window->desc : "the no_focus_window",
|
||||
*timestamp,
|
||||
(unsigned long) display->last_user_time,
|
||||
(unsigned long) display->last_focus_time);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Received focus request for %s which is newer than most "
|
||||
"recent user_time, but less recent than "
|
||||
"last_focus_time (%lu < %lu < %lu); adjusting "
|
||||
"accordingly. (See bug 167358)\n",
|
||||
window ? window->desc : "the no_focus_window",
|
||||
display->last_user_time,
|
||||
*timestamp,
|
||||
display->last_focus_time);
|
||||
*timestamp = display->last_focus_time;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
meta_display_set_input_focus_window (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
gboolean focus_frame,
|
||||
Time timestamp)
|
||||
{
|
||||
if (timestamp == CurrentTime)
|
||||
{
|
||||
meta_warning ("meta_display_set_input_focus_window called with a "
|
||||
"timestamp of 0 for window %s. This shouldn't happen!\n",
|
||||
window->desc);
|
||||
meta_print_backtrace ();
|
||||
}
|
||||
else if (XSERVER_TIME_IS_BEFORE (timestamp, display->last_focus_time))
|
||||
if (timestamp_too_old (display, window, ×tamp))
|
||||
return;
|
||||
|
||||
XSetInputFocus (display->xdisplay,
|
||||
@@ -4636,17 +4825,8 @@ void
|
||||
meta_display_focus_the_no_focus_window (MetaDisplay *display,
|
||||
Time timestamp)
|
||||
{
|
||||
if (timestamp == CurrentTime)
|
||||
{
|
||||
meta_warning ("meta_display_focus_the_no_focus_window called with a "
|
||||
"timestamp of 0. This shouldn't happen!\n");
|
||||
meta_print_backtrace ();
|
||||
}
|
||||
else if (XSERVER_TIME_IS_BEFORE (timestamp, display->last_focus_time))
|
||||
{
|
||||
meta_warning ("Ignoring focus request for no_focus_window since %lu is less than %lu.\n", timestamp, display->last_focus_time);
|
||||
if (timestamp_too_old (display, NULL, ×tamp))
|
||||
return;
|
||||
}
|
||||
|
||||
XSetInputFocus (display->xdisplay,
|
||||
display->no_focus_window,
|
||||
|
@@ -4,6 +4,7 @@
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2002 Red Hat, Inc.
|
||||
* Copyright (C) 2003 Rob Adams
|
||||
* Copyright (C) 2004, 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
|
||||
@@ -32,6 +33,7 @@
|
||||
#include <X11/Xlib.h>
|
||||
#include "eventqueue.h"
|
||||
#include "common.h"
|
||||
#include "boxes.h"
|
||||
|
||||
#ifdef HAVE_STARTUP_NOTIFICATION
|
||||
#include <libsn/sn.h>
|
||||
@@ -43,17 +45,6 @@
|
||||
|
||||
#define meta_XFree(p) do { if ((p)) XFree ((p)); } while (0)
|
||||
|
||||
/* this doesn't really belong here, oh well. */
|
||||
typedef struct _MetaRectangle MetaRectangle;
|
||||
|
||||
struct _MetaRectangle
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int width;
|
||||
int height;
|
||||
};
|
||||
|
||||
typedef struct MetaCompositor MetaCompositor;
|
||||
typedef struct _MetaDisplay MetaDisplay;
|
||||
typedef struct _MetaFrame MetaFrame;
|
||||
@@ -67,6 +58,8 @@ typedef struct _MetaWorkspace MetaWorkspace;
|
||||
typedef struct _MetaWindowPropHooks MetaWindowPropHooks;
|
||||
typedef struct _MetaGroupPropHooks MetaGroupPropHooks;
|
||||
|
||||
typedef struct MetaEdgeResistanceData MetaEdgeResistanceData;
|
||||
|
||||
typedef void (* MetaWindowPingFunc) (MetaDisplay *display,
|
||||
Window xwindow,
|
||||
Time timestamp,
|
||||
@@ -182,6 +175,9 @@ struct _MetaDisplay
|
||||
Atom atom_net_moveresize_window;
|
||||
Atom atom_net_desktop_geometry;
|
||||
Atom atom_net_desktop_viewport;
|
||||
Atom atom_metacity_version;
|
||||
Atom atom_net_wm_visible_name;
|
||||
Atom atom_net_wm_visible_icon_name;
|
||||
|
||||
/* This is the actual window from focus events,
|
||||
* not the one we last set
|
||||
@@ -197,9 +193,17 @@ struct _MetaDisplay
|
||||
*/
|
||||
MetaWindow *expected_focus_window;
|
||||
|
||||
/* last timestamp that a window was focused */
|
||||
/* last timestamp passed to XSetInputFocus */
|
||||
Time last_focus_time;
|
||||
|
||||
/* last user interaction time in any app */
|
||||
Time last_user_time;
|
||||
|
||||
/* whether we're using mousenav (only relevant for sloppy&mouse focus modes;
|
||||
* !mouse_mode means "keynav mode")
|
||||
*/
|
||||
guint mouse_mode : 1;
|
||||
|
||||
guint static_gravity_works : 1;
|
||||
|
||||
/*< private-ish >*/
|
||||
@@ -265,6 +269,10 @@ struct _MetaDisplay
|
||||
MetaResizePopup *grab_resize_popup;
|
||||
GTimeVal grab_last_moveresize_time;
|
||||
Time grab_motion_notify_time;
|
||||
int grab_wireframe_last_display_width;
|
||||
int grab_wireframe_last_display_height;
|
||||
GList* grab_old_window_stacking;
|
||||
MetaEdgeResistanceData *grab_edge_resistance_data;
|
||||
|
||||
/* we use property updates as sentinels for certain window focus events
|
||||
* to avoid some race conditions on EnterNotify events
|
||||
@@ -335,6 +343,7 @@ struct _MetaDisplay
|
||||
int render_error_base;
|
||||
#endif
|
||||
#ifdef HAVE_XSYNC
|
||||
unsigned int grab_last_user_action_was_snap;
|
||||
unsigned int have_xsync : 1;
|
||||
#define META_DISPLAY_HAS_XSYNC(display) ((display)->have_xsync)
|
||||
#else
|
||||
@@ -359,11 +368,21 @@ struct _MetaDisplay
|
||||
* has occurred, this is equivalent to
|
||||
* time1 < time2
|
||||
* Of course, the rest of the ugliness of this macro comes from accounting
|
||||
* for the fact that wraparound can occur.
|
||||
* for the fact that wraparound can occur and the fact that a timestamp of
|
||||
* 0 must be special-cased since it means older than anything else.
|
||||
*
|
||||
* Note that this is NOT an equivalent for time1 <= time2; if that's what
|
||||
* you need then you'll need to swap the order of the arguments and negate
|
||||
* the result.
|
||||
*/
|
||||
#define XSERVER_TIME_IS_BEFORE(time1, time2) \
|
||||
( (( time1 < time2 ) && ( time2 - time1 < ((guint32)-1)/2 )) || \
|
||||
(( time1 > time2 ) && ( time1 - time2 > ((guint32)-1)/2 )) \
|
||||
#define XSERVER_TIME_IS_BEFORE_ASSUMING_REAL_TIMESTAMPS(time1, time2) \
|
||||
( (( time1 < time2 ) && ( time2 - time1 < ((guint32)-1)/2 )) || \
|
||||
(( time1 > time2 ) && ( time1 - time2 > ((guint32)-1)/2 )) \
|
||||
)
|
||||
#define XSERVER_TIME_IS_BEFORE(time1, time2) \
|
||||
( time1 == 0 || \
|
||||
(XSERVER_TIME_IS_BEFORE_ASSUMING_REAL_TIMESTAMPS(time1, time2) && \
|
||||
time2 != 0) \
|
||||
)
|
||||
|
||||
gboolean meta_display_open (const char *name);
|
||||
@@ -434,6 +453,10 @@ void meta_display_grab_focus_window_button (MetaDisplay *display,
|
||||
void meta_display_ungrab_focus_window_button (MetaDisplay *display,
|
||||
MetaWindow *window);
|
||||
|
||||
/* Next two functions are defined in edge-resistance.c */
|
||||
void meta_display_compute_resistance_and_snapping_edges (MetaDisplay *display);
|
||||
void meta_display_cleanup_edges (MetaDisplay *display);
|
||||
|
||||
/* make a request to ensure the event serial has changed */
|
||||
void meta_display_increment_event_serial (MetaDisplay *display);
|
||||
|
||||
@@ -449,6 +472,9 @@ const char* meta_event_detail_to_string (int d);
|
||||
void meta_display_queue_retheme_all_windows (MetaDisplay *display);
|
||||
void meta_display_retheme_all (void);
|
||||
|
||||
void meta_display_set_cursor_theme (const char *theme,
|
||||
int size);
|
||||
|
||||
void meta_display_ping_window (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
Time timestamp,
|
||||
@@ -462,8 +488,6 @@ typedef enum
|
||||
{
|
||||
META_TAB_LIST_NORMAL,
|
||||
META_TAB_LIST_DOCKS
|
||||
|
||||
|
||||
} MetaTabList;
|
||||
|
||||
GList* meta_display_get_tab_list (MetaDisplay *display,
|
||||
@@ -488,12 +512,6 @@ int meta_resize_gravity_from_grab_op (MetaGrabOp op);
|
||||
gboolean meta_grab_op_is_moving (MetaGrabOp op);
|
||||
gboolean meta_grab_op_is_resizing (MetaGrabOp op);
|
||||
|
||||
gboolean meta_rectangle_intersect (MetaRectangle *src1,
|
||||
MetaRectangle *src2,
|
||||
MetaRectangle *dest);
|
||||
gboolean meta_rectangle_equal (const MetaRectangle *src1,
|
||||
const MetaRectangle *src2);
|
||||
|
||||
void meta_display_devirtualize_modifiers (MetaDisplay *display,
|
||||
MetaVirtualModifier modifiers,
|
||||
unsigned int *mask);
|
||||
@@ -505,9 +523,11 @@ gboolean meta_display_focus_sentinel_clear (MetaDisplay *display);
|
||||
/* meta_display_set_input_focus_window is like XSetInputFocus, except
|
||||
* that (a) it can't detect timestamps later than the current time,
|
||||
* since Metacity isn't part of the XServer, and thus gives erroneous
|
||||
* behavior in this circumstance (so don't do it), and (b) it uses
|
||||
* display->last_focus_time and display->expected_focus_window since
|
||||
* we don't have access to the true Xserver ones.
|
||||
* behavior in this circumstance (so don't do it), (b) it uses
|
||||
* display->last_focus_time since we don't have access to the true
|
||||
* Xserver one, (c) it makes use of display->user_time since checking
|
||||
* whether a window should be allowed to be focused should depend
|
||||
* on user_time events (see bug 167358, comment 15 in particular)
|
||||
*/
|
||||
void meta_display_set_input_focus_window (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
|
1278
src/edge-resistance.c
Normal file
1278
src/edge-resistance.c
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user