Compare commits
325 Commits
METACITY_2
...
METACITY_2
Author | SHA1 | Date | |
---|---|---|---|
![]() |
fed80bf081 | ||
![]() |
8c7f81eac9 | ||
![]() |
f3ffa919ee | ||
![]() |
0a3d3d6069 | ||
![]() |
19b808c4f5 | ||
![]() |
744efc95a1 | ||
![]() |
522e9916b6 | ||
![]() |
b682a9f945 | ||
![]() |
a8fd516aa0 | ||
![]() |
1f7f29e059 | ||
![]() |
0b497e95ed | ||
![]() |
044d8999a3 | ||
![]() |
07c406cad9 | ||
![]() |
822059d078 | ||
![]() |
6198facc42 | ||
![]() |
9cee95f210 | ||
![]() |
9d02a6c163 | ||
![]() |
06a58f43c0 | ||
![]() |
e81b5978b0 | ||
![]() |
4248d86c98 | ||
![]() |
2b86bd7a9e | ||
![]() |
4541919fb4 | ||
![]() |
6b13680315 | ||
![]() |
31b0c1a3ba | ||
![]() |
98731903ec | ||
![]() |
977d7d3b9c | ||
![]() |
afee4a4251 | ||
![]() |
caaad4449c | ||
![]() |
8100b93048 | ||
![]() |
69ef1b673f | ||
![]() |
ec0bd19156 | ||
![]() |
50d452c634 | ||
![]() |
50f25b6162 | ||
![]() |
a209d2fe9c | ||
![]() |
4908fe3bed | ||
![]() |
b58ab6be64 | ||
![]() |
f650c1f876 | ||
![]() |
766d46b70d | ||
![]() |
5f1de4bf7a | ||
![]() |
2e0bb772ea | ||
![]() |
118a1fb76a | ||
![]() |
bd73853f72 | ||
![]() |
de4c7a0610 | ||
![]() |
7bcc485701 | ||
![]() |
c127a4691c | ||
![]() |
e81659d2ff | ||
![]() |
385248044d | ||
![]() |
731ac41cd7 | ||
![]() |
8dd95010c7 | ||
![]() |
abe183c14c | ||
![]() |
b834001fe7 | ||
![]() |
65ba48ad3f | ||
![]() |
646521fc1d | ||
![]() |
3aa119e99e | ||
![]() |
a45b6cccbe | ||
![]() |
cd09a27aa6 | ||
![]() |
38d02fff26 | ||
![]() |
e5f672e67e | ||
![]() |
12f4f7c6b0 | ||
![]() |
e60da6c006 | ||
![]() |
c2bbd8b66c | ||
![]() |
29fc267353 | ||
![]() |
d437930868 | ||
![]() |
7ccc81982e | ||
![]() |
f077527c9a | ||
![]() |
a2fea22402 | ||
![]() |
8af2b95d03 | ||
![]() |
20b264d81f | ||
![]() |
c79fed1661 | ||
![]() |
cb820084dd | ||
![]() |
c6ab972143 | ||
![]() |
0608d1f4ee | ||
![]() |
6f9b2cf11e | ||
![]() |
2a649ecd95 | ||
![]() |
3972258abc | ||
![]() |
42a3a97b37 | ||
![]() |
06db1e4ad6 | ||
![]() |
9fb7667ea0 | ||
![]() |
feb5c06e25 | ||
![]() |
858757aaf3 | ||
![]() |
8c86d5cd5e | ||
![]() |
5a27308cde | ||
![]() |
c144f22de6 | ||
![]() |
3e95ae127b | ||
![]() |
ef3d6a5d4e | ||
![]() |
dc40fe8257 | ||
![]() |
d8241886b7 | ||
![]() |
1a31caa3fc | ||
![]() |
56bef55e92 | ||
![]() |
04c09f068e | ||
![]() |
25c4bb1455 | ||
![]() |
d0d0925e29 | ||
![]() |
9d1d8fa062 | ||
![]() |
702a4c0da7 | ||
![]() |
fe341bb927 | ||
![]() |
8131988b5e | ||
![]() |
28a54c6bb4 | ||
![]() |
ef1ecc8128 | ||
![]() |
adb26d0543 | ||
![]() |
4cfb5152f7 | ||
![]() |
952c1f415b | ||
![]() |
b5a912e232 | ||
![]() |
9170f58f3b | ||
![]() |
9942588184 | ||
![]() |
a7513e84fc | ||
![]() |
77a1e8ec8b | ||
![]() |
0ceb317ac6 | ||
![]() |
4fda4ed806 | ||
![]() |
5c01798884 | ||
![]() |
09c929ce3f | ||
![]() |
0399fb7d4b | ||
![]() |
4b9a23e8eb | ||
![]() |
c60ec1802a | ||
![]() |
929619f145 | ||
![]() |
c043cd4dae | ||
![]() |
9fb6cea799 | ||
![]() |
7a441616f3 | ||
![]() |
43693d2b6a | ||
![]() |
b76e62226b | ||
![]() |
706791d582 | ||
![]() |
b6dca7f3cb | ||
![]() |
43ede25908 | ||
![]() |
5856fd8ef2 | ||
![]() |
332adc45fc | ||
![]() |
a76b1075df | ||
![]() |
d2d8d96778 | ||
![]() |
3ae3a2558f | ||
![]() |
6efaa8d45c | ||
![]() |
2876d2f43f | ||
![]() |
1341d50518 | ||
![]() |
11e56f841a | ||
![]() |
72dd7ff621 | ||
![]() |
10425302c7 | ||
![]() |
ab16ef096a | ||
![]() |
e632c8ebf5 | ||
![]() |
9a5ca2055e | ||
![]() |
307f49f735 | ||
![]() |
6ca6596309 | ||
![]() |
1c50c27613 | ||
![]() |
f0ae093877 | ||
![]() |
8273612a87 | ||
![]() |
09d35abc95 | ||
![]() |
b1769b3cb9 | ||
![]() |
a1bfe15eb5 | ||
![]() |
51a98800f8 | ||
![]() |
c7b55ccb9f | ||
![]() |
b42ac36ac8 | ||
![]() |
91c8674acf | ||
![]() |
a50c7cd589 | ||
![]() |
3a7ce7d109 | ||
![]() |
9ef1da6ec2 | ||
![]() |
cd1885cec4 | ||
![]() |
27797e7f78 | ||
![]() |
0de86fc8ea | ||
![]() |
c0452be980 | ||
![]() |
963ac3ff32 | ||
![]() |
f3cc59c78a | ||
![]() |
56609cbb39 | ||
![]() |
16a8add6f8 | ||
![]() |
036a61d198 | ||
![]() |
9739346c85 | ||
![]() |
47e6bd5648 | ||
![]() |
502003e47b | ||
![]() |
57b16ab4c7 | ||
![]() |
83480c1ac9 | ||
![]() |
db108c1fc3 | ||
![]() |
5a28c4c423 | ||
![]() |
f1701a751f | ||
![]() |
ad65847d7d | ||
![]() |
88ea02a77a | ||
![]() |
b70fdf1a5f | ||
![]() |
2195dfc9f8 | ||
![]() |
27eb5a60f3 | ||
![]() |
339719568f | ||
![]() |
fd13022dc4 | ||
![]() |
d53afd3ae1 | ||
![]() |
57f9a51a58 | ||
![]() |
799f3274d9 | ||
![]() |
a788bee6f9 | ||
![]() |
0a83c10948 | ||
![]() |
dfa9c24b87 | ||
![]() |
7bf8eee605 | ||
![]() |
664216dc8b | ||
![]() |
b3f95bf7d1 | ||
![]() |
f2e783b2c5 | ||
![]() |
e68b1b6c42 | ||
![]() |
217ba6c1b7 | ||
![]() |
74a8b5b78b | ||
![]() |
81fab83067 | ||
![]() |
0f23f3f05b | ||
![]() |
4b3b706369 | ||
![]() |
595cbe2ac0 | ||
![]() |
b20391780d | ||
![]() |
dd8e9e5725 | ||
![]() |
007a1f0d0d | ||
![]() |
40a710dad0 | ||
![]() |
6770329e69 | ||
![]() |
4f448440d4 | ||
![]() |
039ffb0cb4 | ||
![]() |
2f561e5553 | ||
![]() |
2d314d84cd | ||
![]() |
3b7f92ae5d | ||
![]() |
4f7e28ff3c | ||
![]() |
47cf3085e7 | ||
![]() |
3d996ff73d | ||
![]() |
1b7a651a33 | ||
![]() |
a605da04c1 | ||
![]() |
cc7195547a | ||
![]() |
c820769bce | ||
![]() |
b2d009d01d | ||
![]() |
fe8abfa887 | ||
![]() |
2fdb75ad45 | ||
![]() |
07c0a53316 | ||
![]() |
e5cf7ff55b | ||
![]() |
3c1fe8bedd | ||
![]() |
88aeeb8cd5 | ||
![]() |
1b323f87d7 | ||
![]() |
2d74e25058 | ||
![]() |
98e882720c | ||
![]() |
93c5a042ee | ||
![]() |
99d7cadf67 | ||
![]() |
0e3ecc7a31 | ||
![]() |
c635a55612 | ||
![]() |
5a088c5bbc | ||
![]() |
a27089a110 | ||
![]() |
35c64b45dd | ||
![]() |
daf93c5ed0 | ||
![]() |
56d75ebf44 | ||
![]() |
5815ebd3a4 | ||
![]() |
78f925c6a6 | ||
![]() |
1115e22481 | ||
![]() |
c2ba0a7d67 | ||
![]() |
e699ff2e83 | ||
![]() |
804411bd68 | ||
![]() |
690100f1ad | ||
![]() |
95b0ee480e | ||
![]() |
4be245a26a | ||
![]() |
a0863fc437 | ||
![]() |
c9f0005b05 | ||
![]() |
104786735a | ||
![]() |
191b3f2c21 | ||
![]() |
860ae37db5 | ||
![]() |
9bde925d3d | ||
![]() |
7630d22b8d | ||
![]() |
a92be6e319 | ||
![]() |
0bb3361b73 | ||
![]() |
b1c1e4a7db | ||
![]() |
82673cb51f | ||
![]() |
4ebdb0b9c0 | ||
![]() |
4c5e4442c1 | ||
![]() |
01fa9cfc63 | ||
![]() |
6ff017e875 | ||
![]() |
8d892f76da | ||
![]() |
03bbe3de17 | ||
![]() |
47a1c285c7 | ||
![]() |
4ccb120922 | ||
![]() |
423b5f5f39 | ||
![]() |
feefcdd892 | ||
![]() |
927a6def1b | ||
![]() |
d538690bd4 | ||
![]() |
24d8655188 | ||
![]() |
917dfefd6c | ||
![]() |
9378a4fb4d | ||
![]() |
67c36f0917 | ||
![]() |
d5083baea0 | ||
![]() |
6a0f4f6ccb | ||
![]() |
901ad18a67 | ||
![]() |
6ac67f80a6 | ||
![]() |
a88f44ea64 | ||
![]() |
5c10e0a859 | ||
![]() |
3c384d37c6 | ||
![]() |
2592efeee4 | ||
![]() |
66b2e8bc3f | ||
![]() |
17dc2d6151 | ||
![]() |
2218b79143 | ||
![]() |
17b8a1f3e6 | ||
![]() |
830a52ee25 | ||
![]() |
18b38ac526 | ||
![]() |
8658268847 | ||
![]() |
8a271ee5ac | ||
![]() |
cf15ea0a3d | ||
![]() |
669cdc4bb6 | ||
![]() |
68d6a92972 | ||
![]() |
4770da34b3 | ||
![]() |
9197c4f835 | ||
![]() |
6aff3466c6 | ||
![]() |
e98fad3e62 | ||
![]() |
6628acb59c | ||
![]() |
d76d953d69 | ||
![]() |
e9358b5eea | ||
![]() |
6d7d586f3c | ||
![]() |
481accd6bd | ||
![]() |
2a97ddd60a | ||
![]() |
8441fada07 | ||
![]() |
a60b735e2d | ||
![]() |
199d20197e | ||
![]() |
5fdb8ab7d6 | ||
![]() |
7c80b0a335 | ||
![]() |
7eb5a67b3d | ||
![]() |
37640a925e | ||
![]() |
c446955b8d | ||
![]() |
0895abd894 | ||
![]() |
f7c04aff1e | ||
![]() |
89ca4aab3d | ||
![]() |
a4dc0d581a | ||
![]() |
a889ff3469 | ||
![]() |
320ef83bfc | ||
![]() |
8849fad8f9 | ||
![]() |
9839087306 | ||
![]() |
d31e28be70 | ||
![]() |
26c2ae81ea | ||
![]() |
922932d240 | ||
![]() |
28fbdc611e | ||
![]() |
99c7dc8b85 | ||
![]() |
ef0816bdce | ||
![]() |
e99ebf6ef0 | ||
![]() |
ef44f8066b | ||
![]() |
47d5189812 | ||
![]() |
d71ef42ded | ||
![]() |
e37091654f | ||
![]() |
dcd097d67e | ||
![]() |
b5261cdbda | ||
![]() |
dc40522ea7 | ||
![]() |
de44b2d794 | ||
![]() |
1117d45f8a |
159
COMPLIANCE
Normal file
159
COMPLIANCE
Normal file
@@ -0,0 +1,159 @@
|
||||
Metacity Standards Compliance
|
||||
=============================
|
||||
$Id$
|
||||
|
||||
1) Introduction
|
||||
2) EWMH Compliance
|
||||
a. Root Window Properties
|
||||
b. Root Window Messages
|
||||
c. Application Window Properties
|
||||
d. Window Manager Protocols
|
||||
3) ICCCM Compliance
|
||||
|
||||
1) Introduction
|
||||
---------------
|
||||
|
||||
This document details metacity compliance with the relevent standards.
|
||||
The format of this document is as follows:
|
||||
|
||||
[-/+?] Hint Name/Feature Name (Version number)
|
||||
Errata/Comments
|
||||
|
||||
The first character indicates the level of compliance as follows:
|
||||
- none
|
||||
/ partial
|
||||
+ complete
|
||||
? unknown
|
||||
|
||||
The title indicates a feature or a hint in the specification, and the
|
||||
version number indicates the minimum version of the specification
|
||||
supported by metacity. Later versions may be supported if no
|
||||
incompatible changes have been made in the specification.
|
||||
|
||||
2) EWMH Compliance
|
||||
------------------
|
||||
|
||||
The EWMH, or Extended Window Manager Hints is a freedesktop.org-
|
||||
developed standard to support a number of conventions for
|
||||
communication between the window manager and clients. It builds on
|
||||
and extends the ICCCM (See Section 3). A copy of the current EWMH
|
||||
standard is available at http://freedesktop.org/Standards/wm-spec/
|
||||
|
||||
a. Root Window Properties
|
||||
-------------------------
|
||||
|
||||
+ _NET_SUPPORTED (1.3)
|
||||
|
||||
+ _NET_CLIENT_LIST (1.3)
|
||||
|
||||
+ _NET_NUMBER_OF_DESKTOPS (1.3)
|
||||
|
||||
+ _NET_DESKTOP_GEOMETRY (1.3)
|
||||
Metacity does not implement large desktops, so this is kept set to
|
||||
the screen size.
|
||||
|
||||
+ _NET_DESKTOP_VIEWPORT (1.3)
|
||||
Metacity does not implement viewports, so this is a constant (0,0).
|
||||
|
||||
+ _NET_CURRENT_DESKTOP (1.3)
|
||||
|
||||
+ _NET_DESKTOP_NAMES (1.3)
|
||||
|
||||
+ _NET_ACTIVE_WINDOW (1.3)
|
||||
|
||||
+ _NET_WORKAREA (1.3)
|
||||
|
||||
+ _NET_SUPPORTING_WM_CHECK (1.3)
|
||||
|
||||
+ _NET_VIRTUAL_ROOTS (1.3)
|
||||
Metacity does not read or set this property, but it does not use
|
||||
virtual roots to implement virtual desktops, so it complies with the
|
||||
specification.
|
||||
|
||||
+ _NET_DESKTOP_LAYOUT (1.3)
|
||||
|
||||
+ _NET_SHOWING_DESKTOP (1.3)
|
||||
|
||||
b. Root Window Messages
|
||||
-----------------------
|
||||
|
||||
+ _NET_CLOSE_WINDOW (1.3)
|
||||
|
||||
- _NET_MOVERESIZE_WINDOW (1.3)
|
||||
Metacity supports this message, but the specification is unclear on
|
||||
the layout of the detail value, and as such it is #if 0'd in the code
|
||||
|
||||
+ _NET_WM_MOVERESIZE (1.3)
|
||||
|
||||
- _NET_RESTACK_WINDOW (1.3)
|
||||
Metacity will raise or lower windows in response to this message,
|
||||
but the sibling restack modes are not supported, and it is currently
|
||||
#if 0'd in the code.
|
||||
|
||||
+ _NET_REQUEST_FRAME_EXTENTS (1.3)
|
||||
|
||||
c. Application Window Properties
|
||||
--------------------------------
|
||||
|
||||
+ _NET_WM_NAME (1.3)
|
||||
|
||||
+ _NET_WM_VISIBLE_NAME (1.3)
|
||||
Metacity does not set this property, but metacity will never display
|
||||
a name different from _NET_WM_NAME
|
||||
|
||||
+ _NET_WM_ICON_NAME (1.3)
|
||||
|
||||
+ _NET_WM_VISIBLE_ICON_NAME (1.3)
|
||||
Metacity does not set this property, but metacity will never display
|
||||
a name different from _NET_WM_NAME
|
||||
|
||||
+ _NET_WM_DESKTOP (1.3)
|
||||
|
||||
+ _NET_WM_WINDOW_TYPE (1.3)
|
||||
|
||||
/ _NET_WM_STATE (1.3)
|
||||
This property is read and updated according to the specification,
|
||||
but see caveat below.
|
||||
Metacity does not recognize separate vertical and horizontal
|
||||
maximization states. Currently metacity will do a two-dimensional
|
||||
maximization if either property is set.
|
||||
See: http://bugzilla.gnome.org/show_bug.cgi?id=113601
|
||||
Metacity doesn't implement viewports so _NET_WM_STATE_STICKY is
|
||||
unimplemented.
|
||||
|
||||
+ _NET_WM_ALLOWED_ACTIONS (1.3)
|
||||
Metacity keeps this hint up to date. The code is somewhat crufty
|
||||
and should be rewritten, though it is functional.
|
||||
See: http://bugzilla.gnome.org/show_bug.cgi?id=90420
|
||||
|
||||
+ _NET_WM_STRUT (1.3)
|
||||
|
||||
+ _NET_WM_STRUT_PARTIAL (1.3)
|
||||
|
||||
+ _NET_WM_ICON_GEOMETRY (1.3)
|
||||
Metacity uses this property to draw minimize/restore animations
|
||||
|
||||
+ _NET_WM_ICON (1.3)
|
||||
|
||||
+ _NET_WM_PID (1.3)
|
||||
|
||||
+ _NET_WM_HANDLED_ICONS (1.3)
|
||||
Metacity does not read or set this property. However, metacity
|
||||
never manages iconified windows, and so has no need to do so.
|
||||
|
||||
+ _NET_WM_USER_TIME (1.3)
|
||||
Metacity uses this property to prevent applications from stealing
|
||||
focus if supported by the toolkit.
|
||||
|
||||
+ _NET_FRAME_EXTENTS (1.3)
|
||||
If set in response to a _NET_REQUEST_FRAME_EXTENTS message received
|
||||
prior to the window being mapped, this may be an estimate. This is,
|
||||
however, expressly allowed by the specification.
|
||||
|
||||
d. Window Manager Protocols
|
||||
---------------------------
|
||||
+ _NET_WM_PING (1.3)
|
||||
|
||||
3) ICCCM Compliance
|
||||
-------------------
|
||||
TODO
|
7
HACKING
7
HACKING
@@ -101,4 +101,9 @@ be NULL.
|
||||
|
||||
The code could use cleanup in a lot of places, feel free to do so.
|
||||
|
||||
|
||||
Metacity is ideally a fully ICCCM and EWMH-compliant window manager.
|
||||
Reading these specifications is a useful first step to understanding
|
||||
the role of a window manager on an X11 desktop and the standards and
|
||||
conventions on which X11 desktops are based. Please refer to the
|
||||
COMPLIANCE file for additional information on these specifications and
|
||||
metacity's compliance therewith.
|
||||
|
173
NEWS
173
NEWS
@@ -1,3 +1,176 @@
|
||||
2.8.4
|
||||
==
|
||||
|
||||
This release features a number of bug fixes, and also the disabling of
|
||||
the focus-stealing-prevention code (we're entering hard code freeze in
|
||||
Gnome so it's too late to fix the remaining issues, especially since
|
||||
it requires several patches to modules other than Metacity).
|
||||
|
||||
Thanks to Havoc Pennington, Soeren Sandmann, Elijah Newren, and Rich
|
||||
Wareham for fixes in this release
|
||||
|
||||
Fixes
|
||||
* track the last_xor_rect, for wireframe painting (Havoc)
|
||||
* Move wireframe code before grab is released to prevent endless
|
||||
loops with fullscreen windows. (Soeren)
|
||||
* Make dialogs that Metacity shows follow focus-stealing-prevention
|
||||
conventions. (Elijah; part of #149028)
|
||||
* add render extension check to the display, don't build the
|
||||
compositing manager by default, use an ARGB visual when available
|
||||
for the window frame (Rich Wareham; various tweaks added later by
|
||||
Havoc)
|
||||
* move the have_xrender variable initialization up in the file since
|
||||
it can be set as part of composite check (Havoc)
|
||||
* make argb stuff compile, add some code from xcompmgr (Havoc)
|
||||
* fix an assertion failure that would occur after increasing the
|
||||
number of workspaces; fix stacking order when a window is denied
|
||||
focus (Elijah; #150615)
|
||||
* disable some compositor code that wasn't working, don't grab the
|
||||
server during repaint, various set_background fixes and
|
||||
refactoring (Havoc)
|
||||
|
||||
Translations
|
||||
* az(Metin Amiroff), bs(Kemal Sanjta), ca(Jordi Mallach),
|
||||
el(Kostas Papadimas), es(Francisco Javier F. Serrador),
|
||||
eu(I<><49>aki Larra<72><61>aga Murgoitio), fi(Pauli Virtanen),
|
||||
nb(Kjartan Maraas), sq(Laurent Dhima), uk(Maxim Dziumanenko)
|
||||
|
||||
|
||||
2.8.3
|
||||
==
|
||||
|
||||
Some important bug fixes in this release, including somy a11y bugs,
|
||||
and a compile issue on Solaris.
|
||||
|
||||
Thanks to Rob Adams, Bill Haneman, Peter O'Shea, Mike Castle, Soeren
|
||||
Sandman, Elijah Newren, and Havoc Pennington for fixes in this
|
||||
release.
|
||||
|
||||
Fixes
|
||||
* Adjust the MRU list when preventing focus stealing (Elijah)
|
||||
* Ensure that we maintain a focus window when switching workspaces
|
||||
in mouse focus mode (Elijah)
|
||||
* Some improvements in the showing desktop mode, and window
|
||||
activation (Elijah)
|
||||
* Make sure cursors changes are handled correctly (Havoc, Soeren)
|
||||
* Some fixes to the window menu (Rob)
|
||||
* Fix a compile issue on Solaris (Peter, Mike)
|
||||
* Allow struts to go past the middle of the screen, provided there's
|
||||
a gap between them, fixing an issue with gnome magnifier (Bill)
|
||||
|
||||
Translations
|
||||
* fi (Pauli Virtanen), ja (Takeshi AIHANA), ko (Young-Ho, Cha),
|
||||
pl (Gnome PL Team), ru (Dmitry G. Mastrukov), sr (Danilo <20>Ł<EFBFBD>egan),
|
||||
tk (Gurban M. Tewekgeli), zh_CN (Funda Wang)
|
||||
|
||||
2.8.2
|
||||
===
|
||||
|
||||
Many bugfixes and better support for the freedesktop.org EWMH spec.
|
||||
|
||||
Thanks to Rob Adams, Anders Carlsson, Elijah Newren, Soeren Sandmann,
|
||||
Emil Soleyman-Zomalan, Michael Terry, and Jeff Waugh for fixes in this
|
||||
release.
|
||||
|
||||
- set titlebar_uses_system_font = false (it was ugly)
|
||||
- make naming for "move a window"/"move the window"/"move window"
|
||||
more consistent (fixes #142235)
|
||||
- Add trailing quotes to keybinding explanation text.
|
||||
- support for EWMH update counter spec & add compensation events
|
||||
when events are ignored. (fixes #143333 and #109362)
|
||||
- Fix focus bugs: remove race condition on window close/minimize
|
||||
(#131582), make focus choice consistent for each focus mode
|
||||
(#135810), choose correct focus window when "un-showing the
|
||||
desktop (#144900), make sure correct window is focused when using
|
||||
the workspace switcher (#120100).
|
||||
- Use meta_topic instead of meta_warning when failing to connect to
|
||||
a session manager; reduces metacity verbosity. (fixes #136218)
|
||||
- Make meta_window_delete take a timestamp, and be sure to pass it
|
||||
one.
|
||||
- Add support for EWMH _NET_WM_USER_TIME spec. This enables part of
|
||||
preventing focus stealing. (bug #118372) Also fix bug with
|
||||
windows not being focused on unminimizing caused by original
|
||||
patch. (also bug #118372)
|
||||
- Fix some support for EWMH hints, and fix USER_TIME support to
|
||||
include the DEMANDS_ATTENTION hint. Also includes some code for
|
||||
implementing _NET_RESTACK_WINDOW and _NET_MOVERESIZE_WINDOW, but
|
||||
this is disabled pending feature thaw.
|
||||
|
||||
2.8.1
|
||||
===
|
||||
|
||||
Thanks to Olivier Crete, Jarrod Johnson, Neil Muller, Elijah Newren,
|
||||
Mark McLoughlin, Rob Adams, and foser AT gentoo.org for fixes in this
|
||||
release.
|
||||
|
||||
- make the --enable-xinerama switch work properly
|
||||
- prevent unwanted grab op from occurring
|
||||
- don't down-size nitems from a gulong to an int
|
||||
- add a value type check for the visual/audible bell gconf settings
|
||||
- make the no sm support warning resizable
|
||||
- more translations
|
||||
|
||||
2.8.0
|
||||
===
|
||||
|
||||
No code changes in this release, but some new translations.
|
||||
|
||||
2.7.1
|
||||
===
|
||||
|
||||
Thanks to Rob Adams for fixes in this release.
|
||||
|
||||
- bug #122016 - fix a focus race
|
||||
- Change move_to_workspace_left/right/up/down keybindings to
|
||||
<Control><Alt><Shift> arrow to avoid conflicting with new
|
||||
keybindings in spacial nautilus.
|
||||
- fix dialog stacking order issues so e.g. panel properties
|
||||
dialog is above the panel
|
||||
|
||||
2.7.0
|
||||
===
|
||||
|
||||
First unstable release tarball for GNOME 2.6.
|
||||
|
||||
Thanks to Anders Carlsson, Elijah Newren, Rob Adams, James Cape,
|
||||
Thomas Fitzimmons, Calum Benson for fixes in this release.
|
||||
|
||||
2.6.2
|
||||
===
|
||||
|
||||
Thanks to Yukihiro Nakai, Rached Ben Mustapha, Gwenole Beauchesne,
|
||||
Padraig O'Briain, Laurent Vivier, Rob Adams for contributions to this
|
||||
release.
|
||||
|
||||
- fix to repaint after resize always, so on maximize
|
||||
and theme changes we get things drawn properly
|
||||
- fix a compile issue on HPUX
|
||||
- fix translations of metacity-message output
|
||||
- fix to update window icons when they change
|
||||
- put a limit on number of characters displayed in
|
||||
window titles during Alt+tab
|
||||
- fix configure check for Xrandr
|
||||
- fix 64-bit bug in property reading that broke
|
||||
things badly on 64-bit
|
||||
- don't move focus when clicking close button on a window
|
||||
- fix a crash in getting pixmap icons
|
||||
- spawn dialogs and child processes on the proper
|
||||
screen in multihead situations
|
||||
- if the focus gets set to None, set it back to
|
||||
something sane
|
||||
- load accessibility modules and set accessibility roles
|
||||
- fix hang after displaying warning dialogs
|
||||
- fix a memory corruption when sticking/unsticking windows
|
||||
that lead to a frequent crash and windows appearing
|
||||
in Alt+tab improperly
|
||||
- fix some handling of partial-width panel struts
|
||||
- more translations
|
||||
|
||||
2.6.1
|
||||
===
|
||||
|
||||
- rebuild with fixed glib-gettext.m4
|
||||
|
||||
2.6.0
|
||||
===
|
||||
|
||||
|
26
README
26
README
@@ -6,9 +6,9 @@ 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
|
||||
The stable releases so far are 2.4.x, 2.6.x, 2.8.0, 2.8.1, 2.8.1.x
|
||||
|
||||
Unstable branches are 2.3.x, 2.5.x
|
||||
Unstable branches are 2.3.x, 2.5.x, 2.8.y (where y>=2)
|
||||
|
||||
COMPILING METACITY
|
||||
===
|
||||
@@ -39,9 +39,9 @@ See the HACKING file for some notes on hacking Metacity.
|
||||
SHRINKING METACITY
|
||||
===
|
||||
|
||||
Not that metacity is huge (<400K binary last I checked), but about
|
||||
half of that is in the preferences handling, in static strings that
|
||||
aren't essential, and in the theme engine.
|
||||
Not that metacity is huge, but a substantial amount of code is in
|
||||
preferences handling, in static strings that aren't essential, and in
|
||||
the theme engine.
|
||||
|
||||
You can strip about 70K from the metacity binary by compiling with
|
||||
options such as:
|
||||
@@ -187,11 +187,10 @@ METACITY FEATURES
|
||||
be respawned. It theoretically restores sizes/positions/workspace
|
||||
for session-aware applications.
|
||||
|
||||
- Metacity implements much of the new window manager spec from
|
||||
freedesktop.org
|
||||
(http://www.freedesktop.org/standards/wm-spec.html), and much of
|
||||
the ICCCM. But then there are parts of each that it doesn't
|
||||
implement, just because I haven't yet.
|
||||
- Metacity implements much of the EWMH window manager specification
|
||||
from freedesktop.org, as well as the older ICCCM. Please refer to
|
||||
the COMPLIANCE file for information on metacity compliance with
|
||||
these standards.
|
||||
|
||||
- Uses Pango to render text, so has cool i18n capabilities.
|
||||
Supports UTF-8 window titles and such.
|
||||
@@ -370,12 +369,11 @@ A: This one is also in rationales.txt. Because "ouija board" UI, where
|
||||
http://pobox.com/~hp/free-software-ui.html
|
||||
http://pobox.com/~hp/features.html
|
||||
|
||||
Q: Why no wireframe move/resize?
|
||||
Q: Why does wireframe move/resize suck?
|
||||
|
||||
A: It's implemented in a patch that will be merged for GNOME 2.6
|
||||
and is already in some vendor packages.
|
||||
A: You can turn it on with the reduced_resources setting.
|
||||
|
||||
But: Because it has low usability, and is a pain
|
||||
But: it has low usability, and is a pain
|
||||
to implement, and there's no reason opaque move/resize should be a
|
||||
problem on any setup that can run a modern desktop worth a darn to
|
||||
begin with.
|
||||
|
180
configure.in
180
configure.in
@@ -4,8 +4,10 @@ AC_INIT(src/display.c)
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
# 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987
|
||||
# releases on a branch add a 4th version like 2.4.21.1
|
||||
AM_INIT_AUTOMAKE(metacity, 2.6.1)
|
||||
# we'll hold the 2.8.x versioning for GNOME 2.8, it was also used
|
||||
# for GNOME 2.6, then after GNOME 2.8 we'll have the numbers synced
|
||||
# with GNOME
|
||||
AM_INIT_AUTOMAKE(metacity, 2.8.4)
|
||||
|
||||
# Honor aclocal flags
|
||||
ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
|
||||
@@ -23,6 +25,21 @@ AC_HEADER_STDC
|
||||
AC_LIBTOOL_WIN32_DLL
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
#### Integer sizes
|
||||
|
||||
AC_CHECK_SIZEOF(char)
|
||||
AC_CHECK_SIZEOF(short)
|
||||
AC_CHECK_SIZEOF(long)
|
||||
AC_CHECK_SIZEOF(int)
|
||||
AC_CHECK_SIZEOF(void *)
|
||||
AC_CHECK_SIZEOF(long long)
|
||||
AC_CHECK_SIZEOF(__int64)
|
||||
|
||||
## byte order
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
#### Warnings
|
||||
|
||||
changequote(,)dnl
|
||||
if test "x$GCC" = "xyes"; then
|
||||
case " $CFLAGS " in
|
||||
@@ -110,14 +127,18 @@ AC_ARG_ENABLE(sm, [ --disable-sm disable metacity's session m
|
||||
|
||||
AC_ARG_ENABLE(startup-notification, [ --disable-startup-notification disable metacity's startup notification support, for embedded/size-sensitive custom non-GNOME builds],,enable_startup_notification=auto)
|
||||
|
||||
AC_ARG_ENABLE(compositor, [ --disable-compositor disable metacity's compositing manager],,enable_compositor=auto)
|
||||
|
||||
AC_ARG_ENABLE(xsync, [ --disable-xsync disable metacity's use of the XSync extension],,enable_xsync=auto)
|
||||
|
||||
AC_ARG_ENABLE(render, [ --disable-render disable metacity's use of the RENDER extension],,enable_render=auto)
|
||||
|
||||
AC_ARG_ENABLE(shape, [ --disable-shape disable metacity's use of the shaped window extension],,enable_shape=auto)
|
||||
|
||||
## try definining HAVE_BACKTRACE
|
||||
AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)])
|
||||
|
||||
ALL_LINGUAS="am az be bg ca cs cy da de el en_GB es fa fi fr ga gl he hi hu id is it ja ko lv mk ml mn ms nl no pl pt pt_BR ro ru sl sk sq sr sr@Latn sv 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 id is it ja ko lt lv mk ml mn ms nb nl nn no pa pl pt pt_BR ro ru sl sk sq sr sr@Latn sv ta th tk tr uk vi wa zh_CN zh_TW"
|
||||
AM_GLIB_GNU_GETTEXT
|
||||
|
||||
## here we get the flags we'll actually use
|
||||
@@ -134,7 +155,7 @@ else
|
||||
AC_MSG_ERROR("Pango 1.2.0 or greater based on Xft2 is required")
|
||||
fi
|
||||
|
||||
STARTUP_NOTIFICATION_VERSION=0.4
|
||||
STARTUP_NOTIFICATION_VERSION=0.7
|
||||
AC_MSG_CHECKING([Startup notification library >= $STARTUP_NOTIFICATION_VERSION])
|
||||
if $PKG_CONFIG --atleast-version $STARTUP_NOTIFICATION_VERSION libstartup-notification-1.0; then
|
||||
have_startup_notification=yes
|
||||
@@ -160,6 +181,70 @@ else
|
||||
echo "Building without libstartup-notification"
|
||||
fi
|
||||
|
||||
## init this, it gets set either in the compositor check below
|
||||
## or the render-specific check later
|
||||
have_xrender=no
|
||||
|
||||
XCOMPOSITE_VERSION=1.0
|
||||
AC_MSG_CHECKING([Xcomposite >= $XCOMPOSITE_VERSION])
|
||||
if $PKG_CONFIG --atleast-version $XCOMPOSITE_VERSION xcomposite; then
|
||||
have_xcomposite=yes
|
||||
else
|
||||
have_xcomposite=no
|
||||
fi
|
||||
AC_MSG_RESULT($have_xcomposite)
|
||||
|
||||
if test x$enable_compositor = xyes; then
|
||||
have_xcomposite=yes
|
||||
echo "CompositeExt support forced on"
|
||||
elif test x$enable_compositor = xauto; then
|
||||
echo "Not building compositing manager by default now, must enable explicitly to get it. And it doesn't work, so don't bother unless you want to hack on it..."
|
||||
have_xcomposite=no
|
||||
else
|
||||
have_xcomposite=no
|
||||
fi
|
||||
|
||||
if test x$have_xcomposite = xyes; then
|
||||
echo "Building with CompositeExt"
|
||||
METACITY_PC_MODULES="$METACITY_PC_MODULES xcomposite >= $XCOMPOSITE_VERSION xfixes xrender xdamage"
|
||||
AC_DEFINE(HAVE_COMPOSITE_EXTENSIONS, , [Building with compositing manager support])
|
||||
|
||||
## force on render also
|
||||
have_xrender=yes
|
||||
else
|
||||
echo "Building without compositing manager"
|
||||
fi
|
||||
|
||||
## if no compositor, still possibly enable render
|
||||
if test x$have_xcomposite = xno; then
|
||||
XRENDER_VERSION=0.0
|
||||
AC_MSG_CHECKING([xrender >= $XRENDER_VERSION])
|
||||
if $PKG_CONFIG --atleast-version $XRENDER_VERSION xrender; then
|
||||
have_xrender=yes
|
||||
else
|
||||
have_xrender=no
|
||||
fi
|
||||
AC_MSG_RESULT($have_xrender)
|
||||
|
||||
if test x$enable_render = xyes; then
|
||||
have_xrender=yes
|
||||
echo "Render support forced on"
|
||||
elif test x$enable_render = xauto; then
|
||||
true
|
||||
else
|
||||
have_xrender=no
|
||||
fi
|
||||
|
||||
if test x$have_xrender = xyes; then
|
||||
echo "Building with Render"
|
||||
METACITY_PC_MODULES="$METACITY_PC_MODULES xrender >= $XRENDER_VERSION"
|
||||
fi
|
||||
fi ## have_composite
|
||||
|
||||
if test x$have_xrender = xyes; then
|
||||
AC_DEFINE(HAVE_RENDER, , [Building with Render extension support])
|
||||
fi
|
||||
|
||||
PKG_CHECK_MODULES(METACITY, $METACITY_PC_MODULES)
|
||||
|
||||
AC_PATH_XTRA
|
||||
@@ -170,46 +255,51 @@ ALL_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
|
||||
metacity_save_cppflags="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
|
||||
|
||||
AC_ARG_ENABLE(xinerama,[ --disable-xinerama disable metacity's use of the Xinerama extension],
|
||||
try_xinerama=$enable_xinerama,try_xinerama=yes)
|
||||
|
||||
use_solaris_xinerama=no
|
||||
use_xfree_xinerama=no
|
||||
case "$host" in
|
||||
*-*-solaris*)
|
||||
# Check for solaris
|
||||
use_solaris_xinerama=yes
|
||||
AC_CHECK_LIB(Xext, XineramaGetInfo,
|
||||
use_solaris_xinerama=yes, use_solaris_xinerama=no,
|
||||
$ALL_X_LIBS)
|
||||
if test "x$use_solaris_xinerama" = "xyes"; then
|
||||
AC_CHECK_HEADER(X11/extensions/xinerama.h,
|
||||
if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then
|
||||
X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS"
|
||||
fi
|
||||
AC_DEFINE(HAVE_SOLARIS_XINERAMA, , [Have Solaris-style Xinerama])
|
||||
AC_DEFINE(HAVE_XINERAMA, , [Have some version of Xinerama]),
|
||||
use_solaris_xinerama=no,
|
||||
[#include <X11/Xlib.h>])
|
||||
fi
|
||||
AC_MSG_CHECKING(for Xinerama support on Solaris)
|
||||
AC_MSG_RESULT($use_solaris_xinerama);
|
||||
;;
|
||||
*)
|
||||
# Check for XFree
|
||||
use_xfree_xinerama=yes
|
||||
AC_CHECK_LIB(Xinerama, XineramaQueryExtension,
|
||||
[AC_CHECK_HEADER(X11/extensions/Xinerama.h,
|
||||
X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS"
|
||||
if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then
|
||||
X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS"
|
||||
fi
|
||||
AC_DEFINE(HAVE_XFREE_XINERAMA, , [Have XFree86-style Xinerama])
|
||||
AC_DEFINE(HAVE_XINERAMA,, [Have some version of Xinerama]),
|
||||
use_xfree_xinerama=no,
|
||||
[#include <X11/Xlib.h>])],
|
||||
use_xfree_xinerama=no, -lXext $ALL_X_LIBS)
|
||||
AC_MSG_CHECKING(for Xinerama support on XFree86)
|
||||
AC_MSG_RESULT($use_xfree_xinerama);
|
||||
;;
|
||||
esac
|
||||
if test "${try_xinerama}" != no; then
|
||||
case "$host" in
|
||||
*-*-solaris*)
|
||||
# Check for solaris
|
||||
use_solaris_xinerama=yes
|
||||
AC_CHECK_LIB(Xext, XineramaGetInfo,
|
||||
use_solaris_xinerama=yes, use_solaris_xinerama=no,
|
||||
$ALL_X_LIBS)
|
||||
if test "x$use_solaris_xinerama" = "xyes"; then
|
||||
AC_CHECK_HEADER(X11/extensions/xinerama.h,
|
||||
if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then
|
||||
X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS"
|
||||
fi
|
||||
AC_DEFINE(HAVE_SOLARIS_XINERAMA, , [Have Solaris-style Xinerama])
|
||||
AC_DEFINE(HAVE_XINERAMA, , [Have some version of Xinerama]),
|
||||
use_solaris_xinerama=no,
|
||||
[#include <X11/Xlib.h>])
|
||||
fi
|
||||
AC_MSG_CHECKING(for Xinerama support on Solaris)
|
||||
AC_MSG_RESULT($use_solaris_xinerama);
|
||||
;;
|
||||
*)
|
||||
# Check for XFree
|
||||
use_xfree_xinerama=yes
|
||||
AC_CHECK_LIB(Xinerama, XineramaQueryExtension,
|
||||
[AC_CHECK_HEADER(X11/extensions/Xinerama.h,
|
||||
X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS"
|
||||
if test -z "`echo $ALL_X_LIBS | grep "\-lXext" 2> /dev/null`"; then
|
||||
X_EXTRA_LIBS="-lXext $X_EXTRA_LIBS"
|
||||
fi
|
||||
AC_DEFINE(HAVE_XFREE_XINERAMA, , [Have XFree86-style Xinerama])
|
||||
AC_DEFINE(HAVE_XINERAMA,, [Have some version of Xinerama]),
|
||||
use_xfree_xinerama=no,
|
||||
[#include <X11/Xlib.h>])],
|
||||
use_xfree_xinerama=no, -lXext $ALL_X_LIBS)
|
||||
AC_MSG_CHECKING(for Xinerama support on XFree86)
|
||||
AC_MSG_RESULT($use_xfree_xinerama);
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
CPPFLAGS="$metacity_save_cppflags"
|
||||
|
||||
@@ -252,7 +342,7 @@ AC_CHECK_LIB(Xrandr, XRRUpdateConfiguration,
|
||||
[AC_CHECK_HEADER(X11/extensions/Xrandr.h,
|
||||
RANDR_LIBS=-lXrandr found_randr=yes,,
|
||||
[#include <X11/Xlib.h>])],
|
||||
, -lXrender $ALL_X_LIBS)
|
||||
, -lXrender -lXext $ALL_X_LIBS)
|
||||
|
||||
if test "x$found_randr" = "xyes"; then
|
||||
AC_DEFINE(HAVE_RANDR, , [Have the Xrandr extension library])
|
||||
@@ -384,10 +474,12 @@ metacity-$VERSION:
|
||||
XFree86 Xinerama: ${use_xfree_xinerama}
|
||||
Solaris Xinerama: ${use_solaris_xinerama}
|
||||
Startup notification: ${have_startup_notification}
|
||||
Compositing manager: ${have_xcomposite}
|
||||
Session management: ${found_sm}
|
||||
Shape extension: ${found_shape}
|
||||
Resize-and-rotate: ${found_randr}
|
||||
Xsync: ${found_xsync}
|
||||
Render: ${have_xrender}
|
||||
Deprecated config dialog: ${enable_config_dialog}
|
||||
"
|
||||
## echo "This is the UNSTABLE branch of metacity, use 2.4.x for stable (gnome-2-2 branch in CVS)"
|
||||
echo "This is the UNSTABLE branch of metacity, use 2.8.1.x for stable (gnome-2-6 branch in CVS)"
|
||||
|
695
po/ChangeLog
695
po/ChangeLog
@@ -1,3 +1,632 @@
|
||||
2004-08-29 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2004-08-28 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2004-08-26 Iñaki Larrañaga <dooteo@euskalgnu.org>
|
||||
|
||||
* eu.po: Updated Basque translation.
|
||||
|
||||
2004-08-23 Maxim Dziumanenko <mvd@mylinux.com.ua>
|
||||
|
||||
* uk.po: Updated Ukrainian translation.
|
||||
|
||||
2004-08-21 Jordi Mallach <jordi@sindominio.net>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2004-08-20 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2004-08-18 Pauli Virtanen <pauli.virtanen@hut.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2004-08-18 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2004-08-17 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* bs.po: Added Bosnian translation by
|
||||
Kemal Sanjta <gomez@lugzdk.ba>.
|
||||
|
||||
2004-08-17 Metin Amiroff <metin@karegen.com>
|
||||
|
||||
* az.po: Translation updated.
|
||||
|
||||
2004-08-16 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* nb.po: Added this here.
|
||||
|
||||
2004-08-15 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2004-08-13 Tommi Vainikainen <thv@iki.fi>
|
||||
|
||||
* fi.po: Unified some fields in po headers for Finnish team.
|
||||
|
||||
2004-08-13 Gurban M. Tewekgeli <gmtavakkoli@yahoo.com>
|
||||
|
||||
* tk.po: Added Turkmen translation.
|
||||
|
||||
2004-08-11 Dmitry G. Mastrukov <dmitry@taurussoft.org>
|
||||
|
||||
* ru.po: Updated Russian translation
|
||||
from Russian team <gnome-cyr@gnome.org>.
|
||||
|
||||
2004-08-10 Artur Flinta <aflinta@cvs.gnome.org>
|
||||
|
||||
* pl.po: Updated Polish translation by GNOME PL Team.
|
||||
|
||||
2004-08-07 Danilo Šegan <dsegan@gmx.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation.
|
||||
|
||||
2004-08-06 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2004-08-06 Takeshi AIHANA <aihana@gnome.gr.jp>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2004-08-03 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Michiel Sikkes.
|
||||
|
||||
2004-08-02 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
* pt.po: Updated Portuguese translation.
|
||||
|
||||
2004-08-02 Adam Weinberger <adamw@gnome.org>
|
||||
|
||||
* en_CA.po: Updated Canadian English translation.
|
||||
|
||||
2004-08-01 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian translation.
|
||||
|
||||
2004-07-30 Martin Willemoes Hansen <mwh@sysrq.dk>
|
||||
|
||||
* da.po: Reviewed and updated fuzzy messages.
|
||||
|
||||
2004-07-30 Kartik Mistry <kartik_m@magnet-i.com>
|
||||
|
||||
* gu.po: Updated and added Gujarati translation.
|
||||
|
||||
2004-07-29 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2004-07-28 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2004-07-27 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Rostislav "zbrox" Raykov <zbrox@i-space.org>
|
||||
|
||||
2004-07-27 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2004-07-25 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2004-07-25 Christian Neumair <chris@gnome-de.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2004-07-25 David Lodge <dave@cirt.net>
|
||||
|
||||
* en_GB.po: Added British translation.
|
||||
|
||||
2004-07-24 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2004-07-23 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2004-07-23 Žygimantas Beručka <uid0@akl.lt>
|
||||
|
||||
* lt.po: Updated Lithuanian translation.
|
||||
|
||||
2004-07-22 Gustavo Maciel Dias Vieira <gustavo@sagui.org>
|
||||
|
||||
* pt_BR.po: Updated Brazilian Portuguese translation done by
|
||||
Goedson Teixeira Paixao <goedson@debian.org>.
|
||||
|
||||
2004-07-21 Guntupalli Karunakar <karunakar@freedomink.org>
|
||||
|
||||
* hi.po: Updated Hindi translation.
|
||||
|
||||
2004-07-14 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2004-07-12 Åsmund Skjæveland <aasmunds@fys.uio.no>
|
||||
|
||||
* nn.po: Updated Norwegian Nynorsk translation.
|
||||
|
||||
2004-07-08 Alexander Shopov <ash@contact.bg>
|
||||
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Vladimir "Kaladan" Petkov <vpetkov@i-space.org>
|
||||
|
||||
2004-07-07 Laszlo Dvornik <ldvornik@cvs.gnome.org>
|
||||
|
||||
* hu.po: Updated Hungarian translation.
|
||||
|
||||
2004-07-06 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2004-07-05 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2004-07-04 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Tino Meinen.
|
||||
|
||||
2004-07-02 Christian Neumair <chris@gnome-de.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2004-06-29 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Translation updated.
|
||||
|
||||
2004-06-28 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Translation updated.
|
||||
|
||||
2004-06-25 Gareth Owen <gowen72@yahoo.com>
|
||||
|
||||
* en_GB.po: Updated British English translation
|
||||
|
||||
2004-06-26 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2004-06-25 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2004-05-31 Alexander Shopov <ash@contact.bg>
|
||||
* bg.po: Updated Bulgarian translation by
|
||||
Vladimir Petkov <vpetkov@i-space.org>
|
||||
|
||||
2004-04-23 Dafydd Harries <daf@muse.19inch.net>
|
||||
|
||||
* ca.po: Updated Catalan translation from Jordi Mallach.
|
||||
|
||||
2004-04-16 Iñaki Larrañaga <dooteo@euskalgnu.org>
|
||||
|
||||
* eu.po: Added Basque translation.
|
||||
|
||||
2004-04-15 Andras Timar <timar@gnome.hu>
|
||||
|
||||
* hu.po: Updated Hungarian translation.
|
||||
|
||||
2004-04-09 Guntupalli Karunakar <karunakar@freedomink.org>
|
||||
|
||||
* gu.po: Added Gujurati translation by
|
||||
Gujarati Team <magnet@magnet-i.com>.
|
||||
|
||||
2004-04-06 Mohammad DAMT <mdamt@bisnisweb.com>
|
||||
|
||||
* id.po: Updated Indonesian translation
|
||||
|
||||
2004-04-03 Mugurel Tudor <mugurelu@go.ro>
|
||||
|
||||
* ro.po: Updated Romanian translation
|
||||
|
||||
2004-03-29 Jordi Mallach <jordi@sindominio.net>
|
||||
|
||||
* ca.po: Updated Catalan translation.
|
||||
|
||||
2004-03-27 Tõivo Leedjärv <toivo@linux.ee>
|
||||
|
||||
* et.po: Added Estonian translation.
|
||||
|
||||
2004-03-24 Guntupalli Karunakar <karunakar@freedomink.org>
|
||||
|
||||
* pa.po: Added Punjabi translation by
|
||||
Jaswinder Singh Phulewala <jaswinderlinux@netscape.net>.
|
||||
|
||||
2004-03-20 Mugurel Tudor <mugurelu@go.ro>
|
||||
|
||||
* ro.po: Updated Romanian translation.
|
||||
|
||||
2004-03-20 Gareth Owen <gowen72@yahoo.com>
|
||||
|
||||
* en_GB.po: Updated British translation
|
||||
|
||||
2004-03-19 Andras Timar <timar@gnome.hu>
|
||||
|
||||
* hu.po: Updated Hungarian translation.
|
||||
|
||||
2004-03-18 Arafat Medini <lumina@silverpen.de>
|
||||
|
||||
* ar.po: Updated Arabic translation.
|
||||
|
||||
2004-03-17 Leonid Kanter <leon@asplinux.ru>
|
||||
|
||||
* ru.po: Updated Russian translation
|
||||
|
||||
2004-03-16 Dafydd Harries <daf@muse.19inch.net>
|
||||
|
||||
* cy.po: Updated Welsh translation.
|
||||
|
||||
2004-03-15 Alessio Frusciante <algol@firenze.linux.it>
|
||||
|
||||
* it.po: Updated Italian translation by
|
||||
Luca Ferretti <elle.uca@infinito.it>.
|
||||
|
||||
2004-03-15 Nikos Charonitakis <frolix68@yahoo.gr>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2004-03-14 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation.
|
||||
|
||||
2004-03-13 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation.
|
||||
|
||||
2004-03-13 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2004-03-12 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2004-03-12 Yuriy Syrota <rasta@cvs.gnome.org>
|
||||
|
||||
* uk.po: Updated Ukrainian translation.
|
||||
|
||||
2004-03-11 Alessio Frusciante <algol@firenze.linux.it>
|
||||
|
||||
* it.po: Updated Italian translation.
|
||||
|
||||
2004-03-11 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation.
|
||||
|
||||
2004-03-10 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2004-03-09 Alessio Frusciante <algol@firenze.linux.it>
|
||||
|
||||
* it.po: Updated Italian translation by
|
||||
Luca Ferretti <elle.uca@infinito.it>.
|
||||
|
||||
2004-03-09 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian translation.
|
||||
|
||||
2004-03-09 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spansih translation.
|
||||
|
||||
2004-03-08 Alastair McKinstry <mckinstry@computer.org>
|
||||
|
||||
* ga.po: Updated Irish translation.
|
||||
|
||||
2004-03-08 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||
|
||||
* th.po: Updated Thai translation.
|
||||
|
||||
2004-03-06 Mətin Əmirov <metin@karegen.com>
|
||||
|
||||
* az.po: Translation updated.
|
||||
|
||||
2004-03-07 Funda Wang <fundawang@linux.net.cn>
|
||||
|
||||
* zh_CN.po: Updated Simplified Chinese translation.
|
||||
|
||||
2004-03-04 Paisa Seeluangsawat <paisa@users.sf.net>
|
||||
|
||||
* th.po: Added Thai translation.
|
||||
|
||||
2004-03-3 Arafat Medini <lumina@silverpen.de>
|
||||
|
||||
* ar.po: Updated Arabic translation.
|
||||
|
||||
2004-03-02 Stanislav Visnovsky <visnovsky@kde.org>
|
||||
|
||||
* sk.po: Convert to UTF-8.
|
||||
|
||||
2004-02-26 Guntupalli Karunakar <karunakar@freedomink.org>
|
||||
|
||||
* hi.po: Updated Hindi translations.
|
||||
|
||||
2004-02-23 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2004-02-22 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* en_CA.po: Added Canadian English translation by
|
||||
Adam Weinberger <adamw@FreeBSD.org>.
|
||||
|
||||
2004-02-17 Takeshi AIHANA <aihana@gnome.gr.jp>
|
||||
|
||||
* ja.po: Updated Japanese translation.
|
||||
|
||||
2004-02-11 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian translation.
|
||||
|
||||
2004-02-07 Robert Sedak <robert.sedak@sk.htnet.hr>
|
||||
|
||||
* hr.po: Updated Croatian translation.
|
||||
|
||||
2004-02-08 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2004-02-05 Pauli Virtanen <pauli.virtanen@hut.fi>
|
||||
|
||||
* fi.po: Updated Finnish translation.
|
||||
|
||||
2004-02-03 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2004-02-02 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2004-02-01 Ole Laursen <olau@hardworking.dk>
|
||||
|
||||
* da.po: Updated Danish translation.
|
||||
|
||||
2004-01-31 Mətin Əmirov <metin@karegen.com>
|
||||
|
||||
* az.po: Translation updated.
|
||||
|
||||
2004-01-28 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Fixed Czech translation.
|
||||
|
||||
2004-01-20 Artur Flinta <aflinta@cvs.gnome.org>
|
||||
|
||||
* pl.po: Updated Polish translation by GNOME PL Team.
|
||||
|
||||
2004-01-18 Christian Neumair <chris@gnome-de.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2004-01-16 Hasbullah Bin Pit <sebol@ikhlas.com>
|
||||
|
||||
* ms.po: Updated Malay translation.
|
||||
|
||||
2004-01-15 Laurent Dhima <laurenti@alblinux.net>
|
||||
|
||||
* sq.po: Updated Albanian translation.
|
||||
|
||||
2004-01-13 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian translation.
|
||||
|
||||
2004-01-13 Artur Flinta <aflinta@cvs.gnome.org>
|
||||
|
||||
* pl.po: Updated Polish translation by GNOME PL Team.
|
||||
|
||||
2004-01-12 Žygimantas Beručka <uid0@tuxfamily.org>
|
||||
|
||||
* lt.po: Updated Lithuanian translation by Tomas Kuliavas.
|
||||
|
||||
2004-01-11 Christophe Merlet <redfox@redfoxcenter.org>
|
||||
|
||||
* fr.po: Updated French translation.
|
||||
|
||||
2004-01-11 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2004-01-05 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Translation updated by Tino Meinen.
|
||||
|
||||
2004-01-04 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
* pt.po: Updated and revised Portuguese translation.
|
||||
|
||||
2004-01-03 Sanlig Badral <badral@openmn.org>
|
||||
|
||||
* mn.po: Updated Mongolian translation.
|
||||
|
||||
2004-01-03 Robert Sedak <robert.sedak@sk.htnet.hr>
|
||||
|
||||
* hr.po: Updated Croatian translation.
|
||||
|
||||
2004-01-02 Sanlig Badral <Badral@openmn.org>
|
||||
|
||||
* mn.po: Updated Mongolian translation.
|
||||
|
||||
2004-01-02 Taneem Ahmed <taneem@bengalinux.org>
|
||||
|
||||
* bn.po: Updated Bangla (Bengali) translation.
|
||||
|
||||
2003-12-29 Christian Neumair <chris@gnome-de.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2003-12-29 Åsmund Skjæveland <aasmunds@fys.uio.no>
|
||||
|
||||
* nn.po: Updated Norwegian Nynorsk translation.
|
||||
|
||||
2003-12-24 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2003-12-23 Gustavo Noronha Silva <kov@debian.org>
|
||||
|
||||
* pt_BR.po: updated translation.
|
||||
|
||||
2003-12-22 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2003-12-22 Danilo Šegan <dsegan@gmx.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation.
|
||||
|
||||
2003-12-22 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* sv.po: Updated Swedish translation.
|
||||
|
||||
2003-12-21 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2003-12-21 Danilo Šegan <dsegan@gmx.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation.
|
||||
|
||||
2003-12-20 Arafat Medini <lumina@silverpen.de>
|
||||
|
||||
* ar.po: Added Arabic translation.
|
||||
|
||||
2003-12-19 Gustavo Noronha Silva <kov@debian.org>
|
||||
|
||||
* pt_BR.po: updated translation.
|
||||
|
||||
2003-12-18 Yukihiro Nakai <nakai@gnome.gr.jp>
|
||||
|
||||
* ja.po: Minor update.
|
||||
|
||||
2003-12-14 Francisco Javier F. Serrador <serrador@cvs.gnome.org>
|
||||
|
||||
* es.po: Updated Spanish translation
|
||||
|
||||
2003-12-04 Danilo Šegan <dsegan@gmx.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Cleared up Serbian translation.
|
||||
|
||||
2003-12-03 Sanlig Badral <badral@openmn.org>
|
||||
|
||||
* mn.po: Updated Mongolian translation.
|
||||
|
||||
2003-12-02 Miloslav Trmac <mitr@volny.cz>
|
||||
|
||||
* cs.po: Updated Czech translation.
|
||||
|
||||
2003-11-29 Ole Laursen <olau@hardworking.dk>
|
||||
|
||||
* da.po: Updated Danish translation.
|
||||
|
||||
2003-11-26 Vincent van Adrighem <adrighem@gnome.org>
|
||||
|
||||
* nl.po: Dutch translation updated by Vincent van Adrighem.
|
||||
|
||||
2003-11-10 Pablo Gonzalo del Campo <pablodc@bigfoot.com>
|
||||
|
||||
* es.po: Updated Spanish translation by
|
||||
Francisco Javier F. Serrador <serrador@arrakis.es>.
|
||||
|
||||
2003-11-08 Danilo Šegan <dsegan@gmx.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation.
|
||||
|
||||
2003-10-30 Kostas Papadimas <pkst@gnome.org>
|
||||
|
||||
* el.po: Updated Greek translation.
|
||||
|
||||
2003-10-20 Andras Timar <timar@gnome.hu>
|
||||
|
||||
* hu.po: Updated Hungarian translation.
|
||||
|
||||
2003-10-15 Danilo Šegan <dsegan@gmx.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation.
|
||||
|
||||
2003-10-15 Yukihiro Nakai <nakai@gnome.gr.jp>
|
||||
|
||||
* ja.pp: Update Japanese translation.
|
||||
|
||||
2003-10-13 Danilo Šegan <dsegan@gmx.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation.
|
||||
|
||||
2003-10-08 Andras Timar <timar@gnome.hu>
|
||||
|
||||
* hu.po: Updated Hungarian translation.
|
||||
|
||||
2003-10-06 Žygimantas Beručka <uid0@tuxfamily.org>
|
||||
|
||||
* lt.po: Added Lithuanian translation by Tomas Kuliavas
|
||||
<tokul@users.sourceforge.net>.
|
||||
|
||||
2003-10-06 Mugurel Tudor <mugurelu@go.ro>
|
||||
|
||||
* ro.po: Updated Romanian translation
|
||||
|
||||
2003-09-30 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Update Norwegian translation.
|
||||
|
||||
2003-09-30 Christian Neumair <chris@gnome-de.org>
|
||||
|
||||
* de.po: Updated German translation.
|
||||
|
||||
2003-09-27 Metin Amiroff <metin@karegen.com>
|
||||
|
||||
* az.po: Updated Azerbaijani translation.
|
||||
|
||||
2003-09-27 Åsmund Skjæveland <aasmunds@fys.uio.no>
|
||||
|
||||
* nn.po: Updated Norwegian (nynorsk) translation.
|
||||
|
||||
2003-09-24 Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>
|
||||
|
||||
* sk.po: Updated Slovak translation.
|
||||
|
||||
2003-09-22 Taneem Ahmed <taneem@bengalinux.org>
|
||||
|
||||
* bn.po: Added Bangla translation by Dr Anirban Mitra
|
||||
of Ankur group <gnome-translation@bengalinux.org>.
|
||||
|
||||
2003-09-23 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2003-09-21 Metin Amiroff <metin@karegen.com>
|
||||
|
||||
* az.po: Updated Azerbaijani file
|
||||
|
||||
2003-09-21 Åsmund Skjæveland <aasmunds@fys.uio.no>
|
||||
|
||||
* nn.po: Updated Norwegian (Nynorsk) translation.
|
||||
|
||||
2003-09-21 Åsmund Skjaeveland <aasmunds@fys.uio.no>
|
||||
|
||||
* nn.po: Updated Norwegian (nynorsk) translation.
|
||||
|
||||
2003-09-20 Åsmund Skjæveland <aasmunds@fys.uio.no>
|
||||
|
||||
* nn.po: Started Norwegian (nynorsk) translation.
|
||||
|
||||
2003-09-17 Fatih Demir <kabalak@gtranslator.org>
|
||||
|
||||
* ta.po: Committed new Tamil translation by Dinesh.
|
||||
|
||||
2003-09-09 Guntupalli Karunakar <karunakar@freedomink.org>
|
||||
|
||||
* hi.po: Updated Hindi translation by
|
||||
@@ -74,7 +703,7 @@
|
||||
|
||||
* cy.po: Updated Welsh translation.
|
||||
|
||||
2003-08-18 Danilo Šegan <dsegan@gmx.net>
|
||||
2003-08-18 Danilo Å egan <dsegan@gmx.net>
|
||||
|
||||
* be.po: Updated Belarusian translation by Ales Nyakhaychyk
|
||||
<nab@mail.by>.
|
||||
@@ -104,7 +733,7 @@
|
||||
|
||||
* fr.po: Updated French translation.
|
||||
|
||||
2003-08-08 Danilo Šegan <dsegan@gmx.net>
|
||||
2003-08-08 Danilo Å egan <dsegan@gmx.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Updated Serbian translation.
|
||||
|
||||
@@ -213,7 +842,7 @@
|
||||
|
||||
* nl.po: Dutch translation updated by Kees van den Broek.
|
||||
|
||||
2003-06-22 Samúel Jón Gunnarsson <sammi@techattack.nu>
|
||||
2003-06-22 Samúel Jón Gunnarsson <sammi@techattack.nu>
|
||||
|
||||
* is.po: Added Icelandic translation
|
||||
|
||||
@@ -318,7 +947,7 @@
|
||||
|
||||
* ko.po: Updated Korean translation.
|
||||
|
||||
2003-05-06 Danilo Šegan <dsegan@gmx.net>
|
||||
2003-05-06 Danilo Å egan <dsegan@gmx.net>
|
||||
|
||||
* sr.po, sr@Latn.po: Added Serbian translation by
|
||||
http://Prevod.org/.
|
||||
@@ -612,7 +1241,7 @@
|
||||
|
||||
2002-12-14 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-12-13 Daniel Yacob <locales@geez.org>
|
||||
|
||||
@@ -649,7 +1278,7 @@
|
||||
|
||||
2002-11-25 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-11-25 Yanko Kaneti <yaneti@declera.com>
|
||||
|
||||
@@ -669,7 +1298,7 @@
|
||||
|
||||
2002-11-15 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-11-14 Gustavo Noronha Silva <kov@debian.org>
|
||||
|
||||
@@ -736,7 +1365,7 @@
|
||||
|
||||
2002-10-21 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-10-17 Andras Timar <timar@gnome.hu>
|
||||
|
||||
@@ -760,7 +1389,7 @@
|
||||
|
||||
2002-10-15 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-10-15 Ole Laursen <olau@hardworking.dk>
|
||||
|
||||
@@ -824,7 +1453,7 @@
|
||||
|
||||
2002-09-11 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-09-10 Pablo Gonzalo del Campo <pablodc@bigfoot.com>
|
||||
|
||||
@@ -1001,7 +1630,7 @@
|
||||
|
||||
2002-08-04 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-07-30 Pablo Saratxaga <pablo@mandrakesoft.com>
|
||||
|
||||
@@ -1058,7 +1687,7 @@
|
||||
|
||||
2002-07-16 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-07-15 Ole Laursen <olau@hardworking.dk>
|
||||
|
||||
@@ -1107,7 +1736,7 @@
|
||||
|
||||
2002-06-23 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-06-23 Christian Rose <menthos@menthos.com>
|
||||
|
||||
@@ -1185,7 +1814,7 @@
|
||||
|
||||
2002-06-03 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-06-03 Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>
|
||||
|
||||
@@ -1210,7 +1839,7 @@
|
||||
|
||||
2002-05-31 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-05-28 Pablo Gonzalo del Campo <pablodc@bigfoot.com>
|
||||
|
||||
@@ -1257,7 +1886,7 @@
|
||||
|
||||
2002-05-18 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-05-18 Ole Laursen <olau@hardworking.dk>
|
||||
|
||||
@@ -1283,7 +1912,7 @@
|
||||
|
||||
2002-04-22 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-04-19 Changwoo Ryu <cwryu@debian.org>
|
||||
|
||||
@@ -1311,11 +1940,11 @@
|
||||
|
||||
2002-03-28 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-03-27 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-03-22 Zbigniew Chyla <cyba@gnome.pl>
|
||||
|
||||
@@ -1323,19 +1952,19 @@
|
||||
|
||||
2002-02-22 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-02-17 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-02-16 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-02-12 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-02-11 Duarte Loreto <happyguy_pt@hotmail.com>
|
||||
|
||||
@@ -1347,7 +1976,7 @@
|
||||
|
||||
2002-02-10 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-02-08 Christian Rose <menthos@menthos.com>
|
||||
|
||||
@@ -1364,7 +1993,7 @@
|
||||
|
||||
2002-02-02 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-01-31 Christian Rose <menthos@menthos.com>
|
||||
|
||||
@@ -1380,7 +2009,7 @@
|
||||
|
||||
2002-01-29 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-01-27 Peteris Krisjanis <peteris.krisjanis@ttc.lv>
|
||||
|
||||
@@ -1392,7 +2021,7 @@
|
||||
|
||||
2002-01-11 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
* no.po: Updated Norwegian (bokmål) translation.
|
||||
|
||||
2002-01-09 Stanislav Visnovsky <visnovsky@nenya.ms.mff.cuni.cz>
|
||||
|
||||
@@ -1404,7 +2033,7 @@
|
||||
|
||||
2002-01-06 Fatih Demir <kabalak@gtranslator.org>
|
||||
|
||||
* tr.po: Added Turkish translation by Görkem Cetin.
|
||||
* tr.po: Added Turkish translation by Görkem Cetin.
|
||||
|
||||
2002-01-05 Christian Rose <menthos@menthos.com>
|
||||
|
||||
@@ -1426,7 +2055,7 @@
|
||||
|
||||
2001-12-16 Kjartan Maraas <kmaraas@gnome.org>
|
||||
|
||||
* no.po: Updated Norwegian (bokmᅵ) translation.
|
||||
* no.po: Updated Norwegian (bokmï¿Å) translation.
|
||||
|
||||
2001-12-15 Christian Rose <menthos@menthos.com>
|
||||
|
||||
@@ -1443,17 +2072,17 @@
|
||||
2001-11-27 Jesus Bravo Alvarez <jba@pobox.com>
|
||||
|
||||
* gl.po: Added Galician translation from
|
||||
Manuel A. Fernᅵdez Montecelo <manuel@sindominio.net>
|
||||
Manuel A. Fernï¿Ådez Montecelo <manuel@sindominio.net>
|
||||
|
||||
2001-10-29 Yuriy Syrota <rasta@renome.rovno.ua>
|
||||
|
||||
* uk.po: Added Ukrainian translation file.
|
||||
|
||||
2001-10-28 Hᅵtor Garcᅵ ᅵvarez <hector@scouts-es.org>
|
||||
2001-10-28 Hï¿Åtor Garcᅧï¿Åvarez <hector@scouts-es.org>
|
||||
|
||||
* es.po: Updated Spanish translation.
|
||||
|
||||
2001-10-14 Hᅵtor Garcᅵ ᅵvarez <hector@scouts-es.org>
|
||||
2001-10-14 Hï¿Åtor Garcᅧï¿Åvarez <hector@scouts-es.org>
|
||||
|
||||
* es.po: Added Spanish translation.
|
||||
|
||||
@@ -1463,7 +2092,7 @@
|
||||
|
||||
2001-10-11 Christian Rose <menthos@menthos.com>
|
||||
|
||||
* sv.po: Fixed some typos. Thanks to Tomas ᅵren <stric@ing.umu.se>
|
||||
* sv.po: Fixed some typos. Thanks to Tomas ï¿Åren <stric@ing.umu.se>
|
||||
for spotting many of them.
|
||||
|
||||
2001-10-11 Christian Rose <menthos@menthos.com>
|
||||
|
@@ -17,6 +17,7 @@ src/resizepopup.c
|
||||
src/screen.c
|
||||
src/session.c
|
||||
src/theme-parser.c
|
||||
src/theme-viewer.c
|
||||
src/theme.c
|
||||
src/tools/metacity-properties.desktop.in
|
||||
src/tools/metacity-properties.glade
|
||||
|
3170
po/en_CA.po
Normal file
3170
po/en_CA.po
Normal file
File diff suppressed because it is too large
Load Diff
2748
po/en_GB.po
2748
po/en_GB.po
File diff suppressed because it is too large
Load Diff
1145
po/pt_BR.po
1145
po/pt_BR.po
File diff suppressed because it is too large
Load Diff
2485
po/sr@Latn.po
2485
po/sr@Latn.po
File diff suppressed because it is too large
Load Diff
1074
po/zh_CN.po
1074
po/zh_CN.po
File diff suppressed because it is too large
Load Diff
1135
po/zh_TW.po
1135
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@@ -1,18 +1,43 @@
|
||||
|
||||
Focus windows on map: see http://bugzilla.gnome.org/show_bug.cgi?id=82921
|
||||
History
|
||||
====
|
||||
|
||||
Focus windows on map: see
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=118372
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=82921
|
||||
|
||||
Keep panel always on top: http://bugzilla.gnome.org/show_bug.cgi?id=81551
|
||||
Edge flipping: http://bugzilla.gnome.org/show_bug.cgi?id=82917
|
||||
Opaque resize: http://bugzilla.gnome.org/show_bug.cgi?id=92618
|
||||
Super+click to resize: http://bugzilla.gnome.org/show_bug.cgi?id=79315
|
||||
Alt+click to move/resize: http://bugzilla.gnome.org/show_bug.cgi?id=101151
|
||||
minimized windows in Alt+tab: http://bugzilla.gnome.org/show_bug.cgi?id=89416
|
||||
raise windows on click: http://bugzilla.gnome.org/show_bug.cgi?id=86108
|
||||
dialogs above entire app group: http://bugzilla.gnome.org/show_bug.cgi?id=88926
|
||||
display window size/position: http://bugzilla.gnome.org/show_bug.cgi?id=85213,
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=106645
|
||||
|
||||
display window size/position:
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=85213
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=106645
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=130821
|
||||
|
||||
configure click actions, alt+click:
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=83210
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=83210
|
||||
|
||||
system modal dialogs: http://bugzilla.gnome.org/show_bug.cgi?id=83357
|
||||
|
||||
workspace wrapping: http://bugzilla.gnome.org/show_bug.cgi?id=89315
|
||||
|
||||
raise windows on click:
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=86108
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=115072
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=115753
|
||||
|
||||
Some discussion of how pointer focus is inherently a bit buggy because
|
||||
of the "sometimes focus window that isn't under the mouse" heuristics:
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=124798
|
||||
(there are some other bugs that may have better explanation)
|
||||
|
||||
Tracking bugs
|
||||
====
|
||||
|
||||
session management: http://bugzilla.gnome.org/show_bug.cgi?id=107063
|
||||
|
||||
revise theme format: http://bugzilla.gnome.org/show_bug.cgi?id=102547
|
||||
|
@@ -2,7 +2,7 @@ lib_LTLIBRARIES = libmetacity-private.la
|
||||
|
||||
SUBDIRS=wm-tester tools themes
|
||||
|
||||
INCLUDES=@METACITY_CFLAGS@ -DMETACITY_LIBEXECDIR=\"$(libexecdir)\" -DHOST_ALIAS=\"@HOST_ALIAS@\" -DMETACITY_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" -DMETACITY_PKGDATADIR=\"$(pkgdatadir)\" -DMETACITY_DATADIR=\"$(datadir)\" -DG_LOG_DOMAIN=\"metacity\" -DSN_API_NOT_YET_FROZEN=1
|
||||
INCLUDES=@METACITY_CFLAGS@ -DMETACITY_LIBEXECDIR=\"$(libexecdir)\" -DMETACITY_LIBDIR=\"$(libdir)\" -DHOST_ALIAS=\"@HOST_ALIAS@\" -DMETACITY_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" -DMETACITY_PKGDATADIR=\"$(pkgdatadir)\" -DMETACITY_DATADIR=\"$(datadir)\" -DG_LOG_DOMAIN=\"metacity\" -DSN_API_NOT_YET_FROZEN=1
|
||||
|
||||
EGGFILES= \
|
||||
eggaccelerators.c \
|
||||
@@ -14,6 +14,8 @@ metacity_SOURCES= \
|
||||
bell.h \
|
||||
bell.c \
|
||||
common.h \
|
||||
compositor.c \
|
||||
compositor.h \
|
||||
constraints.c \
|
||||
constraints.h \
|
||||
core.c \
|
||||
|
@@ -347,8 +347,9 @@ async_get_property_handler (Display *dpy,
|
||||
break;
|
||||
|
||||
case 32:
|
||||
nbytes = reply->nItems * sizeof (CARD32);
|
||||
netbytes = reply->nItems << 2;
|
||||
/* NOTE buffer is in longs to match XGetWindowProperty() */
|
||||
nbytes = reply->nItems * sizeof (long);
|
||||
netbytes = reply->nItems << 2; /* wire size is always 32 bits though */
|
||||
if (nbytes + 1 > 0 &&
|
||||
(task->data = (unsigned char *) Xmalloc ((unsigned)nbytes + 1)))
|
||||
{
|
||||
@@ -356,10 +357,41 @@ async_get_property_handler (Display *dpy,
|
||||
printf ("%s: already read %d bytes using %ld more, eating %ld more\n",
|
||||
__FUNCTION__, bytes_read, nbytes, netbytes);
|
||||
#endif
|
||||
/* _XRead32 (dpy, (long *) task->data, netbytes); */
|
||||
_XGetAsyncData (dpy, task->data, buf, len,
|
||||
bytes_read, nbytes,
|
||||
netbytes);
|
||||
|
||||
/* We have to copy the XGetWindowProperty() crackrock
|
||||
* and get format 32 as long even on 64-bit platforms.
|
||||
*/
|
||||
if (sizeof (long) == 8)
|
||||
{
|
||||
unsigned char *netdata;
|
||||
unsigned char *lptr;
|
||||
unsigned char *end_lptr;
|
||||
|
||||
/* Store the 32-bit values in the end of the array */
|
||||
netdata = task->data + nbytes / 2;
|
||||
|
||||
_XGetAsyncData (dpy, netdata, buf, len,
|
||||
bytes_read, netbytes,
|
||||
netbytes);
|
||||
|
||||
/* Now move the 32-bit values to the front */
|
||||
|
||||
lptr = task->data;
|
||||
end_lptr = task->data + nbytes;
|
||||
while (lptr != end_lptr)
|
||||
{
|
||||
*(long*) lptr = *(CARD32*) netdata;
|
||||
lptr += sizeof (long);
|
||||
netdata += sizeof (CARD32);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Here the wire format matches our actual format */
|
||||
_XGetAsyncData (dpy, task->data, buf, len,
|
||||
bytes_read, netbytes,
|
||||
netbytes);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
@@ -58,7 +58,13 @@ typedef enum
|
||||
META_MENU_OP_STICK = 1 << 7,
|
||||
META_MENU_OP_WORKSPACES = 1 << 8,
|
||||
META_MENU_OP_MOVE = 1 << 9,
|
||||
META_MENU_OP_RESIZE = 1 << 10
|
||||
META_MENU_OP_RESIZE = 1 << 10,
|
||||
META_MENU_OP_ABOVE = 1 << 11,
|
||||
META_MENU_OP_UNABOVE = 1 << 12,
|
||||
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
|
||||
} MetaMenuOp;
|
||||
|
||||
typedef struct _MetaWindowMenu MetaWindowMenu;
|
||||
@@ -66,6 +72,7 @@ typedef struct _MetaWindowMenu MetaWindowMenu;
|
||||
typedef void (* MetaWindowMenuFunc) (MetaWindowMenu *menu,
|
||||
Display *xdisplay,
|
||||
Window client_xwindow,
|
||||
Time timestamp,
|
||||
MetaMenuOp op,
|
||||
int workspace,
|
||||
gpointer data);
|
||||
|
1359
src/compositor.c
Normal file
1359
src/compositor.c
Normal file
File diff suppressed because it is too large
Load Diff
56
src/compositor.h
Normal file
56
src/compositor.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/* Metacity compositing manager */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2003 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef META_COMPOSITOR_H
|
||||
#define META_COMPOSITOR_H
|
||||
|
||||
#include "util.h"
|
||||
#include "display.h"
|
||||
|
||||
MetaCompositor* meta_compositor_new (MetaDisplay *display);
|
||||
void meta_compositor_unref (MetaCompositor *compositor);
|
||||
void meta_compositor_process_event (MetaCompositor *compositor,
|
||||
XEvent *xevent,
|
||||
MetaWindow *window);
|
||||
void meta_compositor_add_window (MetaCompositor *compositor,
|
||||
Window xwindow,
|
||||
XWindowAttributes *attrs);
|
||||
void meta_compositor_remove_window (MetaCompositor *compositor,
|
||||
Window xwindow);
|
||||
|
||||
void meta_compositor_manage_screen (MetaCompositor *compositor,
|
||||
MetaScreen *screen);
|
||||
void meta_compositor_unmanage_screen (MetaCompositor *compositor,
|
||||
MetaScreen *screen);
|
||||
|
||||
void meta_compositor_damage_window (MetaCompositor *compositor,
|
||||
MetaWindow *window);
|
||||
|
||||
#endif /* META_COMPOSITOR_H */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2002, 2003 Red Hat, Inc.
|
||||
* Copyright (C) 2003, 2004 Rob Adams
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -389,9 +390,9 @@ get_outermost_onscreen_positions (MetaWindow *window,
|
||||
* overlapping the strut rect.
|
||||
*/
|
||||
if (((current.y - info->fgeom.top_height >= rect->y) &&
|
||||
(current.y - info->fgeom.top_height <= rect->y + rect->height)) ||
|
||||
(current.y - info->fgeom.top_height < rect->y + rect->height)) ||
|
||||
((current.y >= rect->y) &&
|
||||
(current.y <= rect->y + rect->height)))
|
||||
(current.y < rect->y + rect->height)))
|
||||
{
|
||||
*leftmost_x_p = MAX (*leftmost_x_p, rect->width);
|
||||
}
|
||||
@@ -420,9 +421,9 @@ get_outermost_onscreen_positions (MetaWindow *window,
|
||||
* overlapping the strut rect.
|
||||
*/
|
||||
if (((current.y - info->fgeom.top_height >= rect->y) &&
|
||||
(current.y - info->fgeom.top_height <= rect->y + rect->height)) ||
|
||||
(current.y - info->fgeom.top_height < rect->y + rect->height)) ||
|
||||
((current.y >= rect->y) &&
|
||||
(current.y <= rect->y + rect->height)))
|
||||
(current.y < rect->y + rect->height)))
|
||||
{
|
||||
*rightmost_x_p = MIN (*rightmost_x_p, rect->x);
|
||||
}
|
||||
@@ -450,8 +451,8 @@ get_outermost_onscreen_positions (MetaWindow *window,
|
||||
/* here the strut matters if the titlebar is overlapping
|
||||
* the window horizontally
|
||||
*/
|
||||
if ((current.x <= rect->x + rect->width) &&
|
||||
(current.x + current.width >= rect->x))
|
||||
if ((current.x < rect->x + rect->width) &&
|
||||
(current.x + current.width > rect->x))
|
||||
{
|
||||
*topmost_y_p = MAX (*topmost_y_p, rect->height);
|
||||
}
|
||||
@@ -479,8 +480,8 @@ get_outermost_onscreen_positions (MetaWindow *window,
|
||||
/* here the strut matters if the titlebar is overlapping
|
||||
* the window horizontally
|
||||
*/
|
||||
if ((current.x <= rect->x + rect->width) &&
|
||||
(current.x + current.width >= rect->x))
|
||||
if ((current.x < rect->x + rect->width) &&
|
||||
(current.x + current.width > rect->x))
|
||||
{
|
||||
bottommost_y = MIN (bottommost_y, rect->y);
|
||||
}
|
||||
@@ -559,16 +560,9 @@ constraint_onscreen_bottom_func (MetaWindow *window,
|
||||
const MetaRectangle *orig,
|
||||
int *y_delta)
|
||||
{
|
||||
int max_dy;
|
||||
int bottommost_y;
|
||||
|
||||
get_outermost_onscreen_positions (window, info, orig, 0, *y_delta,
|
||||
NULL, NULL, NULL, &bottommost_y);
|
||||
|
||||
max_dy = bottommost_y - orig->y;
|
||||
|
||||
if (*y_delta > max_dy)
|
||||
*y_delta = max_dy;
|
||||
/* no way to resize off the bottom so that constraints are
|
||||
violated */
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -595,16 +589,9 @@ constraint_onscreen_left_func (MetaWindow *window,
|
||||
const MetaRectangle *orig,
|
||||
int *x_delta)
|
||||
{
|
||||
int min_dx;
|
||||
int leftmost_x;
|
||||
|
||||
get_outermost_onscreen_positions (window, info, orig, *x_delta, 0,
|
||||
&leftmost_x, NULL, NULL, NULL);
|
||||
|
||||
min_dx = leftmost_x - orig->x;
|
||||
|
||||
if (*x_delta < min_dx)
|
||||
*x_delta = min_dx;
|
||||
/* no way to resize off the sides so that constraints are violated
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -613,16 +600,9 @@ constraint_onscreen_right_func (MetaWindow *window,
|
||||
const MetaRectangle *orig,
|
||||
int *x_delta)
|
||||
{
|
||||
int max_dx;
|
||||
int rightmost_x;
|
||||
|
||||
get_outermost_onscreen_positions (window, info, orig, *x_delta, 0,
|
||||
NULL, &rightmost_x, NULL, NULL);
|
||||
|
||||
max_dx = rightmost_x - orig->x;
|
||||
|
||||
if (*x_delta > max_dx)
|
||||
*x_delta = max_dx;
|
||||
/* no way to resize off the sides so that constraints are violated
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -631,16 +611,9 @@ constraint_onscreen_hcenter_func (MetaWindow *window,
|
||||
const MetaRectangle *orig,
|
||||
int *x_delta)
|
||||
{
|
||||
int max_dx;
|
||||
int leftmost_x;
|
||||
|
||||
get_outermost_onscreen_positions (window, info, orig, *x_delta, 0,
|
||||
&leftmost_x, NULL, NULL, NULL);
|
||||
|
||||
max_dx = orig->x - leftmost_x;
|
||||
|
||||
if (*x_delta > max_dx)
|
||||
*x_delta = max_dx;
|
||||
/* no way to resize off the sides so that constraints are violated
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1347,6 +1320,19 @@ meta_window_constrain (MetaWindow *window,
|
||||
(window->placed || did_placement))
|
||||
{
|
||||
window->maximize_after_placement = FALSE;
|
||||
|
||||
if (OUTER_WIDTH (*new) >= info.work_area_xinerama.width &&
|
||||
OUTER_HEIGHT (*new) >= info.work_area_xinerama.height)
|
||||
{
|
||||
/* define a sane saved_rect so that the user can unmaximize
|
||||
* to something reasonable.
|
||||
*/
|
||||
new->width = .75 * info.work_area_xinerama.width;
|
||||
new->height = .75 * info.work_area_xinerama.height;
|
||||
new->x = info.work_area_xinerama.x + .125 * info.work_area_xinerama.width;
|
||||
new->y = info.work_area_xinerama.y + .083 * info.work_area_xinerama.height;
|
||||
}
|
||||
|
||||
meta_window_maximize_internal (window, new);
|
||||
|
||||
/* maximization may have changed frame geometry */
|
||||
|
23
src/core.c
23
src/core.c
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2003 Rob Adams
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -586,17 +587,17 @@ meta_core_get_menu_accelerator (MetaMenuOp menu_op,
|
||||
name = META_KEYBINDING_MAXIMIZE;
|
||||
break;
|
||||
case META_MENU_OP_UNSHADE:
|
||||
name = META_KEYBINDING_TOGGLE_SHADE;
|
||||
break;
|
||||
case META_MENU_OP_SHADE:
|
||||
name = META_KEYBINDING_TOGGLE_SHADE;
|
||||
break;
|
||||
case META_MENU_OP_UNSTICK:
|
||||
name = META_KEYBINDING_TOGGLE_STICKY;
|
||||
break;
|
||||
case META_MENU_OP_STICK:
|
||||
name = META_KEYBINDING_TOGGLE_STICKY;
|
||||
break;
|
||||
case META_MENU_OP_ABOVE:
|
||||
case META_MENU_OP_UNABOVE:
|
||||
name = META_KEYBINDING_TOGGLE_ABOVE;
|
||||
break;
|
||||
case META_MENU_OP_WORKSPACES:
|
||||
switch (workspace)
|
||||
{
|
||||
@@ -644,6 +645,18 @@ meta_core_get_menu_accelerator (MetaMenuOp menu_op,
|
||||
case META_MENU_OP_RESIZE:
|
||||
name = META_KEYBINDING_BEGIN_RESIZE;
|
||||
break;
|
||||
case META_MENU_OP_MOVE_LEFT:
|
||||
name = META_KEYBINDING_MOVE_WORKSPACE_LEFT;
|
||||
break;
|
||||
case META_MENU_OP_MOVE_RIGHT:
|
||||
name = META_KEYBINDING_MOVE_WORKSPACE_RIGHT;
|
||||
break;
|
||||
case META_MENU_OP_MOVE_UP:
|
||||
name = META_KEYBINDING_MOVE_WORKSPACE_UP;
|
||||
break;
|
||||
case META_MENU_OP_MOVE_DOWN:
|
||||
name = META_KEYBINDING_MOVE_WORKSPACE_DOWN;
|
||||
break;
|
||||
}
|
||||
|
||||
if (name)
|
||||
@@ -678,6 +691,7 @@ meta_core_begin_grab_op (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
MetaGrabOp op,
|
||||
gboolean pointer_already_grabbed,
|
||||
int event_serial,
|
||||
int button,
|
||||
gulong modmask,
|
||||
Time timestamp,
|
||||
@@ -699,6 +713,7 @@ meta_core_begin_grab_op (Display *xdisplay,
|
||||
|
||||
return meta_display_begin_grab_op (display, screen, window,
|
||||
op, pointer_already_grabbed,
|
||||
event_serial,
|
||||
button, modmask,
|
||||
timestamp, root_x, root_y);
|
||||
}
|
||||
|
@@ -133,6 +133,7 @@ gboolean meta_core_begin_grab_op (Display *xdisplay,
|
||||
Window frame_xwindow,
|
||||
MetaGrabOp op,
|
||||
gboolean pointer_already_grabbed,
|
||||
int event_serial,
|
||||
int button,
|
||||
gulong modmask,
|
||||
Time timestamp,
|
||||
@@ -163,6 +164,8 @@ void meta_core_get_screen_size (Display *xdisplay,
|
||||
*/
|
||||
void meta_core_increment_event_serial (Display *display);
|
||||
|
||||
int meta_ui_get_last_event_serial (Display *xdisplay);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
37
src/delete.c
37
src/delete.c
@@ -31,12 +31,14 @@
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
static void meta_window_present_delete_dialog (MetaWindow *window);
|
||||
|
||||
static void
|
||||
delete_ping_reply_func (MetaDisplay *display,
|
||||
Window xwindow,
|
||||
Time timestamp,
|
||||
void *user_data)
|
||||
{
|
||||
meta_topic (META_DEBUG_PING,
|
||||
@@ -289,13 +291,16 @@ io_from_ping_dialog (GIOChannel *channel,
|
||||
static void
|
||||
delete_ping_timeout_func (MetaDisplay *display,
|
||||
Window xwindow,
|
||||
Time timestamp,
|
||||
void *user_data)
|
||||
{
|
||||
MetaWindow *window = user_data;
|
||||
GError *err;
|
||||
int child_pid;
|
||||
int outpipe;
|
||||
char *argv[5];
|
||||
char *argv[9];
|
||||
char numbuf[32];
|
||||
char timestampbuf[32];
|
||||
char *window_id_str;
|
||||
GIOChannel *channel;
|
||||
|
||||
@@ -310,12 +315,19 @@ delete_ping_timeout_func (MetaDisplay *display,
|
||||
}
|
||||
|
||||
window_id_str = g_strdup_printf ("0x%lx", window->xwindow);
|
||||
|
||||
sprintf (numbuf, "%d", window->screen->number);
|
||||
sprintf (timestampbuf, "%lu", timestamp);
|
||||
|
||||
argv[0] = METACITY_LIBEXECDIR"/metacity-dialog";
|
||||
argv[1] = "--kill-window-question";
|
||||
argv[2] = window->title;
|
||||
argv[3] = window_id_str;
|
||||
argv[4] = NULL;
|
||||
argv[1] = "--screen";
|
||||
argv[2] = numbuf;
|
||||
argv[3] = "--timestamp";
|
||||
argv[4] = timestampbuf;
|
||||
argv[5] = "--kill-window-question";
|
||||
argv[6] = window->title;
|
||||
argv[7] = window_id_str;
|
||||
argv[8] = NULL;
|
||||
|
||||
err = NULL;
|
||||
if (!g_spawn_async_with_pipes ("/",
|
||||
@@ -381,15 +393,24 @@ meta_window_delete (MetaWindow *window,
|
||||
|
||||
if (window->has_focus)
|
||||
{
|
||||
/* FIXME Clean this up someday
|
||||
* http://bugzilla.gnome.org/show_bug.cgi?id=108706
|
||||
*/
|
||||
#if 0
|
||||
/* This is unfortunately going to result in weirdness
|
||||
* if the window doesn't respond to the delete event.
|
||||
* I don't know how to avoid that though.
|
||||
*/
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Focusing MRU window because focus window %s was deleted/killed\n",
|
||||
"Focusing default window because focus window %s was deleted/killed\n",
|
||||
window->desc);
|
||||
meta_workspace_focus_mru_window (window->screen->active_workspace,
|
||||
window);
|
||||
meta_workspace_focus_default_window (window->screen->active_workspace,
|
||||
window);
|
||||
#else
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Not unfocusing %s on delete/kill\n",
|
||||
window->desc);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
664
src/display.c
664
src/display.c
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,7 @@
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2002 Red Hat, Inc.
|
||||
* Copyright (C) 2003 Rob Adams
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -53,6 +54,7 @@ struct _MetaRectangle
|
||||
int height;
|
||||
};
|
||||
|
||||
typedef struct MetaCompositor MetaCompositor;
|
||||
typedef struct _MetaDisplay MetaDisplay;
|
||||
typedef struct _MetaFrame MetaFrame;
|
||||
typedef struct _MetaKeyBinding MetaKeyBinding;
|
||||
@@ -67,6 +69,7 @@ typedef struct _MetaGroupPropHooks MetaGroupPropHooks;
|
||||
|
||||
typedef void (* MetaWindowPingFunc) (MetaDisplay *display,
|
||||
Window xwindow,
|
||||
Time timestamp,
|
||||
gpointer user_data);
|
||||
|
||||
|
||||
@@ -152,6 +155,8 @@ struct _MetaDisplay
|
||||
Atom atom_net_wm_allowed_actions;
|
||||
Atom atom_net_wm_action_move;
|
||||
Atom atom_net_wm_action_resize;
|
||||
Atom atom_net_wm_action_fullscreen;
|
||||
Atom atom_net_wm_action_minimize;
|
||||
Atom atom_net_wm_action_shade;
|
||||
Atom atom_net_wm_action_stick;
|
||||
Atom atom_net_wm_action_maximize_horz;
|
||||
@@ -162,14 +167,22 @@ struct _MetaDisplay
|
||||
Atom atom_net_wm_state_below;
|
||||
Atom atom_net_startup_id;
|
||||
Atom atom_metacity_toggle_verbose;
|
||||
Atom atom_metacity_update_counter;
|
||||
Atom atom_sync_counter;
|
||||
Atom atom_net_wm_sync_request;
|
||||
Atom atom_net_wm_sync_request_counter;
|
||||
Atom atom_gnome_panel_action;
|
||||
Atom atom_gnome_panel_action_main_menu;
|
||||
Atom atom_gnome_panel_action_run_dialog;
|
||||
Atom atom_metacity_sentinel;
|
||||
Atom atom_net_wm_strut_partial;
|
||||
|
||||
Atom atom_net_frame_extents;
|
||||
Atom atom_net_request_frame_extents;
|
||||
Atom atom_net_wm_user_time;
|
||||
Atom atom_net_wm_state_demands_attention;
|
||||
Atom atom_net_restack_window;
|
||||
Atom atom_net_moveresize_window;
|
||||
Atom atom_net_desktop_geometry;
|
||||
Atom atom_net_desktop_viewport;
|
||||
|
||||
/* This is the actual window from focus events,
|
||||
* not the one we last set
|
||||
*/
|
||||
@@ -225,19 +238,25 @@ struct _MetaDisplay
|
||||
MetaScreen *grab_screen;
|
||||
MetaWindow *grab_window;
|
||||
Window grab_xwindow;
|
||||
gulong grab_start_serial;
|
||||
int grab_button;
|
||||
int grab_initial_root_x;
|
||||
int grab_initial_root_y;
|
||||
int grab_anchor_root_x;
|
||||
int grab_anchor_root_y;
|
||||
MetaRectangle grab_anchor_window_pos;
|
||||
int grab_latest_motion_x;
|
||||
int grab_latest_motion_y;
|
||||
gulong grab_mask;
|
||||
guint grab_have_pointer : 1;
|
||||
guint grab_have_keyboard : 1;
|
||||
guint grab_wireframe_active : 1;
|
||||
guint grab_was_cancelled : 1;
|
||||
MetaRectangle grab_wireframe_rect;
|
||||
MetaRectangle grab_wireframe_last_xor_rect;
|
||||
MetaRectangle grab_initial_window_pos;
|
||||
MetaResizePopup *grab_resize_popup;
|
||||
GTimeVal grab_last_moveresize_time;
|
||||
Time grab_motion_notify_time;
|
||||
|
||||
|
||||
/* we use property updates as sentinels for certain window focus events
|
||||
* to avoid some race conditions on EnterNotify events
|
||||
*/
|
||||
@@ -247,9 +266,10 @@ struct _MetaDisplay
|
||||
int xkb_base_event_type;
|
||||
#endif
|
||||
#ifdef HAVE_XSYNC
|
||||
/* alarm monitoring client's _METACITY_UPDATE_COUNTER */
|
||||
XSyncAlarm grab_update_alarm;
|
||||
/* alarm monitoring client's _NET_WM_SYNC_REQUEST_COUNTER */
|
||||
XSyncAlarm grab_sync_request_alarm;
|
||||
#endif
|
||||
int grab_resize_timeout_id;
|
||||
|
||||
/* Keybindings stuff */
|
||||
MetaKeyBinding *screen_bindings;
|
||||
@@ -286,6 +306,9 @@ struct _MetaDisplay
|
||||
|
||||
/* Managed by group-props.c */
|
||||
MetaGroupPropHooks *group_prop_hooks;
|
||||
|
||||
/* Managed by compositor.c */
|
||||
MetaCompositor *compositor;
|
||||
|
||||
#ifdef HAVE_STARTUP_NOTIFICATION
|
||||
SnDisplay *sn_display;
|
||||
@@ -293,17 +316,33 @@ struct _MetaDisplay
|
||||
#ifdef HAVE_XSYNC
|
||||
int xsync_event_base;
|
||||
int xsync_error_base;
|
||||
#define META_DISPLAY_HAS_XSYNC(display) ((display)->xsync_event_base != 0)
|
||||
#else
|
||||
#define META_DISPLAY_HAS_XSYNC(display) FALSE
|
||||
#endif
|
||||
#ifdef HAVE_SHAPE
|
||||
int shape_event_base;
|
||||
int shape_error_base;
|
||||
#define META_DISPLAY_HAS_SHAPE(display) ((display)->shape_event_base != 0)
|
||||
#endif
|
||||
#ifdef HAVE_RENDER
|
||||
int render_event_base;
|
||||
int render_error_base;
|
||||
#endif
|
||||
#ifdef HAVE_XSYNC
|
||||
unsigned int have_xsync : 1;
|
||||
#define META_DISPLAY_HAS_XSYNC(display) ((display)->have_xsync)
|
||||
#else
|
||||
#define META_DISPLAY_HAS_XSYNC(display) FALSE
|
||||
#endif
|
||||
#ifdef HAVE_SHAPE
|
||||
unsigned int have_shape : 1;
|
||||
#define META_DISPLAY_HAS_SHAPE(display) ((display)->have_shape)
|
||||
#else
|
||||
#define META_DISPLAY_HAS_SHAPE(display) FALSE
|
||||
#endif
|
||||
#ifdef HAVE_RENDER
|
||||
unsigned int have_render : 1;
|
||||
#define META_DISPLAY_HAS_RENDER(display) ((display)->have_render)
|
||||
#else
|
||||
#define META_DISPLAY_HAS_RENDER(display) FALSE
|
||||
#endif
|
||||
};
|
||||
|
||||
gboolean meta_display_open (const char *name);
|
||||
@@ -355,6 +394,7 @@ gboolean meta_display_begin_grab_op (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
MetaGrabOp op,
|
||||
gboolean pointer_already_grabbed,
|
||||
int event_serial,
|
||||
int button,
|
||||
gulong modmask,
|
||||
Time timestamp,
|
||||
@@ -369,9 +409,9 @@ void meta_display_ungrab_window_buttons (MetaDisplay *display,
|
||||
Window xwindow);
|
||||
|
||||
void meta_display_grab_focus_window_button (MetaDisplay *display,
|
||||
Window xwindow);
|
||||
MetaWindow *window);
|
||||
void meta_display_ungrab_focus_window_button (MetaDisplay *display,
|
||||
Window xwindow);
|
||||
MetaWindow *window);
|
||||
|
||||
/* make a request to ensure the event serial has changed */
|
||||
void meta_display_increment_event_serial (MetaDisplay *display);
|
||||
|
123
src/effects.c
123
src/effects.c
@@ -125,6 +125,22 @@ update_wireframe_window (MetaDisplay *display,
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
graphics_sync (BoxAnimationContext *context)
|
||||
{
|
||||
XImage *image;
|
||||
|
||||
/* A hack to force the X server to synchronize with the
|
||||
* graphics hardware
|
||||
*/
|
||||
image = XGetImage (context->screen->display->xdisplay,
|
||||
context->screen->xroot,
|
||||
0, 0, 1, 1,
|
||||
AllPlanes, ZPixmap);
|
||||
|
||||
XDestroyImage (image);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
effects_draw_box_animation_timeout (BoxAnimationContext *context)
|
||||
{
|
||||
@@ -182,6 +198,8 @@ effects_draw_box_animation_timeout (BoxAnimationContext *context)
|
||||
XDestroyWindow (context->screen->display->xdisplay,
|
||||
context->wireframe_xwindow);
|
||||
}
|
||||
|
||||
graphics_sync (context);
|
||||
|
||||
g_free (context);
|
||||
return FALSE;
|
||||
@@ -267,7 +285,7 @@ effects_draw_box_animation_timeout (BoxAnimationContext *context)
|
||||
}
|
||||
|
||||
/* kick changes onto the server */
|
||||
XFlush (context->screen->display->xdisplay);
|
||||
graphics_sync (context);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -409,5 +427,108 @@ meta_effects_draw_box_animation (MetaScreen *screen,
|
||||
XFlush (context->screen->display->xdisplay);
|
||||
}
|
||||
|
||||
void
|
||||
meta_effects_begin_wireframe (MetaScreen *screen,
|
||||
const MetaRectangle *rect)
|
||||
{
|
||||
/* Grab the X server to avoid screen dirt */
|
||||
meta_display_grab (screen->display);
|
||||
meta_ui_push_delay_exposes (screen->ui);
|
||||
|
||||
meta_effects_update_wireframe (screen, NULL, rect);
|
||||
}
|
||||
|
||||
static void
|
||||
draw_xor_rect (MetaScreen *screen,
|
||||
const MetaRectangle *rect)
|
||||
{
|
||||
/* The lines in the center can't overlap the rectangle or each
|
||||
* other, or the XOR gets reversed. So we have to draw things
|
||||
* a bit oddly.
|
||||
*/
|
||||
XSegment segments[8];
|
||||
int i;
|
||||
|
||||
#define LINE_WIDTH META_WIREFRAME_XOR_LINE_WIDTH
|
||||
|
||||
XDrawRectangle (screen->display->xdisplay,
|
||||
screen->xroot,
|
||||
screen->root_xor_gc,
|
||||
rect->x, rect->y,
|
||||
rect->width, rect->height);
|
||||
|
||||
/* Don't put lines inside small rectangles where they won't fit */
|
||||
if (rect->width < (LINE_WIDTH * 4) ||
|
||||
rect->height < (LINE_WIDTH * 4))
|
||||
return;
|
||||
|
||||
/* Two vertical lines at 1/3 and 2/3 */
|
||||
segments[0].x1 = rect->x + rect->width / 3;
|
||||
segments[0].y1 = rect->y + LINE_WIDTH / 2 + LINE_WIDTH % 2;
|
||||
segments[0].x2 = segments[0].x1;
|
||||
segments[0].y2 = rect->y + rect->height - LINE_WIDTH / 2;
|
||||
|
||||
segments[1] = segments[0];
|
||||
segments[1].x1 = rect->x + (rect->width / 3) * 2;
|
||||
segments[1].x2 = segments[1].x1;
|
||||
|
||||
/* Now make two horizontal lines at 1/3 and 2/3, but not
|
||||
* overlapping the verticals
|
||||
*/
|
||||
|
||||
segments[2].x1 = rect->x + LINE_WIDTH / 2 + LINE_WIDTH % 2;
|
||||
segments[2].x2 = segments[0].x1 - LINE_WIDTH / 2;
|
||||
segments[2].y1 = rect->y + rect->height / 3;
|
||||
segments[2].y2 = segments[2].y1;
|
||||
|
||||
segments[3] = segments[2];
|
||||
segments[3].x1 = segments[2].x2 + LINE_WIDTH;
|
||||
segments[3].x2 = segments[1].x1 - LINE_WIDTH / 2;
|
||||
|
||||
segments[4] = segments[3];
|
||||
segments[4].x1 = segments[3].x2 + LINE_WIDTH;
|
||||
segments[4].x2 = rect->x + rect->width - LINE_WIDTH / 2;
|
||||
|
||||
/* Second horizontal line is just like the first, but
|
||||
* shifted down
|
||||
*/
|
||||
i = 5;
|
||||
while (i < 8)
|
||||
{
|
||||
segments[i] = segments[i - 3];
|
||||
segments[i].y1 = rect->y + (rect->height / 3) * 2;
|
||||
segments[i].y2 = segments[i].y1;
|
||||
++i;
|
||||
}
|
||||
|
||||
XDrawSegments (screen->display->xdisplay,
|
||||
screen->xroot,
|
||||
screen->root_xor_gc,
|
||||
segments,
|
||||
G_N_ELEMENTS (segments));
|
||||
}
|
||||
|
||||
void
|
||||
meta_effects_update_wireframe (MetaScreen *screen,
|
||||
const MetaRectangle *old_rect,
|
||||
const MetaRectangle *new_rect)
|
||||
{
|
||||
if (old_rect)
|
||||
draw_xor_rect (screen, old_rect);
|
||||
|
||||
if (new_rect)
|
||||
draw_xor_rect (screen, new_rect);
|
||||
|
||||
XFlush (screen->display->xdisplay);
|
||||
}
|
||||
|
||||
void
|
||||
meta_effects_end_wireframe (MetaScreen *screen,
|
||||
const MetaRectangle *old_rect)
|
||||
{
|
||||
meta_effects_update_wireframe (screen, old_rect, NULL);
|
||||
|
||||
meta_display_ungrab (screen->display);
|
||||
meta_ui_pop_delay_exposes (screen->ui);
|
||||
}
|
||||
|
||||
|
@@ -25,7 +25,7 @@
|
||||
#include "util.h"
|
||||
#include "screen.h"
|
||||
|
||||
#define META_MINIMIZE_ANIMATION_LENGTH 0.35
|
||||
#define META_MINIMIZE_ANIMATION_LENGTH 0.25
|
||||
#define META_SHADE_ANIMATION_LENGTH 0.2
|
||||
|
||||
typedef enum
|
||||
@@ -41,4 +41,12 @@ void meta_effects_draw_box_animation (MetaScreen *screen,
|
||||
double seconds_duration,
|
||||
MetaBoxAnimType anim_type);
|
||||
|
||||
void meta_effects_begin_wireframe (MetaScreen *screen,
|
||||
const MetaRectangle *rect);
|
||||
void meta_effects_update_wireframe (MetaScreen *screen,
|
||||
const MetaRectangle *old_rect,
|
||||
const MetaRectangle *new_rect);
|
||||
void meta_effects_end_wireframe (MetaScreen *screen,
|
||||
const MetaRectangle *old_rect);
|
||||
|
||||
#endif /* META_EFFECTS_H */
|
||||
|
84
src/frame.c
84
src/frame.c
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2003, 2004 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -25,6 +26,10 @@
|
||||
#include "errors.h"
|
||||
#include "keybindings.h"
|
||||
|
||||
#ifdef HAVE_RENDER
|
||||
#include <X11/extensions/Xrender.h>
|
||||
#endif
|
||||
|
||||
#define EVENT_MASK (SubstructureRedirectMask | \
|
||||
StructureNotifyMask | SubstructureNotifyMask | \
|
||||
ExposureMask | \
|
||||
@@ -33,12 +38,67 @@
|
||||
EnterWindowMask | LeaveWindowMask | \
|
||||
FocusChangeMask | \
|
||||
ColormapChangeMask)
|
||||
static Visual*
|
||||
find_argb_visual (MetaDisplay *display,
|
||||
int scr)
|
||||
{
|
||||
#ifdef HAVE_RENDER
|
||||
XVisualInfo *xvi;
|
||||
XVisualInfo template;
|
||||
int nvi;
|
||||
int i;
|
||||
XRenderPictFormat *format;
|
||||
Visual *visual;
|
||||
|
||||
if (!META_DISPLAY_HAS_RENDER (display))
|
||||
return NULL;
|
||||
|
||||
template.screen = scr;
|
||||
template.depth = 32;
|
||||
template.class = TrueColor;
|
||||
xvi = XGetVisualInfo (display->xdisplay,
|
||||
VisualScreenMask |
|
||||
VisualDepthMask |
|
||||
VisualClassMask,
|
||||
&template,
|
||||
&nvi);
|
||||
if (!xvi)
|
||||
return 0;
|
||||
|
||||
visual = NULL;
|
||||
|
||||
for (i = 0; i < nvi; i++)
|
||||
{
|
||||
format = XRenderFindVisualFormat (display->xdisplay, xvi[i].visual);
|
||||
if (format->type == PictTypeDirect && format->direct.alphaMask)
|
||||
{
|
||||
visual = xvi[i].visual;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
XFree (xvi);
|
||||
|
||||
if (visual)
|
||||
meta_topic (META_DEBUG_COMPOSITOR,
|
||||
"Found ARGB visual 0x%lx\n",
|
||||
(long) visual->visualid);
|
||||
else
|
||||
meta_topic (META_DEBUG_COMPOSITOR,
|
||||
"No ARGB visual found\n");
|
||||
|
||||
return visual;
|
||||
#else /* RENDER */
|
||||
return NULL;
|
||||
#endif /* !RENDER */
|
||||
}
|
||||
|
||||
void
|
||||
meta_window_ensure_frame (MetaWindow *window)
|
||||
{
|
||||
MetaFrame *frame;
|
||||
XSetWindowAttributes attrs;
|
||||
Visual *visual;
|
||||
|
||||
if (window->frame)
|
||||
return;
|
||||
@@ -75,13 +135,26 @@ meta_window_ensure_frame (MetaWindow *window)
|
||||
/* Default depth/visual handles clients with weird visuals; they can
|
||||
* always be children of the root depth/visual obviously, but
|
||||
* e.g. DRI games can't be children of a parent that has the same
|
||||
* visual as the client.
|
||||
* visual as the client. NULL means default visual.
|
||||
*
|
||||
* We look for an ARGB visual if we can find one, otherwise use
|
||||
* the default of NULL.
|
||||
*/
|
||||
|
||||
/* Special case for depth 32 windows (assumed to be ARGB),
|
||||
* we use the window's visual
|
||||
*/
|
||||
if (window->depth == 32)
|
||||
visual = window->xvisual;
|
||||
else
|
||||
visual = find_argb_visual(window->display,
|
||||
window->screen->number);
|
||||
|
||||
frame->xwindow = meta_ui_create_frame_window (window->screen->ui,
|
||||
window->display->xdisplay,
|
||||
frame->rect.x,
|
||||
frame->rect.y,
|
||||
window->display->xdisplay,
|
||||
visual,
|
||||
frame->rect.x,
|
||||
frame->rect.y,
|
||||
frame->rect.width,
|
||||
frame->rect.height,
|
||||
frame->window->screen->number);
|
||||
@@ -153,6 +226,8 @@ meta_window_destroy_frame (MetaWindow *window)
|
||||
if (window->frame == NULL)
|
||||
return;
|
||||
|
||||
meta_verbose ("Unframing window %s\n", window->desc);
|
||||
|
||||
frame = window->frame;
|
||||
|
||||
meta_bell_notify_frame_destroy (frame);
|
||||
@@ -371,6 +446,7 @@ meta_frame_set_screen_cursor (MetaFrame *frame,
|
||||
{
|
||||
xcursor = meta_display_create_x_cursor (frame->window->display, cursor);
|
||||
XDefineCursor (frame->window->display->xdisplay, frame->xwindow, xcursor);
|
||||
XFlush (frame->window->display->xdisplay);
|
||||
XFreeCursor (frame->window->display->xdisplay, xcursor);
|
||||
}
|
||||
}
|
||||
|
48
src/frames.c
48
src/frames.c
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2003 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -63,6 +64,9 @@ static void meta_frames_paint_to_drawable (MetaFrames *frames,
|
||||
GdkDrawable *drawable,
|
||||
GdkRegion *region);
|
||||
|
||||
static void meta_frames_set_window_background (MetaFrames *frames,
|
||||
MetaUIFrame *frame);
|
||||
|
||||
static void meta_frames_calc_geometry (MetaFrames *frames,
|
||||
MetaUIFrame *frame,
|
||||
MetaFrameGeometry *fgeom);
|
||||
@@ -269,8 +273,8 @@ queue_recalc_func (gpointer key, gpointer value, gpointer data)
|
||||
* resize may not actually be needed so we always redraw
|
||||
* in case of color change.
|
||||
*/
|
||||
gtk_style_set_background (GTK_WIDGET (frames)->style,
|
||||
frame->window, GTK_STATE_NORMAL);
|
||||
meta_frames_set_window_background (frames, frame);
|
||||
|
||||
gdk_window_invalidate_rect (frame->window, NULL, FALSE);
|
||||
meta_core_queue_frame_resize (gdk_display,
|
||||
frame->xwindow);
|
||||
@@ -314,8 +318,8 @@ queue_draw_func (gpointer key, gpointer value, gpointer data)
|
||||
* resize may not actually be needed so we always redraw
|
||||
* in case of color change.
|
||||
*/
|
||||
gtk_style_set_background (GTK_WIDGET (frames)->style,
|
||||
frame->window, GTK_STATE_NORMAL);
|
||||
meta_frames_set_window_background (frames, frame);
|
||||
|
||||
gdk_window_invalidate_rect (frame->window, NULL, FALSE);
|
||||
}
|
||||
|
||||
@@ -468,6 +472,7 @@ meta_frames_manage_window (MetaFrames *frames,
|
||||
GdkWindow *window)
|
||||
{
|
||||
MetaUIFrame *frame;
|
||||
GdkColor col;
|
||||
|
||||
g_assert (window);
|
||||
|
||||
@@ -476,8 +481,9 @@ meta_frames_manage_window (MetaFrames *frames,
|
||||
frame->window = window;
|
||||
|
||||
gdk_window_set_user_data (frame->window, frames);
|
||||
gtk_style_set_background (GTK_WIDGET (frames)->style,
|
||||
frame->window, GTK_STATE_NORMAL);
|
||||
|
||||
/* Set the window background to the current style */
|
||||
meta_frames_set_window_background (frames, frame);
|
||||
|
||||
/* Don't set event mask here, it's in frame.c */
|
||||
|
||||
@@ -611,8 +617,8 @@ meta_frames_reset_bg (MetaFrames *frames,
|
||||
widget = GTK_WIDGET (frames);
|
||||
|
||||
frame = meta_frames_lookup_window (frames, xwindow);
|
||||
|
||||
gtk_style_set_background (widget->style, frame->window, GTK_STATE_NORMAL);
|
||||
|
||||
meta_frames_set_window_background (frames, frame);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1257,6 +1263,7 @@ meta_frames_button_press_event (GtkWidget *widget,
|
||||
frame->xwindow,
|
||||
op,
|
||||
TRUE,
|
||||
meta_ui_get_last_event_serial (gdk_display),
|
||||
event->button,
|
||||
0,
|
||||
event->time,
|
||||
@@ -1336,6 +1343,7 @@ meta_frames_button_press_event (GtkWidget *widget,
|
||||
frame->xwindow,
|
||||
op,
|
||||
TRUE,
|
||||
meta_ui_get_last_event_serial (gdk_display),
|
||||
event->button,
|
||||
0,
|
||||
event->time,
|
||||
@@ -1355,6 +1363,7 @@ meta_frames_button_press_event (GtkWidget *widget,
|
||||
frame->xwindow,
|
||||
META_GRAB_OP_MOVING,
|
||||
TRUE,
|
||||
meta_ui_get_last_event_serial (gdk_display),
|
||||
event->button,
|
||||
0,
|
||||
event->time,
|
||||
@@ -1889,6 +1898,22 @@ meta_frames_paint_to_drawable (MetaFrames *frames,
|
||||
g_free (areas);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_frames_set_window_background (MetaFrames *frames,
|
||||
MetaUIFrame *frame)
|
||||
{
|
||||
gtk_style_set_background (GTK_WIDGET (frames)->style,
|
||||
frame->window, GTK_STATE_NORMAL);
|
||||
|
||||
#if 0
|
||||
/* This is what we want for transparent background */
|
||||
{
|
||||
col.pixel = 0;
|
||||
gdk_window_set_background (window, &col);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_frames_enter_notify_event (GtkWidget *widget,
|
||||
GdkEventCrossing *event)
|
||||
@@ -2110,6 +2135,13 @@ get_control (MetaFrames *frames,
|
||||
void
|
||||
meta_frames_push_delay_exposes (MetaFrames *frames)
|
||||
{
|
||||
if (frames->expose_delay_count == 0)
|
||||
{
|
||||
/* Make sure we've repainted things */
|
||||
gdk_window_process_all_updates ();
|
||||
XFlush (gdk_display);
|
||||
}
|
||||
|
||||
frames->expose_delay_count += 1;
|
||||
}
|
||||
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2002 Red Hat Inc.
|
||||
* Copyright (C) 2003 Rob Adams
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
|
@@ -46,7 +46,7 @@ get_fallback_icons (MetaScreen *screen,
|
||||
|
||||
static gboolean
|
||||
find_largest_sizes (gulong *data,
|
||||
int nitems,
|
||||
gulong nitems,
|
||||
int *width,
|
||||
int *height)
|
||||
{
|
||||
@@ -81,7 +81,7 @@ find_largest_sizes (gulong *data,
|
||||
|
||||
static gboolean
|
||||
find_best_size (gulong *data,
|
||||
int nitems,
|
||||
gulong nitems,
|
||||
int ideal_width,
|
||||
int ideal_height,
|
||||
int *width,
|
||||
@@ -520,6 +520,7 @@ meta_icon_cache_init (MetaIconCache *icon_cache)
|
||||
|
||||
icon_cache->origin = USING_NO_ICON;
|
||||
icon_cache->prev_pixmap = None;
|
||||
icon_cache->prev_mask = None;
|
||||
#if 0
|
||||
icon_cache->icon = NULL;
|
||||
icon_cache->mini_icon = NULL;
|
||||
|
@@ -1,7 +1,9 @@
|
||||
/* Metacity Keybindings */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington, 2002 Red Hat Inc.
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2002 Red Hat Inc.
|
||||
* Copyright (C) 2003 Rob Adams
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -27,9 +29,12 @@
|
||||
#include "frame.h"
|
||||
#include "place.h"
|
||||
#include "prefs.h"
|
||||
#include "effects.h"
|
||||
|
||||
#include <X11/keysym.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static gboolean all_bindings_disabled = FALSE;
|
||||
|
||||
@@ -1691,10 +1696,24 @@ process_keyboard_move_grab (MetaDisplay *display,
|
||||
if (is_modifier (display, event->xkey.keycode))
|
||||
return TRUE;
|
||||
|
||||
meta_window_get_position (window, &x, &y);
|
||||
if (display->grab_wireframe_active)
|
||||
{
|
||||
x = display->grab_wireframe_rect.x;
|
||||
y = display->grab_wireframe_rect.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_window_get_position (window, &x, &y);
|
||||
}
|
||||
|
||||
/* FIXME in wireframe mode the edge snapping is all fucked up
|
||||
* since the edge-find routines use window->rect. Window
|
||||
* constraints are also broken with wireframe.
|
||||
*/
|
||||
smart_snap = (event->xkey.state & ShiftMask) != 0;
|
||||
|
||||
if (display->grab_wireframe_active)
|
||||
smart_snap = FALSE;
|
||||
|
||||
#define SMALL_INCREMENT 1
|
||||
#define NORMAL_INCREMENT 10
|
||||
|
||||
@@ -1707,13 +1726,18 @@ process_keyboard_move_grab (MetaDisplay *display,
|
||||
|
||||
if (keysym == XK_Escape)
|
||||
{
|
||||
/* End move and restore to original position */
|
||||
/* End resize and restore to original state.
|
||||
* The move_resize is only needed when !wireframe
|
||||
* since in wireframe we always moveresize at the end
|
||||
* of the grab only.
|
||||
*/
|
||||
meta_window_move_resize (display->grab_window,
|
||||
TRUE,
|
||||
display->grab_initial_window_pos.x,
|
||||
display->grab_initial_window_pos.y,
|
||||
display->grab_initial_window_pos.width,
|
||||
display->grab_initial_window_pos.height);
|
||||
display->grab_was_cancelled = TRUE;
|
||||
}
|
||||
|
||||
/* When moving by increments, we still snap to edges if the move
|
||||
@@ -1727,11 +1751,14 @@ process_keyboard_move_grab (MetaDisplay *display,
|
||||
case XK_KP_Prior:
|
||||
case XK_Up:
|
||||
case XK_KP_Up:
|
||||
edge = meta_window_find_next_horizontal_edge (window, FALSE);
|
||||
y -= incr;
|
||||
|
||||
if (smart_snap || ((edge > y) && ABS (edge - y) < incr))
|
||||
y = edge;
|
||||
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_horizontal_edge (window, FALSE);
|
||||
if (smart_snap || ((edge > y) && ABS (edge - y) < incr))
|
||||
y = edge;
|
||||
}
|
||||
|
||||
handled = TRUE;
|
||||
break;
|
||||
@@ -1739,11 +1766,14 @@ process_keyboard_move_grab (MetaDisplay *display,
|
||||
case XK_KP_Next:
|
||||
case XK_Down:
|
||||
case XK_KP_Down:
|
||||
edge = meta_window_find_next_horizontal_edge (window, TRUE);
|
||||
y += incr;
|
||||
|
||||
if (smart_snap || ((edge < y) && ABS (edge - y) < incr))
|
||||
y = edge;
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_horizontal_edge (window, TRUE);
|
||||
if (smart_snap || ((edge < y) && ABS (edge - y) < incr))
|
||||
y = edge;
|
||||
}
|
||||
|
||||
handled = TRUE;
|
||||
break;
|
||||
@@ -1755,11 +1785,14 @@ process_keyboard_move_grab (MetaDisplay *display,
|
||||
case XK_KP_End:
|
||||
case XK_Left:
|
||||
case XK_KP_Left:
|
||||
edge = meta_window_find_next_vertical_edge (window, FALSE);
|
||||
x -= incr;
|
||||
|
||||
if (smart_snap || ((edge > x) && ABS (edge - x) < incr))
|
||||
x = edge;
|
||||
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_vertical_edge (window, FALSE);
|
||||
if (smart_snap || ((edge > x) && ABS (edge - x) < incr))
|
||||
x = edge;
|
||||
}
|
||||
|
||||
handled = TRUE;
|
||||
break;
|
||||
@@ -1767,18 +1800,45 @@ process_keyboard_move_grab (MetaDisplay *display,
|
||||
case XK_KP_Next:
|
||||
case XK_Right:
|
||||
case XK_KP_Right:
|
||||
edge = meta_window_find_next_vertical_edge (window, TRUE);
|
||||
x += incr;
|
||||
if (smart_snap || ((edge < x) && ABS (edge - x) < incr))
|
||||
x = edge;
|
||||
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_vertical_edge (window, TRUE);
|
||||
if (smart_snap || ((edge < x) && ABS (edge - x) < incr))
|
||||
x = edge;
|
||||
}
|
||||
|
||||
handled = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (handled)
|
||||
{
|
||||
meta_window_move (window, TRUE, x, y);
|
||||
meta_window_warp_pointer (window, display->grab_op);
|
||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||
"Computed new window location %d,%d due to keypress\n",
|
||||
x, y);
|
||||
if (display->grab_wireframe_active)
|
||||
{
|
||||
MetaRectangle new_xor;
|
||||
|
||||
display->grab_wireframe_rect.x = x;
|
||||
display->grab_wireframe_rect.y = y;
|
||||
|
||||
meta_window_get_xor_rect (window, &display->grab_wireframe_rect,
|
||||
&new_xor);
|
||||
|
||||
meta_effects_update_wireframe (window->screen,
|
||||
&display->grab_wireframe_last_xor_rect,
|
||||
&new_xor);
|
||||
display->grab_wireframe_last_xor_rect = new_xor;
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_window_move (window, TRUE, x, y);
|
||||
}
|
||||
|
||||
meta_window_update_keyboard_move (window);
|
||||
}
|
||||
|
||||
return handled;
|
||||
@@ -1813,13 +1873,18 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
|
||||
if (keysym == XK_Escape)
|
||||
{
|
||||
/* End resize and restore to original state */
|
||||
/* End resize and restore to original state.
|
||||
* The move_resize is only needed when !wireframe
|
||||
* since in wireframe we always moveresize at the end
|
||||
* of the grab only.
|
||||
*/
|
||||
meta_window_move_resize (display->grab_window,
|
||||
TRUE,
|
||||
display->grab_initial_window_pos.x,
|
||||
display->grab_initial_window_pos.y,
|
||||
display->grab_initial_window_pos.width,
|
||||
display->grab_initial_window_pos.height);
|
||||
display->grab_was_cancelled = TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@@ -1929,20 +1994,38 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
|
||||
if (handled)
|
||||
{
|
||||
meta_window_update_resize_grab_op (window, TRUE);
|
||||
meta_window_update_keyboard_resize (window, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
meta_window_get_position (window, &orig_x, &orig_y);
|
||||
x = orig_x;
|
||||
y = orig_y;
|
||||
width = window->rect.width;
|
||||
height = window->rect.height;
|
||||
if (display->grab_wireframe_active)
|
||||
{
|
||||
x = display->grab_wireframe_rect.x;
|
||||
y = display->grab_wireframe_rect.y;
|
||||
orig_x = x;
|
||||
orig_y = y;
|
||||
width = display->grab_wireframe_rect.width;
|
||||
height = display->grab_wireframe_rect.height;
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_window_get_position (window, &orig_x, &orig_y);
|
||||
x = orig_x;
|
||||
y = orig_y;
|
||||
width = window->rect.width;
|
||||
height = window->rect.height;
|
||||
}
|
||||
|
||||
gravity = meta_resize_gravity_from_grab_op (display->grab_op);
|
||||
|
||||
smart_snap = (event->xkey.state & ShiftMask) != 0;
|
||||
|
||||
/* FIXME in wireframe mode the edge snapping is all fucked up
|
||||
* since the edge-find routines use window->rect. Window
|
||||
* constraints are also broken with wireframe.
|
||||
*/
|
||||
smart_snap = (event->xkey.state & ShiftMask) != 0;
|
||||
if (display->grab_wireframe_active)
|
||||
smart_snap = FALSE;
|
||||
|
||||
#define SMALL_INCREMENT 1
|
||||
#define NORMAL_INCREMENT 10
|
||||
|
||||
@@ -1992,12 +2075,16 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
case NorthWestGravity:
|
||||
case NorthEastGravity:
|
||||
/* Move bottom edge up */
|
||||
edge = meta_window_find_next_horizontal_edge (window, TRUE);
|
||||
height -= height_inc;
|
||||
|
||||
if (smart_snap || ((edge > (y+height)) &&
|
||||
ABS (edge - (y+height)) < height_inc))
|
||||
height = edge - y;
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_horizontal_edge (window, TRUE);
|
||||
|
||||
if (smart_snap || ((edge > (y+height)) &&
|
||||
ABS (edge - (y+height)) < height_inc))
|
||||
height = edge - y;
|
||||
}
|
||||
|
||||
handled = TRUE;
|
||||
break;
|
||||
@@ -2006,11 +2093,15 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
case SouthWestGravity:
|
||||
case SouthEastGravity:
|
||||
/* Move top edge up */
|
||||
edge = meta_window_find_next_horizontal_edge (window, FALSE);
|
||||
y -= height_inc;
|
||||
|
||||
if (smart_snap || ((edge > y) && ABS (edge - y) < height_inc))
|
||||
y = edge;
|
||||
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_horizontal_edge (window, FALSE);
|
||||
|
||||
if (smart_snap || ((edge > y) && ABS (edge - y) < height_inc))
|
||||
y = edge;
|
||||
}
|
||||
|
||||
height += (orig_y - y);
|
||||
break;
|
||||
@@ -2033,12 +2124,16 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
case NorthWestGravity:
|
||||
case NorthEastGravity:
|
||||
/* Move bottom edge down */
|
||||
edge = meta_window_find_next_horizontal_edge (window, TRUE);
|
||||
height += height_inc;
|
||||
|
||||
if (smart_snap || ((edge < (y+height)) &&
|
||||
ABS (edge - (y+height)) < height_inc))
|
||||
height = edge - y;
|
||||
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_horizontal_edge (window, TRUE);
|
||||
|
||||
if (smart_snap || ((edge < (y+height)) &&
|
||||
ABS (edge - (y+height)) < height_inc))
|
||||
height = edge - y;
|
||||
}
|
||||
|
||||
handled = TRUE;
|
||||
break;
|
||||
@@ -2047,11 +2142,15 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
case SouthWestGravity:
|
||||
case SouthEastGravity:
|
||||
/* Move top edge down */
|
||||
edge = meta_window_find_next_horizontal_edge (window, FALSE);
|
||||
y += height_inc;
|
||||
|
||||
if (smart_snap || ((edge < y) && ABS (edge - y) < height_inc))
|
||||
y = edge;
|
||||
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_horizontal_edge (window, FALSE);
|
||||
|
||||
if (smart_snap || ((edge < y) && ABS (edge - y) < height_inc))
|
||||
y = edge;
|
||||
}
|
||||
|
||||
height -= (y - orig_y);
|
||||
break;
|
||||
@@ -2074,11 +2173,15 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
case SouthEastGravity:
|
||||
case NorthEastGravity:
|
||||
/* Move left edge left */
|
||||
edge = meta_window_find_next_vertical_edge (window, TRUE);
|
||||
x -= width_inc;
|
||||
|
||||
if (smart_snap || ((edge > x) && ABS (edge - x) < width_inc))
|
||||
x = edge;
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_vertical_edge (window, TRUE);
|
||||
|
||||
if (smart_snap || ((edge > x) && ABS (edge - x) < width_inc))
|
||||
x = edge;
|
||||
}
|
||||
|
||||
width += (orig_x - x);
|
||||
break;
|
||||
@@ -2087,12 +2190,16 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
case SouthWestGravity:
|
||||
case NorthWestGravity:
|
||||
/* Move right edge left */
|
||||
edge = meta_window_find_next_vertical_edge (window, FALSE);
|
||||
width -= width_inc;
|
||||
|
||||
if (smart_snap || ((edge > (x+width)) &&
|
||||
ABS (edge - (x+width)) < width_inc))
|
||||
width = edge - x;
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_vertical_edge (window, FALSE);
|
||||
|
||||
if (smart_snap || ((edge > (x+width)) &&
|
||||
ABS (edge - (x+width)) < width_inc))
|
||||
width = edge - x;
|
||||
}
|
||||
|
||||
handled = TRUE;
|
||||
break;
|
||||
@@ -2115,11 +2222,15 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
case SouthEastGravity:
|
||||
case NorthEastGravity:
|
||||
/* Move left edge right */
|
||||
edge = meta_window_find_next_vertical_edge (window, FALSE);
|
||||
x += width_inc;
|
||||
|
||||
if (smart_snap || ((edge < x) && ABS (edge - x) < width_inc))
|
||||
x = edge;
|
||||
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_vertical_edge (window, FALSE);
|
||||
|
||||
if (smart_snap || ((edge < x) && ABS (edge - x) < width_inc))
|
||||
x = edge;
|
||||
}
|
||||
|
||||
width -= (x - orig_x);
|
||||
break;
|
||||
@@ -2128,12 +2239,16 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
case SouthWestGravity:
|
||||
case NorthWestGravity:
|
||||
/* Move right edge right */
|
||||
edge = meta_window_find_next_vertical_edge (window, TRUE);
|
||||
width += width_inc;
|
||||
|
||||
if (smart_snap || ((edge > (x+width)) &&
|
||||
ABS (edge - (x+width)) < width_inc))
|
||||
width = edge - x;
|
||||
|
||||
if (!display->grab_wireframe_active)
|
||||
{
|
||||
edge = meta_window_find_next_vertical_edge (window, TRUE);
|
||||
|
||||
if (smart_snap || ((edge > (x+width)) &&
|
||||
ABS (edge - (x+width)) < width_inc))
|
||||
width = edge - x;
|
||||
}
|
||||
|
||||
handled = TRUE;
|
||||
break;
|
||||
@@ -2160,8 +2275,36 @@ process_keyboard_resize_grab (MetaDisplay *display,
|
||||
|
||||
if (handled)
|
||||
{
|
||||
meta_window_move_resize (window, TRUE, x, y, width, height);
|
||||
meta_window_update_resize_grab_op (window, FALSE);
|
||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||
"Computed new window location %d,%d %dx%d due to keypress\n",
|
||||
x, y, width, height);
|
||||
|
||||
if (display->grab_wireframe_active)
|
||||
{
|
||||
MetaRectangle new_xor;
|
||||
|
||||
window->display->grab_wireframe_rect.x = x;
|
||||
window->display->grab_wireframe_rect.y = y;
|
||||
window->display->grab_wireframe_rect.width = width;
|
||||
window->display->grab_wireframe_rect.height = height;
|
||||
|
||||
meta_window_get_xor_rect (window,
|
||||
&window->display->grab_wireframe_rect,
|
||||
&new_xor);
|
||||
|
||||
meta_effects_update_wireframe (window->screen,
|
||||
&window->display->grab_wireframe_last_xor_rect,
|
||||
&new_xor);
|
||||
window->display->grab_wireframe_last_xor_rect = new_xor;
|
||||
|
||||
/* do this after drawing the wires, so we don't draw over it */
|
||||
meta_window_refresh_resize_popup (window);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_window_move_resize (window, TRUE, x, y, width, height);
|
||||
}
|
||||
meta_window_update_keyboard_resize (window, FALSE);
|
||||
}
|
||||
|
||||
return handled;
|
||||
@@ -2306,44 +2449,6 @@ process_tab_grab (MetaDisplay *display,
|
||||
return key_used;
|
||||
}
|
||||
|
||||
static void
|
||||
switch_to_workspace (MetaDisplay *display,
|
||||
MetaWorkspace *workspace)
|
||||
{
|
||||
MetaWindow *move_window;
|
||||
|
||||
move_window = NULL;
|
||||
if (display->grab_op == META_GRAB_OP_MOVING)
|
||||
move_window = display->grab_window;
|
||||
|
||||
if (move_window != NULL)
|
||||
{
|
||||
if (move_window->on_all_workspaces)
|
||||
move_window = NULL; /* don't move it after all */
|
||||
|
||||
/* We put the window on the new workspace, flip spaces,
|
||||
* then remove from old workspace, so the window
|
||||
* never gets unmapped and we maintain the button grab
|
||||
* on it.
|
||||
*/
|
||||
if (move_window)
|
||||
{
|
||||
if (!meta_workspace_contains_window (workspace,
|
||||
move_window))
|
||||
meta_workspace_add_window (workspace, move_window);
|
||||
}
|
||||
}
|
||||
|
||||
meta_workspace_activate (workspace);
|
||||
|
||||
if (move_window)
|
||||
{
|
||||
/* Removes window from other spaces */
|
||||
meta_window_change_workspace (move_window, workspace);
|
||||
meta_window_raise (move_window);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
handle_activate_workspace (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
@@ -2369,7 +2474,7 @@ handle_activate_workspace (MetaDisplay *display,
|
||||
|
||||
if (workspace)
|
||||
{
|
||||
switch_to_workspace (display, workspace);
|
||||
meta_workspace_activate (workspace);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2380,23 +2485,34 @@ handle_activate_workspace (MetaDisplay *display,
|
||||
static void
|
||||
error_on_command (int command_index,
|
||||
const char *command,
|
||||
const char *message)
|
||||
const char *message,
|
||||
int screen_number,
|
||||
Time timestamp)
|
||||
{
|
||||
GError *err;
|
||||
char *argv[6];
|
||||
char *argv[10];
|
||||
char *key;
|
||||
char numbuf[32];
|
||||
char timestampbuf[32];
|
||||
|
||||
meta_warning ("Error on command %d \"%s\": %s\n",
|
||||
command_index, command, message);
|
||||
|
||||
key = meta_prefs_get_gconf_key_for_command (command_index);
|
||||
|
||||
sprintf (numbuf, "%d", screen_number);
|
||||
sprintf (timestampbuf, "%lu", timestamp);
|
||||
|
||||
argv[0] = METACITY_LIBEXECDIR"/metacity-dialog";
|
||||
argv[1] = "--command-failed-error";
|
||||
argv[2] = key;
|
||||
argv[3] = (char*) (command ? command : "");
|
||||
argv[4] = (char*) message;
|
||||
argv[5] = NULL;
|
||||
argv[1] = "--screen";
|
||||
argv[2] = numbuf;
|
||||
argv[3] = "--timestamp";
|
||||
argv[4] = timestampbuf;
|
||||
argv[5] = "--command-failed-error";
|
||||
argv[6] = key;
|
||||
argv[7] = (char*) (command ? command : "");
|
||||
argv[8] = (char*) message;
|
||||
argv[9] = NULL;
|
||||
|
||||
err = NULL;
|
||||
if (!g_spawn_async_with_pipes ("/",
|
||||
@@ -2418,6 +2534,48 @@ error_on_command (int command_index,
|
||||
g_free (key);
|
||||
}
|
||||
|
||||
static void
|
||||
set_display_setup_func (void *data)
|
||||
{
|
||||
const char *screen_name = data;
|
||||
char *full;
|
||||
|
||||
full = g_strdup_printf ("DISPLAY=%s", screen_name);
|
||||
|
||||
putenv (full);
|
||||
|
||||
/* do not free full, because putenv is lame */
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_spawn_command_line_async_on_screen (const gchar *command_line,
|
||||
MetaScreen *screen,
|
||||
GError **error)
|
||||
{
|
||||
gboolean retval;
|
||||
gchar **argv = 0;
|
||||
|
||||
g_return_val_if_fail (command_line != NULL, FALSE);
|
||||
|
||||
if (!g_shell_parse_argv (command_line,
|
||||
NULL, &argv,
|
||||
error))
|
||||
return FALSE;
|
||||
|
||||
retval = g_spawn_async (NULL,
|
||||
argv,
|
||||
NULL,
|
||||
G_SPAWN_SEARCH_PATH,
|
||||
set_display_setup_func,
|
||||
screen->screen_name,
|
||||
NULL,
|
||||
error);
|
||||
g_strfreev (argv);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
handle_run_command (MetaDisplay *display,
|
||||
MetaScreen *screen,
|
||||
@@ -2443,16 +2601,16 @@ handle_run_command (MetaDisplay *display,
|
||||
|
||||
s = g_strdup_printf (_("No command %d has been defined.\n"),
|
||||
which + 1);
|
||||
error_on_command (which, NULL, s);
|
||||
error_on_command (which, NULL, s, screen->number, event->xkey.time);
|
||||
g_free (s);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
err = NULL;
|
||||
if (!g_spawn_command_line_async (command, &err))
|
||||
if (!meta_spawn_command_line_async_on_screen (command, screen, &err))
|
||||
{
|
||||
error_on_command (which, command, err->message);
|
||||
error_on_command (which, command, err->message, screen->number, event->xkey.time);
|
||||
|
||||
g_error_free (err);
|
||||
}
|
||||
@@ -2521,7 +2679,7 @@ process_workspace_switch_grab (MetaDisplay *display,
|
||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||
"Activating target workspace\n");
|
||||
|
||||
switch_to_workspace (display, target_workspace);
|
||||
meta_workspace_activate (target_workspace);
|
||||
|
||||
return TRUE; /* we already ended the grab */
|
||||
}
|
||||
@@ -2587,7 +2745,7 @@ process_workspace_switch_grab (MetaDisplay *display,
|
||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||
"Activating target workspace\n");
|
||||
|
||||
switch_to_workspace (display, target_workspace);
|
||||
meta_workspace_activate (target_workspace);
|
||||
|
||||
return TRUE; /* we already ended the grab */
|
||||
}
|
||||
@@ -2609,7 +2767,7 @@ handle_toggle_desktop (MetaDisplay *display,
|
||||
if (screen->showing_desktop)
|
||||
{
|
||||
meta_screen_unshow_desktop (screen);
|
||||
meta_workspace_focus_top_window (screen->active_workspace, NULL);
|
||||
meta_workspace_focus_default_window (screen->active_workspace, NULL);
|
||||
}
|
||||
else
|
||||
meta_screen_show_desktop (screen);
|
||||
@@ -2774,6 +2932,7 @@ do_choose_window (MetaDisplay *display,
|
||||
tab_op_from_tab_type (type) :
|
||||
cycle_op_from_tab_type (type),
|
||||
FALSE,
|
||||
event->xkey.serial,
|
||||
0,
|
||||
binding->mask,
|
||||
event->xkey.time,
|
||||
@@ -3181,6 +3340,7 @@ handle_workspace_switch (MetaDisplay *display,
|
||||
NULL,
|
||||
META_GRAB_OP_KEYBOARD_WORKSPACE_SWITCHING,
|
||||
FALSE,
|
||||
event->xkey.serial,
|
||||
0,
|
||||
grab_mask,
|
||||
event->xkey.time,
|
||||
@@ -3207,7 +3367,7 @@ handle_workspace_switch (MetaDisplay *display,
|
||||
meta_display_end_grab_op (display, event->xkey.time);
|
||||
}
|
||||
|
||||
switch_to_workspace (display, next);
|
||||
meta_workspace_activate (next);
|
||||
|
||||
if (grabbed_before_release)
|
||||
{
|
||||
|
141
src/main.c
141
src/main.c
@@ -29,6 +29,11 @@
|
||||
#include "prefs.h"
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <gmodule.h>
|
||||
#ifdef HAVE_GCONF
|
||||
#include <gconf/gconf-client.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
@@ -76,6 +81,90 @@ version (void)
|
||||
exit (0);
|
||||
}
|
||||
|
||||
#define GNOME_ACCESSIBILITY_KEY "/desktop/gnome/interface/accessibility"
|
||||
|
||||
static char *
|
||||
find_accessibility_module (const char *libname)
|
||||
{
|
||||
char *path;
|
||||
char *fname;
|
||||
char *retval;
|
||||
|
||||
retval = NULL;
|
||||
|
||||
fname = g_strconcat (libname, "." G_MODULE_SUFFIX, NULL);
|
||||
path = g_strconcat (METACITY_LIBDIR"/gtk-2.0/modules", G_DIR_SEPARATOR_S, fname, NULL);
|
||||
|
||||
if (g_file_test (path, G_FILE_TEST_EXISTS))
|
||||
retval = path;
|
||||
|
||||
if (path)
|
||||
retval = path;
|
||||
else
|
||||
g_free (path);
|
||||
|
||||
g_free (fname);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
accessibility_invoke_module (const char *libname,
|
||||
gboolean init)
|
||||
{
|
||||
GModule *handle;
|
||||
void (*invoke_fn) (void);
|
||||
const char *method;
|
||||
gboolean retval = FALSE;
|
||||
char *module_name;
|
||||
|
||||
if (init)
|
||||
method = "gnome_accessibility_module_init";
|
||||
else
|
||||
method = "gnome_accessibility_module_shutdown";
|
||||
|
||||
module_name = find_accessibility_module (libname);
|
||||
|
||||
if (!module_name)
|
||||
{
|
||||
g_warning ("Accessibility: failed to find module '%s' which "
|
||||
"is needed to make this application accessible",
|
||||
libname);
|
||||
|
||||
}
|
||||
else if (!(handle = g_module_open (module_name, G_MODULE_BIND_LAZY)))
|
||||
{
|
||||
g_warning ("Accessibility: failed to load module '%s': '%s'",
|
||||
libname, g_module_error ());
|
||||
|
||||
}
|
||||
else if (!g_module_symbol (handle, method, (gpointer *)&invoke_fn))
|
||||
{
|
||||
g_warning ("Accessibility: error library '%s' does not include "
|
||||
"method '%s' required for accessibility support",
|
||||
libname, method);
|
||||
g_module_close (handle);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
retval = TRUE;
|
||||
invoke_fn ();
|
||||
}
|
||||
|
||||
g_free (module_name);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
accessibility_invoke (gboolean init)
|
||||
{
|
||||
accessibility_invoke_module ("libgail", init);
|
||||
accessibility_invoke_module ("libatk-bridge", init);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
@@ -289,7 +378,11 @@ main (int argc, char **argv)
|
||||
#else
|
||||
meta_verbose ("Compiled without startup notification\n");
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
meta_verbose ("Compiled with composite extensions\n");
|
||||
#else
|
||||
meta_verbose ("Compiled without composite extensions\n");
|
||||
#endif
|
||||
|
||||
/* Load prefs */
|
||||
meta_prefs_init ();
|
||||
@@ -332,18 +425,36 @@ main (int argc, char **argv)
|
||||
|
||||
meta_ui_set_current_theme (meta_prefs_get_theme (), FALSE);
|
||||
|
||||
/* Try some panic stuff, this is lame but we really
|
||||
* don't want users to lose their WM :-/
|
||||
/* Try to find some theme that'll work if the theme preference
|
||||
* doesn't exist. First try Simple (the default theme) then just
|
||||
* try anything in the themes directory.
|
||||
*/
|
||||
if (!meta_ui_have_a_theme ())
|
||||
meta_ui_set_current_theme ("Simple", FALSE);
|
||||
|
||||
if (!meta_ui_have_a_theme ())
|
||||
meta_ui_set_current_theme ("Atlanta", FALSE);
|
||||
|
||||
if (!meta_ui_have_a_theme ())
|
||||
meta_ui_set_current_theme ("Crux", FALSE);
|
||||
|
||||
{
|
||||
const char *dir_entry = NULL;
|
||||
GError *err = NULL;
|
||||
GDir *themes_dir = NULL;
|
||||
|
||||
if (!(themes_dir = g_dir_open (METACITY_DATADIR"/themes", 0, &err)))
|
||||
{
|
||||
meta_fatal (_("Failed to scan themes directory: %s\n"), err->message);
|
||||
g_error_free (err);
|
||||
}
|
||||
else
|
||||
{
|
||||
while (((dir_entry = g_dir_read_name (themes_dir)) != NULL) &&
|
||||
(!meta_ui_have_a_theme ()))
|
||||
{
|
||||
meta_ui_set_current_theme (dir_entry, FALSE);
|
||||
}
|
||||
|
||||
g_dir_close (themes_dir);
|
||||
}
|
||||
}
|
||||
|
||||
if (!meta_ui_have_a_theme ())
|
||||
meta_fatal (_("Could not find a theme! Be sure %s exists and contains the usual themes."),
|
||||
METACITY_DATADIR"/themes");
|
||||
@@ -358,6 +469,20 @@ main (int argc, char **argv)
|
||||
if (!meta_display_open (NULL))
|
||||
meta_exit (META_EXIT_ERROR);
|
||||
|
||||
{
|
||||
gboolean do_init_a11y;
|
||||
do_init_a11y = FALSE;
|
||||
|
||||
#ifdef HAVE_GCONF
|
||||
do_init_a11y = gconf_client_get_bool (
|
||||
gconf_client_get_default (),
|
||||
GNOME_ACCESSIBILITY_KEY, NULL);
|
||||
#endif
|
||||
|
||||
if (do_init_a11y)
|
||||
accessibility_invoke (TRUE);
|
||||
}
|
||||
|
||||
g_main_run (meta_main_loop);
|
||||
|
||||
{
|
||||
|
195
src/menu.c
195
src/menu.c
@@ -2,6 +2,7 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 Havoc Pennington
|
||||
* Copyright (C) 2004 Rob Adams
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
@@ -36,6 +37,7 @@ struct _MenuItem
|
||||
{
|
||||
MetaMenuOp op;
|
||||
const char *stock_id;
|
||||
const gboolean checked;
|
||||
const char *label;
|
||||
};
|
||||
|
||||
@@ -49,18 +51,24 @@ struct _MenuData
|
||||
static void activate_cb (GtkWidget *menuitem, gpointer data);
|
||||
|
||||
static MenuItem menuitems[] = {
|
||||
{ META_MENU_OP_MINIMIZE, METACITY_STOCK_MINIMIZE, N_("Mi_nimize") },
|
||||
{ META_MENU_OP_MAXIMIZE, METACITY_STOCK_MAXIMIZE, N_("Ma_ximize") },
|
||||
{ META_MENU_OP_UNMAXIMIZE, NULL, N_("Unma_ximize") },
|
||||
{ META_MENU_OP_SHADE, NULL, N_("Roll _Up") },
|
||||
{ META_MENU_OP_UNSHADE, NULL, N_("_Unroll") },
|
||||
{ META_MENU_OP_MOVE, NULL, N_("_Move") },
|
||||
{ META_MENU_OP_RESIZE, NULL, N_("_Resize") },
|
||||
{ 0, NULL, NULL }, /* separator */
|
||||
{ META_MENU_OP_DELETE, METACITY_STOCK_DELETE, N_("_Close") },
|
||||
{ 0, NULL, NULL }, /* separator */
|
||||
{ META_MENU_OP_STICK, NULL, N_("Put on _All Workspaces") },
|
||||
{ META_MENU_OP_UNSTICK, NULL, N_("Only on _This Workspace") }
|
||||
{ META_MENU_OP_MINIMIZE, METACITY_STOCK_MINIMIZE, FALSE, N_("Mi_nimize") },
|
||||
{ META_MENU_OP_MAXIMIZE, METACITY_STOCK_MAXIMIZE, FALSE, N_("Ma_ximize") },
|
||||
{ META_MENU_OP_UNMAXIMIZE, NULL, FALSE, N_("Unma_ximize") },
|
||||
{ META_MENU_OP_SHADE, NULL, FALSE, N_("Roll _Up") },
|
||||
{ META_MENU_OP_UNSHADE, NULL, FALSE, N_("_Unroll") },
|
||||
{ META_MENU_OP_ABOVE, NULL, FALSE, N_("On _Top") },
|
||||
{ META_MENU_OP_UNABOVE, NULL, TRUE, N_("On _Top") },
|
||||
{ META_MENU_OP_MOVE, NULL, FALSE, N_("_Move") },
|
||||
{ META_MENU_OP_RESIZE, NULL, FALSE, N_("_Resize") },
|
||||
{ 0, NULL, FALSE, NULL }, /* separator */
|
||||
{ META_MENU_OP_DELETE, METACITY_STOCK_DELETE, FALSE, N_("_Close") },
|
||||
{ META_MENU_OP_WORKSPACES, NULL, FALSE, NULL }, /* separator */
|
||||
{ META_MENU_OP_STICK, NULL, FALSE, N_("Put on _All Workspaces") },
|
||||
{ META_MENU_OP_UNSTICK, NULL, FALSE, N_("Only on _This Workspace") },
|
||||
{ META_MENU_OP_MOVE_LEFT, NULL, FALSE, N_("Move to Workspace _Left") },
|
||||
{ META_MENU_OP_MOVE_RIGHT, NULL, FALSE, N_("Move to Workspace R_ight") },
|
||||
{ META_MENU_OP_MOVE_UP, NULL, FALSE, N_("Move to Workspace _Up") },
|
||||
{ META_MENU_OP_MOVE_DOWN, NULL, FALSE, N_("Move to Workspace _Down") }
|
||||
};
|
||||
|
||||
static void
|
||||
@@ -96,6 +104,7 @@ menu_closed (GtkMenu *widget,
|
||||
meta_frames_notify_menu_hide (menu->frames);
|
||||
(* menu->func) (menu, gdk_display,
|
||||
menu->client_xwindow,
|
||||
gtk_get_current_event_time (),
|
||||
0, 0,
|
||||
menu->data);
|
||||
|
||||
@@ -114,6 +123,7 @@ activate_cb (GtkWidget *menuitem, gpointer data)
|
||||
meta_frames_notify_menu_hide (md->menu->frames);
|
||||
(* md->menu->func) (md->menu, gdk_display,
|
||||
md->menu->client_xwindow,
|
||||
gtk_get_current_event_time (),
|
||||
md->op,
|
||||
GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menuitem),
|
||||
"workspace")),
|
||||
@@ -157,26 +167,30 @@ get_workspace_name_with_accel (Display *display,
|
||||
* Above name is a pointer into the Workspace struct. Here we make
|
||||
* a copy copy so we can have our wicked way with it.
|
||||
*/
|
||||
new_name = g_strdup_printf (_("Workspace %s%d"),
|
||||
number < 10 ? "_" : "",
|
||||
number);
|
||||
if (number == 10)
|
||||
new_name = g_strdup_printf (_("Workspace 1_0"));
|
||||
else
|
||||
new_name = g_strdup_printf (_("Workspace %s%d"),
|
||||
number < 10 ? "_" : "",
|
||||
number);
|
||||
return new_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Otherwise this is just a normal name to which we cannot really
|
||||
* add accelerators. Escape any _ characters so that the user's
|
||||
* workspace names do not get mangled.
|
||||
* Otherwise this is just a normal name. Escape any _ characters so that
|
||||
* the user's workspace names do not get mangled. If the number is less
|
||||
* than 10 we provide an accelerator.
|
||||
*/
|
||||
char *new_name;
|
||||
const char *source;
|
||||
char *dest;
|
||||
|
||||
/*
|
||||
* Assume the worst case, that every character is a _
|
||||
* Assume the worst case, that every character is a _. We also
|
||||
* provide memory for " (_#)"
|
||||
*/
|
||||
new_name = g_malloc0 (strlen (name) * 2 + 1);
|
||||
new_name = g_malloc0 (strlen (name) * 2 + 6 + 1);
|
||||
|
||||
/*
|
||||
* Now iterate down the strings, adding '_' to escape as we go
|
||||
@@ -190,6 +204,16 @@ get_workspace_name_with_accel (Display *display,
|
||||
*dest++ = *source++;
|
||||
}
|
||||
|
||||
/* People don't start at workstation 0, but workstation 1 */
|
||||
if (index < 9)
|
||||
{
|
||||
g_snprintf (dest, 6, " (_%d)", index + 1);
|
||||
}
|
||||
else if (index == 9)
|
||||
{
|
||||
g_snprintf (dest, 6, " (_0)");
|
||||
}
|
||||
|
||||
return new_name;
|
||||
}
|
||||
}
|
||||
@@ -197,13 +221,20 @@ get_workspace_name_with_accel (Display *display,
|
||||
static GtkWidget*
|
||||
menu_item_new (const char *label,
|
||||
gboolean with_image,
|
||||
gboolean with_check,
|
||||
unsigned int key,
|
||||
MetaVirtualModifier mods)
|
||||
{
|
||||
GtkWidget *menu_item;
|
||||
GtkWidget *accel_label;
|
||||
|
||||
if (with_image)
|
||||
if (with_check)
|
||||
{
|
||||
menu_item = gtk_check_menu_item_new ();
|
||||
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
|
||||
TRUE);
|
||||
}
|
||||
else if (with_image)
|
||||
menu_item = gtk_image_menu_item_new ();
|
||||
else
|
||||
menu_item = gtk_menu_item_new ();
|
||||
@@ -232,13 +263,16 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
int i;
|
||||
MetaWindowMenu *menu;
|
||||
|
||||
if (n_workspaces < 2)
|
||||
ops &= ~(META_MENU_OP_STICK | META_MENU_OP_UNSTICK | META_MENU_OP_WORKSPACES);
|
||||
|
||||
menu = g_new (MetaWindowMenu, 1);
|
||||
menu->frames = frames;
|
||||
menu->client_xwindow = client_xwindow;
|
||||
menu->func = func;
|
||||
menu->data = data;
|
||||
menu->ops = ops;
|
||||
menu->insensitive = insensitive;
|
||||
menu->insensitive = insensitive;
|
||||
|
||||
menu->menu = gtk_menu_new ();
|
||||
|
||||
@@ -255,7 +289,7 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
unsigned int key;
|
||||
MetaVirtualModifier mods;
|
||||
|
||||
if (menuitems[i].op == 0)
|
||||
if (menuitems[i].label == NULL)
|
||||
{
|
||||
mi = gtk_separator_menu_item_new ();
|
||||
}
|
||||
@@ -274,17 +308,18 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
|
||||
meta_core_get_menu_accelerator (menuitems[i].op, -1,
|
||||
&key, &mods);
|
||||
|
||||
|
||||
if (image)
|
||||
{
|
||||
mi = menu_item_new (_(menuitems[i].label), TRUE, key, mods);
|
||||
mi = menu_item_new (_(menuitems[i].label), TRUE, FALSE, key, mods);
|
||||
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi),
|
||||
image);
|
||||
gtk_widget_show (image);
|
||||
}
|
||||
else
|
||||
{
|
||||
mi = menu_item_new (_(menuitems[i].label), FALSE, key, mods);
|
||||
mi = menu_item_new (_(menuitems[i].label), FALSE,
|
||||
menuitems[i].checked, key, mods);
|
||||
}
|
||||
|
||||
if (insensitive & menuitems[i].op)
|
||||
@@ -313,72 +348,74 @@ meta_window_menu_new (MetaFrames *frames,
|
||||
|
||||
if (ops & META_MENU_OP_WORKSPACES)
|
||||
{
|
||||
|
||||
GtkWidget *mi;
|
||||
Display *display;
|
||||
Window xroot;
|
||||
GdkScreen *screen;
|
||||
GtkWidget *submenu;
|
||||
GtkWidget *submenuitem;
|
||||
|
||||
meta_verbose ("Creating %d-workspace menu current space %d\n",
|
||||
n_workspaces, active_workspace);
|
||||
|
||||
if (n_workspaces > 1)
|
||||
|
||||
display = gdk_x11_drawable_get_xdisplay (GTK_WIDGET (frames)->window);
|
||||
|
||||
screen = gdk_drawable_get_screen (GTK_WIDGET (frames)->window);
|
||||
xroot = GDK_DRAWABLE_XID (gdk_screen_get_root_window (screen));
|
||||
|
||||
submenu = gtk_menu_new ();
|
||||
submenuitem = menu_item_new (_("Move to Another _Workspace"), FALSE, FALSE, 0, 0);
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (submenuitem), submenu);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu->menu),
|
||||
submenuitem);
|
||||
gtk_widget_show (submenuitem);
|
||||
|
||||
i = 0;
|
||||
while (i < n_workspaces)
|
||||
{
|
||||
GtkWidget *mi;
|
||||
Display *display;
|
||||
Window xroot;
|
||||
GdkScreen *screen;
|
||||
|
||||
display = gdk_x11_drawable_get_xdisplay (GTK_WIDGET (frames)->window);
|
||||
|
||||
screen = gdk_drawable_get_screen (GTK_WIDGET (frames)->window);
|
||||
xroot = GDK_DRAWABLE_XID (gdk_screen_get_root_window (screen));
|
||||
|
||||
i = 0;
|
||||
while (i < n_workspaces)
|
||||
{
|
||||
char *label, *name;
|
||||
MenuData *md;
|
||||
unsigned int key;
|
||||
MetaVirtualModifier mods;
|
||||
char *label;
|
||||
MenuData *md;
|
||||
unsigned int key;
|
||||
MetaVirtualModifier mods;
|
||||
|
||||
meta_core_get_menu_accelerator (META_MENU_OP_WORKSPACES,
|
||||
i + 1,
|
||||
&key, &mods);
|
||||
meta_core_get_menu_accelerator (META_MENU_OP_WORKSPACES,
|
||||
i + 1,
|
||||
&key, &mods);
|
||||
|
||||
name = get_workspace_name_with_accel (display, xroot, i);
|
||||
if (ops & META_MENU_OP_UNSTICK)
|
||||
label = g_strdup_printf (_("Only on %s"), name);
|
||||
else
|
||||
label = g_strdup_printf(_("Move to %s"), name);
|
||||
mi = menu_item_new (label, FALSE, key, mods);
|
||||
label = get_workspace_name_with_accel (display, xroot, i);
|
||||
mi = menu_item_new (label, FALSE, FALSE, key, mods);
|
||||
|
||||
g_free (name);
|
||||
g_free (label);
|
||||
g_free (label);
|
||||
|
||||
if (!(ops & META_MENU_OP_UNSTICK) &&
|
||||
(active_workspace == i ||
|
||||
insensitive & META_MENU_OP_WORKSPACES))
|
||||
gtk_widget_set_sensitive (mi, FALSE);
|
||||
else if (insensitive & META_MENU_OP_WORKSPACES)
|
||||
gtk_widget_set_sensitive (mi, FALSE);
|
||||
md = g_new (MenuData, 1);
|
||||
if (!(ops & META_MENU_OP_UNSTICK) &&
|
||||
(active_workspace == i ||
|
||||
insensitive & META_MENU_OP_WORKSPACES))
|
||||
gtk_widget_set_sensitive (mi, FALSE);
|
||||
else if (insensitive & META_MENU_OP_WORKSPACES)
|
||||
gtk_widget_set_sensitive (mi, FALSE);
|
||||
md = g_new (MenuData, 1);
|
||||
|
||||
md->menu = menu;
|
||||
md->op = META_MENU_OP_WORKSPACES;
|
||||
md->menu = menu;
|
||||
md->op = META_MENU_OP_WORKSPACES;
|
||||
|
||||
g_object_set_data (G_OBJECT (mi),
|
||||
"workspace",
|
||||
GINT_TO_POINTER (i));
|
||||
g_object_set_data (G_OBJECT (mi),
|
||||
"workspace",
|
||||
GINT_TO_POINTER (i));
|
||||
|
||||
gtk_signal_connect_full (GTK_OBJECT (mi),
|
||||
"activate",
|
||||
GTK_SIGNAL_FUNC (activate_cb),
|
||||
NULL,
|
||||
md,
|
||||
g_free, FALSE, FALSE);
|
||||
gtk_signal_connect_full (GTK_OBJECT (mi),
|
||||
"activate",
|
||||
GTK_SIGNAL_FUNC (activate_cb),
|
||||
NULL,
|
||||
md,
|
||||
g_free, FALSE, FALSE);
|
||||
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu->menu),
|
||||
mi);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (submenu),
|
||||
mi);
|
||||
|
||||
gtk_widget_show (mi);
|
||||
gtk_widget_show (mi);
|
||||
|
||||
++i;
|
||||
}
|
||||
++i;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@@ -30,6 +30,30 @@
|
||||
#define N_(x) x
|
||||
|
||||
#include <gdk/gdkx.h>
|
||||
#include <X11/Xatom.h>
|
||||
|
||||
/* FIXME: When we switch to gtk+-2.6, use of this function should be
|
||||
* replaced by using the real gdk_x11_window_set_user_time.
|
||||
*/
|
||||
static void
|
||||
copy_of_gdk_x11_window_set_user_time (GdkWindow *window,
|
||||
Time timestamp)
|
||||
{
|
||||
GdkDisplay *display;
|
||||
|
||||
g_return_if_fail (window != NULL);
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
|
||||
if (GDK_WINDOW_DESTROYED (window))
|
||||
return;
|
||||
|
||||
display = gdk_drawable_get_display (window);
|
||||
|
||||
XChangeProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
|
||||
gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_USER_TIME"),
|
||||
XA_CARDINAL, 32, PropModeReplace,
|
||||
(guchar *)×tamp, 1);
|
||||
}
|
||||
|
||||
static Window
|
||||
window_from_string (const char *str)
|
||||
@@ -76,7 +100,8 @@ on_realize (GtkWidget *dialog,
|
||||
|
||||
static int
|
||||
kill_window_question (const char *window_name,
|
||||
const char *parent_str)
|
||||
const char *parent_str,
|
||||
Time timestamp)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
char *str, *tmp;
|
||||
@@ -109,6 +134,9 @@ kill_window_question (const char *window_name,
|
||||
g_signal_connect (G_OBJECT (dialog), "realize",
|
||||
G_CALLBACK (on_realize), (char*) parent_str);
|
||||
|
||||
gtk_widget_realize (dialog);
|
||||
copy_of_gdk_x11_window_set_user_time (dialog->window, timestamp);
|
||||
|
||||
/* return our PID, then window ID that should be killed */
|
||||
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
|
||||
g_print ("%d\n%s\n", (int) getpid (), parent_str);
|
||||
@@ -220,7 +248,8 @@ create_lame_apps_list (char **lame_apps)
|
||||
}
|
||||
|
||||
static int
|
||||
warn_about_no_sm_support (char **lame_apps)
|
||||
warn_about_no_sm_support (char **lame_apps,
|
||||
Time timestamp)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
GtkWidget *list;
|
||||
@@ -255,6 +284,8 @@ warn_about_no_sm_support (char **lame_apps)
|
||||
gtk_window_set_geometry_hints (GTK_WINDOW (dialog),
|
||||
sw, NULL, 0);
|
||||
|
||||
gtk_window_set_resizable (GTK_WINDOW(dialog), TRUE);
|
||||
|
||||
/* applies to geometry widget; try to avoid scrollbars,
|
||||
* but don't make the window huge
|
||||
*/
|
||||
@@ -265,6 +296,9 @@ warn_about_no_sm_support (char **lame_apps)
|
||||
sw,
|
||||
TRUE, TRUE, 0);
|
||||
|
||||
gtk_widget_realize (dialog);
|
||||
copy_of_gdk_x11_window_set_user_time (dialog->window, timestamp);
|
||||
|
||||
gtk_widget_show_all (dialog);
|
||||
|
||||
gtk_main ();
|
||||
@@ -275,7 +309,8 @@ warn_about_no_sm_support (char **lame_apps)
|
||||
static int
|
||||
error_about_command (const char *gconf_key,
|
||||
const char *command,
|
||||
const char *error)
|
||||
const char *error,
|
||||
Time timestamp)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
@@ -294,6 +329,9 @@ error_about_command (const char *gconf_key,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s", error);
|
||||
|
||||
gtk_widget_realize (dialog);
|
||||
copy_of_gdk_x11_window_set_user_time (dialog->window, timestamp);
|
||||
|
||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
|
||||
gtk_widget_destroy (dialog);
|
||||
@@ -304,52 +342,61 @@ error_about_command (const char *gconf_key,
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
Time timestamp;
|
||||
|
||||
bindtextdomain (GETTEXT_PACKAGE, METACITY_LOCALEDIR);
|
||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||
textdomain (GETTEXT_PACKAGE);
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
if (argc < 2)
|
||||
if (argc < 4)
|
||||
{
|
||||
g_printerr ("bad args to metacity-dialog\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (strcmp (argv[1], "--kill-window-question") == 0)
|
||||
|
||||
if (strcmp (argv[1], "--timestamp") != 0)
|
||||
{
|
||||
if (argc < 4)
|
||||
g_printerr ("bad args to metacity-dialog\n");
|
||||
return 1;
|
||||
}
|
||||
timestamp = strtoul (argv[2], NULL, 10);
|
||||
|
||||
if (strcmp (argv[3], "--kill-window-question") == 0)
|
||||
{
|
||||
if (argc < 6)
|
||||
{
|
||||
g_printerr ("bad args to metacity-dialog\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return kill_window_question (argv[2], argv[3]);
|
||||
return kill_window_question (argv[4], argv[5], timestamp);
|
||||
}
|
||||
else if (strcmp (argv[1], "--warn-about-no-sm-support") == 0)
|
||||
else if (strcmp (argv[3], "--warn-about-no-sm-support") == 0)
|
||||
{
|
||||
/* argc must be even because we want title-class pairs */
|
||||
if (argc < 3 || (argc % 2) != 0)
|
||||
if (argc < 5 || (argc % 2) != 0)
|
||||
{
|
||||
g_printerr ("bad args to metacity-dialog\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return warn_about_no_sm_support (&argv[2]);
|
||||
return warn_about_no_sm_support (&argv[4], timestamp);
|
||||
}
|
||||
else if (strcmp (argv[1], "--command-failed-error") == 0)
|
||||
else if (strcmp (argv[3], "--command-failed-error") == 0)
|
||||
{
|
||||
|
||||
/* the args are the gconf key of the failed command, the text of
|
||||
* the command, and the error message
|
||||
*/
|
||||
if (argc != 5)
|
||||
if (argc != 7)
|
||||
{
|
||||
g_printerr ("bad args to metacity-dialog\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
return error_about_command (argv[2], argv[3], argv[4]);
|
||||
return error_about_command (argv[4], argv[5], argv[6], timestamp);
|
||||
}
|
||||
|
||||
g_printerr ("bad args to metacity-dialog\n");
|
||||
|
@@ -66,7 +66,7 @@
|
||||
<applyto>/apps/metacity/general/action_double_click_titlebar</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>string</type>
|
||||
<default>toggle_shade</default>
|
||||
<default>toggle_maximize</default>
|
||||
<locale name="C">
|
||||
<short>Action on title bar double-click</short>
|
||||
<long>
|
||||
@@ -129,7 +129,7 @@
|
||||
<applyto>/apps/metacity/general/titlebar_uses_system_font</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>bool</type>
|
||||
<default>true</default>
|
||||
<default>false</default>
|
||||
<locale name="C">
|
||||
<short>Use standard system font in window titles</short>
|
||||
<long>
|
||||
@@ -257,6 +257,25 @@
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/apps/metacity/general/reduced_resources</key>
|
||||
<applyto>/apps/metacity/general/reduced_resources</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>bool</type>
|
||||
<default>false</default>
|
||||
<locale name="C">
|
||||
<short>If true, trade off usability for less resource usage</short>
|
||||
<long>
|
||||
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.
|
||||
</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<!-- Window Keybindings -->
|
||||
|
||||
<schema>
|
||||
@@ -269,7 +288,7 @@
|
||||
<short>Activate window menu</short>
|
||||
<long>
|
||||
The keybinding used to activate the window menu.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If
|
||||
@@ -291,7 +310,7 @@ you set
|
||||
<short>Toggle fullscreen mode</short>
|
||||
<long>
|
||||
The keybinding used to toggle fullscreen mode.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If
|
||||
@@ -314,7 +333,7 @@ you set
|
||||
|
||||
The keybinding used to toggle always on top. A window that
|
||||
is always on top will always be visible over other overlapping windows.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If
|
||||
@@ -335,7 +354,7 @@ you set
|
||||
<short>Toggle maximization state</short>
|
||||
<long>
|
||||
The keybinding used to toggle maximization.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If
|
||||
@@ -353,10 +372,10 @@ you set
|
||||
<type>string</type>
|
||||
<default><Alt>F10</default>
|
||||
<locale name="C">
|
||||
<short>Maximize a window</short>
|
||||
<short>Maximize window</short>
|
||||
<long>
|
||||
The keybinding used to maximize a window
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If you set
|
||||
@@ -373,10 +392,10 @@ you set
|
||||
<type>string</type>
|
||||
<default><Alt>F5</default>
|
||||
<locale name="C">
|
||||
<short>Unmaximize a window</short>
|
||||
<short>Unmaximize window</short>
|
||||
<long>
|
||||
The keybinding used to unmaximize a window.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If you set
|
||||
@@ -391,12 +410,12 @@ you set
|
||||
<applyto>/apps/metacity/window_keybindings/toggle_shaded</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>string</type>
|
||||
<default><Alt>F12</default>
|
||||
<default>disabled</default>
|
||||
<locale name="C">
|
||||
<short>Toggle shaded state</short>
|
||||
<long>
|
||||
The keybinding used to toggle shaded/unshaded state.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If
|
||||
@@ -414,10 +433,10 @@ you set
|
||||
<type>string</type>
|
||||
<default><Alt>F4</default>
|
||||
<locale name="C">
|
||||
<short>Close a window</short>
|
||||
<short>Close window</short>
|
||||
<long>
|
||||
The keybinding used to close a window.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If
|
||||
@@ -435,10 +454,10 @@ you set
|
||||
<type>string</type>
|
||||
<default><Alt>F9</default>
|
||||
<locale name="C">
|
||||
<short>Minimize a window</short>
|
||||
<short>Minimize window</short>
|
||||
<long>
|
||||
The keybinding used to minimize a window.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If
|
||||
@@ -456,11 +475,11 @@ you set
|
||||
<type>string</type>
|
||||
<default><Alt>F7</default>
|
||||
<locale name="C">
|
||||
<short>Move a window</short>
|
||||
<short>Move window</short>
|
||||
<long>
|
||||
The keybinding used to enter "move mode" and begin moving a
|
||||
window using the keyboard.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If
|
||||
@@ -478,11 +497,11 @@ you set
|
||||
<type>string</type>
|
||||
<default><Alt>F8</default>
|
||||
<locale name="C">
|
||||
<short>Resize a window</short>
|
||||
<short>Resize window</short>
|
||||
<long>
|
||||
The keybinding used to enter "resize mode" and begin resizing a
|
||||
window using the keyboard.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If
|
||||
@@ -504,7 +523,7 @@ you set
|
||||
<long>
|
||||
The keybinding used to toggle whether the window is on all
|
||||
workspaces or just one.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1.
|
||||
The format looks like "<Control>a" or "<Shift><Alt>F1".
|
||||
The parser is
|
||||
fairly liberal and allows lower or upper case, and also
|
||||
abbreviations such as "<Ctl>" and "<Ctrl>". If
|
||||
@@ -527,7 +546,7 @@ you set
|
||||
The keybinding used to move a window to workspace 1.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -550,7 +569,7 @@ you set
|
||||
The keybinding used to move a window to workspace 2.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -573,7 +592,7 @@ you set
|
||||
The keybinding used to move a window to workspace 3.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -596,7 +615,7 @@ you set
|
||||
The keybinding used to move a window to workspace 4.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -619,7 +638,7 @@ you set
|
||||
The keybinding used to move a window to workspace 5.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -642,7 +661,7 @@ you set
|
||||
The keybinding used to move a window to workspace 6.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -666,7 +685,7 @@ you set
|
||||
The keybinding used to move a window to workspace 7.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -689,7 +708,7 @@ you set
|
||||
The keybinding used to move a window to workspace 8.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -712,7 +731,7 @@ you set
|
||||
The keybinding used to move a window to workspace 9.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -735,7 +754,7 @@ you set
|
||||
The keybinding used to move a window to workspace 10.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -758,7 +777,7 @@ you set
|
||||
The keybinding used to move a window to workspace 11.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -781,7 +800,7 @@ you set
|
||||
The keybinding used to move a window to workspace 12.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -798,14 +817,14 @@ you set
|
||||
<applyto>/apps/metacity/window_keybindings/move_to_workspace_left</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>string</type>
|
||||
<default><Shift><Alt>Left</default>
|
||||
<default><Control><Shift><Alt>Left</default>
|
||||
<locale name="C">
|
||||
<short>Move window one workspace to the left</short>
|
||||
<long>
|
||||
The keybinding used to move a window one workspace to the left.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -823,14 +842,14 @@ you set
|
||||
<applyto>/apps/metacity/window_keybindings/move_to_workspace_right</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>string</type>
|
||||
<default><Shift><Alt>Right</default>
|
||||
<default><Control><Shift><Alt>Right</default>
|
||||
<locale name="C">
|
||||
<short>Move window one workspace to the right</short>
|
||||
<long>
|
||||
The keybinding used to move a window one workspace to the right.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -847,14 +866,14 @@ you set
|
||||
<applyto>/apps/metacity/window_keybindings/move_to_workspace_up</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>string</type>
|
||||
<default><Shift><Alt>Up</default>
|
||||
<default><Control><Shift><Alt>Up</default>
|
||||
<locale name="C">
|
||||
<short>Move window one workspace up</short>
|
||||
<long>
|
||||
The keybinding used to move a window one workspace up.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -871,14 +890,14 @@ you set
|
||||
<applyto>/apps/metacity/window_keybindings/move_to_workspace_down</applyto>
|
||||
<owner>metacity</owner>
|
||||
<type>string</type>
|
||||
<default><Shift><Alt>Down</default>
|
||||
<default><Control><Shift><Alt>Down</default>
|
||||
<locale name="C">
|
||||
<short>Move window one workspace down</short>
|
||||
<long>
|
||||
The keybinding used to move a window one workspace down.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -905,7 +924,7 @@ you set
|
||||
it lowers the window below other windows.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -928,7 +947,7 @@ you set
|
||||
This keybinding raises the window above other windows.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -951,7 +970,7 @@ you set
|
||||
This keybinding lowers a window below other windows.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -974,7 +993,7 @@ you set
|
||||
This keybinding resizes a window to fill available vertical space.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -997,7 +1016,7 @@ you set
|
||||
This keybinding resizes a window to fill available horizontal space.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1026,7 +1045,7 @@ you set
|
||||
while using this binding reverses the direction of movement.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1051,7 +1070,7 @@ you set
|
||||
binding makes the direction go forward again.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1075,7 +1094,7 @@ you set
|
||||
the desktop, using a popup window.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1099,7 +1118,7 @@ you set
|
||||
and the desktop, using a popup window.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1125,7 +1144,7 @@ you set
|
||||
while using this binding reverses the direction of movement.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1150,7 +1169,7 @@ you set
|
||||
binding makes the direction go forward again.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1174,7 +1193,7 @@ you set
|
||||
the desktop, without a popup window.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1198,7 +1217,7 @@ you set
|
||||
the desktop, without a popup window.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1222,7 +1241,7 @@ you set
|
||||
focus to the desktop background.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1245,7 +1264,7 @@ you set
|
||||
The keybinding that switches to workspace 1.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1268,7 +1287,7 @@ you set
|
||||
The keybinding that switches to workspace 2.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1291,7 +1310,7 @@ you set
|
||||
The keybinding that switches to workspace 3.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1315,7 +1334,7 @@ you set
|
||||
The keybinding that switches to workspace 4.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1339,7 +1358,7 @@ you set
|
||||
The keybinding that switches to workspace 5.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1364,7 +1383,7 @@ you set
|
||||
The keybinding that switches to workspace 6.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1389,7 +1408,7 @@ you set
|
||||
The keybinding that switches to workspace 7.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1413,7 +1432,7 @@ you set
|
||||
The keybinding that switches to workspace 8.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1438,7 +1457,7 @@ you set
|
||||
The keybinding that switches to workspace 9.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1463,7 +1482,7 @@ you set
|
||||
The keybinding that switches to workspace 10.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1487,7 +1506,7 @@ you set
|
||||
The keybinding that switches to workspace 11.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1510,7 +1529,7 @@ you set
|
||||
The keybinding that switches to workspace 12.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1535,7 +1554,7 @@ you set
|
||||
of the current workspace.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1561,7 +1580,7 @@ you set
|
||||
of the current workspace.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1586,7 +1605,7 @@ you set
|
||||
the current workspace.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1611,7 +1630,7 @@ you set
|
||||
the current workspace.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1634,7 +1653,7 @@ you set
|
||||
The keybinding which shows the panel's main menu.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1652,13 +1671,13 @@ you set
|
||||
<type>string</type>
|
||||
<default><Alt>F2</default>
|
||||
<locale name="C">
|
||||
<short>Show the panel run dialog</short>
|
||||
<short>Show the panel run application dialog</short>
|
||||
<long>
|
||||
The keybinding which display's the panel's "Run Program" dialog
|
||||
The keybinding which display's the panel's "Run Application" dialog
|
||||
box.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1681,7 +1700,7 @@ you set
|
||||
The keybinding which invokes the panel's screenshot utility.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1705,7 +1724,7 @@ you set
|
||||
to take a screenshot of a window.
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
@@ -1740,7 +1759,7 @@ you set
|
||||
command in /apps/metacity/keybinding_commands
|
||||
|
||||
The format looks like "<Control>a" or
|
||||
"<Shift><Alt>F1.
|
||||
"<Shift><Alt>F1".
|
||||
|
||||
The parser is fairly liberal and allows lower or upper case,
|
||||
and also abbreviations such as "<Ctl>" and
|
||||
|
23
src/place.c
23
src/place.c
@@ -668,6 +668,7 @@ meta_window_place (MetaWindow *window,
|
||||
if (parent)
|
||||
{
|
||||
int w;
|
||||
MetaRectangle area;
|
||||
|
||||
meta_window_get_position (parent, &x, &y);
|
||||
w = parent->rect.width;
|
||||
@@ -677,17 +678,25 @@ meta_window_place (MetaWindow *window,
|
||||
/* center of child over center of parent */
|
||||
x -= window->rect.width / 2;
|
||||
|
||||
/* put child down 1/5 or so from the top of parent, unless
|
||||
* it makes us have more of parent showing above child than
|
||||
* below
|
||||
/* "visually" center window over parent, leaving twice as
|
||||
* much space below as on top.
|
||||
*/
|
||||
if (window->rect.height <= (parent->rect.height - (parent->rect.height / 5) * 2))
|
||||
y += parent->rect.height / 5;
|
||||
y += (parent->rect.height - window->rect.height)/3;
|
||||
|
||||
/* put top of child's frame, not top of child's client */
|
||||
if (fgeom)
|
||||
y += fgeom->top_height;
|
||||
|
||||
/* clip to xinerama of parent*/
|
||||
meta_window_get_work_area_current_xinerama (parent, &area);
|
||||
|
||||
if (x + window->rect.width > area.x + area.width)
|
||||
x = area.x + area.width - window->rect.width;
|
||||
if (y + window->rect.height > area.y + area.height)
|
||||
y = area.y + area.height - window->rect.height;
|
||||
if (x < area.x) x = area.x;
|
||||
if (y < area.y) y = area.y;
|
||||
|
||||
meta_topic (META_DEBUG_PLACEMENT, "Centered window %s over transient parent\n",
|
||||
window->desc);
|
||||
|
||||
@@ -826,9 +835,7 @@ meta_window_place (MetaWindow *window,
|
||||
if (outer.width >= workarea.width &&
|
||||
outer.height >= workarea.height)
|
||||
{
|
||||
outer.x = x;
|
||||
outer.y = y;
|
||||
meta_window_maximize_internal (window, &outer);
|
||||
window->maximize_after_placement = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
61
src/prefs.c
61
src/prefs.c
@@ -51,6 +51,7 @@
|
||||
#define KEY_APPLICATION_BASED "/apps/metacity/general/application_based"
|
||||
#define KEY_DISABLE_WORKAROUNDS "/apps/metacity/general/disable_workarounds"
|
||||
#define KEY_BUTTON_LAYOUT "/apps/metacity/general/button_layout"
|
||||
#define KEY_REDUCED_RESOURCES "/apps/metacity/general/reduced_resources"
|
||||
|
||||
#define KEY_COMMAND_PREFIX "/apps/metacity/keybinding_commands/command_"
|
||||
#define KEY_SCREEN_BINDINGS_PREFIX "/apps/metacity/global_keybindings"
|
||||
@@ -83,6 +84,8 @@ static gboolean auto_raise = FALSE;
|
||||
static gboolean auto_raise_delay = 500;
|
||||
static gboolean provide_visual_bell = TRUE;
|
||||
static gboolean bell_is_audible = TRUE;
|
||||
static gboolean reduced_resources = FALSE;
|
||||
|
||||
static MetaVisualBellType visual_bell_type = META_VISUAL_BELL_INVALID;
|
||||
static MetaButtonLayout button_layout = {
|
||||
{
|
||||
@@ -129,6 +132,7 @@ static gboolean update_command (const char *name,
|
||||
const char *value);
|
||||
static gboolean update_workspace_name (const char *name,
|
||||
const char *value);
|
||||
static gboolean update_reduced_resources (gboolean value);
|
||||
|
||||
static void change_notify (GConfClient *client,
|
||||
guint cnxn_id,
|
||||
@@ -372,7 +376,6 @@ meta_prefs_init (void)
|
||||
cleanup_error (&err);
|
||||
update_button_layout (str_val);
|
||||
g_free (str_val);
|
||||
#endif /* HAVE_GCONF */
|
||||
|
||||
bool_val = gconf_client_get_bool (default_client, KEY_VISUAL_BELL,
|
||||
&err);
|
||||
@@ -388,6 +391,12 @@ meta_prefs_init (void)
|
||||
update_visual_bell_type (str_val);
|
||||
g_free (str_val);
|
||||
|
||||
bool_val = gconf_client_get_bool (default_client, KEY_REDUCED_RESOURCES,
|
||||
&err);
|
||||
cleanup_error (&err);
|
||||
update_reduced_resources (bool_val);
|
||||
#endif /* HAVE_GCONF */
|
||||
|
||||
/* Load keybindings prefs */
|
||||
init_bindings ();
|
||||
|
||||
@@ -706,6 +715,13 @@ change_notify (GConfClient *client,
|
||||
{
|
||||
gboolean b;
|
||||
|
||||
if (value && value->type != GCONF_VALUE_BOOL)
|
||||
{
|
||||
meta_warning (_("GConf key \"%s\" is set to an invalid type\n"),
|
||||
key);
|
||||
goto out;
|
||||
}
|
||||
|
||||
b = value ? gconf_value_get_bool (value) : provide_visual_bell;
|
||||
if (update_visual_bell (b, bell_is_audible))
|
||||
queue_changed (META_PREF_VISUAL_BELL);
|
||||
@@ -714,6 +730,13 @@ change_notify (GConfClient *client,
|
||||
{
|
||||
gboolean b;
|
||||
|
||||
if (value && value->type != GCONF_VALUE_BOOL)
|
||||
{
|
||||
meta_warning (_("GConf key \"%s\" is set to an invalid type\n"),
|
||||
key);
|
||||
goto out;
|
||||
}
|
||||
|
||||
b = value ? gconf_value_get_bool (value) : bell_is_audible;
|
||||
if (update_visual_bell (provide_visual_bell, b))
|
||||
queue_changed (META_PREF_AUDIBLE_BELL);
|
||||
@@ -733,6 +756,22 @@ change_notify (GConfClient *client,
|
||||
if (update_visual_bell_type (str))
|
||||
queue_changed (META_PREF_VISUAL_BELL_TYPE);
|
||||
}
|
||||
else if (strcmp (key, KEY_REDUCED_RESOURCES) == 0)
|
||||
{
|
||||
gboolean b;
|
||||
|
||||
if (value && value->type != GCONF_VALUE_BOOL)
|
||||
{
|
||||
meta_warning (_("GConf key \"%s\" is set to an invalid type\n"),
|
||||
KEY_REDUCED_RESOURCES);
|
||||
goto out;
|
||||
}
|
||||
|
||||
b = value ? gconf_value_get_bool (value) : reduced_resources;
|
||||
|
||||
if (update_reduced_resources (b))
|
||||
queue_changed (META_PREF_REDUCED_RESOURCES);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_topic (META_DEBUG_PREFS, "Key %s doesn't mean anything to Metacity\n",
|
||||
@@ -1239,6 +1278,16 @@ update_auto_raise_delay (int value)
|
||||
|
||||
return old != auto_raise_delay;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
update_reduced_resources (gboolean value)
|
||||
{
|
||||
gboolean old = reduced_resources;
|
||||
|
||||
reduced_resources = value;
|
||||
|
||||
return old != reduced_resources;
|
||||
}
|
||||
#endif /* HAVE_GCONF */
|
||||
|
||||
#ifdef WITH_VERBOSE_MODE
|
||||
@@ -1305,6 +1354,10 @@ meta_preference_to_string (MetaPreference pref)
|
||||
case META_PREF_VISUAL_BELL_TYPE:
|
||||
return "VISUAL_BELL_TYPE";
|
||||
break;
|
||||
|
||||
case META_PREF_REDUCED_RESOURCES:
|
||||
return "REDUCED_RESOURCES";
|
||||
break;
|
||||
}
|
||||
|
||||
return "(unknown)";
|
||||
@@ -1974,6 +2027,12 @@ meta_prefs_get_auto_raise_delay ()
|
||||
return auto_raise_delay;
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_prefs_get_reduced_resources ()
|
||||
{
|
||||
return reduced_resources;
|
||||
}
|
||||
|
||||
MetaKeyBindingAction
|
||||
meta_prefs_get_keybinding_action (const char *name)
|
||||
{
|
||||
|
@@ -45,7 +45,8 @@ typedef enum
|
||||
META_PREF_WORKSPACE_NAMES,
|
||||
META_PREF_VISUAL_BELL,
|
||||
META_PREF_AUDIBLE_BELL,
|
||||
META_PREF_VISUAL_BELL_TYPE
|
||||
META_PREF_VISUAL_BELL_TYPE,
|
||||
META_PREF_REDUCED_RESOURCES
|
||||
} MetaPreference;
|
||||
|
||||
typedef void (* MetaPrefsChangedFunc) (MetaPreference pref,
|
||||
@@ -69,6 +70,7 @@ gboolean meta_prefs_get_application_based (void);
|
||||
gboolean meta_prefs_get_disable_workarounds (void);
|
||||
gboolean meta_prefs_get_auto_raise (void);
|
||||
int meta_prefs_get_auto_raise_delay (void);
|
||||
gboolean meta_prefs_get_reduced_resources (void);
|
||||
|
||||
const char* meta_prefs_get_command (int i);
|
||||
|
||||
@@ -222,7 +224,7 @@ typedef enum _MetaKeyBindingAction
|
||||
META_KEYBINDING_ACTION_COMMAND_9,
|
||||
META_KEYBINDING_ACTION_COMMAND_10,
|
||||
META_KEYBINDING_ACTION_COMMAND_11,
|
||||
META_KEYBINDING_ACTION_COMMAND_12,
|
||||
META_KEYBINDING_ACTION_COMMAND_12
|
||||
} MetaKeyBindingAction;
|
||||
|
||||
typedef struct
|
||||
|
@@ -1,11 +1,11 @@
|
||||
#! /bin/bash
|
||||
|
||||
if test -z "$XNEST_DISPLAY"; then
|
||||
XNEST_DISPLAY=:1
|
||||
XNEST_DISPLAY=:8
|
||||
fi
|
||||
|
||||
if test -z "$CLIENT_DISPLAY"; then
|
||||
CLIENT_DISPLAY=:1
|
||||
CLIENT_DISPLAY=:8
|
||||
fi
|
||||
|
||||
if test -z "$METACITY_DISPLAY"; then
|
||||
|
190
src/screen.c
190
src/screen.c
@@ -34,6 +34,7 @@
|
||||
#include "keybindings.h"
|
||||
#include "stack.h"
|
||||
#include "xprops.h"
|
||||
#include "compositor.h"
|
||||
|
||||
#ifdef HAVE_SOLARIS_XINERAMA
|
||||
#include <X11/extensions/xinerama.h>
|
||||
@@ -56,6 +57,9 @@ static void set_workspace_names (MetaScreen *screen);
|
||||
static void prefs_changed_callback (MetaPreference pref,
|
||||
gpointer data);
|
||||
|
||||
static void set_desktop_geometry_hint (MetaScreen *screen);
|
||||
static void set_desktop_viewport_hint (MetaScreen *screen);
|
||||
|
||||
#ifdef HAVE_STARTUP_NOTIFICATION
|
||||
static void meta_screen_sn_event (SnMonitorEvent *event,
|
||||
void *user_data);
|
||||
@@ -81,7 +85,7 @@ set_wm_check_hint (MetaScreen *screen)
|
||||
static int
|
||||
set_supported_hint (MetaScreen *screen)
|
||||
{
|
||||
#define N_SUPPORTED 49
|
||||
#define N_SUPPORTED 58
|
||||
Atom atoms[N_SUPPORTED];
|
||||
|
||||
atoms[0] = screen->display->atom_net_wm_name;
|
||||
@@ -133,6 +137,17 @@ set_supported_hint (MetaScreen *screen)
|
||||
atoms[46] = screen->display->atom_net_wm_state_above;
|
||||
atoms[47] = screen->display->atom_net_wm_state_below;
|
||||
atoms[48] = screen->display->atom_net_startup_id;
|
||||
atoms[49] = screen->display->atom_net_wm_strut_partial;
|
||||
atoms[50] = screen->display->atom_net_wm_action_fullscreen;
|
||||
atoms[51] = screen->display->atom_net_wm_action_minimize;
|
||||
atoms[52] = screen->display->atom_net_frame_extents;
|
||||
atoms[53] = screen->display->atom_net_request_frame_extents;
|
||||
atoms[54] = screen->display->atom_net_wm_user_time;
|
||||
atoms[55] = screen->display->atom_net_wm_state_demands_attention;
|
||||
atoms[56] = screen->display->atom_net_desktop_geometry;
|
||||
atoms[57] = screen->display->atom_net_desktop_viewport;
|
||||
//atoms[58] = screen->display->atom_net_restack_window;
|
||||
//atoms[59] = screen->display->atom_net_moveresize_window;
|
||||
|
||||
XChangeProperty (screen->display->xdisplay, screen->xroot,
|
||||
screen->display->atom_net_supported,
|
||||
@@ -356,7 +371,8 @@ reload_xinerama_infos (MetaScreen *screen)
|
||||
|
||||
MetaScreen*
|
||||
meta_screen_new (MetaDisplay *display,
|
||||
int number)
|
||||
int number,
|
||||
Time timestamp)
|
||||
{
|
||||
MetaScreen *screen;
|
||||
Window xroot;
|
||||
@@ -422,24 +438,7 @@ meta_screen_new (MetaDisplay *display,
|
||||
|
||||
new_wm_sn_owner = meta_create_offscreen_window (xdisplay, xroot);
|
||||
|
||||
{
|
||||
/* Generate a timestamp */
|
||||
XSetWindowAttributes attrs;
|
||||
XEvent event;
|
||||
|
||||
attrs.event_mask = PropertyChangeMask;
|
||||
XChangeWindowAttributes (xdisplay, new_wm_sn_owner, CWEventMask, &attrs);
|
||||
|
||||
XChangeProperty (xdisplay,
|
||||
new_wm_sn_owner, XA_WM_CLASS, XA_STRING, 8,
|
||||
PropModeAppend, NULL, 0);
|
||||
XWindowEvent (xdisplay, new_wm_sn_owner, PropertyChangeMask, &event);
|
||||
attrs.event_mask = NoEventMask;
|
||||
XChangeWindowAttributes (display->xdisplay,
|
||||
new_wm_sn_owner, CWEventMask, &attrs);
|
||||
|
||||
manager_timestamp = event.xproperty.time;
|
||||
}
|
||||
manager_timestamp = timestamp;
|
||||
|
||||
XSetSelectionOwner (xdisplay, wm_sn_atom, new_wm_sn_owner,
|
||||
manager_timestamp);
|
||||
@@ -498,6 +497,9 @@ meta_screen_new (MetaDisplay *display,
|
||||
LeaveWindowMask | EnterWindowMask |
|
||||
KeyPressMask | KeyReleaseMask |
|
||||
FocusChangeMask | StructureNotifyMask |
|
||||
#ifdef HAVE_COMPOSITE_EXTENSIONS
|
||||
ExposureMask |
|
||||
#endif
|
||||
attr.your_event_mask);
|
||||
if (meta_error_trap_pop_with_return (display, FALSE) != Success)
|
||||
{
|
||||
@@ -538,19 +540,34 @@ meta_screen_new (MetaDisplay *display,
|
||||
screen->starting_corner = META_SCREEN_TOPLEFT;
|
||||
|
||||
screen->showing_desktop = FALSE;
|
||||
|
||||
screen->compositor_windows = NULL;
|
||||
screen->damage_region = None;
|
||||
screen->root_picture = None;
|
||||
screen->trans_pixmap = None;
|
||||
screen->trans_picture = None;
|
||||
|
||||
{
|
||||
XGCValues gc_values;
|
||||
|
||||
gc_values.subwindow_mode = IncludeInferiors;
|
||||
gc_values.function = GXinvert;
|
||||
gc_values.line_width = META_WIREFRAME_XOR_LINE_WIDTH;
|
||||
|
||||
screen->root_xor_gc = XCreateGC (screen->display->xdisplay,
|
||||
screen->xroot,
|
||||
GCSubwindowMode | GCFunction | GCLineWidth,
|
||||
&gc_values);
|
||||
}
|
||||
|
||||
screen->xinerama_infos = NULL;
|
||||
screen->n_xinerama_infos = 0;
|
||||
screen->last_xinerama_index = 0;
|
||||
screen->last_xinerama_index = 0;
|
||||
|
||||
reload_xinerama_infos (screen);
|
||||
|
||||
meta_screen_set_cursor (screen, META_CURSOR_DEFAULT);
|
||||
|
||||
if (display->leader_window == None)
|
||||
display->leader_window = meta_create_offscreen_window (display->xdisplay,
|
||||
screen->xroot);
|
||||
|
||||
if (display->no_focus_window == None)
|
||||
{
|
||||
display->no_focus_window = meta_create_offscreen_window (display->xdisplay,
|
||||
@@ -567,6 +584,10 @@ meta_screen_new (MetaDisplay *display,
|
||||
|
||||
set_wm_check_hint (screen);
|
||||
|
||||
set_desktop_viewport_hint (screen);
|
||||
|
||||
set_desktop_geometry_hint (screen);
|
||||
|
||||
meta_screen_update_workspace_layout (screen);
|
||||
|
||||
/* Get current workspace */
|
||||
@@ -622,9 +643,12 @@ meta_screen_new (MetaDisplay *display,
|
||||
if (space != NULL)
|
||||
meta_workspace_activate (space);
|
||||
}
|
||||
|
||||
meta_compositor_manage_screen (screen->display->compositor,
|
||||
screen);
|
||||
|
||||
meta_verbose ("Added screen %d ('%s') root 0x%lx\n",
|
||||
screen->number, screen->screen_name, screen->xroot);
|
||||
screen->number, screen->screen_name, screen->xroot);
|
||||
|
||||
return screen;
|
||||
}
|
||||
@@ -640,6 +664,9 @@ meta_screen_free (MetaScreen *screen)
|
||||
|
||||
meta_display_grab (display);
|
||||
|
||||
meta_compositor_unmanage_screen (screen->display->compositor,
|
||||
screen);
|
||||
|
||||
meta_display_unmanage_windows_for_screen (display, screen);
|
||||
|
||||
meta_prefs_remove_listener (prefs_changed_callback, screen);
|
||||
@@ -679,6 +706,9 @@ meta_screen_free (MetaScreen *screen)
|
||||
|
||||
if (screen->work_area_idle != 0)
|
||||
g_source_remove (screen->work_area_idle);
|
||||
|
||||
XFreeGC (screen->display->xdisplay,
|
||||
screen->root_xor_gc);
|
||||
|
||||
g_free (screen->screen_name);
|
||||
g_free (screen);
|
||||
@@ -714,7 +744,26 @@ meta_screen_manage_all_windows (MetaScreen *screen)
|
||||
i = 0;
|
||||
while (i < n_children)
|
||||
{
|
||||
meta_window_new (screen->display, children[i], TRUE);
|
||||
XWindowAttributes attrs;
|
||||
|
||||
meta_error_trap_push_with_return (screen->display);
|
||||
|
||||
XGetWindowAttributes (screen->display->xdisplay,
|
||||
children[i], &attrs);
|
||||
|
||||
if (meta_error_trap_pop_with_return (screen->display, TRUE) != Success)
|
||||
{
|
||||
meta_verbose ("Failed to get attributes for window 0x%lx\n",
|
||||
children[i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_window_new_with_attrs (screen->display, children[i], TRUE,
|
||||
&attrs);
|
||||
|
||||
meta_compositor_add_window (screen->display->compositor,
|
||||
children[i], &attrs);
|
||||
}
|
||||
|
||||
++i;
|
||||
}
|
||||
@@ -929,6 +978,51 @@ set_number_of_spaces_hint (MetaScreen *screen,
|
||||
meta_error_trap_pop (screen->display, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
set_desktop_geometry_hint (MetaScreen *screen)
|
||||
{
|
||||
unsigned long data[2];
|
||||
|
||||
if (screen->closing > 0)
|
||||
return;
|
||||
|
||||
data[0] = screen->width;
|
||||
data[1] = screen->height;
|
||||
|
||||
meta_verbose ("Setting _NET_DESKTOP_GEOMETRY to %ld, %ld\n", data[0], data[1]);
|
||||
|
||||
meta_error_trap_push (screen->display);
|
||||
XChangeProperty (screen->display->xdisplay, screen->xroot,
|
||||
screen->display->atom_net_desktop_geometry,
|
||||
XA_CARDINAL,
|
||||
32, PropModeReplace, (guchar*) data, 2);
|
||||
meta_error_trap_pop (screen->display, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
set_desktop_viewport_hint (MetaScreen *screen)
|
||||
{
|
||||
unsigned long data[2];
|
||||
|
||||
if (screen->closing > 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Metacity does not implement viewports, so this is a fixed 0,0
|
||||
*/
|
||||
data[0] = 0;
|
||||
data[1] = 0;
|
||||
|
||||
meta_verbose ("Setting _NET_DESKTOP_VIEWPORT to 0, 0\n");
|
||||
|
||||
meta_error_trap_push (screen->display);
|
||||
XChangeProperty (screen->display->xdisplay, screen->xroot,
|
||||
screen->display->atom_net_desktop_viewport,
|
||||
XA_CARDINAL,
|
||||
32, PropModeReplace, (guchar*) data, 2);
|
||||
meta_error_trap_pop (screen->display, FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
update_num_workspaces (MetaScreen *screen)
|
||||
{
|
||||
@@ -1029,6 +1123,7 @@ meta_screen_set_cursor (MetaScreen *screen,
|
||||
|
||||
xcursor = meta_display_create_x_cursor (screen->display, cursor);
|
||||
XDefineCursor (screen->display->xdisplay, screen->xroot, xcursor);
|
||||
XFlush (screen->display->xdisplay);
|
||||
XFreeCursor (screen->display->xdisplay, xcursor);
|
||||
}
|
||||
|
||||
@@ -1188,9 +1283,9 @@ meta_screen_ensure_workspace_popup (MetaScreen *screen)
|
||||
/* don't show tab popup, since proper space isn't selected yet */
|
||||
}
|
||||
|
||||
void
|
||||
meta_screen_focus_mouse_window (MetaScreen *screen,
|
||||
MetaWindow *not_this_one)
|
||||
MetaWindow*
|
||||
meta_screen_get_mouse_window (MetaScreen *screen,
|
||||
MetaWindow *not_this_one)
|
||||
{
|
||||
MetaWindow *window;
|
||||
Window root_return, child_return;
|
||||
@@ -1220,22 +1315,7 @@ meta_screen_focus_mouse_window (MetaScreen *screen,
|
||||
root_x_return,
|
||||
root_y_return);
|
||||
|
||||
/* FIXME I'm a loser on the CurrentTime front */
|
||||
if (window)
|
||||
{
|
||||
meta_topic (META_DEBUG_FOCUS,
|
||||
"Focusing mouse window %s\n", window->desc);
|
||||
|
||||
meta_window_focus (window, meta_display_get_current_time (screen->display));
|
||||
|
||||
/* Also raise the window if in click-to-focus */
|
||||
if (meta_prefs_get_focus_mode () == META_FOCUS_MODE_CLICK)
|
||||
meta_window_raise (window);
|
||||
}
|
||||
else
|
||||
{
|
||||
meta_topic (META_DEBUG_FOCUS, "No mouse window to focus found\n");
|
||||
}
|
||||
return window;
|
||||
}
|
||||
|
||||
const MetaXineramaScreenInfo*
|
||||
@@ -1572,6 +1652,8 @@ meta_screen_update_workspace_layout (MetaScreen *screen)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
screen->starting_corner = META_SCREEN_TOPLEFT;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1679,6 +1761,7 @@ meta_create_offscreen_window (Display *xdisplay,
|
||||
* (but on a display we are managing at least one screen for)
|
||||
*/
|
||||
attrs.override_redirect = True;
|
||||
attrs.event_mask = PropertyChangeMask;
|
||||
|
||||
return XCreateWindow (xdisplay,
|
||||
parent,
|
||||
@@ -1687,7 +1770,7 @@ meta_create_offscreen_window (Display *xdisplay,
|
||||
CopyFromParent,
|
||||
CopyFromParent,
|
||||
CopyFromParent,
|
||||
CWOverrideRedirect,
|
||||
CWOverrideRedirect | CWEventMask,
|
||||
&attrs);
|
||||
}
|
||||
|
||||
@@ -2077,6 +2160,7 @@ meta_screen_resize (MetaScreen *screen,
|
||||
screen->height = height;
|
||||
|
||||
reload_xinerama_infos (screen);
|
||||
set_desktop_geometry_hint (screen);
|
||||
|
||||
/* Queue a resize on all the windows */
|
||||
meta_screen_foreach_window (screen, meta_screen_resize_func, 0);
|
||||
@@ -2442,6 +2526,7 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
|
||||
if (sequence != NULL)
|
||||
{
|
||||
int space;
|
||||
Time timestamp;
|
||||
|
||||
meta_topic (META_DEBUG_STARTUP,
|
||||
"Found startup sequence for window %s ID \"%s\"\n",
|
||||
@@ -2461,6 +2546,17 @@ meta_screen_apply_startup_properties (MetaScreen *screen,
|
||||
}
|
||||
}
|
||||
|
||||
if (!window->initial_timestamp_set)
|
||||
{
|
||||
timestamp = sn_startup_sequence_get_timestamp (sequence);
|
||||
meta_topic (META_DEBUG_STARTUP,
|
||||
"Setting initial window timestamp to %lu based on startup info\n",
|
||||
timestamp);
|
||||
|
||||
window->initial_timestamp_set = TRUE;
|
||||
window->initial_timestamp = timestamp;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user