Compare commits

...

867 Commits

Author SHA1 Message Date
Owen W. Taylor
a2104c5404 Bump version to 2.29.1 2010-03-18 18:29:48 -04:00
Dan Winship
1abed05413 meta_display_get_keybinding_action: strip out uninteresting modifiers
That is, don't consider the state of num lock, xkb group number, etc,
when looking up keybindings.

https://bugzilla.gnome.org/show_bug.cgi?id=613278
2010-03-18 17:57:47 -04:00
Bruno Brouard
1465895ff7 Updated French translation 2010-03-17 21:39:21 +01:00
Robert Bragg
452025e984 Remove the workaround for multi-texturing with old intel drivers
The 2009 Q2 release of the drivers includes the relevent bug fix.

https://bugzilla.gnome.org/show_bug.cgi?id=613121
2010-03-17 16:13:24 +00:00
Tomas Frydrych
d537dd93d5 [MetaWindow] Accessor for the instance part of WM_CLASS property
https://bugzilla.gnome.org/show_bug.cgi?id=613128
2010-03-17 16:10:03 +00:00
Colin Walters
650a1e807c [MetaDisplay] Expose meta_display_get_keybinding_action
This can be used when a plugin has control of input to determine
what action would be done, and thus filter to a subset of them.

https://bugzilla.gnome.org/show_bug.cgi?id=613100
2010-03-17 07:22:04 -04:00
Owen W. Taylor
67f8a33cad Include <sys/wait.h> for WIFEXITSTATUS/WIFEXITED
Exit status macros are specified by POSIX to be in <sys/wait.h>.
Fixes compilation on Solaris.

Reported by Brian Cameron
https://bugzilla.gnome.org/show_bug.cgi?id=612506
2010-03-15 11:09:49 -04:00
Owen W. Taylor
ff4f096f1d Support and require Clutter 1.2
- Specify a minimum version of Clutter-1.2.0
- Remove conditionalizatin and always use Clutter-1.1 framebuffer
  API rather than raw GL fbos
- Replace deprecated cogl_material/texture_unref() with
  cogl_handle_unref()

https://bugzilla.gnome.org/show_bug.cgi?id=610862
2010-03-11 15:06:06 -05:00
Alexander Shopov
b5cb353ab5 Added Bulgarian translation 2010-02-27 10:50:32 +02:00
Nils-Christoph Fiedler
17a38dfbed Updated LowGerman translation 2010-02-25 16:59:48 +01:00
Piotr Drąg
f773683601 Updated Polish translation 2010-02-24 19:29:54 +01:00
Aron Xu
abeaf828a3 Update Simplified Chinese translation. 2010-02-24 18:58:13 +08:00
Mario Blättermann
23a8a4201a Updated German translation 2010-02-21 17:00:06 +01:00
Nguyễn Thái Ngọc Duy
2d409e5c09 Remove executable bit from mutter-shaped-texture.c 2010-02-21 21:23:17 +07:00
Owen W. Taylor
2d57904bf4 Bump version to 2.29.0 2010-02-18 17:08:21 -05:00
Owen W. Taylor
8fa83e1be7 Fix fallback to builtin defaults for key bindings
The change to reduce GConf trips by using
gconf_client_all_entries() broke the fallback to builtin values
because update_binding() was no longer called for bindings not
found in GConf. Fix this by keeping track of the bindings we
find from GConf in a hash table, then looping through and setting
all the bindings at the end.

This also improves efficiency by avoiding a linear scan for each
binding in GConf.

https://bugzilla.gnome.org/show_bug.cgi?id=609710
2010-02-18 14:26:12 -05:00
Owen W. Taylor
8875e73765 Fix crash on startup with list bindings
When we are reading bindings initially, update_list_binding() needs
to be passed the correct "string list type" since we are calling
it with a list of strings instead of a list of GConfValue.

https://bugzilla.gnome.org/show_bug.cgi?id=609101
2010-02-18 14:26:12 -05:00
Richard Hughes
65766fcaac Fix the build when using a compiler that defaults to --no-add-needed
https://bugzilla.gnome.org/show_bug.cgi?id=606388
2010-02-16 16:32:11 -05:00
Owen W. Taylor
4cd4010a70 Fix compiling with --disable-gconf
Make the body of meta_prefs_set_clutter_plugins()
conditional on compiling with GConf support.
2010-02-16 15:17:01 -05:00
Florian Müllner
d21da5643b [MetaWindow] Expose maximized state as properties
Add properties for the EWMH _NET_WM_STATE_MAXIMIZED_HORZ and
_NET_WM_STATE_MAXIMIZED_VERT hints.

https://bugzilla.gnome.org/show_bug.cgi?id=590706
2010-02-15 21:40:46 +01:00
Jorge González
ba700e6387 Updated Spanish translation 2010-02-15 11:31:58 +01:00
Neil Roberts
bd90fd7033 Add the group from cogl_get_option_group() to the GOptionContext
Otherwise it's not possible to use the COGL_DEBUG environment variable.

https://bugzilla.gnome.org/show_bug.cgi?id=609350
2010-02-12 11:40:05 +00:00
Tomas Frydrych
fb3d352d3a [MutterShapedTexture] Use cogl multitexture API
The older code relied on Clutter providing default texture coords for any
layers for which texture coords were not specified, which does not work as
of Clutter 1.1.6 (due to commit 8b950bdc87).

https://bugzilla.gnome.org/show_bug.cgi?id=609657
2010-02-12 11:37:30 +00:00
Gabor Kelemen
690852e157 Hungarian translation updated 2010-02-11 23:34:53 +01:00
Matej Urbančič
aa84d21bcf Updated Slovenian translation 2010-02-11 20:59:51 +01:00
Owen W. Taylor
4d62977c7b Accept an empty string as well as "disabled" for keybindings
Treat the empty string the same as "disabled" for GConf keybinding
keys. gnome-keybinding-properties was changed to write disabled
keys as the empty string a year or so ago.

https://bugzilla.gnome.org/show_bug.cgi?id=559816
2010-02-11 13:02:50 -05:00
Owen W. Taylor
cbac2e7bbb Allow applications to raise windows when raise_on_click is off
Whether Metacity honors a raise request from an application should
not be affected by the raise_on_click setting; remove a check that
seems to have been added in error.

https://bugzilla.gnome.org/show_bug.cgi?id=445447
2010-02-11 13:02:50 -05:00
Owen W. Taylor
88ee4c5b30 Don't focus ancestor window on a different workspace
When we are moving a window with a modal dialog to a different
workspace, meta_workspace_focus_default_window() can be called
with 'not_this_one' being the focused modal dialog.

Since the ancestor of that window is also being moved, we must
not focus it as an alternative to the current window; this will
cause windows to be moved back and Metacity to get into an
inconsistent confused state.

https://bugzilla.redhat.com/show_bug.cgi?id=237158

https://bugzilla.gnome.org/show_bug.cgi?id=598995
2010-02-11 13:02:50 -05:00
Owen W. Taylor
12c46c5d8b Allow explicit raises from same client, not just same app
We currently allow XRaiseWindow when the same application (defined
by the window group) is focused, but the kind of old applications
that XRaiseWindow are frequently not setting the window group.

Expand the check to allow the same X client (defined by the looking
at client ID) to raise windows above the focus window.

https://bugzilla.gnome.org/show_bug.cgi?id=567528
2010-02-11 13:02:50 -05:00
Tomislav Vujec
ab7d4e0e60 Don't warn about a missing session file
When started without session related command line parameters (e.g. from
gnome-session), metacity picks up client_id from the DESKTOP_AUTOSTART_ID
environment variable. Unfortunately, there is no way to distinguish if this was
passed from a config file, representing old saved session, or generated by
gnome-session, therefore load_state is attempted in each case. If the client_id
is generated, there will be no session file, and metacity will report a
warning.

Just remove the warning so that users won't always find a warning at the
start of their .xsession-errors.

https://bugzilla.gnome.org/show_bug.cgi?id=577576
2010-02-11 13:02:49 -05:00
Owen W. Taylor
708c6162c4 Handle XError and XIOError for unknown displays
The atk-bridge GTK+ module opens its own display; if we get an
XIOError on that display, we shouldn't abort with a meta_bug()
but just exit normally. Also fix a segfault if we got an XError
for that display.

https://bugzilla.gnome.org/show_bug.cgi?id=604319
2010-02-11 13:02:49 -05:00
Owen W. Taylor
7834bba6f7 Merge changes from Metacity
Merge all relevant changes from Metacity as of Feb 10, 2010

For future merger's reference, the best way to merge changes from
Metacity is to add the Metacity git repository as a remote, then
cherry-pick the desired changes - this will exploit the shared
history of the two repositories when merging in the changes.

Then when finished, use 'git merge -s ours <head commit of metacity>'
to record the merge, and 'git commit --amend' to fix up the
commit message.
2010-02-11 12:15:29 -05:00
Owen W. Taylor
857c8aaaa2 Make libcanberra support optional
Add a configure switch:

 --with-libcanberra=[yes/no/auto]

(defaulting to auto); if libcanberra is not found or explicitly
disabled, then the default system bell will be used for the bell
sound and no switch workspace sound is played.

https://bugzilla.gnome.org/show_bug.cgi?id=609585
2010-02-11 12:04:11 -05:00
Lennart Poettering
1253e6c64e sound: ask libcanberra to cache alert/desktop switch sounds
These sounds are good candidates for caching in the sound server, to
save a bit of CPU and make reaction faster. Hence, tell libcanberra to
cache them.

https://bugzilla.gnome.org/show_bug.cgi?id=609585
2010-02-11 12:04:10 -05:00
Lennart Poettering
b610b2ecc7 tooltip: set window type hint for self-drawn tooltips to GDK_WINDOW_TYPE_HINT_TOOLTIP
libcanberra generates specific tooltip popup sounds and for that
recognizes the tooltip windows by the GtkWindowTypeHint set for them.

This trivial patch simply sets the hint for the self-drawn tooltips
metacity uses.

https://bugzilla.gnome.org/show_bug.cgi?id=609585
2010-02-11 12:04:10 -05:00
Lennart Poettering
11addbe9c8 bell: increase bell rate limit from 1/s to 1/100ms
Right now metacity issues only 1 bell event per second. This is
feels buggy when triggering multiple alarm sounds in a terminal.

This patch simple increases the limit to 1/100ms. 100ms is probably a
good choice since the HIG recommends that all user reaction should
happen within 100ms. With this applied pressing 'Left' in gnome-terminal
feels much more responsive.

https://bugzilla.redhat.com/show_bug.cgi?id=498608

https://bugzilla.gnome.org/show_bug.cgi?id=609585
2010-02-11 12:04:10 -05:00
Matthias Clasen
709ef05714 Don't force CA_PROP_CANBERRA_ENABLE to 1.
* src/core/bell.c: Don't force CA_PROP_CANBERRA_ENABLE to 1.
That was a misunderstanding on my part, and makes it impossible
to get rid of the bell.

svn path=/trunk/; revision=4165

https://bugzilla.gnome.org/show_bug.cgi?id=609585
2010-02-11 12:04:10 -05:00
Matthias Clasen
c51767eef1 Now that we are using libcanberra, don't tell the X server to play the bell
* src/core/bell.c (meta_bell_set_audible): Now that we are
using libcanberra, don't tell the X server to play the system
bell internally.

svn path=/trunk/; revision=4141

https://bugzilla.gnome.org/show_bug.cgi?id=609585
2010-02-11 12:04:10 -05:00
Matthias Clasen
5aab9e878f Use libcanberra to play system bell and workspace switch sounds
Patch by Lennart Poettering

* configure.in: Require libcanberra-gtk

* src/core/bell.c (meta_bell_notify): Play the alert sound from
the sound theme instead of the dreaded system bell.

* src/core/workspace.c (meta_workspace_activate_with_focus): Play
a sound on workspace switch.

https://bugzilla.gnome.org/show_bug.cgi?id=557921

https://bugzilla.gnome.org/show_bug.cgi?id=609585
2010-02-11 12:04:10 -05:00
Matej Urbančič
e7751e170e Updated Slovenian translation 2010-02-11 15:08:24 +01:00
Kjartan Maraas
776d345bc3 Updated Norwegian bokmål translation 2010-02-11 12:43:02 +01:00
Owen W. Taylor
a8fc30a13f Fix typo when checking the result of getpwuid
Was meant to be:

  errno==0 && pwd!=NULL

Not:

  errno==0 || pwd==NULL

https://bugzilla.gnome.org/show_bug.cgi?id=609586
2010-02-10 16:10:49 -05:00
Matthias Clasen
2d57b1b470 Reduce GConf roundtrips
metacity tries to do the right thing, by preloading all the relevant
directories before getting the keys one-by-one, but GConfClient isn't actually
smart enough to avoid server roundtrips in this case. That should certainly be
fixed in GConf.

In the meantime, here is a patch that reworks the metacity prefs initialization
to avoid roundtrips for individual keys anyway, by using
gconf_client_all_keys().

https://bugzilla.gnome.org/show_bug.cgi?id=574121
https://bugzilla.gnome.org/show_bug.cgi?id=607746
2010-02-10 14:32:48 -05:00
Thomas Hindoe Paaboel Andersen
90f21fa5db Replace usage of deprecated gtk api
Fixes part of GNOME Bug #572332
2010-02-10 14:03:12 -05:00
Vincent Untz
6638d0e507 Increase ping timeout delay to 5s
https://bugzilla.gnome.org/show_bug.cgi?id=568790
2010-02-10 12:49:15 -05:00
Peter Bloomfield
c6793d477a Prevent window self-maximisation
https://bugzilla.gnome.org/show_bug.cgi?id=461927
2010-02-10 12:48:10 -05:00
alexisdm59
11e01ec074 check window has frame before flashing it
https://bugzilla.gnome.org/show_bug.cgi?id=598231
2010-02-10 12:25:40 -05:00
Owen W. Taylor
1d827caaaf Don't call IceCloseConnection() behind libSM's back
The ICE connection is opened by libSM; we can't just close it when
we get an IOError on the ICE connection; instead call SmcCloseConnection()
and mark the connection as closed. This will prevent a segfault if we
exit out of the metacity main loop and get to meta_finalize().

https://bugzilla.gnome.org/show_bug.cgi?id=604867
2010-02-10 12:25:40 -05:00
Travis Watkins
ba4db78ed9 store timestamp for _NET_WM_CM_SX selection
https://bugzilla.gnome.org/show_bug.cgi?id=530702
2010-02-10 12:25:20 -05:00
Thomas Thurman
a321f4c842 Throw away result of write(); it's not important 2010-02-10 12:19:01 -05:00
Claude Paroz
b1c465eab0 Remove markup from translated string 2010-02-10 12:17:43 -05:00
Ray Strode
5134b05af9 Don't call meta_finalize from SIGTERM handler
It's not a legal function to call from a signal handler.
Instead defer until going back to the main loop.

https://bugzilla.gnome.org/show_bug.cgi?id=600864
2010-02-10 12:16:46 -05:00
Owen W. Taylor
dc3a93be99 Add XFCE Terminal as a terminal
Include the XFCE terminal program 'Terminal' in the list of terminals.

https://bugzilla.gnome.org/show_bug.cgi?id=599262
2010-02-10 12:12:58 -05:00
Ray Strode
49aabfec02 Change default cycle_group keybinding to Alt-grave
It makes more sense because the grave key is close
to the tab and escape keys which the other cycle
keybindings use.

This always works better for gnome-shell, which
switchings between applications by default with alt-tab.
The user can now alt-tab to the application they want,
and then move their finger to the grave key to select
the window they want.
2010-02-10 12:12:29 -05:00
Matthias Clasen
11d0d207fd unset _NET_SUPPORTING_WM_CHECK when shutting down 2010-02-10 12:10:55 -05:00
Tomeu Vizoso
eed3245b1b Add a switch to disable autofullscreen'ing maximized windows without decorations 2010-02-10 12:04:42 -05:00
Matt Kraai
a7bbde1699 Don't define meta_spew_event unless verbose mode is on. Closes #571126.
svn path=/trunk/; revision=4132
2010-02-10 11:13:30 -05:00
Matt Kraai
bacccafe3c Only put demands-attention windows into alt-tab if of appropriate type
Windows demanding attention should never appear in the alt-tab list
unless they're of a type which might have appeared there anyway. This
solves a problem under AWN where docks which were marked as demanding
attention appeared in all alt-tab lists; they were irrelevant and it
was impossible to remove them from the lists.

svn path=/trunk/; revision=4123
2010-02-10 11:12:41 -05:00
Thomas James Alexander Thurman
3a80bd47cc some commenting
* src/ui/theme.c: some commenting

svn path=/trunk/; revision=4122
2010-02-10 11:03:01 -05:00
Thomas James Alexander Thurman
152917d5e1 Lines where x1==x2 or y1==y2 may have the second element null
Lines where x1==x2 or y1==y2 may have the second element null. Lines
where both are null, and the width is zero, are points. This speeds
things up surprisingly much.

svn path=/trunk/; revision=4119
2010-02-10 10:53:50 -05:00
Owen W. Taylor
c588e173f8 Remove the year number from the copyright string into a constant
(This is inspired by Metacity commit 45cbaa2 by Thomas Thurman, but
much simpler - the use of g_date_strftime("%Y") ended up being just
%d for all 90+ current translations)
2010-02-10 10:27:48 -05:00
Thomas James Alexander Thurman
c0d2ead351 collapse several strings into one for the translators' benefit.
* src/ui/theme-parser.c: collapse several strings into one
        for the translators' benefit.

svn path=/trunk/; revision=4117
2010-02-10 09:59:28 -05:00
Owen W. Taylor
6ffe5f8343 meta_workspace_set_builtin_struts(): optimize out non-changes
meta_workspace_set_builtin_struts() is slightly expensive; it involves
discarding all our cached computed information about the layout of the
workspace. So catch calls to set_builtin_struts() that don't change
anything.

https://bugzilla.gnome.org/show_bug.cgi?id=609546
2010-02-10 09:56:47 -05:00
Owen W. Taylor
2a823ef3e4 Fix crash when struts change during grab operation
Since meta_workspace_invalidate_work_area() frees the edges
workspace->screen_edges and workspace->monitor_edges, we must clean up
our cached edge resistance data when the invalidate_work_area() is
called on the active workspace, or when the workspace changes.

Make the computation of the edge resistance data lazy so that it
will be recomputed the next time we try to access it.
meta_display_compute_resistance_and_snapping_edges() is made
private to edge-resistance.c

Invaliding the data when active workspace changes also will improve
correctness for edge resistance when the current workspace changes
during a grab operation. (Even with this fix we still don't try to
handle window positions changing during a grab operation; that can't
cause a crash since, unlike screen and monitor edges, the window edges
are freshly allocated, it will just cause slight oddness in that
corner case.)

Root cause tracked down due to much effort by Jon Nettleton.
https://bugzilla.gnome.org/show_bug.cgi?id=608800
2010-02-09 17:00:20 -05:00
Theppitak Karoonboonyanan
5159c3f3ca Updated Thai translation. 2010-02-07 20:20:59 +07:00
Petr Kovar
d092924961 Update Czech translation 2010-02-05 00:05:37 +01:00
Colin Walters
e14132b826 [introspection] Include xlib.gir
We need this for KeySym at least.

https://bugzilla.gnome.org/show_bug.cgi?id=607125
2010-02-03 14:17:41 -05:00
Simos Xenitellis
df36ff638e Updated Greek translation, closes #608572 2010-01-31 05:06:24 -08:00
Ivar Smolin
ad1fee8233 Updating Estonian translation 2010-01-31 10:39:20 +02:00
Ísis Binder
3883d511a9 Updated Brazilian Portuguese translation. 2010-01-29 12:40:29 -05:00
Thomas Thurman
10803b0d25 Update Shavian translation 2010-01-28 19:43:33 -05:00
Jamil Ahmed
a570a57863 Updated Bengali translation 2010-01-29 01:04:35 +06:00
Matej Urbančič
a7590f9717 Updated Slovenian translation 2010-01-27 12:48:28 +01:00
Thomas Thurman
35224ca8d4 post-release bump to 2.28.2 2010-01-25 19:30:02 -05:00
Thomas Thurman
40563e4f84 2.28.1 released 2010-01-25 19:28:50 -05:00
Alexander Shopov
c30901e9be Updated Bulgarian translation 2010-01-25 22:40:20 +02:00
Jorge González
4fc0a91b31 Updated Spanish translation 2010-01-25 19:41:10 +01:00
Dan Winship
576417648a Work around Xlib 64-bit "specialness"
When putting 32-bit properties into longs on 64-bit architectures,
XGetWindowProperty assumes the values are supposed to be signed, and
so it sign-extends values greater than 0x7fffffff. So if they *aren't*
supposed to be signed, we need to chop off the high bits ourselves.

(Most CARDINAL-valued properties only end up using small values
anyway, so it doesn't matter, but _NET_WM_WINDOW_OPACITY uses the full
range, and so was previously failing on 64-bit machines.)

https://bugzilla.gnome.org/show_bug.cgi?id=605678
2010-01-25 11:07:32 -05:00
Owen W. Taylor
0aace5230f Cleanup: split MetaSide from MetaDirection
The MetaDirection enumeration had META_SIDE_* values in it that
were used in some places where an enum with only four directions
was needed. Split this off into a separate enum called MetaSide
and use that enum name where appropriate.
2010-01-22 12:31:20 -05:00
Kjartan Maraas
8d5ba7a6d7 Updated Norwegian bokmål translation 2010-01-22 14:58:23 +01:00
Kjartan Maraas
f8153b84de Updated Norwegian bokmål translation 2010-01-22 14:35:54 +01:00
Matthias Clasen
fac5b0c9e7 Reduce GConf roundtrips 2010-01-21 16:54:22 -05:00
Luis Torres
eb06413188 Replace deprecated symbols in theme-viewer.c
-Replaced calls to gtk_toolbar_insert_stock with gtk_toolbar_insert
-Created appropriated GtkToolButtons
2010-01-21 16:32:35 -05:00
Luis Torres
066c870271 Replaced deprecated symbols in metacity-window-demo.c
-Replaced calls to gtk_toolbar_insert_stock with gtk_toolbar_insert
-Created appropriate GtkToolButton items
2010-01-21 16:31:13 -05:00
Thomas Hindoe Paaboel Andersen
1a92fa788d Replace usage of deprecated gtk api
Fixes part of GNOME Bug #572332
2010-01-21 15:03:47 -05:00
Theppitak Karoonboonyanan
3a0ab1cc0c fix documentation of mouse_button_modifier 2010-01-21 10:58:04 -05:00
Vincent Untz
8a7d588bb0 Increase ping timeout delay to 5s 2010-01-20 15:11:02 -05:00
Peter Bloomfield
4943d79d68 prevent window self-maximisation 2010-01-20 10:59:07 -05:00
Emmanuele Bassi
5de10c34b7 Update the Git ignore file 2010-01-19 02:06:31 +00:00
Emmanuele Bassi
2fbe4c2388 Do not use CGL_* symbols
The CGL_* defines in COGL were always meant to be private and should
have never been exposed in the first place. The API in COGL has been
updated to never require them starting from 1.1, but using the original
GL symbols has always been the intent of the API.

This commit removes the CGL_TEXTURE_RECTANGLE_ARB usage in favour of the
ARB-sanctioned GL_TEXTURE_RECTANGLE_ARB enumeration value.

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>

https://bugzilla.gnome.org/show_bug.cgi?id=607398
2010-01-19 01:34:22 +00:00
alexisdm59
767cb27f78 check window has frame before flashing it 2010-01-17 13:41:59 -05:00
Erdal Ronahi
b8c75c3fc0 Updated Kurdish translations, author simurg56 2010-01-16 00:13:41 +01:00
Owen W. Taylor
edeadf62ef Don't call IceCloseConnection() behind libSM's back
The ICE connection is opened by libSM; we can't just close it when
we get an IOError on the ICE connection; instead call SmcCloseConnection()
and mark the connection as closed. This will prevent a segfault if we
exit out of the metacity main loop and get to meta_finalize().

https://bugzilla.gnome.org/show_bug.cgi?id=604867
2010-01-14 16:43:51 -05:00
Kjartan Maraas
5ac80057c4 Updated Norwegian bokmål translation 2010-01-13 22:29:55 +01:00
Inaki Larranaga Murgoitio
210e30556e Updated Basque language 2010-01-13 19:19:09 +01:00
Daniel Nylander
0487b4213f Updated Swedish translation 2010-01-09 17:33:27 +01:00
Maxim V. Dziumanenko
8f29c14ac4 Update Ukrainian translation 2010-01-06 17:38:35 +02:00
Matej Urbančič
9543d8be10 Updated Slovenian translation 2010-01-06 15:34:35 +01:00
Jorge González
43e0003e79 Updated Spanish translation 2010-01-06 14:37:45 +01:00
Travis Watkins
30e63a7244 store timestamp for _NET_WM_CM_SX selection 2010-01-05 17:29:06 -05:00
Thomas Thurman
575f520461 Throw away result of write(); it's not important 2010-01-05 15:44:01 -05:00
Claude Paroz
df618c9e91 Remove markup from translated string 2010-01-05 15:39:50 -05:00
Djavan Fagundes
ebd13a4bae Updated Brazilian Portuguese translation 2009-12-31 19:41:18 -02:00
Lucian Adrian Grijincu
7aa54b5a23 Update Romanian translation 2009-12-19 12:38:01 +02:00
Nickolas Lloyd
b20cb36f5d Migrate to new cogl framebuffer framework
The 1.2 API for draw-buffers/framebuffers has changed a bit
since the code in mutter-texture-tower.c was written; adapt to
the changes.

https://bugzilla.gnome.org/show_bug.cgi?id=604200
2009-12-14 11:59:08 -05:00
Owen W. Taylor
86f8c1863e Work around Mesa problem with PFNGLACTIVETEXTUREPROC
PFNGLACTIVETEXTUREPROC (a GL-1.2 addition) was inadvertently missing
from some recent versions of Mesa (like that in Fedora 11.) Use
the identical PFNGLACTIVETEXTUREARBPROC instead.
2009-11-30 10:51:45 -05:00
Frederic Peters
19d85c8566 Fix build failure from SIGCHLD nexus left overs
Looks like there are some leftovers in include/util.h:

/**
 * An object which exists purely to attach signals to; this is to receive
 * signals when a child process exits.  The signal is "sigchld" with no detail.
 */
extern MetaNexus *sigchld_nexus;

Removing those lines fixes the build
2009-11-29 20:40:12 -05:00
Khaled Hosny
4241f91a0a Updated Arabic translation 2009-11-28 06:25:49 +02:00
Khaled Hosny
05624f099a Updated Arabic translation 2009-11-28 05:59:23 +02:00
Nils-Christoph Fiedler
920f4099b6 Added LowGerman translation 2009-11-26 22:05:51 +01:00
Nils-Christoph Fiedler
aa26750e01 Added LowGerman translation 2009-11-26 22:05:03 +01:00
Owen W. Taylor
bdb3be7084 Fix compilation with older libGL
the mutlitexture and texture_rectangle extensions have recently
been incorporated into the GL core; fixes needed to work with
libGL that proceeds that:

GL_TEXTURE_RECTANGLE_ARB - use _ARB name
glActiveTextureARB() - use get_proc_address

https://bugzilla.gnome.org/show_bug.cgi?id=602870
2009-11-24 15:58:42 -05:00
Owen W. Taylor
14987f2b21 Remove XOR gc only used in removed reduced-resources mode
Remove screen.root_xor_gc; this was only used for XOR drawing
in reduced-resources mode, which was removed.

https://bugzilla.gnome.org/show_bug.cgi?id=602740
2009-11-24 15:40:35 -05:00
Owen W. Taylor
47af6a0bbf Nice looking scaledown with mipmap emulation
Add MutterTextureTower, an abstraction for getting a image with
the right level of detail for rendering at a particular scale,
by manually scaling down by powers of two.

This results in much better looking scaled window images when
mipmaps can't be used with texture_from_pixmap (which is the
typical case for current GL drivers.)

When framebuffer objects are available, they are used to do
the scaledown using the GPU without having to pull the data
back from video memory. A software codepath is also available
for the case when FBO's are not present, though performance
will suffer

https://bugzilla.gnome.org/show_bug.cgi?id=601032
2009-11-24 15:40:35 -05:00
Lennart Poettering
1487578ff4 sound: ask libcanberra to cache alert/desktop switch sounds
These sounds are good candidates for caching in the sound server, to
save a bit of CPU and make reaction faster. Hence, tell libcanberra to
cache them.
2009-11-20 11:38:21 -05:00
Lennart Poettering
5a03a5d578 tooltip: set window type hint for self-drawn tooltips to GDK_WINDOW_TYPE_HINT_TOOLTIP
libcanberra generates specific tooltip popup sounds and for that
recognizes the tooltip windows by the GtkWindowTypeHint set for them.

This trivial patch simply sets the hint for the self-drawn tooltips
metacity uses.
2009-11-20 11:36:25 -05:00
Lennart Poettering
2dd137329d bell: increase bell rate limit from 1/s to 1/100ms
Right now metacity issues only 1 bell event per second. This is
feels buggy when triggering multiple alarm sounds in a terminal.

This patch simple increases the limit to 1/100ms. 100ms is probably a
good choice since the HIG recommends that all user reaction should
happen within 100ms. With this applied pressing 'Left' in gnome-terminal
feels much more responsive.

https://bugzilla.redhat.com/show_bug.cgi?id=498608
2009-11-20 11:36:10 -05:00
Dan Winship
db37deb589 Fix handling of SIGCHLD
The commit that removed metacity-dialog added a global SIGCHLD handler
that caused problems by (a) calling waitpid(-1) and thus breaking
g_child_watch for everyone else, and (b) doing too much from a signal
handler and sometimes causing deadlocks (bug 596200).

This removes the global handler and has each zenity user create its
own child watch to watch for exit. (It also fixes the window class of
the zenity dialogs, so that meta_window_present_delete_dialog()
will work again.)
2009-11-20 11:34:50 -05:00
Ray Strode
ec7a3c516d Don't call meta_finalize from SIGTERM handler
It's not a legal function to call from a signal handler.
Instead defer until going back to the main loop.

https://bugzilla.gnome.org/show_bug.cgi?id=600864
2009-11-20 11:16:02 -05:00
Dan Winship
988d2ffab6 Fix handling of SIGCHLD
The commit that removed metacity-dialog added a global SIGCHLD handler
that caused problems by (a) calling waitpid(-1) and thus breaking
g_child_watch for everyone else, and (b) doing too much from a signal
handler and sometimes causing deadlocks (bug 596200).

This removes the global handler and has each zenity user create its
own child watch to watch for exit. (It also fixes the window class of
the zenity dialogs, so that meta_window_present_delete_dialog() will
work again.)
2009-11-20 11:15:58 -05:00
Tomas Frydrych
5e2c66e241 [MetaDisplay] added "window-marked-urgent" signal
Having a MetaDisplay window-marked-urgent signal when a window sets its urgent
hint allows for centralized processing

https://bugzilla.gnome.org/show_bug.cgi?id=600068
2009-11-20 08:57:36 +00:00
Tomas Frydrych
0ccfb0d781 [MetaWindow] added urgent property
Property tracking ICCCM urgency hint

https://bugzilla.gnome.org/show_bug.cgi?id=600068
2009-11-20 08:51:19 +00:00
Nickolas Lloyd
01ce961c00 Fix typo in test-resizing.c
Check heightp not *heightp before assigning to heightp

https://bugzilla.gnome.org/show_bug.cgi?id=602349
2009-11-19 17:40:50 -05:00
Tomas Frydrych
7579b691df [MetaDisplay] Added window-demands-attention signal
Having a MetaDisplay::window-demands-attention signal allows to deal with
windows demanding attention in a cetralized fashion.

The signal is emitted when a window is created with initial demands-attention
state and/or when the state changes later on.

Based on original patch by Jon Nettleton.

https://bugzilla.gnome.org/show_bug.cgi?id=597052
2009-11-17 10:06:25 +00:00
Tomas Frydrych
2a14deab0c [MetaWindow] Added boolean demands-attention property
https://bugzilla.gnome.org/show_bug.cgi?id=588065
2009-11-17 10:06:06 +00:00
Kjartan Maraas
1acefb9eac Updated Norwegian bokmål translation. 2009-11-15 15:06:26 +01:00
Owen W. Taylor
fb45b8f45c Correctly initialize window->input field
With the change from bug 582639, we no longer call the reload
functions for properties that are not initially set, so the
initialization of fields in window.c has to match what
window-props.c would set for a missing property.

There was only one discrepancy, window->input, which needs
to be set to TRUE by default (or a window missing a WM_HINTS
property won't get focus); we also add explicit initializers
for a couple of fields that were getting 0-initialized
to the correct default value of FALSE for consistency with
the explicit intialization of the rest of the fields.

Bug reported by Dominique Leuenberger
https://bugzilla.gnome.org/show_bug.cgi?id=601228
2009-11-12 13:57:11 -05:00
Maxim Ermilov
d59a9c2e8a Correct meta_workspace_list_windows annotation.
https://bugzilla.gnome.org/show_bug.cgi?id=591912
2009-11-12 11:50:07 -05:00
Gil Forcada
a1c3d8723d Minor fixes to Catalan translation 2009-11-05 00:24:21 +01:00
Carles Ferrando
c4bd65e97c Updated Catalan (Valencian) translation 2009-11-05 00:20:36 +01:00
Peteris Krisjanis
eac3a2d7ac Updated Latvian translation. 2009-11-02 22:41:55 +02:00
Thomas Thurman
55bb584778 Shavian translation 2009-10-31 21:57:06 -04:00
Reşat SABIQ
4584943531 Another tiny update for Crimean Tatar (Crimean Turkish) translation 2009-10-30 03:34:44 -05:00
Reşat SABIQ
55d2bc0e0b Another update for Crimean Tatar (Crimean Turkish) translation 2009-10-30 03:07:03 -05:00
Reşat SABIQ
c0cc2fa1b8 Minor wording change 2009-10-30 02:11:58 -05:00
Reşat SABIQ
c1ecbd4de1 Added Crimean Tatar (Crimean Turkish) translation 2009-10-30 01:59:58 -05:00
Khaled Hosny
0fb6b8a8ff Updated Arabic translation 2009-10-29 11:18:31 +02:00
Khaled Hosny
78ba9adfed Spelling fixes 2009-10-29 11:04:46 +02:00
Owen W. Taylor
3f642ea34f Add XFCE Terminal as a terminal
Include the XFCE terminal program 'Terminal' in the list of terminals.

https://bugzilla.gnome.org/show_bug.cgi?id=599262
2009-10-21 23:11:01 -04:00
Åsmund Skjæveland
1a3927b40c Updated Norwegian Nynorsk translation 2009-10-17 18:28:32 +02:00
Khaled Hosny
b09d73ab68 Updated Arabic translation 2009-10-16 20:27:15 +02:00
Colin Walters
9311addca3 Add "window-created" signal to MetaDisplay, "unmanaged" signal for MetaWindow
For some consumers it's significantly more convenient to be able
to directly connect to a signal on the Window to know when
Mutter is done with it, rather than having to connect to each
Workspace object (and handle workspace additions, etc.).

Similarly, add window-created which acts globally.

https://bugzilla.gnome.org/show_bug.cgi?id=598289
2009-10-14 14:39:33 -04:00
Richard Hughes
3c76478510 Bump version to 2.28.1 2009-10-14 17:02:44 +01:00
Leonid Kanter
545551e2bc Updated Russian translation 2009-10-11 16:24:24 +03:00
Petr Kovar
d5e0a95ff1 Updated Czech translation 2009-10-10 18:43:53 +02:00
Tomas Frydrych
e811109566 [MutterWindow] Fixed potential NULL dereference
Avoid dereferencing NULL when the window is not yet placed on a workspace.
Added doc comment, noting this function is deprecated.

https://bugzilla.gnome.org/show_bug.cgi?id=592567
2009-10-09 16:50:38 +01:00
Ray Strode
0f805bfdfb Change default cycle_group keybinding to Alt-grave
It makes more sense because the grave key is close
to the tab and escape keys which the other cycle
keybindings use.

This always works better for gnome-shell, which
switchings between applications by default with alt-tab.
The user can now alt-tab to the application they want,
and then move their finger to the grave key to select
the window they want.
2009-10-09 10:21:52 -04:00
Owen W. Taylor
200cd629df Bump version to 2.28.0 2009-10-07 18:40:18 -04:00
Owen W. Taylor
e8a29c1e82 Work around race condition focusing a window on a different workspace
When we focus a window on a different desktop, and the calc_showing
idle that hides/shows the windows gets run before we get focus events
back from X, we think that we are hiding the window with the focus
so we focus a "random" window to avoid leaving the user with no focus.

Work around this temporarily by checking display->expected_focus_window;
this isn't a perfect fix because there are cases where
display->expected_focus_window corresponds to a window we tried to
focus in the past but failed, but it makes things work fairly well.

https://bugzilla.gnome.org/show_bug.cgi?id=597352
2009-10-07 17:28:04 -04:00
Tomas Frydrych
8589e4f3d3 [MutterScreen] Added workareas-changed signal
This signal is emitted when workarea of any workspace belonging to the screen
changes.

https://bugzilla.gnome.org/show_bug.cgi?id=597009
2009-10-07 12:07:00 +01:00
Tomas Frydrych
948e54772d [MutterWindow] Added meta_window_get_transient_for_as_xid()
Accessor for the transient xid hint.

https://bugzilla.gnome.org/show_bug.cgi?id=597010
2009-10-07 11:56:49 +01:00
Claude Paroz
2d4b05a71b Updated French translation 2009-10-05 18:30:50 +02:00
Christian Kirbach
a6433e84f5 Updated German translation 2009-10-04 19:00:26 +02:00
Owen W. Taylor
083854e2de Create the dummy timeline for repaint laters with an "infinite" duration.
When we create the timeline dummy timeline to ensure that our later
functions that should be run during repaint get called called, pass in
G_MAXUINT to make the duration very long, not 0. (It will get reset
whenever there is no repaint later to run, so the fact that G_MAXUINT
is only ~40 days isn't a problem.)

This fixes a warning from Clutter, but also a real problem.
2009-10-02 16:12:11 -04:00
Owen W. Taylor
3508c4aa87 Use "later functions" to fix priority problems with Clutter redraw
There was a problem where if, for example, a restack was triggered
out of a clutter event handler, then after Clutter processed the
events, it would proceed immmediately on to repaint the stage without
ever returning control to the GLib main loop. So even though we
had an idle handler installed with a higher priority than the
Clutter stage repainting the clutter stage repainting would happen
first and we'd get a wrong frame.

Fix this by introducing the idea of "later functions", which abstract
the idea of "doing something later" away from g_idle_add() and use
a combination of GLib idle functions and Clutter "repaint functions"
to get our callbacks triggered at the right time, even when they
are installed from a clutter event handler.

https://bugzilla.gnome.org/show_bug.cgi?id=596334

This also resolve a FIXME where MUTTER_PRIORITY_BEFORE_REDRAW
could starve stage repainting.
2009-10-02 15:50:16 -04:00
Dan Winship
d04b15ee25 Remove MetaAltTabHandler
gnome-shell is no longer using MetaAltTabHandler, so there's no need
to keep that abstraction around.

This reverts commit 1d5117a6 (and a comment from 7b0ba87b), with a bit
of rebasing and whitespace cleanup.

https://bugzilla.gnome.org/show_bug.cgi?id=596210
2009-10-02 15:47:49 -04:00
Colin Walters
d6143e4c73 mutter_plugin_get_windows returns *Mutter*Window, not MetaWindow 2009-09-28 19:30:24 -04:00
Colin Walters
d8ffc3c187 [mutter_plugin_get_windows] Document it 2009-09-28 16:55:37 -04:00
Owen W. Taylor
2af788956e mutter_begin_modal_for_plugin(): Check result of XGrabKeyboard()
The return value of XGrabKeyboard() wasn't actually being assigned
to the 'result' variable so we didn't notice when grabbing the
keyboard failed.

https://bugzilla.gnome.org/show_bug.cgi?id=596343
2009-09-25 12:59:13 -04:00
Colin Walters
d399141d13 Add meta_window_get_stable_sequence
Useful for plugins which want to order windows in a stable
fashion.

https://bugzilla.gnome.org/show_bug.cgi?id=595882
2009-09-22 12:43:35 -04:00
Frédéric Péters
f6f899f103 [release] 2.28.0 2009-09-22 15:41:33 +02:00
Shankar Prasad
5b8919a246 Updated Kannada(kn) translation 2009-09-21 10:57:57 +05:30
Petr Kovar
fe1989979c Updated Czech translation 2009-09-21 03:15:22 +02:00
Amitakhya Phukan
0895fa9331 Updating Assamese translations 2009-09-20 15:53:01 +05:30
Changwoo Ryu
b90fe0c52a Korean translation update 2009-09-20 09:34:59 +09:00
David Planella
ab0e22159c Updated Catalan translation 2009-09-19 18:29:25 +02:00
Takayuki KUSANO
6ac0afbce0 Updated Japanese translation 2009-09-20 00:56:16 +09:00
Rajesh Ranjan
9532527e52 maithili update, translated by Sangeeta Kumari 2009-09-18 18:28:40 +05:30
Ani
defdf9f34c Updated Malayalam Translations 2009-09-17 23:44:05 +05:30
Yaron Shahrabani
a7dce2dc4e Updated Hebrew translation 2009-09-17 20:01:46 +03:00
Maxim V. Dziumanenko
ea8c51f8f3 Added Ukrainian translation 2009-09-17 19:02:45 +03:00
Manoj Kumar Giri
1e66878447 Upadated Oriya Translation 2009-09-17 18:15:08 +05:30
Manoj Kumar Giri
6cfbdebf6a Upadted Oriya Translation 2009-09-16 19:17:46 +05:30
Antón Méixome
a4469dcc14 Updated Galician Translation 2009-09-16 14:56:21 +02:00
Owen W. Taylor
ac3eac7154 Bump version to 2.27.5 2009-09-15 17:30:07 -04:00
Ani
65ac9065fa Updated Malayalam Translations 2009-09-15 21:26:14 +05:30
Rajesh Ranjan
5143e6763b hindi update by Rajesh Ranjan 2009-09-15 15:12:20 +05:30
Theppitak Karoonboonyanan
5660a8e9f5 Updated Thai translation. 2009-09-15 14:38:08 +07:00
A S Alam
bc2b17df0b Updating Translation for Punjabi 2009-09-15 07:25:17 +05:30
Ani
f9e7c95348 Updaeted Malayalam Translations 2009-09-15 02:54:41 +05:30
Denis ARNAUD
c6afec4759 Updated breton translation 2009-09-14 06:32:03 +02:00
Denis ARNAUD
eb13498fff added br in LINGUAS file 2009-09-14 06:30:37 +02:00
Lucian Adrian Grijincu
163057f521 Updated Romanian translation 2009-09-14 00:10:52 +03:00
Ask H. Larsen
d8ff1f9873 Updated Danish translation 2009-09-13 03:45:00 +02:00
Bruce Cowan
97b7760de8 Updated British English translation 2009-09-12 21:23:02 +01:00
Tommi Vainikainen
acca0f6946 Updated Finnish translation 2009-09-12 22:27:52 +03:00
Matej Urbančič
f3f6d67d46 Updated Slovenian translation 2009-09-12 09:52:02 +02:00
krishnababu k
63773d5226 Updated Telugu Translations 2009-09-11 20:49:57 +05:30
Mario Blättermann
4e4559fc8c Updated German translation 2009-09-10 21:14:43 +02:00
Gintautas Miliauskas
44d540d36c Updated Lithuanian translation. 2009-09-10 14:44:47 +03:00
Fábio Nogueira
c6253a6515 Corrected a bad spacing after a quotation mark in Brazilian Portuguese
translation
2009-09-09 10:06:28 -03:00
Sweta Kothari
65a5ec2ef3 Updated Gujarati Translations 2009-09-09 15:50:22 +05:30
Sandeep Shedmake
70e8b35944 Updated Marathi Translations 2009-09-09 12:54:03 +05:30
Frédéric Péters
ddba25a674 Post-release bump to 2.27.2. 2009-09-08 23:12:45 +02:00
Frédéric Péters
14e6cb6a8f 2.27.1 release 2009-09-08 23:06:42 +02:00
Miloš Popović
d4619150f3 Updated Serbian translation 2009-09-08 13:36:43 +00:00
Colin Walters
5c1a1a2dd5 Fix Super_L specification for overlay_key
A recent commit fixed the schema association, which revealed that our
<Super_L> was wrong, should just be Super_L.
2009-09-07 14:27:09 -04:00
Chao-Hsiung Liao
7cfa690aaf Updated Traditional Chinese translation(Hong Kong and Taiwan) 2009-09-06 15:01:55 +08:00
Owen W. Taylor
8d663ff055 Bump version to 2.27.4
Remove comment about Fibonacci micro numbering. We aren't going
to do that.
2009-09-04 19:00:03 -04:00
Owen W. Taylor
0b86343dd0 Export a _GNOME_WM_KEYBINDINGS property
We need a way to indicate to gnome-control-center that we want the
keybindings capplet to show the Window Manager keybindings for Metacity;
do this through a _GNOME_WM_KEYBINDING property we put on the
_NET_SUPPORTING_WM_CHECK window and set to Mutter,Metacity.

See http://bugzilla.gnome.org/show_bug.cgi?id=594066 for the
gnome-control-center part of this.

http://bugzilla.gnome.org/show_bug.cgi?id=594067
2009-09-04 18:25:39 -04:00
Claude Paroz
e127898312 Updated French translation 2009-09-04 21:32:33 +02:00
Inaki Larranaga Murgoitio
51f83f25e6 Updated Basque language 2009-09-04 11:56:53 +02:00
Colin Walters
8f3da9f68a Use meta_window_set_user_time for setting user time consistently
This is a followup to making user-time a GObject property, this
way we get notifications.
2009-09-03 20:58:19 -04:00
Colin Walters
4c1998f137 Annotate meta_screen_get_active_workspace as (transfer none) 2009-09-03 20:57:39 -04:00
Colin Walters
84dc1c1b85 [MetaWindow] Make user-time a GObject property
Notification of changes are useful for code ordering windows.
2009-09-03 20:57:39 -04:00
Owen W. Taylor
326110e38d Fix owner and applyto for /apps/mutter/general/overlay_key schema
The owner field and the applyto key of
for /schemas//apps/mutter/general/overlay_key were still referencing
metacity not mutter, fix.
2009-09-03 14:48:20 -04:00
Duarte Loreto
f63b81c52a Updated Portuguese translation 2009-09-03 01:08:03 +01:00
Owen W. Taylor
bd2e221da3 Fix broken META_IS_SCREEN macro
Should use META_TYPE_SCREEN not META_SCREEN_TYPE.
2009-09-01 09:38:40 -04:00
Shankar Prasad
1fe673703f Updated Kannada(kn) translation 2009-09-01 11:33:20 +05:30
Dan Winship
c10467d22e Add meta_screen_get_n_monitors() and meta_screen_get_monitor_geometry()
http://bugzilla.gnome.org/show_bug.cgi?id=593686
2009-08-31 18:57:29 -04:00
Owen W. Taylor
e21ec0a271 Fix the dependency for mutter-enum-types.h
mutter-enum-types.h is built from $(libmutterinclude_base_headers) not
the non-existent $(mutter_source_h)
2009-08-31 18:12:29 -04:00
Dan Winship
3a1e492afc Refer to monitors as "monitors" rather than "xineramas"
http://bugzilla.gnome.org/show_bug.cgi?id=593686
2009-08-31 14:39:48 -04:00
Colin Walters
e83c24c91b Add .AUTOPARALLEL flag to Makefile
This automatically enables parallelism with the patched make,
and flags us as maintaining a parallel build.
2009-08-30 20:21:02 -04:00
Colin Walters
81183c71c1 Add public meta_window_get_user_time
Useful for sorting windows by interaction time.
2009-08-30 20:18:11 -04:00
Og B. Maciel
979298ce57 Updated mailing list address. 2009-08-30 12:15:18 -04:00
Baris Cicek
66e727e1b2 Updated Turkish translation. 2009-08-30 18:10:53 +03:00
Jorge González
35b1dda3a3 Updated Spanish translation 2009-08-30 12:47:47 +02:00
Ivar Smolin
6925779f59 Updating Estonian translation 2009-08-30 13:39:01 +03:00
Gabor Kelemen
125d7daf4a Hungarian translation updated 2009-08-29 14:27:23 +02:00
Gabor Kelemen
57c5ea4bd5 Hungarian translation updated 2009-08-29 14:26:10 +02:00
Gabor Kelemen
e75fbdb136 Hungarian translation updated 2009-08-29 14:25:03 +02:00
Gabor Kelemen
cb1020b26d Another update 2009-08-29 14:06:44 +02:00
Gabor Kelemen
e1945506f3 Hungarian translation updated 2009-08-29 13:59:56 +02:00
Owen W. Taylor
8d402971a8 Bump version to 2.27.3 2009-08-28 19:14:34 -04:00
Steve Frécinaux
7e0087304b Add meta_window_is_skip_taskbar
Accessor for the 'skip-taskbar', which will allow gnome-shell not to
consider windows with this hint in its overview thunbnails.
2009-08-28 19:05:17 +02:00
Owen W. Taylor
20b02e738c Make MUTTER_DEBUG_XINERAMA override active Xinerama
It seems a bit cleaner to make the MUTTER_DEBUG_XINERAMA variable
that sets up fake Xinerama take effect even if Xinerama is active;
this means we don't count on Xinerama (or Xrandr if we switch tot
that) special casing the case of one monitor.

http://bugzilla.gnome.org/show_bug.cgi?id=593404
2009-08-28 12:57:29 -04:00
Owen W. Taylor
d042dba4d6 Add meta_display_get_grab_op()
Add a function to determine the current grab op. This can be useful
in a plugin to avoid over-grabbing an X grab held by Mutter.

http://bugzilla.gnome.org/show_bug.cgi?id=593399
2009-08-28 12:27:46 -04:00
Volker Sobek
a69ce37546 Unminimize windows passed to meta_workspace_activate_with_focus()
Unminimize minimized windows passed to meta_workspace_activate_with_focus()
by calling meta_window_activate() on them instead of meta_window_focus()
and meta_window_raise(). This fix makes sense because for the existing
usage inside Mutter meta_workspace_activate_with_focus() is never called
on a minimized window and for calls from outside Mutter there is no
point in focusing a minimized window without unminimizing it first.

Add a doc comment to meta_workspace_activate_with_focus().

http://bugzilla.gnome.org/show_bug.cgi?id=592393
2009-08-28 12:10:41 -04:00
Luca Ferretti
3a798112f2 Updated Italian translation 2009-08-28 09:55:24 +02:00
Tomas Frydrych
3e09b4a725 Check for NULL in meta_screen_tab_popup_destroy() instead of asserting
This function is getting called even when no MetaAltTabHandler object is
installed on the screen, so we need to handle the NULL gracefully.
2009-08-27 17:49:13 +01:00
Inaki Larranaga Murgoitio
c5dd3e5542 Updated Basque language 2009-08-27 17:36:11 +02:00
Ivar Smolin
2fa9cbfd9e Updating Estonian translation 2009-08-27 10:06:35 +03:00
Daniel Nylander
c2c0de1696 Updated Swedish translation 2009-08-27 08:52:02 +02:00
Javier Jardón
cc46d2ebb4 Stop using gtk_toolbar_insert_stock()
Add helper functions instead of using this deprecated symbol.

http://bugzilla.gnome.org/show_bug.cgi?id=587991

A#	../stamp-mutter-marshal.h
2009-08-26 12:57:29 -04:00
Javier Jardón
d0510d8ea2 Stop using GTK_SIGNAL_FUNC, gdk_pixbuf_render_to_drawable
Replace with non-deprecated gdk_draw_pixbuf(), G_CALLBACK()

http://bugzilla.gnome.org/show_bug.cgi?id=587991
2009-08-26 12:56:04 -04:00
Owen W. Taylor
7b0ba87b24 Fix custom-alt-tabs for single-handling of key events
The changes to enforce single handling of all key events were breaking
custom-alt-tab keypress handlers, since that code was assuming that
key event would get to process_tab_grab(), and then maybe to
process_event() and then to the plugin's xevent_filter to detect a
key release.

We centeralize all of this handling into process_tab_grab() and either

 - Invoke a custom handler for the key press
 - Select the current window on modifier release by calling a  new
   pseudo-binding "tab_popup_select"
 - Cancel the grab on an unbound key by calling a new pseudo-binding
   "tab_popup_cancel"

http://bugzilla.gnome.org/show_bug.cgi?id=590754
2009-08-26 12:26:58 -04:00
Owen W. Taylor
67682a2683 Add a modal mode for plugins
mutter_plugin_begin_modal() and mutter_plugin_begin_modal() allow putting
a plugin into a "modal" state. This means:

 - The plugin has the keyboard and mouse grabbed
 - All keyboard and mouse events go exclusively to the plugin

mutter-plugin.[ch]: Add public API
compositor.c compositor-private.h: Implement the API
mutter-plugin-manager.c: When reloading plugins, make sure none of them
  are modal at that moment, and if so force-unmodal them.
common.h: Add META_GRAB_OP_COMPOSITOR
display: When display->grab_op is META_GRAB_OP_COMPOSITOR forward relevant
  events exclusively to the compositor.

http://bugzilla.gnome.org/show_bug.cgi?id=590754
2009-08-26 12:26:58 -04:00
Owen W. Taylor
b1776b5ae5 Enforce a policy of single-handling of key events
Only process each key event once. If all keys are grabbed, then
don't also look for handlers for a key shortcut after processing
the grab op. If all keys are grabbed or we find a key shortcut,
don't pass the event on to the compositing mananger.

http://bugzilla.gnome.org/show_bug.cgi?id=590754
2009-08-26 12:26:58 -04:00
Thomas James Alexander Thurman
7a6968cb46 Only skip the first window in the alt-tab chain if it's actually the
* src/core/display.c: Only skip the first window in
        the alt-tab chain if it's actually the current window
        (urgent windows on other workspaces may precede it).
        Fixes #535887.

http://bugzilla.gnome.org/show_bug.cgi?id=591913

(Metacity commit 92bfe34716)
2009-08-26 15:29:09 +01:00
Runa Bhattacharjee
23af4ee93e Updated Bengali India Translations 2009-08-26 15:42:33 +05:30
Jorge González
0317562605 Updated Spanish translation 2009-08-26 07:57:36 +02:00
Daniel Nylander
1861e0b2cc Updated Swedish translation 2009-08-26 06:04:00 +02:00
Djavan Fagundes
e5974809e8 Updated Brazilian Portuguese translation 2009-08-25 15:21:02 -03:00
Tomasz Dominikowski
abfae17b9a Updated Polish translation 2009-08-25 17:47:45 +02:00
ifelix
84b1a62ad2 Updated Tamil Translations 2009-08-25 17:27:29 +05:30
Denis Arnaud
b6bcaec9bc Updated breton translation 2009-08-25 12:43:20 +02:00
Denis Arnaud
f19ed84cc4 Added br in LINGUAS 2009-08-25 12:43:20 +02:00
Alexander Shopov
6c5a946fda Updated Bulgarian translation 2009-08-24 22:52:12 +03:00
Owen W. Taylor
d58c9a57c6 Avoid accessing freed memory when being replaced
If we are replaced via the window manager selection, then we close
the MetaDisplay before meta_finalize() runs. We should be careful
not to try to close the display again (and access already freed
memory) in that case, so clear the global 'the_display' variable.

See Metacity bug http://bugzilla.gnome.org/show_bug.cgi?id=588119

http://bugzilla.gnome.org/show_bug.cgi?id=592742
2009-08-24 14:29:16 -04:00
Claude Paroz
c6ffc9427e Add missing quotes in strings (Fixes #572046) 2009-08-24 19:49:29 +02:00
krishnababu k
0f1e64f3b2 Updated Telugu Translations 2009-08-24 17:53:05 +05:30
krishnababu k
1ce5ad3003 Added new entry for Telugu [te] in LINGUAS 2009-08-24 17:52:48 +05:30
Khaled Hosny
64694955c0 Updated Arabic translation 2009-08-23 21:40:47 +03:00
Theppitak Karoonboonyanan
97a90d8122 Updated Thai translation. 2009-08-23 15:50:57 +07:00
Changwoo Ryu
3cd2c08277 Update Korean translation 2009-08-23 04:14:10 +09:00
Frédéric Péters
d804a1f146 Remove deprecated Encoding key from desktop files 2009-08-22 14:24:22 +02:00
Colin Walters
01581dc61c [MetaWindow]: Always notify on title property change
The previous notification code was attempting to use the "modified"
boolean returned from set_title_text, but "that boolean doesn't mean
what you think it means".  It actually means "I truncated the title".

Just always notify, it's far simpler than trying to compute
when we don't need to, and callers can compress if they really need
to.
2009-08-21 12:38:30 -04:00
Colin Walters
9cc70a3fb6 Make meta_display_xwindow_is_a_no_focus_window public
Useful for window analysis in plugins.
2009-08-20 14:20:01 -04:00
Henrique P. Machado
c37a2ca1c8 Updated Brazilian Portuguese translation. 2009-08-18 22:34:18 -04:00
Seán de Búrca
80b38210b2 Updated Irish translation 2009-08-17 06:06:18 -06:00
Tommi Vainikainen
e5dffb0097 Updated Finnish translation 2009-08-15 13:59:30 +03:00
Fran Dieguez
7396f5709e Updated Galician Translation 2009-08-15 10:05:52 +02:00
Colin Walters
41cf9134a6 Add meta_window_is_mapped, remove usage of window-private.h from mutter-window.c
mutter-window.c originally grew an #include "window-private.h" for
window->override_redirect, but that was just fixed.  However since
then it also ended up relying on a few other minor private bits.

To fix that, add meta_window_is_mapped, promote meta_window_toplevel_is_mapped
to public, and use the public MetaDisplay accessor.
2009-08-14 19:47:13 -04:00
Colin Walters
e960269653 Add meta_window_is_override_redirect
Trivial function, useful for plugins which are doing analysis
of windows.
2009-08-14 19:47:13 -04:00
Gabor Kelemen
5e581b409c Hungarian translation updated 2009-08-15 01:40:29 +02:00
Owen W. Taylor
f03d39eefb Check the opacity of the right actor
When determining if the window is opaque or not, look at it's opacity,
not the opacity of the window group.

Reported by Matthias Clasen
http://bugzilla.gnome.org/show_bug.cgi?id=591836
2009-08-14 15:58:07 -04:00
Alexander Shopov
deaa897928 Updated Bulgarian translation 2009-08-14 08:00:48 +03:00
Manoj Kumar Giri
3f9758e706 Updated Oriya Translation 2009-08-13 20:29:45 +05:30
Owen W. Taylor
91baf552cf Remove meta_errors_register_foreign_display()
The functionality to propagate errors for other displays to other
a "foreign error handler" was Soeren's compositor and is no longer
being used. Remove it.

(Now that error.h is being installed and scanned, we need to either
do this or add XErrorEvent to xlib-2.0.gir and rename ErrorHandler
to MetaErrorHandler. This way is a bit simpler.)
2009-08-13 07:38:08 -04:00
Michael Meeks
16466cf7d6 install errors.h header, bug 591566 2009-08-13 09:46:15 +01:00
Sweta Kothari
3c25c265df Updated Gujarati Translations 2009-08-12 19:08:55 +05:30
Antón Méixome
a8529bd8d1 Updated Galician translation 2009-08-12 13:21:18 +02:00
Tomas Frydrych
f3e6913d57 Added meta_window_is_modal()
Queries whether the window is in a modal state, as per the _NET_WM_STATE
protocol.
2009-08-12 07:49:08 +01:00
Tomas Frydrych
2c8df7d12e Do not run effects during WM startup
When we first start up, we do not want to run effects on any pre-exising
windows (this is either the case we are starting up and there are no windows,
or we are replacing an exisint window manager, or worse, we crashed, and we
just want to get to the desired desktop as quick as possible).

Dithered about where to place the check; putting into the plugin manager
reduces the number of places (and files) in which it needs to be done.
2009-08-12 07:45:03 +01:00
Owen W. Taylor
dafdecb4e8 Be silent by default
We might as well turn on the AM_SILENT_RULES by default if a new-enough
automake is found rather than requiring --enable-silent-rules.

http://bugzilla.gnome.org/show_bug.cgi?id=591367
2009-08-11 18:53:30 -04:00
Luca Ferretti
ba03ca76c4 Updated Italian translation 2009-08-11 01:19:48 +02:00
Owen W. Taylor
c5874e0da5 Bump version to 2.27.2 2009-08-10 12:24:03 -04:00
Colin Walters
422cd1fbbf Fix use of uninitialized memory in edge-resistance.c
g_new bad, g_new0 good.
2009-08-09 23:40:22 -04:00
Colin Walters
8a9e2877da Export meta_screen_get_startup_sequences, add change signal
It's useful for plugins to be able to get access to the
startup-notification data that Mutter already has.  Add
an accessor and change signal when recieve an event.
2009-08-09 23:36:08 -04:00
Jorge González
71fd54ec9e Updated Spanish translation 2009-08-09 20:27:02 +02:00
Kjartan Maraas
ff84b35e5d Updated Norwegian bokmål translation. 2009-08-09 15:48:46 +02:00
Tomas Frydrych
ae32ac86b4 Use correct timestamp for focus stealing prevention
When window initially maps, use the more recent of NET_WM_USER_TIME and
startup notification timestamps to compare against last known user action to
decide whether to focus the window or not. Once we show the window, clear
the initial_timestamp_set flag, so the startup notification timestamp is not
taken into account again.

Based on patch for metacity by Alexander Larsson

http://bugzilla.gnome.org/show_bug.cgi?id=573922
2009-08-08 17:59:01 +01:00
Tomas Frydrych
bca3eaf709 Removed custom 'GIR' label for gir generation in silent-rules mode
http://bugzilla.gnome.org/show_bug.cgi?id=591120
2009-08-08 13:47:31 +01:00
Christian Kirbach
a03343827e Updated German translation. 2009-08-08 01:47:24 +02:00
Tomas Frydrych
0f64202a29 Added --enable-silent-rules if automake-1.11 is available 2009-08-07 17:58:02 +01:00
Gil Forcada
4fb7c642d5 Minor fix to Catalan translation 2009-08-07 18:57:23 +02:00
Tomas Frydrych
6b36e64e00 Take extra reference on the texture inside MutterWindow
We store a pointer to the texture independently of the ClutterContainer
internals, and rely on the pointer remaining valid until we run dispose.
Since we also provide public API to access this pointer, we should not
rely on the reference ClutterContainer holds to ensure that texture will
not be destroyed (e.g., some nasty developer could reparent the texture).
2009-08-07 17:38:11 +01:00
Tomas Frydrych
84059f1faa Free MutterWindow description string in finalize() not dispose()
We were freeing the description string in dispose and not setting it to NULL,
thus leaving around a dangling pointer for the duration of the disposal.
This commit moves the free into the finalize vfuction, where it belongs.
2009-08-07 16:47:43 +01:00
Owen W. Taylor
15376957f7 Don't allow override-redirect windows to be META_WINDOW_NORMAL
Many override-redirect windows (including the Metacity UI windows!)
will have NET_WM_WINDOW_TYPE_NORMAL set on them because of shared
code paths with normal windows in toolkits.

Some current Compositor plugins (default plugin and gnome-shell)
check type == NORMAL to determine if to run effects. While fixing
such plugins to also check if the window is override-redirect is
posisble, it seems cleanest to simply not allow any of the decorated
window types to be set on an override-redirect window and to force
these types to META_WINDOW_OVERRIDE_OTHER. This will prevent other
similar problems from showing up in the future.

http://bugzilla.gnome.org/show_bug.cgi?id=590971
2009-08-06 12:16:24 -04:00
Owen W. Taylor
da934be354 Elimitate use of arithmetic expansion for portability
Use expr rather than $(( <arithmetic> )) - this is needed at least
for the default Solaris shell.

Based on patch by Halton Huo
http://bugzilla.gnome.org/show_bug.cgi?id=590719
2009-08-04 11:18:43 -04:00
Tomas Frydrych
3eee6b4218 Handle FocusIn events for override redirect windows correctly
Do not try to insert / remove the window from the MRU list; just reset the
MetaDisplay focus window to NULL.

http://bugzilla.gnome.org/show_bug.cgi?id=590611
2009-08-04 14:31:13 +01:00
Tomas Frydrych
ff9400abde Remove deprecated GTK symbols
http://bugzilla.gnome.org/show_bug.cgi?id=587991

(adapted from metacity commit 3f76affbd2,
original patch by Thomas Andersen)
2009-08-04 09:23:37 +01:00
Tomas Frydrych
e985bf0e7a use g_signal_handlers_disconnect_by_func instead of an old deprecated
http://bugzilla.gnome.org/show_bug.cgi?id=587991

(adapted from metacity commit a8f8970601,
original patch by Matt Kraai)
2009-08-04 09:22:49 +01:00
Tomas Frydrych
245908909b Fix check for zero-sized textures in MutterShaped texture
Patch by Jon Nettleton <jon.nettleton@gmail.com>

http://bugzilla.openedhand.com/show_bug.cgi?id=1538
http://bugzilla.gnome.org/show_bug.cgi?id=590646
2009-08-04 08:47:46 +01:00
Xu Li
2f63d321d1 [constraints] Avoid overflow when window maximum size hint is set to INT_MAX
When calculating maximum permissible size of our frame window, we need to
avoid an overflow if the application set its max size hint to INT_MAX.

http://bugzilla.gnome.org/show_bug.cgi?id=590627
2009-08-04 08:38:56 +01:00
Tomas Frydrych
2222cb8fbf Added public prototype for meta_window_is_ancestor_of_transient()
http://bugzilla.gnome.org/show_bug.cgi?id=590439
2009-08-04 08:32:36 +01:00
Tomas Frydrych
897814a153 Added MetaWindow::window-type property
Read-only property for querying the type of MetaWindow.

http://bugzilla.gnome.org/show_bug.cgi?id=588230
2009-08-04 08:06:30 +01:00
Tomas Frydrych
8b7b41df41 Accessors for pid and name of client machine associated with MetaWindow
http://bugzilla.gnome.org/show_bug.cgi?id=590388
2009-08-04 07:58:11 +01:00
Tomas Frydrych
8f9a174f0a Fixed warnings due to missing casts 2009-08-01 11:11:11 +01:00
Colin Walters
df90187e06 Add focus-window property to MetaDisplay
Useful mainly for notify::focus-window.
2009-08-01 04:38:26 -04:00
Tomas Frydrych
c9e0613b53 Set up correct initial values for override redirect windows
As a sideffect of commit a576f7a1ea, override
redirect windows of type _NET_WM_WINDOW_TYPE_NORMAL do not have their
features recalculated during MetaWindow construction (same as regular
windows of type _NET_WM_WINDOW_TYPE_NORMAL), so we need to set the initial
values accordingly.
2009-08-01 09:11:06 +01:00
Tomas Frydrych
a576f7a1ea Tolerate all standard _NET_WM_WINDOW_TYPE types for managed windows
Although the spec designates some window types as typically used for
override redirect windows, it does not prohibit the use of these with
managed windows, so we should not abort if we encounter one of these.

http://bugzilla.gnome.org/show_bug.cgi?id=583870
2009-07-31 19:11:54 +01:00
Owen W. Taylor
239b39cf52 Pass through all scroll events to compositor
As with other events, we want to pass through scroll events (button 4/5 presses)
to the compositor, whether or not they are associated with a particular MetaWindow;
do this by simply falling through to the normal code path instead of
separately delivering the events to the compositor.

http://bugzilla.gnome.org/show_bug.cgi?id=588232
2009-07-31 10:37:26 -04:00
Thomas Wood
1f90529365 Don't explicitly set the size of the MutterWindow texture
Setting the size of the texture causes the minimum and preferred width and
height values to be fixed at the set value. The normal requisition functions
of ClutterTexture will already report the size of the texture pixmap as the
natural size, but also allow scaling down as needed if less space is
available. We don't need that here, but we want to allow someone to make
a ClutterClone of the texture actor.
2009-07-31 13:36:59 +01:00
Colin Walters
acfc498344 Also update Clutter 1.0 pkg-config requirement and README
We need to also change the pkg-config requirement to be 1.0.
2009-07-29 13:04:18 -04:00
Colin Walters
a1ac1f4b2e Build using Clutter 1.0
Clutter just released 1.0, sync to that.
2009-07-29 12:08:53 -04:00
drtvasudevan
8a892d47e5 Updated Tamil translation 2009-07-29 13:48:28 +05:30
Owen W. Taylor
d91d503eb2 Pass event to clutter when the plugin doesn't have xevent_filter
With recent changes, Clutter no longer sets up the viewport correctly,
unless it receives ConfigureNotify events. If there is a plugin with
an xevent_filter function, then it's that plugins responsibility to pass
the event to Clutter if it doesn't want it. If there is no plugin,
or the plugin doesn't have an xevent_filter function, then we should
call clutter_x11_handle_event() ourselves.

http://bugzilla.gnome.org/show_bug.cgi?id=589419
2009-07-28 16:00:24 -04:00
Owen W. Taylor
e84bf7144c Queue redraws on MutterWindow's MutterShapedTexture
When a windows contents or shape changes, we schedule a redraw
with clutter_actor_queue_redraw(); we need to queue the redraw
on the shaped texture rather than on the window actor to support
cloning of just the shaped texture without the shadow: that
is, the shaped is what is really changing and it may be
visible via a clone even if the MutterWindow itself is not
visible.

http://bugzilla.gnome.org/show_bug.cgi?id=589429
2009-07-28 15:50:28 -04:00
Ivar Smolin
73abacc20b Updating Estonian translation 2009-07-23 19:00:46 +03:00
Daniel Nylander
aea24279ba Updated Swedish translation 2009-07-22 15:12:43 +02:00
Chao-Hsiung Liao
5c5968e742 Updated Traditional Chinese translation(Hong Kong and Taiwan) 2009-07-22 16:44:17 +08:00
Yaron Sharabani
3813ed9c2e Updated Hebrew translation 2009-07-22 00:57:22 +03:00
Owen W. Taylor
ec2c197e1f Fix confusion about MetaPreview in introspection build
MetaPreview is only built into libmutter-private, and not included in
the mutter executable. Linking mutter against libmutter-private was
inadvertently added when the introspection build process was set up,
but isn't actually needed, and if -Wl,-as-needed is added during the
build process, then the libmutter-private dependency will be skipped.

* Don't link mutter (or the test programs) against libmutter-private

* Exclude meta-preview.h from the set of headers we feed into the
  introspection build process

Reported by Patryk Zawadzki

http://bugzilla.gnome.org/show_bug.cgi?id=587975
2009-07-17 07:56:19 -04:00
Owen W. Taylor
0060c8ddb9 Switch to dist-bzip2
When generating a tarball from 'make dist', make a .bz2 tarball
instead of a .gz tarball. Makes the upload to master.gnome.org
marginally faster.
2009-07-16 18:07:01 -04:00
Owen W. Taylor
f9c11c2dbf Bump minor version to 2.27.1
We'll use 2.27.1 for the first tarball release on the 2.27 branch
to avoid confusion with previous snapshots.
2009-07-16 18:06:52 -04:00
Owen W. Taylor
65565a96b7 Fix 'make distcheck'
* Make generation of the .gir file work for srcdir != builddir
* Add files to CLEANFILES as needed
* Don't distribute the generated file mutter.schemas
2009-07-16 17:54:56 -04:00
Owen W. Taylor
b62ee94b89 Remove check for PangoXft
Mutter doesn't use PangoXft, and I doubt Metacity has for a long
time either so don't check for it in configure.in.
2009-07-16 17:54:06 -04:00
Maxim V. Dziumanenko
594897e9a5 Updated Ukrainian translation 2009-07-09 23:28:00 +03:00
Owen W. Taylor
83f8bfd2ca Reduce overpaint in the window group
When we are painting a stack of 5-10 maximized windows, the
standard bottom-to-top method of drawing every actor results
in a tremendous amount of overdraw and can easily max out
the available memory bandwidth on a low-end* graphics chipset.
It's even worse if window textures are being accessed over
the AGP bus.

When we have opaque windows, we can go ahead and compute visibility
ourselves (in classic X-server fashion) and use that information to
restrict drawing obscured actors.

* Add MutterWindowGroup - a ClutterGroup subclass with logic
  for figuring out obscured regions.

* Add mutter_window_get_obscured_region() to get the region
  obscured by that window.

* Add mutter_shaped_texture_set_clip_region() to hint
  a clip region to the painting code; this is set based on
  the computed visible region of MutterWindowGroup.

* Add tidy_texture_frame_set_needs_paint() to hint that the
  paint can be skipped entirely; this is used when we detect
  that the window shadow is entirely obscured.

http://bugzilla.gnome.org/show_bug.cgi?id=587344
2009-07-09 16:56:01 +01:00
Thomas Thurman
40e9f6fa2c unset _NET_SUPPORTING_WM_CHECK when shutting down 2009-07-09 10:26:20 -04:00
Thomas Thurman
35afd2a8fb update changelog 2009-07-09 10:23:03 -04:00
Colin Walters
a454ad5c41 Promote include/main.h to public headers
Want to be able to Meta.quit() from bindings.
2009-07-08 17:25:54 -04:00
Jorge González
d9be1d7e32 Updated Spanish translation 2009-07-07 20:47:54 +02:00
Tomeu Vizoso
b625ec30d9 Add a switch to disable autofullscreen'ing maximized windows without decorations 2009-07-06 07:51:45 -04:00
Owen W. Taylor
4be8e155d1 Fix crash when starting not on first workspace
If we are starting on something other than the first workspace,
meta_compositor_switch_workspace() will be called before
meta_compositor_manage_screen(); guard against that.
2009-07-06 08:43:07 +01:00
Owen W. Taylor
6726fcd25d Simplify relationship between mapping and visibility
Previously, changes to the visibility of a window could be indicated
by meta_compositor_map_window(), meta_compositor_unminimize_window(),
meta_compositor_set_window_hidden(), etc, with the exact behavior
depending on the 'live_hidden_windows' preference.

Simplify this so that visibility is controlled by:

 meta_compositor_show_window()
 meta_compositor_hide_window()

With an 'effect' parameter provided to indicate the appropriate
effect (CREATE/UNMINIMIZE/MINIMIZE/DESTROY/NONE.)

The map state of the window is signalled separately by:

 meta_compositor_map_window()
 meta_compositor_unmap_window()

And is used only to control resource handling.

Other changes:

 * The desired effect on show/hide is explicitly stored in
   MetaWindow, avoiding the need for the was_minimized flag.
   At idle, once we calculate the window state, we pass the
   effect to the compositor if it matches the new window
   state, and then clear the effect to start over for future
   map state changes.

 * meta_compositor_switch_workspace() is called before any windows
   are hidden or shown, allowing the compositor to avoid hiding
   or showing an effect for windows involved in the switch.
   http://bugzilla.gnome.org/show_bug.cgi?id=582341

 * Handling of post-effect cleanups for MutterWindow are
   simplified - instead of trying to do different things based
   on the individual needs of different effects, we just wait until
   all effects complete and sync the window state to what it
   should be.

 * On unmap, once we destroy the pixmap, we tell ClutterX11Pixmap
   that we've done so, so it can clean up and unbind. (The
   unbinding doesn't seem to be working properly because of
   ClutterGLXPixmap or video driver issues.)

http://bugzilla.gnome.org/show_bug.cgi?id=587251
2009-07-06 00:16:23 +01:00
Owen W. Taylor
cd048be932 Remove unused focus_window member of MetaCompScreen
Remove some old code; the compositor no longer tracks
the focus window.

http://bugzilla.gnome.org/show_bug.cgi?id=587251
2009-07-06 00:06:23 +01:00
Owen W. Taylor
5d477c4b4e Remove include_destroy parameter to mutter_window_effect_in_progress()
Clean up mutter_window_effect_in_progress() by removing the
include_destroy parameter which was used only in one place that
could be easily done otherwise. (There was another use in
mutter_window_sync_actor_position() that had no point and looked
unintended.)

http://bugzilla.gnome.org/show_bug.cgi?id=587251
2009-07-06 00:04:58 +01:00
Owen W. Taylor
9244f0f113 Move window repair and reshape to a paint function
Add a paint function that checks all windows for repair and
shape updates; this:

 - simplifies the logic for when a window needs to be repaired
 - avoids duplicate work when we get multiple damage effects
 - avoids the need to look ahead in the event queue

Instead of relying on repair to implicitly resize the
MutterWindow actor, set the size explicitly when the core
code updates the geometry. (This is needed because we haven't
repaired yet when we start an animation, and the animation
may depend on the size to, e.g., rescale from the center.)

Because the core geometry update happens before we start
maximize/unmaximize effects we need to work around this by
passing both the old and new geometry to the compositor.

http://bugzilla.gnome.org/show_bug.cgi?id=587251
2009-07-06 00:04:41 +01:00
Owen W. Taylor
bc9a2cc92a Don't move hidden windows to the desktop layer
Putting hidden windows in the desktop layer is pointless - in
the desktop layer isn't necessary below all visible windows,
and we are hiding the windows by other means. And the movement
isn't reliable because nothing sets stack->needs_relayer, so
windows can get stuck in the desktop layer after being
rehidden.

http://bugzilla.gnome.org/show_bug.cgi?id=587251
2009-07-05 23:57:06 +01:00
Owen W. Taylor
309a07bf4c Remove unused dock_windows list from MetaCompScreen
MetaCompScreen.dock_windows was kept updated, but never used.

http://bugzilla.gnome.org/show_bug.cgi?id=587251
2009-07-05 23:56:58 +01:00
Owen W. Taylor
a0f06cab43 Fix function names in debug tracing statements
Refer to meta_compositor_* not the old clutter_cmp_* names.

http://bugzilla.gnome.org/show_bug.cgi?id=587251
2009-07-05 23:56:55 +01:00
Owen W. Taylor
1d65e2e50c Reindent and reorganize compositor.h
Reindent compositor.h in a more consistent fashion, and group
logically related functions together.

http://bugzilla.gnome.org/show_bug.cgi?id=587251
2009-07-05 23:56:55 +01:00
Owen W. Taylor
c60d4c2bc4 Separate source and header files for MutterWindow
compositor.c: Move MutterWindow code to mutter-window.c;
 rename map_win() to mutter_window_map(), etc.

mutter-window-private.h: New private header file for
 MutterWindow functions used internally to the compositor.

compositor-mutter.h: Move MutterWindow declarations to
 mutter-window.h; move a couple of private functions to
 compositor-private.h

compositor-private.h: Move MetaCompScreen declaration to here:
 Conceptually it's private to compositor.c, but MutterWindow
 manipulates some of the lists directly for now.

mutter-plugin.c compositor.c: Don't call mutter_window_effect_completed()
 for MUTTER_PLUGIN_SWITCH_WORKSPACE, but use a new
 mutter_switch_workspace_completed(), since the window is
 just used to identify a screen.

http://bugzilla.gnome.org/show_bug.cgi?id=587251
2009-07-05 23:56:51 +01:00
Owen W. Taylor
f0d22e18c4 Split shadow code into a separate file
Separate code related to creating the gaussian-blurred shadow texture
into a separate file.

Move the definition of MetaCompositor into a compositor-private.h
so that the shadow code can cache the source in the compositor
structure.

http://bugzilla.gnome.org/show_bug.cgi?id=587251
2009-07-05 23:28:38 +01:00
William Jon McCann
9d36e8d853 Add bits missing from last commit
Try to reconstruct the marshal list and enum type templates and
add templates to extra dist list.
2009-07-04 17:14:48 +01:00
Mark Krapivner
f5313268d7 Updated Hebrew translation 2009-07-04 15:47:15 +03:00
Milan Bouchet-Valat
2c17ef4803 Emit signals when workspaces are added, removed or switched
The patch adds GLib marshalling code to Mutter, since it's required for the "workspace-switched" signal.
The definition of MetaMotionDirection enum is moved to common.h since it's now used in workspace.c.
A little cleaning is done in workspace.c:meta_workspace_activate_with_focus(), where compositor-specific code is merged with the rest of the function (required to emit signal), removing #ifdefs.
2009-07-04 10:57:52 +02:00
Colin Walters
32251dcf4e Make meta_workspace_list_windows public
It's a useful way to list windows, and already
documented and annotated.
2009-06-30 14:38:33 -04:00
Jon Nettleton
94f64797de Remove wireframe mode and old effects framework
Remove the reduced_resources preference and all all wireframe logic and effects.

http://bugzilla.gnome.org/show_bug.cgi?id=581812
2009-06-30 09:35:12 -04:00
Owen W. Taylor
d69546902b Remove unused MetaCompositor functions
Remove a number of functions that were either entirely unimplemented
or had empty implementations for the Clutter-compositor.

 meta_compositor_begin_move()
 meta_compositor_update_move()
 meta_compositor_end_move()
 meta_compositor_set_active_window()
 meta_compositor_free_window()

http://bugzilla.gnome.org/show_bug.cgi?id=581813
2009-06-30 09:35:12 -04:00
Owen W. Taylor
72149a054e Make MetaCompositor the clutter compositor
* Move compositor-mutter.c to compositor.c

* Remove the 'Mutter' typedef and define the structure for
  MetaCompositor directly.

http://bugzilla.gnome.org/show_bug.cgi?id=581813
2009-06-30 09:35:12 -04:00
Owen W. Taylor
3aff9726eb Remove MetaCompositor virtualization
Now that we only have one compositor, there's no reason to access the
compositor functions through a vtable. Remove the MetaCompositor virtualization
and make the clutter code implement the meta_compositor_* functions
directly.

Move the checks for the compositor being NULL from the vtable wrappers
to the calling code (most of them were already there, so just a few
needed to be added)

Note: the compositor is actually hard-coded on at the moment and the plan
  is to remove the non-composited code entirely, so the checks are
  added only to keep things neat: they have no practical effect.

http://bugzilla.gnome.org/show_bug.cgi?id=581813
2009-06-30 09:34:45 -04:00
Jon Nettleton
0b8a57bcba There can be only one compositor engine
Mutter is a Clutter-based compositing manager. So, remove the code for
the XRender-based compositor, and make it mandatory to have XComposite,
XRender and Clutter.

Run-time support for non-composited operation is left for now.

* src/compositor/mutter/: Move files from this subdirectory into
  the main compositor/ directory.

* compositor/compositor-xrender.ccompositor/compositor-xrender.h:
  Remove

* include/compositor-clutter.h: Remove this stray file, it had been
  replaced with compositor-mutter.h some time back.

http://bugzilla.gnome.org/show_bug.cgi?id=581813
2009-06-30 09:34:03 -04:00
Owen W. Taylor
455486db7c Avoid restacking animating hidden actors
Since the stack passed to the compositor now accurately reflects
the X stacking order, we need to treat hidden windows (which are
at the bottom of the X stacking order) specially - when the
compositor stacking order is synced, try to keep animating hidden
actors in their old positions in the stack.

http://bugzilla.gnome.org/show_bug.cgi?id=585984
2009-06-30 09:33:29 -04:00
Owen W. Taylor
43511c316e Use MetaStackTracker to avoid a round-trip XQueryTree()
With MetaStackTracker, it's no longer necessary to XQueryTree to
get a reasonably-up-to-date view of the server stacking order.

Add some comments explaining unclear aspects of
raise_window_relative_to_managed_windows() and with future possible
improvements.

http://bugzilla.gnome.org/show_bug.cgi?id=585984
2009-06-29 23:05:11 -04:00
Owen W. Taylor
34e4b594cd Don't do stacking for override-redirect windows
Don't add override-redirect windows to MetaStack; we shouldn't
be restacking them.

Since we *aren't* stacking the override-redirect windows, we need to
be careful that to ignore them when looking for the top managed
window.

http://bugzilla.gnome.org/show_bug.cgi?id=585984
2009-06-29 23:05:11 -04:00
Owen W. Taylor
6314ee8780 Move compositor-stack handling to MetaStackTracker
In order to properly track the stacking order for override-redirect
windows, move meta_compositor_sync_stack() call into MetaStackTracker.
In the new location, we sync the stack as a before-redraw idle function,
rather then using the freeze-thaw facilities of MetaStack. This is
simpler, and also properly compresses multiple stack changes on
notifications received from the X server.

http://bugzilla.gnome.org/show_bug.cgi?id=585984
2009-06-29 23:05:11 -04:00
Owen W. Taylor
a4cd66f599 Add better tracking of real stacking order
Wedging override-redirect windows into the constraint code in stack.c
results in Mutter getting confused about the stacking order of
these windows with respect to other windows, and may also in some
cases cause Mutter to restack override-redirect windows.

core/stack-tracker.c core/stack-tracker.h: MetaStackTracker - combine
  events received from the X server with local changes we have made
  to come up with the best possible idea of what the stacking order
  is at any one point in time.

core/screen.c core/screen-private.h: Create a MetaStackTracker for
  the screen.

core/display.c: Feed relevant events to MetaStackTracker

core/frame.c core/screen.c core/stack.c: When we make changes to the
  stacking order or add windows, record those changes immediatley
  in MetaStackTracker so we have the information without waiting
  for a round-trip.

include/ui.h ui/ui.c: meta_ui_create_frame_window add a return value
  for the X request serial used to create the window.

http://bugzilla.gnome.org/show_bug.cgi?id=585984
2009-06-29 23:04:59 -04:00
Owen W. Taylor
729fb2e0b4 Avoid moving and resizing override-redirect windows
Override-redirect windows should not be moved or resized by the
window manager.

- Mark override-redirect windows as already placed to avoid
  placing them when first shown.
- Don't move-resize newly created override-redirect MetaWindow
- Don't queue a resize on override-redirect windows when reading
  their WM_TRANSIENT_FOR hint.
- Add g_return_if_fail (!window->override_redirect) to catch
  unexpected code paths that might result in override-redirect
  windows being moved or resized.

http://bugzilla.gnome.org/show_bug.cgi?id=582639
2009-06-29 22:54:38 -04:00
Owen W. Taylor
dc2d8acc92 Don't add override-redirect windows to workspaces
Normally a window that is "on all workspaces", is also on a particular
workspace (to deal with being unstuck.) This is pointless for
override-redirect windows.

http://bugzilla.gnome.org/show_bug.cgi?id=582639
2009-06-29 22:51:40 -04:00
Owen W. Taylor
f7c595ff18 Ignore client messages sent to override-redirect windows
If someone asks us to close, maximize, etc, an override-redirect
window, just ignore the request.

http://bugzilla.gnome.org/show_bug.cgi?id=582639
2009-06-29 22:51:40 -04:00
Owen W. Taylor
3d81a1e5ec meta_screen_foreach_window(): Skip override-redirect windows
Don't include override-redirect windows when iterating the windows
in the screen. We don't need them for any of the current uses:

 - Queueing redraws and resizes on managed windows
 - Checking which windows should be added to a new workspace

http://bugzilla.gnome.org/show_bug.cgi?id=582639
2009-06-29 22:51:40 -04:00
Owen W. Taylor
00d955eb40 meta_display_list_windows: Exclude override-redirect
Don't include override-redirect windows in the list return by
meta_display_list_windows(), since we almost never want to handle
them when considering "all window" for the display. Add a separate
meta_display_list_all_windows() that includes override-redirect
windows.

http://bugzilla.gnome.org/show_bug.cgi?id=582639
2009-06-29 22:51:32 -04:00
Owen W. Taylor
fd27647440 Don't read most properties for override-redirect windows
Skipping handling of properties for override redirect windows has
two advantages: first it reduces the amount of work needed to get
an override-redirect window (menu, tooltip, drag icon) onto the
screen. But more importantly, it reduces the number of code-paths
for an override-redirect to get into some code portion where it
isn't expected.

* Integrate the list of properties we load initially with the
  list of property hooks; this avoids having two separate lists
  that we have to keep in sync.

* Add a flag to MetaWindowPropHooks to indicate whether the
  property should be handled for override-redirect windows;
  currently we load a) properties that identify the window -
  useful for debugging purposes b) WM_TRANSIENT_FOR (could be
  used to associate menus with toplevels.)

* For properties that aren't always loaded through window-props.c,
  add !window->override checks to places that trigger loading,
  and add g_return_if_fail(!window->override) to the load
  functions as a double-check.

http://bugzilla.gnome.org/show_bug.cgi?id=582639
2009-06-29 22:32:19 -04:00
Owen W. Taylor
27fb5fbbca Add checks against inappropriate changes to override-redirect window
Add g_return_if_fail() to check that window-management functions like
meta_window_maximize() aren't called on override-redirect windows.

This reveals that were were "unminimizing" override-redirect windows
when adding them; avoid doing that.

http://bugzilla.gnome.org/show_bug.cgi?id=582639
2009-06-29 22:29:32 -04:00
Owen W. Taylor
d810315884 Fix property notifications for certain properties
If a property has a reload function, but the standard property-fetching
mechanism isn't used (hooks->type == META_PROP_VALUE_INVALID), then the
a logic error (introduced in January) caused the hook to never be run.

This meant that changes to struts and icons weren't noticed.

Same as: http://bugzilla.gnome.org/show_bug.cgi?id=572573
The fix here is different in detail from that applied to Metacity, but
similar in spirit.

http://bugzilla.gnome.org/show_bug.cgi?id=585980
2009-06-29 22:29:31 -04:00
Owen W. Taylor
820970328b Load NET_WM_USER_TIME from the right window
On subsequent changes, if there is a NET_WM_USER_TIME_WINDOW, then
read the property from that rather than from the main window.
(Fix an accidental regression: the right Window was being computed
but no longer passed in.)

http://bugzilla.gnome.org/show_bug.cgi?id=585979
2009-06-29 22:29:31 -04:00
Owen W. Taylor
3e2fcf4acd Fix missing static for meta_window_show()
Definition of meta_window_show() was missing static although it
was forward-declared with static.

http://bugzilla.gnome.org/show_bug.cgi?id=585978
2009-06-29 22:29:31 -04:00
Mattias Põldaru
07dedee37b Updating Estonian translation 2009-06-25 14:31:10 +03:00
Owen W. Taylor
a13dec34ef Fix accidental rename of --with-clutter/--with-introspection options
Since --with-clutter and --with-introspection refer to use of external
libraries, they should in fact be --with and not --enable. Fix accidental
change that got committed as part of the big metacity => mutter change.

http://bugzilla.gnome.org/show_bug.cgi?id=586821
2009-06-24 14:10:19 -04:00
Runa Bhattacharjee
75f3127ba5 Updated Bengali India Translations 2009-06-24 15:56:42 +05:30
Owen W. Taylor
072ec184d3 Revert "Unparent rather than destroy MutterWindows."
This reverts commit 16d49695ad.

If we want an actor to go away deterministically, we should call
clutter_actor_destroy(); using unparent instead a) may result
leaks through cyclic ref counts, and b) will delay the deallocation
of the window texture in a garbage collected environment until
the next garbage collection, causing much greater transient use
of memory.

http://bugzilla.gnome.org/show_bug.cgi?id=580520
2009-06-23 14:13:59 -04:00
Davyd Madeley
321b40a386 Fix broken MUTTER_PLUGIN_TYPE -> MUTTER_TYPE_PLUGIN 2009-06-22 10:38:09 +08:00
Marina Zhurakhinskaya
0a863b8c2b Handle input area set to full screen or reset during start-up
info->pending_input_region needed to be destroyed in
mutter_set_stage_input_region() before it was set to something
else or before it was reset to be full screen (region == None).

Set the initial input area to an empty region by
setting info->pending_input_region to an empty region by default
and setting it to None or a new region if a new input region is
specified.

Remove show_overlay_window() function that was used to set an empty
input region on start-up, and uses a call to do_set_stage_input_region()
with info->pending_input_region as an argument instead.
2009-06-19 16:48:44 -04:00
Ivar Smolin
b13fae2556 Updating Estonian translation 2009-06-19 19:58:46 +03:00
Owen W. Taylor
c012105b90 Fix hiding newly added windows with live_hidden_windows
When we add a window and it gets hidden as the first thing, we need
to show not just the frame window, but also the window itself.
Otherwise when the window subsequently becomes visible, it will
just be an empty frame.

Add helper functions to reduce current code duplication and avoid
adding more.

http://bugzilla.gnome.org/show_bug.cgi?id=586309
2009-06-19 11:40:42 -04:00
Davyd Madeley
f26d503694 Move meta_window_delete() to public API 2009-06-19 11:48:33 +08:00
Colin Walters
6e4cd65544 Some updates to POTFILES.in for mutter renaming
Make sure we're not referencing any nonexistent files.
2009-06-17 12:20:35 -04:00
Davyd Madeley
08c5095ad7 Add meta_window_get_transient_for() method 2009-06-17 09:40:55 +08:00
Davyd Madeley
dfb0e4f57b Add meta_window_get_title() method
Update meta_window_get_title() as per comments
2009-06-17 09:34:40 +08:00
Davyd Madeley
29257f107a IS_MUTTER_PLUGIN() -> MUTTER_IS_PLUGIN()
IS_MUTTER_PLUGIN never actually worked. So it's not going to break anyone's
API to fix the namespace while making the macro work.
2009-06-17 09:34:06 +08:00
Florian Muellner
ecde490967 Suppress strict aliasing warning
Fix a (harmless) warning about strict aliasing that some GCC versions
give when using g_module_symbol().

http://bugzilla.gnome.org/show_bug.cgi?id=582243
2009-06-16 15:47:59 -04:00
Jon Nettleton
51a6467968 Comprehensively rename to Mutter
Code:
All references in the code not related to themes, keybindings, or
GConf were changed from 'metacity' to 'mutter'. This includes, among other
things, strings, comments, the atoms used in the message protocol, and
the envvars used for debugging. The GConf schema file was reduced to
the 3 settings new to mutter.

The overall version was brought up to 2.27 to match current gnome.

Structure:
All files named '*metacity*' were renamed '*mutter*' with appropriate
changes in the automake system.  Files removed are
doc/creating_themes, src/themes, doc/metacity-theme.dtd,
metacity.doap.  These files will eventually end up in an external
gnome-wm-data module.

Installation location:
On the filesystem the mutter-plugindir was change from
$(libdir)/metacity/plugins/clutter to just $(libdir)/mutter/plugins.
The mutter-plugins.pc.in reflects these changes.

Note:
mutter.desktop.in and mutter-wm.desktop both continue to have
X-GNOME-WMSettingsModule=metacity set.  This allows
gnome-control-center to continue using libmetacity.so for
configuration.  This is fine since most the general keybindings and wm
settings are being read from /apps/metacity/* in gconf.
2009-06-16 14:17:10 -04:00
Owen W. Taylor
9127993d84 Fix a broken format string in nn.po
Translation was missing a format specifier; make an obvious fix.
2009-06-16 09:56:41 -04:00
Owen W. Taylor
ec2370b76d Remove executable bit from from mai.po
.po files should not be +x
2009-06-16 09:49:47 -04:00
Davyd Madeley
204431812b Move meta_window_{min,max}imize() to public API 2009-06-15 09:42:34 +08:00
Owen W. Taylor
627b4484ec Fix _XOPEN_SOURCE compilation problems on Solaris
Change #define _XOPEN_SOURCE 500 to 600 in compositor-xrender.c to
avoid a bad interaction with -xc99 on Solaris.

Remove unneeded #define in compositor-mutter.c.

Based on a patch by Brian Cameron

http://bugzilla.gnome.org/show_bug.cgi?id=580662
2009-06-12 14:50:15 -04:00
Owen W. Taylor
442991a712 Adapt to premultiplied alpha usage in Cogl
Cogl's default blend function has been switched to expect premultiplied
alpha. Change the combine function and the colors we use to
modulate alpha to match.

http://bugzilla.gnome.org/show_bug.cgi?id=585480
2009-06-11 15:36:27 -04:00
Owen W. Taylor
7eae5d4eab Allow slicing the mask texture
It doesn't make sense to allow the window texture to be sliced,
but not allow the mask texture to be sliced. So, we should either
set 'disable-slicing' for the texture actor or not pass NO_SLICING when
creating the mask texture.

While slicing currently results in only the first layer being shown,
disabling slicing entirely would break windows larger than the texture
size limit.  It would be straightforward to support multitexturing of
sliced textures in Cogl when all the textures are identically sized
and sliced identically, if it became a priority.

http://bugzilla.gnome.org/show_bug.cgi?id=585151
2009-06-11 14:49:59 -04:00
Davyd Madeley
f3914c86b9 s/META_WINDOW_TYPE/META_TYPE_WINDOW/ in META_IS_WINDOW() 2009-06-10 12:43:43 +08:00
Owen W. Taylor
fafb752827 Port to Mutter to Clutter 1.0 API
- Use float instead of ClutterUnit
- clutter_actor_get_size/position() return floats (remove some
  stray usage of these functions in the default plugin as well.)
- Adapt to cogl_texture_new_from_data() changes
- Use blend strings to set up multitexturing
- Remove CLUTTER_UNITS_TO_FLOAT() usage

http://bugzilla.gnome.org/show_bug.cgi?id=585016
2009-06-08 09:34:09 -04:00
Ray Wang
2e9838699b Updated Simplified Chinese translation. 2009-06-06 17:27:37 +08:00
Colin Walters
2ed1bf05d1 Add meta_window_get_wm_class
Public function to retrieve the cached WM_CLASS, used in gnome-shell
for tracking applications.
2009-05-29 13:26:18 -04:00
drtvasudevan
ba9c3f41c9 Updated Tamil translation 2009-05-25 17:50:14 +05:30
Jorge Gonzalez
e35fae8f32 Updated Spanish translation 2009-05-23 19:58:37 +02:00
drtvasudevan
b0d5f3bd64 Updated Tamil translation 2009-05-23 17:53:59 +05:30
drtvasudevan
ed640bb181 Updated Tamil translation 2009-05-21 17:48:02 +05:30
Colin Walters
aff4cf1103 Remove metacity-dialog.c from POTFILES.in as well 2009-05-05 17:11:30 -04:00
Owen W. Taylor
9883f6e679 Select for crossing events on stage and overlay
If the input region has been shaped, then clutter needs to
receive EnterNotify/LeaveNotify events in order to properly
send enter and leave events to actors when the pointer crosses
the boundary of the stage.

http://bugzilla.gnome.org/show_bug.cgi?id=578250
2009-05-05 13:57:23 -04:00
Vincent Untz
ea91834407 Remove metacity-dialog and always use zenity
This is a merge of metacity commits 0b3f45bb1b and 3d0bfbb4f4
2009-05-05 15:57:58 +02:00
Tomas Frydrych
90c35f8181 Allow the compositor to see ButtonPress events for buttons 4 or 5 2009-05-05 09:46:36 +01:00
Tomas Frydrych
2a8c160569 MetaScreen::keyboard-grabbed property
gboolean read-only property that tracks the all_keys_grabbed flag of
  MetaScreen.
2009-05-05 09:39:29 +01:00
Dan Winship
1d5117a607 Create a MetaAltTabHandler abstraction to allow alternate implementations
http://bugzilla.gnome.org/show_bug.cgi?id=580917
2009-05-04 10:25:58 -04:00
Dan Winship
99d0f41d98 Push the tab/workspace popup abstraction completely into screen.c
Also, use MetaWindows as the tab_popup keys rather than using (X) Windows
and then having to map back and forth everywhere, which is silly since
we never actually want the X Window.

http://bugzilla.gnome.org/show_bug.cgi?id=580917
2009-05-04 10:25:58 -04:00
Dan Winship
7b522c0de8 Split screen->tab_popup and screen->ws_popup
http://bugzilla.gnome.org/show_bug.cgi?id=580917
2009-05-04 10:25:58 -04:00
Dan Winship
cbf4be04fc Reorganize tab popup code a bit more cleanly.
Rather than trying to reverse-engineer what kind of tab/workspace
popup to create from within meta_display_begin_grab_op(), just create
the popup directly from do_choose_window()/handle_workspace_switch()
after completing the grab, since they already know which kind they
want.

Also add meta_screen_destroy_tab_popup()/_destroy_workspace_popup()
rather than having meta_display_end_grab_op() poke into MetaScreen's
internals itself.

http://bugzilla.gnome.org/show_bug.cgi?id=580917
2009-05-04 10:25:58 -04:00
Dan Winship
f55509aadd Fix some broken indentation and simplify nested if()s
http://bugzilla.gnome.org/show_bug.cgi?id=580917
2009-05-04 10:25:58 -04:00
Dan Winship
7e369d63b3 Remove some old compositor-related code that mutter doesn't need
http://bugzilla.gnome.org/show_bug.cgi?id=580917
2009-05-04 10:25:58 -04:00
Owen W. Taylor
6cf71a06c0 Remove debug printf about opacity
Don't print ""setting opacity to %d\n" every time a window's opacity
changes.

http://bugzilla.gnome.org/show_bug.cgi?id=580655
2009-04-29 11:44:15 -04:00
Maxim V. Dziumanenko
a3511ba9e2 Updated Ukrainian translation 2009-04-28 14:06:23 +03:00
Sander Dijkhuis
49400c08cd Export window maximize and unmaximize methods
http://bugzilla.gnome.org/show_bug.cgi?id=580434
2009-04-27 15:11:09 +02:00
Owen W. Taylor
1624b87b9b Fix email addresses in mutter.doap
Email addresses for foaf:mbox should be mailto: URLs
2009-04-25 11:42:03 -04:00
Owen W. Taylor
dcf387c91a Increase version to 2.27
Set metacity_minor_version to 27, reflecting the devel status
of this module.
2009-04-25 11:41:40 -04:00
Ivar Smolin
4c9c903648 Updating Estonian translation 2009-04-25 18:12:34 +03:00
Luca Ferretti
d12aaddc34 Updated Italian transaltion 2009-04-24 22:17:24 +02:00
Owen W. Taylor
cb01977029 Update maintainership information and add a DOAP file
Add mutter.doap with the module description
Move the old MAINTAINERS to METACITY_MAINTAINERS
List Tomas and myself as the maintainers in MAINTAINERS and mutter.doap
2009-04-24 10:50:49 -04:00
Owen W. Taylor
7a7632fa98 Allow setting input region before output window is created
If mutter_plugin_set_stage_input_region() and related methods are
called before the output window is available, save the set input
region and apply it to the output window later on.

compository-mutter.[ch]: Add mutter_set_stage_input_region() and
mutter_empty_stage_input_region(), move the input region handling
here and implement the delayed shape setting described
above.

mutter-plugin.c: Implement shape setting in terms of the new methods.

http://bugzilla.gnome.org/show_bug.cgi?id=580042
2009-04-24 09:54:19 -04:00
Owen W. Taylor
76a3f9d402 Build and install introspection information
Build a XML gir file and binary typelib file for the interfaces that
we are installing for plugin use. They are installed into $(pkglibdir)
since they are private to the application.

http://bugzilla.gnome.org/show_bug.cgi?id=580041
2009-04-24 09:54:18 -04:00
Colin Walters
96dfeea412 Don't use G_MODULE_BIND_LOCAL
Using G_MODULE_BIND_LOCAL causes problems for introspecting plugins,
since introspected symbols need to be globally available. And in
any case, trying to use linker features to prevent symbol conflicts
doesn't usually work out very well, it's better to just namespace
properly.

http://bugzilla.gnome.org/show_bug.cgi?id=580033
2009-04-24 09:54:18 -04:00
Colin Walters
a4746d75e6 Load plugins separately from initializing
Add separate mutter_plugin_manager_load() and
mutter_plugin_manager_initialize() calls so that we can just
load the plugins without start them. This is useful for introspecting
a gnome-shell plugin at build time.

http://bugzilla.gnome.org/show_bug.cgi?id=580032
2009-04-24 09:54:18 -04:00
Owen W. Taylor
52638b9d8e In case of GConf failure, fall back to local keybinding values
Always compile the default keybindings into Metacity, and if we
fail to retrieve the values from GConf, use the compiled-in
value. This makes things more robust especially in an environment
like JHBuild where GConf-schema-installation may not work
correctly.

Also use these values for the no-GConf case, rather than
having a separate arrray and code path.

http://bugzilla.gnome.org/show_bug.cgi?id=576127
2009-04-24 09:54:18 -04:00
Colin Walters
514d00698d Add support for a "meta key" which initiates extended WM operations
This patch adds the concept of a special key for WM operations, and
the default is Super_L, which on extended PC hardware is the
"Windows key".  What we do is handle the special case of a press
and release of this key (without any other intervening keys).

Super_L+<key> should still be passed to applications.  In the future
we may want to also take some of these keybindings (e.g. Super+TAB)
though.

http://bugzilla.gnome.org/show_bug.cgi?id=563047
2009-04-24 09:54:18 -04:00
Owen W. Taylor
c4a4de0056 Fix return transfer annotations for a number of functions and add docs
Add return transfer annotations (and while I was at it, docs), for
public functions that return MetaDisplay, MetaWindow, and MetaScreen.

http://bugzilla.gnome.org/show_bug.cgi?id=561297

http://bugzilla.gnome.org/show_bug.cgi?id=580027
2009-04-24 09:54:17 -04:00
Owen W. Taylor
28a4be2536 Add meta_workspace_set_builtin_struts()
Add a function to set a list of "built-in" struts for a workspace;
these are struts that are combined with the struts of the windows in
the workspace when determining the work area of the workspace.

http://bugzilla.gnome.org/show_bug.cgi?id=561297

http://bugzilla.gnome.org/show_bug.cgi?id=580026
2009-04-24 09:54:17 -04:00
Dan Winship
6e9803cd9f Add ::window-added and ::window-removed signals to MetaWorkspace
Add sigals to MetaWorkspace to allow tracking when windows are added
and removed. Note that on window creation that these signals are fired
before the window setup is totally complete, so they need to be used
with some care. (For example, the compositor, if present, has not
been notified of the new window.)

http://bugzilla.gnome.org/show_bug.cgi?id=580025
2009-04-24 09:54:17 -04:00
Owen W. Taylor
63b1d6642c Improve handling of errors when calling CompositeNameWindowPixmap
To guard against CompositeNameWindowPixmap failing, just use an
error trap. Previous code used:

 GrabServer/GetWindowAttributes/CompositeNameWindowPixmap/UngrabServer

To prevent BadMatch errors from !viewable, but didn't check the
return value of GetWindowAttributes and didn't check if an error
occured during the error trap. This way is more correct and more
efficient.

http://bugzilla.gnome.org/show_bug.cgi?id=580023
2009-04-24 09:54:17 -04:00
Olav Vitters
28955bb449 doap: Add desktop category 2009-04-23 19:35:51 +02:00
Matej Urban
dcd7cae7cf Updated Slovenian translation 2009-04-22 12:18:20 +02:00
Jordi Mas i Hernandez
c954bb9456 Minor fixes to Catalan translation 2009-04-22 09:46:20 +02:00
Shankar Prasad
be0b298d81 Updated Kannada Translation 2009-04-21 12:34:27 +05:30
Jorge Gonzalez
409026044b Updated Spanish translation 2009-04-18 20:55:56 +02:00
Funda Wang
0c311bdcf9 Updated zh_CN translation.
svn path=/trunk/; revision=4238
2009-04-10 03:22:43 +00:00
Owen W. Taylor
626912a9a4 Merge branch 'gnome-2-26' into master
Conflicts:
	configure.in
	src/core/schema-bindings.c
2009-04-08 16:11:12 -04:00
Tomas Frydrych
058c884f1f Bumped mutter version to 0.7 2009-04-07 13:39:57 +01:00
Tomas Frydrych
2e0cd7af5e Fixed focus handling in finish_minize().
When the window being hidden/mimimized has focus, is modal, but is not on the
  currently active workspace (e.g., during workspace switch before the new
  focus window is activated), we must prevent focus being passed to the modal
  window ancestor (otherwise the ancestor ends up being forcefully moved onto
  the active workspace).
2009-04-07 13:02:57 +01:00
Kjartan Maraas
82706fd958 Updated Norwegian bokmål translation.
2009-04-05  Kjartan Maraas  <kmaraas@gnome.org>

	* nb.po: Updated Norwegian bokmål translation.

svn path=/branches/gnome-2-26/; revision=4236
2009-04-05 12:14:14 +00:00
Marcel Telka
e81775e63d Updated Slovak translation by Pavol Šimo.
2009-04-04  Marcel Telka  <marcel@telka.sk>

	* sk.po: Updated Slovak translation by Pavol Šimo.

svn path=/trunk/; revision=4235
2009-04-04 12:45:30 +00:00
Tomas Frydrych
8ccb9e04eb Postpone creation of the guard window until we are ready to manage windows.
Creating the gard window when constructing MetaScreen causes the screen to
  go black for the duration of Metacity startup which is uggly. We do not
  actually need that window until we are ready to manage windows on the screen.
2009-04-02 12:25:53 +01:00
Tomas Frydrych
ae97ccba80 Bumped mutter version to 0.6 2009-04-02 09:44:48 +01:00
Owen W. Taylor
8ab9ed5d4e Expose meta_window_get_icon_geometry()
Make meta_window_get_icon_geometry() public, so that it can be used
to from plugins to animate windows minimizing to the correct
position.

Based on a patch from Cosimo Cecchi <cosimoc@gnome.org>

http://bugzilla.gnome.org/show_bug.cgi?id=571109
2009-03-31 17:29:48 -04:00
Baris Cicek
886ce72374 Updated Turkish translation
svn path=/branches/gnome-2-26/; revision=4234
2009-03-29 23:31:35 +00:00
Simos Xenitellis
a658c8b067 Updated Greek translation
svn path=/branches/gnome-2-26/; revision=4233
2009-03-28 16:31:54 +00:00
Simos Xenitellis
209d7ef613 Updated Greek translation
svn path=/trunk/; revision=4232
2009-03-27 12:07:25 +00:00
Simos Xenitellis
ab1e8cbb50 Updated Greek translation
svn path=/branches/gnome-2-26/; revision=4231
2009-03-27 12:05:46 +00:00
Goran Rakic
cbe6973b66 Updated Serbian translation by Miloš Popović.
svn path=/branches/gnome-2-26/; revision=4230
2009-03-21 19:51:01 +00:00
Goran Rakic
a6c76a85ce Updated Serbian translation by Miloš Popović.
svn path=/trunk/; revision=4229
2009-03-21 19:49:40 +00:00
Tomasz Dominikowski
265f9e5433 Updated Polish translation
2009-03-19  Tomasz Dominikowski  <tdominikowski@aviary.pl>

	* pl.po: Updated Polish translation

svn path=/trunk/; revision=4228
2009-03-19 11:30:21 +00:00
Tomasz Dominikowski
abb825b43e Updated Polish translation
2009-03-19  Tomasz Dominikowski  <tdominikowski@aviary.pl>

	* pl.po: Updated Polish translation

svn path=/branches/gnome-2-26/; revision=4227
2009-03-19 11:22:26 +00:00
Kjartan Maraas
f821407060 Updated Norwegian bokmål translation.
2009-03-19  Kjartan Maraas  <kmaraas@gnome.org>

	* nb.po: Updated Norwegian bokmål translation.

svn path=/branches/gnome-2-26/; revision=4226
2009-03-19 09:31:54 +00:00
Ignacio Casal Quinteiro
381aca98d0 Updated Galician translation by Suso Baleato.
svn path=/branches/gnome-2-26/; revision=4225
2009-03-18 19:58:43 +00:00
Ignacio Casal Quinteiro
b86d988b3c Updated Galician translation by Suso Baleato.
svn path=/trunk/; revision=4224
2009-03-18 19:58:04 +00:00
Kostas Papadimas
a67de845f6 Updated Greek Translation by Fotis Tsamis
svn path=/branches/gnome-2-26/; revision=4223
2009-03-18 15:58:40 +00:00
Djihed Afifi
808378129e woops
svn path=/branches/gnome-2-26/; revision=4222
2009-03-18 09:27:46 +00:00
Djihed Afifi
0d75012462 Updated Arabic translation
svn path=/branches/gnome-2-26/; revision=4221
2009-03-18 09:19:46 +00:00
Alexander Shopov
c4148cec33 Updated Bulgarian translation by Alexander Shopov <ash@contact.bg>
2009-03-17  Alexander Shopov  <ash@contact.bg>

	* bg.po: Updated Bulgarian translation by
	Alexander Shopov <ash@contact.bg>

svn path=/trunk/; revision=4220
2009-03-17 07:19:13 +00:00
Alexander Shopov
32a0cdb2f9 Updated Bulgarian translation by Alexander Shopov <ash@contact.bg>
2009-03-17  Alexander Shopov  <ash@contact.bg>

	* bg.po: Updated Bulgarian translation by
	Alexander Shopov <ash@contact.bg>

svn path=/branches/gnome-2-26/; revision=4219
2009-03-17 07:18:55 +00:00
Amanpreet Singh Alam
68823fd9b2 updating for GNOME Punjabi Translation by A S Alam
svn path=/branches/gnome-2-26/; revision=4218
2009-03-17 02:40:54 +00:00
Thomas James Alexander Thurman
d38b1abb49 change version to 2.26.0
svn path=/branches/gnome-2-26/; revision=4217
2009-03-16 17:59:02 +00:00
Thomas James Alexander Thurman
ebadd21c64 2.26.0 release.
svn path=/branches/gnome-2-26/; revision=4216
2009-03-16 16:44:27 +00:00
Thomas James Alexander Thurman
f1616a15d0 newline
svn path=/branches/gnome-2-26/; revision=4215
2009-03-16 16:44:09 +00:00
Thomas James Alexander Thurman
39bee4b9d2 2.26.0 release.
svn path=/branches/gnome-2-26/; revision=4214
2009-03-16 16:23:06 +00:00
Amitakhya Phukan
3f867e0167 Updated assamese translations
svn path=/branches/gnome-2-26/; revision=4213
2009-03-16 05:04:12 +00:00
Rajesh Ranjan
4300622c4a maithili added
svn path=/branches/gnome-2-26/; revision=4212
2009-03-15 12:15:30 +00:00
Ankitkumar Rameshchandra Patel
9ad7381c11 Added entry for Gujarati translation update.
svn path=/branches/gnome-2-26/; revision=4211
2009-03-15 08:13:44 +00:00
Ankitkumar Rameshchandra Patel
e5f287dad5 Updated Gujarati Translations.
svn path=/branches/gnome-2-26/; revision=4210
2009-03-15 08:13:24 +00:00
Gintautas Miliauskas
aa57becc41 Updated Lithuanian translation.
2009-03-14  Gintautas Miliauskas  <gintautas@miliauskas.lt>

	* lt.po: Updated Lithuanian translation.



svn path=/trunk/; revision=4209
2009-03-14 21:06:17 +00:00
Gintautas Miliauskas
a5fc9fcb79 Updated Lithuanian translation.
2009-03-14  Gintautas Miliauskas  <gintautas@miliauskas.lt>

	* lt.po: Updated Lithuanian translation.



svn path=/branches/gnome-2-26/; revision=4208
2009-03-14 21:04:52 +00:00
Nickolay V. Shmyrev
5134d0dee1 Updated Russian translation by Yuriy Penkin.
2009-03-14  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>

	* ru.po: Updated Russian translation by Yuriy Penkin.


svn path=/branches/gnome-2-26/; revision=4207
2009-03-14 19:11:16 +00:00
Nickolay V. Shmyrev
7269c37c8f Updated Russian translation by Yuriy Penkin.
2009-03-14  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>

	* ru.po: Updated Russian translation by Yuriy Penkin.


svn path=/trunk/; revision=4206
2009-03-14 19:09:33 +00:00
Sandeep Shedmake
9abe89a2dc Updated Marathi Translations
svn path=/branches/gnome-2-26/; revision=4205
2009-03-14 10:02:28 +00:00
Rajesh Ranjan
79aecf21bb hindi update by Rajesh Ranjan
svn path=/branches/gnome-2-26/; revision=4204
2009-03-14 07:10:47 +00:00
Owen W. Taylor
4253ff8e12 Add a "toggle_recording" keybinding
Add a keybinding (defaulting to <Control><Shift><Alt>r) to record
a screencast of the session. This isn't hooked up to anything in
metacity itself, but a plugin can connect to a signal on MetaScreen.

keybindings.c all-keybindings.h: Add the keybinding
screen.c: Add a ::toggle-recording signal

http://bugzilla.gnome.org/show_bug.cgi?id=575290
2009-03-13 17:06:04 -04:00
Owen W. Taylor
fb7b820187 Cleanup: split MetaSide from MetaDirection
The MetaDirection enumeration had META_SIDE_* values in it that
were used in some places where an enum with only four directions
was needed. Split this off into a separate enum called MetaSide
and use that enum name where appropriate.
2009-03-17 16:53:01 -04:00
Kostas Papadimas
3a2d775196 Updated Greek translation by Jennie Petoumenou.
svn path=/branches/gnome-2-26/; revision=4203
2009-03-13 16:36:43 +00:00
Priit Laes
c780fde38e Translation updated by Mattias Põldaru
2009-03-13  Priit Laes  <plaes at svn dot gnome dot org>

	* et.po: Translation updated by Mattias Põldaru

svn path=/branches/gnome-2-26/; revision=4202
2009-03-13 09:56:31 +00:00
Dan Winship
a47bb96536 Add a MetaScreen:restacked signal and expose MetaWindow.layer
Expose restacking and a window's stack layer to allow a compositor
to insert elements into the window stack in the right location.
(See Bug 571827 – hide panel when screensaver is active)

src/core/stack.h src/include/common.h: Move MetaStackLayer to
 a public header.

src/core/screen.c src/core/screen-private.h src/core/stack.c:
 Add a ::restacked signal emitted after we finish restracking.

src/core/window.h src/include/window.h: Add meta_window_get_layer()
2009-03-12 17:07:27 -04:00
Dan Winship
0e256a21a5 Use GDestroyNotify instead of custom type, for better introspectability 2009-03-25 10:50:40 -04:00
Tomas Frydrych
3b864f8af5 Delay creation of overlay window until we are ready to show the stage.
The overlay window was created before the plugins are loaded. Because the
  composite extension immediately maps the window, we ended blanking the screen
  while plugins, etc., were loading. This commit reorganizes the code so that
  the overlay window is only created just before we are ready to show the
  stage.

  The significant impact of this change is that plugins cannot manipulate the
  overlay window during their initial loading, i.e., they cannot call the
  input-region API (the plugin should hook into the "show" signal if it needs
  to do anything of this sort).

  The commit also removes the XClearArea() call on the overlay window that
  seems to have served no real purpose.
2009-03-30 16:56:52 +01:00
Tomas Frydrych
540fc4b76b Bump mutter to 0.5 2009-03-19 16:12:35 +00:00
Dan Winship
f78390b094 Notify the compositor of new windows slightly sooner.
In particular, make it so that we call meta_compositor_add_window() on
a new window before calling meta_compositor_sync_stack() to position
it. The list returned by mutter_plugin_get_windows() is only updated
by sync_stack(), but sync_stack() only pays attention to windows that
add_window() has already been called on. So without this change, a
newly-mapped window will not be returned by
mutter_plugin_get_windows() until after the *next* restacking.

http://bugzilla.openedhand.com/show_bug.cgi?id=1512
2009-03-18 15:09:15 -04:00
Tomas Frydrych
0b635aafae Make prototype for meta_window_find_root_ancestor() public. 2009-03-19 16:01:32 +00:00
Tomas Frydrych
8ae90af01f Bump to 2.25.144_0.4 2009-03-17 15:40:06 +00:00
Tomas Frydrych
31f48c0cf0 Removed unnecessary g_object_ref/unref() bracketing around g_object_notify(). 2009-03-17 12:28:00 +00:00
Tomas Frydrych
cd0ef08783 Added MetaWindow::fullscreen property (read only). 2009-03-17 12:27:13 +00:00
Tomas Frydrych
4203fd2993 Added MetaWorkspace::n-windows property (read-only). 2009-03-17 08:54:19 +00:00
Tomas Frydrych
54e56a47da Moved meta_window_get_outer_rect() prototype to window.h
Useful for plugins.
2009-03-17 08:35:17 +00:00
Tomas Frydrych
d8a28621cc Bumped mutter version to 0.3 2009-03-12 15:37:30 +00:00
Manoj Kumar Giri
177bfe38f6 Added entries for Oriya language Translation updation.
svn path=/branches/gnome-2-26/; revision=4201
2009-03-12 09:54:31 +00:00
Manoj Kumar Giri
b19b2e146a Updated Oriya Translation.
svn path=/branches/gnome-2-26/; revision=4200
2009-03-12 09:53:13 +00:00
Thomas James Alexander Thurman
3093d7e95a that should not have been checked in
svn path=/trunk/; revision=4199
2009-03-12 02:06:30 +00:00
Thomas James Alexander Thurman
4e0d8a0cbb Post-release bump to 2.27.1.
svn path=/trunk/; revision=4198
2009-03-12 02:05:26 +00:00
Thomas James Alexander Thurman
523151ddf0 svn path=/trunk/; revision=4196
svn path=/trunk/; revision=4196
2009-03-12 01:50:00 +00:00
Thomas James Alexander Thurman
0a7cb94ea8 2.27.0 release.
* NEWS: 2.27.0 release.


svn path=/trunk/; revision=4195
2009-03-12 01:49:30 +00:00
Thomas James Alexander Thurman
d4b7c0e633 2.27.0 release.
svn path=/trunk/; revision=4194
2009-03-12 01:36:30 +00:00
Thomas James Alexander Thurman
3f76affbd2 Remove deprecated GTK symbols. Refs #572332.
* src/include/util.h:
	* src/tools/metacity-window-demo.c:
	* src/ui/fixedtip.c:
	* src/ui/frames.c:
	* src/ui/frames.h:
	* src/ui/menu.c:
	* src/ui/metaaccellabel.c:
	* src/ui/metaaccellabel.h:
	* src/ui/preview-widget.c:
	* src/ui/preview-widget.h:
	* src/ui/tabpopup.c:
	* src/ui/theme-viewer.c:
	* src/ui/themewidget.c:
	* src/ui/themewidget.h:
	* test/tokentest/tokentest.c:


svn path=/trunk/; revision=4193
2009-03-12 01:26:24 +00:00
Thomas James Alexander Thurman
a8f8970601 use g_signal_handlers_disconnect_by_func instead of an old deprecated
* src/tools/metacity-mag.c: use g_signal_handlers_disconnect_by_func
	instead of an old deprecated function.


svn path=/trunk/; revision=4192
2009-03-12 01:16:52 +00:00
Thomas James Alexander Thurman
178b5ff626 fix problem where the previous code ignored callbacks for properties whose
* src/core/window-props.c: fix problem where the previous
        code ignored callbacks for properties whose values weren't
        looked up.  Closes #572573.


svn path=/trunk/; revision=4191
2009-03-12 01:09:41 +00:00
Krishnababu Krothapalli
92d347f566 Updated Telugu Translation
svn path=/branches/gnome-2-26/; revision=4190
2009-03-11 14:21:33 +00:00
Krishnababu Krothapalli
cafd18bb2c Updated LINGUAS entry
svn path=/branches/gnome-2-26/; revision=4189
2009-03-11 14:20:40 +00:00
Krishnababu Krothapalli
ce3e339201 Updated ChangeLog entry
svn path=/branches/gnome-2-26/; revision=4188
2009-03-11 14:20:13 +00:00
Runa Bhattacharjee
a863f0d955 Added Entry for Bengali India Translation Updation
svn path=/branches/gnome-2-26/; revision=4187
2009-03-10 17:08:56 +00:00
Runa Bhattacharjee
d7e84d4e11 Updated Bengali India Translation
svn path=/branches/gnome-2-26/; revision=4186
2009-03-10 17:08:22 +00:00
Petr Kovar
c47f7c2806 Updated Czech translation. Removed "src/ui/metacity-dialog.c".
2009-03-08  Petr Kovar  <pknbe@volny.cz>

	* cs.po: Updated Czech translation.
	* POTFILES.in: Removed "src/ui/metacity-dialog.c".

svn path=/trunk/; revision=4185
2009-03-08 19:34:41 +00:00
Petr Kovar
cb4c9aa64f Updated Czech translation.
2009-03-08  Petr Kovar  <pknbe@volny.cz>

	* cs.po: Updated Czech translation.

svn path=/branches/gnome-2-26/; revision=4184
2009-03-08 19:24:57 +00:00
Mark Krapivner
15f4656d9a Updated Hebrew translation
svn path=/branches/gnome-2-26/; revision=4183
2009-03-07 12:38:46 +00:00
Mark Krapivner
cba863dc5f Updated Hebrew translation
svn path=/branches/gnome-2-26/; revision=4182
2009-03-07 12:33:24 +00:00
Thomas James Alexander Thurman
ab6aa5463f add optional dependency on gtop. Include "(as username)" in the titlebar
* configure.in: add optional dependency on gtop.
	* src/core/window-props.c: Include "(as username)"
          in the titlebar if a window is running as another user.
	* src/core/window.c: check for PID before name, since
          the rendering of the name can now depend on the PID.
        Closes #549389.


svn path=/trunk/; revision=4181
2009-03-06 22:51:02 +00:00
miloc
9e3af9b51f Updated Italian translation by Luca Ferretti
svn path=/branches/gnome-2-26/; revision=4180
2009-03-06 21:32:28 +00:00
Amanpreet Singh Alam
143e566498 updating translation for Punjabi
svn path=/branches/gnome-2-26/; revision=4179
2009-03-05 02:11:22 +00:00
Luca Ferretti
000aaaf95d Updated Italian translation
2009-03-04  Luca Ferretti  <elle.uca@libero.it>

	* it.po: Updated Italian translation

svn path=/branches/gnome-2-26/; revision=4178
2009-03-04 15:34:04 +00:00
Claude Paroz
42387bff6f Updated French translation (synced with gnome-2-26).
2009-03-02  Claude Paroz  <claude@2xlibre.net>

	* fr.po: Updated French translation (synced with gnome-2-26).

svn path=/trunk/; revision=4177
2009-03-02 21:33:24 +00:00
Claude Paroz
3fe6268f10 Updated French translation by Frédéric Peters and Claude Paroz.
2009-03-02  Claude Paroz  <claude@2xlibre.net>

	* fr.po: Updated French translation by Frédéric Peters and Claude Paroz.

svn path=/branches/gnome-2-26/; revision=4176
2009-03-02 21:28:18 +00:00
Felix I
f749f9ceef tamil translation updated
svn path=/branches/gnome-2-26/; revision=4175
2009-03-02 10:50:53 +00:00
Matej Urbančič
c284a90663 Updated Slovenian translation
svn path=/branches/gnome-2-26/; revision=4174
2009-03-02 10:39:19 +00:00
Duarte Loreto
50442cf96b Updated Portuguese translation.
2009-02-28  Duarte Loreto <happyguy_pt@hotmail.com>

	* pt.po: Updated Portuguese translation.

svn path=/branches/gnome-2-26/; revision=4173
2009-02-28 16:44:22 +00:00
Ilkka Tuohela
4bfacf4a39 Updated Finnish translation
svn path=/branches/gnome-2-26/; revision=4172
2009-02-28 15:55:21 +00:00
Jorge Gonzalez Gonzalez
3afd25691a Updated Spanish translation
svn path=/trunk/; revision=4171
2009-02-28 12:29:19 +00:00
Matej Urbančič
a6a963bec1 Updated Slovenian translation
svn path=/trunk/; revision=4170
2009-02-24 14:58:19 +00:00
Philip Withnall
d587a4b859 Updated British English translation.
2009-02-23  Philip Withnall  <philip@tecnocode.co.uk>

	* en_GB.po: Updated British English translation.


svn path=/branches/gnome-2-26/; revision=4169
2009-02-23 18:48:25 +00:00
Gil Forcada Codinachs
8d5b142664 Updated Catalan translation by David Planella
svn path=/branches/gnome-2-26/; revision=4168
2009-02-23 14:38:03 +00:00
Ilkka Tuohela
e44664a3b5 Updated Finnish translation
svn path=/branches/gnome-2-26/; revision=4167
2009-02-23 13:48:53 +00:00
Ilkka Tuohela
31599eb282 Updated Finnish translation
svn path=/branches/gnome-2-26/; revision=4166
2009-02-23 13:41:29 +00:00
Matthias Clasen
d6ac4dc22a Don't force CA_PROP_CANBERRA_ENABLE to 1. That was a misunderstanding on
* src/core/bell.c: Don't force CA_PROP_CANBERRA_ENABLE to 1.
        That was a misunderstanding on my part, and makes it impossible
        to get rid of the bell.


svn path=/trunk/; revision=4165
2009-02-21 17:00:26 +00:00
Christian Kirbach
1c978e7333 Updated German translation.
* de.po: Updated German translation.

svn path=/branches/gnome-2-26/; revision=4164
2009-02-21 14:05:52 +00:00
Thomas James Alexander Thurman
0b3f45bb1b Use zenity for the session management dialogue that warns about
clueless clients, not metacity-dialog.  This is the last change
	away from metacity-dialog and therefore closes #521914.
	* src/Makefile.am:
	* src/core/session.c:
	* src/core/util.c:
	* src/include/util.h:
	* src/ui/metacity-dialog.c (deleted):


svn path=/trunk/; revision=4163
2009-02-20 19:48:04 +00:00
Og B. Maciel
24f2df926a Updated Brazilian Portuguese translation.
svn path=/trunk/; revision=4162
2009-02-20 13:56:39 +00:00
Og B. Maciel
6c4a5fa38c Updated Brazilian Portuguese translation.
svn path=/branches/gnome-2-26/; revision=4161
2009-02-20 13:54:41 +00:00
Jani Monoses
1726df6eaf Updated Romanian translation from Adi Roiban.
svn path=/branches/gnome-2-26/; revision=4160
2009-02-19 19:54:44 +00:00
Daniel Nylander
f00e8655ac sv.po: Updated Swedish translation
svn path=/trunk/; revision=4159
2009-02-19 19:40:33 +00:00
Ilkka Tuohela
4312600248 Updated Finnish translation
svn path=/branches/gnome-2-26/; revision=4158
2009-02-19 08:04:32 +00:00
Ilkka Tuohela
41395d9e00 Updated Finnish translation
svn path=/trunk/; revision=4157
2009-02-19 08:01:05 +00:00
Ilkka Tuohela
3e00bcbf9f Updated Finnish translation
svn path=/trunk/; revision=4156
2009-02-19 08:00:17 +00:00
Chao-Hsiung Liao
30af106563 2.25.233 fix
svn path=/branches/gnome-2-26/; revision=4155
2009-02-18 09:35:11 +00:00
Changwoo Ryu
32c6966e4b Updated Korean translation
svn path=/branches/gnome-2-26/; revision=4154
2009-02-18 00:16:29 +00:00
Gabor Kelemen
0b402b23f7 Translation updated.
2009-02-17  Gabor Kelemen  <kelemeng@gnome.hu>

	* hu.po: Translation updated.

svn path=/trunk/; revision=4153
2009-02-17 01:49:56 +00:00
Gabor Kelemen
3e9d7da4da Translation updated.
2009-02-17  Gabor Kelemen  <kelemeng@gnome.hu>

	* hu.po: Translation updated.

svn path=/branches/gnome-2-26/; revision=4152
2009-02-17 01:48:06 +00:00
Wouter Bolsterlee
691fcaeee7 Updated Dutch translation by Wouter Bolsterlee.
2009-02-16  Wouter Bolsterlee  <wbolster@svn.gnome.org>

	* nl.po: Updated Dutch translation by Wouter Bolsterlee.


svn path=/trunk/; revision=4151
2009-02-16 18:38:00 +00:00
Wouter Bolsterlee
58594ef2be Updated Dutch translation by Wouter Bolsterlee.
2009-02-16  Wouter Bolsterlee  <wbolster@svn.gnome.org>

	* nl.po: Updated Dutch translation by Wouter Bolsterlee.


svn path=/branches/gnome-2-26/; revision=4150
2009-02-16 18:35:37 +00:00
Kenneth Nielsen
1c2a88373c Updated Danish translation
svn path=/branches/gnome-2-26/; revision=4149
2009-02-15 13:05:15 +00:00
Kenneth Nielsen
9f30910653 Updated Danish translation
svn path=/trunk/; revision=4148
2009-02-15 13:05:00 +00:00
Chao-Hsiung Liao
d039176d75 2.25.233
svn path=/branches/gnome-2-26/; revision=4147
2009-02-14 23:01:07 +00:00
Ihar Hrachyshka
19a0eb1761 Updated be@latin.po
svn path=/branches/gnome-2-26/; revision=4146
2009-02-14 17:38:05 +00:00
Ihar Hrachyshka
41a6c2e501 Updated be@latin.po
svn path=/trunk/; revision=4144
2009-02-14 11:17:08 +00:00
Theppitak Karoonboonyanan
fbc7fc6645 Updated Thai translation (merged from gnome-2-26 branch).
2009-02-13  Theppitak Karoonboonyanan  <thep@linux.thai.net>

	* th.po: Updated Thai translation (merged from gnome-2-26 branch).


svn path=/trunk/; revision=4143
2009-02-13 13:45:17 +00:00
Theppitak Karoonboonyanan
eea098d22d Updated Thai translation.
2009-02-13  Theppitak Karoonboonyanan  <thep@linux.thai.net>

	* th.po: Updated Thai translation.


svn path=/branches/gnome-2-26/; revision=4142
2009-02-13 13:25:44 +00:00
Matthias Clasen
573dbb431e Now that we are using libcanberra, don't tell the X server to play the
* src/core/bell.c (meta_bell_set_audible): Now that we are
        using libcanberra, don't tell the X server to play the system
        bell internally.


svn path=/trunk/; revision=4141
2009-02-13 00:09:44 +00:00
Inaki Larranaga Murgoitio
ecfe3a6533 Updated Basque translation.
2009-02-12  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>

	* eu.po: Updated Basque translation.


svn path=/branches/gnome-2-26/; revision=4140
2009-02-12 20:58:09 +00:00
Dan Winship
8216cbc4f6 Revert a seemingly non-functional and erroneous part of the no-tab-popup change
http://bugzilla.o-hand.com/show_bug.cgi?id=1446
2009-02-12 15:07:40 -05:00
Tomas Frydrych
9a4d1d1375 Moved bunch of prototypes from display-private.h to display. 2009-03-12 14:48:22 +00:00
Dan Winship
616e140420 Ignore override-redirect windows when restacking based on window groups.
http://bugzilla.gnome.org/show_bug.cgi?id=571616 /
http://bugzilla.openedhand.com/show_bug.cgi?id=1461
2009-02-26 09:59:14 -05:00
Tomas Frydrych
52ea2fd45d Bump mutter version to 0.2 2009-03-10 15:54:53 +00:00
Emmanuele Bassi
050c1e268d Do not use Fixed values with COGL
The COGL API expects floating point values, not fixed point ones.
2009-03-10 12:52:03 +00:00
Tomas Frydrych
7afc4310f6 Added no_more_x_calls flag to MutterWindow.
Once the window destruction is initiated, we can still manipulate our
  MutterWindow with clutter API, but we can not longer use any X-based API,
  or MetaWindow API to query it.
2009-02-18 12:13:36 +00:00
Inaki Larranaga Murgoitio
7b2cba7a6c Updated Basque translation.
2009-02-12  Inaki Larranaga Murgoitio  <dooteo@euskalgnu.org>

	* eu.po: Updated Basque translation.


svn path=/trunk/; revision=4139
2009-02-12 19:22:30 +00:00
Tomas Frydrych
39a3bb2c7d Sync up to upstream 2.25.144
Conflicts:

	configure.in
	src/core/main.c
	src/core/prefs.c
	src/core/window.c
	src/include/prefs.h
2009-02-12 17:14:12 +00:00
Matthias Clasen
91ff5617ef Forgotten file
svn path=/trunk/; revision=4138
2009-02-12 14:43:09 +00:00
Tomas Frydrych
7eb2843718 Thou shall not use - in version string. 2009-02-12 11:55:11 +00:00
Tomas Frydrych
91490ed713 Added mutter specific versioning component to the overall version. 2009-02-12 10:56:37 +00:00
Tomas Frydrych
081272c5a9 Distcheck fixes. 2009-02-12 10:48:59 +00:00
Matthias Clasen
f1782868f9 Use libcanberra to play system bell and workspace switch sounds
svn path=/trunk/; revision=4137
2009-02-12 00:53:23 +00:00
Daniel Nylander
45ecea6330 sv.po: Updated Swedish translation
svn path=/branches/gnome-2-26/; revision=4136
2009-02-11 21:29:43 +00:00
Tomas Frydrych
f4bc825cf8 Do not destroy the GLX texture during redecoration.
Just ensure that it is on the top of the internal actor stack.
2009-02-11 14:20:37 +00:00
Tomas Frydrych
fb1fc4e7c6 Do not run map effect if the map is because window is getting redecorated. 2009-02-11 14:20:01 +00:00
Tomas Frydrych
ed3d222327 Recreate internals of MutterWindow when the decoration status changes. 2009-02-11 12:55:59 +00:00
Tomas Frydrych
8c0ae7be83 Turned window decorated flag into MetaWindow::decorated property.
This allows things like the compositor to easily track decoration status.
2009-02-11 12:16:41 +00:00
Daniel Nylander
66ee22c3e6 sv.po: Updated Swedish translation
svn path=/trunk/; revision=4135
2009-02-11 11:52:27 +00:00
Priit Laes
2db1222e45 Translation updated by Mattias Põldaru
2009-02-11  Priit Laes  <plaes at svn dot gnome dot org>

	* et.po: Translation updated by Mattias Põldaru

svn path=/trunk/; revision=4134
2009-02-11 11:32:47 +00:00
Thomas James Alexander Thurman
abbd057eb9 Session must be saved before display close, and display
shouldn't close during shutdown if it's already closed.
        Can't believe we don't have a bug about this already...
	* src/core/display-private.h:
	* src/core/display.c:
	* src/core/main.c:
	* src/core/session.c:


svn path=/trunk/; revision=4133
2009-02-11 05:26:58 +00:00
Thomas James Alexander Thurman
6da5b8ccc5 Don't define meta_spew_event unless verbose mode is on.
Closes #571126.
	* src/core/display.c:
	* src/core/window.c:


svn path=/trunk/; revision=4132
2009-02-11 04:34:17 +00:00
Takeshi AIHANA
c5c202c04e Updated Japanese translation.
2009-02-11  Takeshi AIHANA <takeshi.aihana@gmail.com>

	* ja.po: Updated Japanese translation.

svn path=/branches/gnome-2-26/; revision=4131
2009-02-11 03:33:44 +00:00
Thomas James Alexander Thurman
128e2b917d switch is "--disable-verbose-mode", not "--disable-verbose". Closes
* README: switch is "--disable-verbose-mode", not "--disable-verbose".
          Closes #571210.


svn path=/trunk/; revision=4130
2009-02-11 03:13:33 +00:00
Thomas James Alexander Thurman
2f4173b267 rm incorrect comment
* src/include/util.h:


svn path=/trunk/; revision=4129
2009-02-10 12:51:29 +00:00
Tomas Frydrych
5780ffad12 Added MutterWindow::no-shadow property
Allows to specify that a window that otherwise would have shadow should not.
2009-02-10 10:22:35 +00:00
Gil Forcada Codinachs
6fe40f13a7 Added Asturian translation on behalf of Mikel González
svn path=/branches/gnome-2-26/; revision=4128
2009-02-10 08:34:30 +00:00
Gil Forcada Codinachs
3fea1e4df5 Added Asturian translation on behalf of Mikel González
svn path=/trunk/; revision=4127
2009-02-10 08:33:24 +00:00
Kjartan Maraas
13d2552274 Updated Norwegian bokmål translation.
2009-02-10  Kjartan Maraas  <kmaraas@gnome.org>

	* nb.po: Updated Norwegian bokmål translation.

svn path=/trunk/; revision=4126
2009-02-10 07:06:34 +00:00
Thomas James Alexander Thurman
3d0bfbb4f4 Further movement of code out of metacity-dialog into Zenity;
this time it's the "kill or wait?" dialogue.  Much code saved.
	* src/core/delete.c:
	* src/core/keybindings.c:
	* src/core/main.c:
	* src/core/util.c:
	* src/core/window-private.h:
	* src/core/window.c:
	* src/include/util.h:


svn path=/trunk/; revision=4125
2009-02-10 05:12:53 +00:00
Tomas Frydrych
770a6f0138 Actually, if the parent of MutterWindow is a container, use the interface.
Just unparenting the window does not automatically remove it from it's
  parent.
2009-02-09 17:01:37 +00:00
Tomas Frydrych
16d49695ad Unparent rather than destroy MutterWindows.
clutter_actor_destroy() is pure evil, wreaking havoc in reference tracking.
2009-02-09 16:39:26 +00:00
Joshua Lock
6893ef034b Intialise *style to NULL.
*style being unitialised raises a warning which causes problems on systems which enable warnings as errors (-Werror).
2009-02-09 14:48:08 +00:00
Chao-Hsiung Liao
b893e88e8b 2.27.0
svn path=/trunk/; revision=4124
2009-02-09 00:10:40 +00:00
Thomas James Alexander Thurman
f2be9e4381 Windows demanding attention should never appear in the
alt-tab list unless they're of a type which might have appeared
        there anyway.  This solves a problem under AWN where docks which were
        marked as demanding attention appeared in all alt-tab lists;
        they were irrelevant and it was impossible to remove them from the
        lists.
	* src/core/display.c:


svn path=/trunk/; revision=4123
2009-02-08 00:22:12 +00:00
Thomas James Alexander Thurman
53b5d6d167 some commenting
* src/ui/theme.c: some commenting


svn path=/trunk/; revision=4122
2009-02-07 23:55:39 +00:00
Thomas James Alexander Thurman
92bfe34716 Only skip the first window in the alt-tab chain if it's actually the
* src/core/display.c: Only skip the first window in
        the alt-tab chain if it's actually the current window
        (urgent windows on other workspaces may precede it).
        Fixes #535887.


svn path=/trunk/; revision=4121
2009-02-07 23:05:42 +00:00
Clytie Siddall
6e36d4ed48 Updated Vietnamese translation
svn path=/branches/gnome-2-26/; revision=4120
2009-02-07 10:22:14 +00:00
Tomas Frydrych
9b5d91e33b Merge branch 'work-0-9' into work
Conflicts:

	src/compositor/mutter/compositor-mutter.c
	src/compositor/mutter/mutter-shaped-texture.c
2009-02-06 12:36:15 +00:00
Tomas Frydrych
c7686b2977 Fixed handling of _NET_WM_WINDOW_OPACITY. 2009-02-06 11:16:33 +00:00
Tomas Frydrych
3e754a6f35 Fixed handling of _NET_WM_WINDOW_OPACITY. 2009-02-06 11:16:33 +00:00
Thomas James Alexander Thurman
5df096baf3 Lines where x1==x2 or y1==y2 may have the second element
null.  Lines where both are null, and the width is zero,
        are points.  This speeds things up surprisingly much.
	* src/ui/theme-parser.c:
	* src/ui/theme.c:


svn path=/trunk/; revision=4119
2009-02-06 04:50:50 +00:00
Thomas James Alexander Thurman
45cbaa2d13 incredibly baroque system to make sure the translators don't have to
* src/core/main.c: incredibly baroque system to make sure
        the translators don't have to update the year number every year.


svn path=/trunk/; revision=4118
2009-02-05 20:02:59 +00:00
Thomas James Alexander Thurman
720a17acd7 collapse several strings into one for the translators' benefit.
* src/ui/theme-parser.c: collapse several strings into one
        for the translators' benefit.


svn path=/trunk/; revision=4117
2009-02-05 19:26:06 +00:00
Thomas James Alexander Thurman
dab00ab036 post-branch bump to 2.27.0.
* configure.in: post-branch bump to 2.27.0.


svn path=/trunk/; revision=4116
2009-02-05 01:13:01 +00:00
Thomas James Alexander Thurman
7ba37ce249 Branch for 2.26
svn path=/branches/gnome-2-26/; revision=4115
2009-02-05 01:09:43 +00:00
Thomas James Alexander Thurman
b2da6d86f3 queue resize on window undecorate
* src/core/frame.c: queue resize on window undecorate


svn path=/trunk/; revision=4114
2009-02-05 01:06:15 +00:00
Jorge Gonzalez Gonzalez
56192d9e48 Updated Spanish translation
svn path=/trunk/; revision=4113
2009-02-03 19:49:59 +00:00
Luca Ferretti
00192b019c Fix description, focus the desktop, not desktop backgroung (Closes bug
2009-02-03  Luca Ferretti  <elle.uca@libero.it>

	* src/include/all-keybindings.h: Fix description, focus the
	desktop, not desktop backgroung (Closes bug #569649)

svn path=/trunk/; revision=4112
2009-02-03 08:39:34 +00:00
Thomas James Alexander Thurman
21416f453a Wrap g_error calls in braces.
* src/core/schema-bindings.c: Wrap g_error calls in braces.


svn path=/trunk/; revision=4110
2009-02-03 02:21:36 +00:00
Thomas James Alexander Thurman
ad16804344 Post-release bump to 2.25.233.
svn path=/trunk/; revision=4106
2009-02-01 20:56:48 +00:00
Thomas James Alexander Thurman
63744a3dd7 2.25.144 release.
svn path=/trunk/; revision=4104
2009-02-01 20:52:21 +00:00
Thomas James Alexander Thurman
e5db44ca90 Set prop_hooks_table to NULL after freeing it.
* src/core/window-props.c:


svn path=/trunk/; revision=4103
2009-02-01 20:47:33 +00:00
Gil Forcada Codinachs
032cbe0dd5 Uploaded Catalan translation by David Planella
svn path=/trunk/; revision=4102
2009-02-01 20:17:27 +00:00
Jorge Gonzalez Gonzalez
7d34a10e4a Updated Spanish translation
svn path=/trunk/; revision=4101
2009-01-31 19:12:15 +00:00
Daniel Nylander
62f1fc62a7 sv.po: Updated Swedish translation
svn path=/trunk/; revision=4100
2009-01-31 01:29:34 +00:00
Kjartan Maraas
c26cb4d2be Updated Norwegian bokmål translation.
2009-01-29  Kjartan Maraas  <kmaraas@gnome.org>

	* nb.po: Updated Norwegian bokmål translation.

svn path=/trunk/; revision=4098
2009-01-29 16:03:26 +00:00
Thomas James Alexander Thurman
a203fb1037 Window properties are looked up in a hash table rather than
by iteration over an array.  Saves ~44us per window, but
        also makes the code cleaner.
	* src/core/display-private.h:
	* src/core/window-props.c:


svn path=/trunk/; revision=4097
2009-01-29 14:32:31 +00:00
Changwoo Ryu
adeec009e7 Updated Korean translation
svn path=/trunk/; revision=4096
2009-01-29 10:01:44 +00:00
Thomas James Alexander Thurman
8e6c0bec78 some lists failed to keep track of their contents and therefore didn't
* src/core/edge-resistance.c: some lists failed to keep track
          of their contents and therefore didn't free correctly.
          Closes #552303.


svn path=/trunk/; revision=4095
2009-01-28 02:30:30 +00:00
Thomas James Alexander Thurman
69ae9e4a9d Free name of old theme when new theme is loaded.
* src/core/prefs.c: Free name of old theme when new theme
          is loaded.


svn path=/trunk/; revision=4094
2009-01-28 02:08:09 +00:00
Thomas James Alexander Thurman
1381f6d5f2 free the result of gdk_text_property_to_utf8_list() even when it returns
* src/ui/ui.c: free the result of gdk_text_property_to_utf8_list()
          even when it returns no data.


svn path=/trunk/; revision=4093
2009-01-28 02:00:33 +00:00
Owen Taylor
a6c951352f GtkStyle is specific to a particular colormap. Metacity uses different
2009-01-27  Owen Taylor  <otaylor@redhat.com>

       GtkStyle is specific to a particular colormap. Metacity
       uses different colormaps for windows with different
       visuals, so it must specialize the GtkStyle.

       Closes #568365 and #513944.

       * src/ui/frames.[ch]: Keep a GtkStyle for each MetaUIFrame, which is
         obtained by calling gtk_style_attach() on the style for the
         MetaFrames. When the style of the MetaFrames changes, reattach
         everything. When we call gtk_style_set_background() pass in the
         right style.

       * src/ui/themes.[ch]: Create a _with_style() variant of functions that
         previously took the style from widget->style passed in, so we
         can draw with the right style for the colormap.


svn path=/trunk/; revision=4092
2009-01-28 01:47:18 +00:00
Thomas James Alexander Thurman
0a172cc053 Added a gconf key to swap the meanings of the right and
middle buttons when the modifier key is held down.
        Closes #437910.  Thanks to Matt Kraai for looking over
        the patch.
	* src/core/display.c:
	* src/core/prefs.c:
	* src/include/prefs.h:
	* src/metacity.schemas.in.in:


svn path=/trunk/; revision=4091
2009-01-27 21:05:42 +00:00
Thomas James Alexander Thurman
f5fa4a3866 All the window properties are now handled using simple
window property handlers.  Closes #549886.
	* src/core/window-private.h:
	* src/core/window-props.c:
	* src/core/window.c:


svn path=/trunk/; revision=4090
2009-01-27 05:03:06 +00:00
Thomas James Alexander Thurman
8cbcbb0655 More of the window properties are checked using simple
window property handlers.  The ones which remain don't
        actually look up the new value in the ordinary way, and
        so are a little trickier to merge.  Added an "initial"
        flag to be on the safe side that the behaviour is the
        same as before (so we don't do things when a window's
        first mapped that we only used to do when a property
        changed).  Partial fix for bug #549886.
	* src/core/window-props.c:
	* src/core/window-props.h:
	* src/core/window.c:


svn path=/trunk/; revision=4089
2009-01-27 03:53:07 +00:00
Thomas James Alexander Thurman
35d9d2864f add support for _NET_WM_MOVERESIZE_CANCEL.
* src/core/window.c: add support for _NET_WM_MOVERESIZE_CANCEL.


svn path=/trunk/; revision=4088
2009-01-25 22:59:50 +00:00
Raivis DEjus
bb5c0d0c34 Updated Latvian translation.
2009-01-24  Raivis DEjus  <orvils@gmail.com>

	* lv.po: Updated Latvian translation.


svn path=/trunk/; revision=4087
2009-01-24 13:59:43 +00:00
Yair Hershkovitz
226cdc9645 updated hebrew translation
svn path=/trunk/; revision=4084
2009-01-22 18:36:45 +00:00
Thomas James Alexander Thurman
1b35154e2b Added Igbo, Yoruba and Hausa
svn path=/trunk/; revision=4077
2009-01-18 01:25:57 +00:00
Matej Urbančič
7c69ab987a Updated Slovenian translation
svn path=/trunk/; revision=4076
2009-01-17 08:20:58 +00:00
Gabor Kelemen
ba03230e72 Translation updated.
2009-01-17  Gabor Kelemen  <kelemeng@gnome.hu>

	* hu.po: Translation updated.

svn path=/trunk/; revision=4075
2009-01-17 07:15:18 +00:00
Thomas James Alexander Thurman
77cb0db9c2 add meta_theme_draw_frame_by_name, which is needed for the theme editor.
* src/ui/theme.[ch]: add meta_theme_draw_frame_by_name, which
          is needed for the theme editor.


svn path=/trunk/; revision=4074
2009-01-11 04:48:54 +00:00
Daniel Nylander
ad080410a3 sv.po: Updated Swedish translation
svn path=/trunk/; revision=4073
2009-01-09 01:34:39 +00:00
Lu Gan
dab72c3efa Update zh_CN.po
svn path=/trunk/; revision=4072
2009-01-05 12:30:47 +00:00
Lu Gan
32f882093b Updated Chinese Simplified translation
svn path=/trunk/; revision=4071
2009-01-05 12:07:05 +00:00
Jonathan Matthew
6ac54641c6 Defer hiding windows until effects finish
Add 'hide_after_effect' flag to MutterWindowPrivate, tracking
whether the window needs to be hidden after all outstanding effects
finish.

Set or clear the flag as appropriate in clutter_cmp_set_window_hidden.

In mutter_window_effect_completed, if hide_after_effect is TRUE
and no other effects are in progress, hide the window.
2009-01-05 20:26:47 +10:00
Tomas Frydrych
1d38209520 Fixed process_tab_grab()
When there is custom handler installed for the tab releavant tab function
  we do not want to actually call it form inside of this function, only to
  ensure that the grab is not released. The handler will get called in the
  normal way in process_event(). Whoever installed the handler (and requested
  the grab) also has to ensure the grab is released.
2009-02-03 17:30:49 +00:00
Tomas Frydrych
c1f3a5c67d Ensure that if custom handler is installed for one of the shortcuts that do
keyboard grab, the custom handler gets also called while the grab is in place.
2009-02-03 13:23:08 +00:00
Tomas Frydrych
6e543fbcfd Store the default keybinding handler alongside the custom one.
This allows us to fall back onto it if the custom handler removes itself.
2009-02-03 13:20:51 +00:00
Tomas Frydrych
9dee164790 Ensure that we do not attempt to free the tab popup when there is none. 2009-02-03 13:16:01 +00:00
Tomas Frydrych
b0cc2a8614 Handle gconf errors better for string values in preferences. 2009-02-03 10:15:23 +00:00
Dan Winship
f4ecc9bab8 Make compositor private a GObject than a void pointer
Requiring the compositor private object to be a GObject allows the
return value of meta_window_get_compositor_private() to be used
via gobject-introspection, since the type and memory management
can be determined.

This allows a reverse mapping from MetaWindow to MutterWindow.

- Change meta_window_get/set_compositor_private to use GObject
  rather than void *
- Adapt code in compositor-mutter.c to match.
2009-02-02 15:16:05 -05:00
Tomas Frydrych
c3884e9900 Can't g_free() MetaDisplay GObject. 2009-02-03 09:11:32 +00:00
Tomas Frydrych
39c88facc5 Move meta_display_get_tab_*() functions into display.h 2009-02-02 17:01:27 +00:00
Tomas Frydrych
1dce6b5fa3 Added meta_screen_(un)grab_all_keys() to keybindings.h. 2009-02-02 16:53:38 +00:00
Tomas Frydrych
6b1aa3cf04 Do not allocate the tab_pop up object at all when the --no-tab-popup option is set
This option is intended primarily so that and Alt+Tab implementation can be
  provided in a plugin, so having the object around makes no sense.
2009-02-02 15:28:26 +00:00
Tomas Frydrych
2e1893f7d3 --no-tab-popup && no-tab-popup gconf key
Disables the use of popup (and highlight frame) for window cycling.
2009-02-02 14:09:04 +00:00
Tomas Frydrych
d1fd844bc4 MetaWindow::raised signal. 2009-02-02 14:08:46 +00:00
Tomas Frydrych
db273ce50c MetaWindow::focus signal. 2009-02-02 11:00:13 +00:00
Tomas Frydrych
2338611046 meta_keybindings_switch_window()
Public function to switch to the next window in Alt+Tab like fashion.
2009-01-29 16:26:12 +00:00
Tomas Frydrych
7d3a05f2d1 Removed const qualifier from key_handlers[] so we can modify it; use find_handler() in meta_keybindings_set_custom_handler(). 2009-01-29 15:29:43 +00:00
Tomas Frydrych
a02e0b3c98 Install keybindings.h 2009-01-29 15:14:25 +00:00
Tomas Frydrych
952d63a127 Implemented meta_keybindings_set_custom_handler(). 2009-01-29 15:07:57 +00:00
Tomas Frydrych
23bed522ab Expose keybindings data types; add user_data parameter the handler signature. 2009-01-29 14:53:03 +00:00
Tomas Frydrych
813acae961 Rename keybindings.h to keybindings-private.h 2009-01-29 14:16:01 +00:00
Robert Bragg
352e2c02dc workaround multi-tex combine mode for RGB tfp textures
It seems that with the latest intel drivers when multi-texturing using an RGB
TFP texture, the texture is being setup internally as an RGBA texture, where
the alpha channel is mostly 0.0 so you only see a shimmer of the window. This
workaround forcibly defines the alpha channel as 1.0. Maybe there is some
clutter/cogl state that is interacting with this that is being overlooked,
but for now this seems to work. (Tested on i945 + DRI2)
2009-01-12 13:18:39 +00:00
Tomas Frydrych
9ebb135ccb Merge branch 'next-generation' into clutter 2009-01-26 08:22:18 +00:00
Tomas Frydrych
a96939be0f MetaWindow::workspace-changed signal.
Emitted when window is moved from one workspace to another; the number of the
  old workspace is passed to the signal handlers.
2009-01-20 12:52:06 +00:00
Tomas Frydrych
cb3870f9f6 Sanity check to ensure we do not try to relocate windows onto NULL workspace. 2009-01-20 12:48:59 +00:00
Tomas Frydrych
25d628aea2 Exposed MetaGroup API. 2009-01-15 15:37:48 +00:00
Tomas Frydrych
aad8eb1999 Added meta_group_get_size() to allow for more efficient check of whether window is part of a larger group. 2009-01-15 15:21:43 +00:00
Tomas Frydrych
fc6b78a20c Ensure that meta_compositor_map_window() is even when we only get MapNotify. 2009-01-12 16:41:06 +00:00
Tomas Frydrych
4b3a8fefb6 Fixed mutter_window_is_override_redirect()
Broken in course of override redirect core changes.
2009-01-12 16:40:25 +00:00
Tomas Frydrych
ec0562550a Added meta_window_get_role(). 2009-01-12 12:30:31 +00:00
Tomas Frydrych
73e14e0bb1 Make sure we preserve pre-existing event mask on stage and overlay windows. 2009-01-09 16:28:12 +00:00
Tomas Frydrych
822e125492 Make sure we preserve pre-existing event mask on stage and overlay windows. 2009-01-09 16:28:12 +00:00
Tomas Frydrych
b47cd6a3bc Ensure that when a workspace is removed from the middle of the list, the
_NET_WM_DESKTOP props on windows on following workspaces are correctly set.
2009-01-09 15:04:53 +00:00
Tomas Frydrych
95fa3a3879 Ensure that when a workspace is removed from the middle of the list, the
_NET_WM_DESKTOP props on windows on following workspaces are correctly set.
2009-01-09 15:04:53 +00:00
Tomas Frydrych
0b978e61aa Do not dereference NULL. 2009-01-08 15:44:59 +00:00
Tomas Frydrych
d6b974ba15 Print dl error message if load fails. 2009-01-06 11:31:45 +00:00
Tomas Frydrych
ec09ac49f6 Do not attempt to load plugin if module is not usable. 2009-01-06 10:09:16 +00:00
Jonathan Matthew
ee738f1d6f Defer hiding windows until effects finish
Add 'hide_after_effect' flag to MutterWindowPrivate, tracking
whether the window needs to be hidden after all outstanding effects
finish.

Set or clear the flag as appropriate in clutter_cmp_set_window_hidden.

In mutter_window_effect_completed, if hide_after_effect is TRUE
and no other effects are in progress, hide the window.
2009-01-05 20:26:47 +10:00
Tomas Frydrych
17c10f60d9 Fixed process_tab_grab()
When there is custom handler installed for the tab releavant tab function
  we do not want to actually call it form inside of this function, only to
  ensure that the grab is not released. The handler will get called in the
  normal way in process_event(). Whoever installed the handler (and requested
  the grab) also has to ensure the grab is released.
2009-02-03 17:30:49 +00:00
Tomas Frydrych
24823e19e0 Ensure that if custom handler is installed for one of the shortcuts that do
keyboard grab, the custom handler gets also called while the grab is in place.
2009-02-03 13:23:08 +00:00
Tomas Frydrych
c8e967ba1c Store the default keybinding handler alongside the custom one.
This allows us to fall back onto it if the custom handler removes itself.
2009-02-03 13:20:51 +00:00
Tomas Frydrych
f7aa5f8653 Ensure that we do not attempt to free the tab popup when there is none. 2009-02-03 13:16:01 +00:00
Tomas Frydrych
6da5a5abcb Handle gconf errors better for string values in preferences. 2009-02-03 10:15:23 +00:00
Dan Winship
0fdb644454 Make compositor private a GObject than a void pointer
Requiring the compositor private object to be a GObject allows the
return value of meta_window_get_compositor_private() to be used
via gobject-introspection, since the type and memory management
can be determined.

This allows a reverse mapping from MetaWindow to MutterWindow.

- Change meta_window_get/set_compositor_private to use GObject
  rather than void *
- Adapt code in compositor-mutter.c to match.
2009-02-02 15:16:05 -05:00
Tomas Frydrych
f6a3ba26f9 Can't g_free() MetaDisplay GObject. 2009-02-03 09:11:32 +00:00
Tomas Frydrych
d1920788ac Move meta_display_get_tab_*() functions into display.h 2009-02-02 17:01:27 +00:00
Tomas Frydrych
fc1ff18ca7 Added meta_screen_(un)grab_all_keys() to keybindings.h. 2009-02-02 16:53:38 +00:00
Tomas Frydrych
5f9a4ab8cc Do not allocate the tab_pop up object at all when the --no-tab-popup option is set
This option is intended primarily so that and Alt+Tab implementation can be
  provided in a plugin, so having the object around makes no sense.
2009-02-02 15:28:26 +00:00
Tomas Frydrych
920a847508 --no-tab-popup && no-tab-popup gconf key
Disables the use of popup (and highlight frame) for window cycling.
2009-02-02 14:09:04 +00:00
Tomas Frydrych
1e17ba1768 MetaWindow::raised signal. 2009-02-02 14:08:46 +00:00
Tomas Frydrych
e17377d407 MetaWindow::focus signal. 2009-02-02 11:00:13 +00:00
Tomas Frydrych
b47459af58 meta_keybindings_switch_window()
Public function to switch to the next window in Alt+Tab like fashion.
2009-01-29 16:26:12 +00:00
Tomas Frydrych
986bdac451 Removed const qualifier from key_handlers[] so we can modify it; use find_handler() in meta_keybindings_set_custom_handler(). 2009-01-29 15:29:43 +00:00
Tomas Frydrych
b5b37d72a3 Install keybindings.h 2009-01-29 15:14:25 +00:00
Tomas Frydrych
096e3dee8f Implemented meta_keybindings_set_custom_handler(). 2009-01-29 15:07:57 +00:00
Tomas Frydrych
e25282088b Expose keybindings data types; add user_data parameter the handler signature. 2009-01-29 14:53:03 +00:00
Tomas Frydrych
da36829f96 Rename keybindings.h to keybindings-private.h 2009-01-29 14:16:01 +00:00
Neil Roberts
ff5055834b Pass on MapNotify events to Clutter
Clutter needs to know about MapNotify events otherwise it will never
make the stage visible and nothing will paint.
2009-01-30 11:57:46 +00:00
Neil Roberts
b41abfd1f8 [mutter-shaped-texture] Use the new material api instead of raw GL calls
Now that Cogl has the material API we can use Cogl calls for
multi-texturing instead of directly calling GL.

The MutterShapedTexture actor keeps a handle to a material with the
right combine modes for combining the texture and the shape
mask. Before each paint it sets the layers of the material to be the
two textures.

A second material with different combine modes 1is also created if the
pixmap is 24 bit to implement the workaround from commit 72da8c57.
2009-01-30 11:56:58 +00:00
Thomas Wood
e1cc242b52 Port TextureFrame to the new materials and Clone API
Update TidyTextureFrame using clutter-0-9 branch of NbtkTextureFrame
2009-01-29 13:43:42 +00:00
Thomas Wood
4589d1246d Update to Clutter 0.9
Fixes various API breakage due to switching to Clutter 0.9.
2009-01-28 15:43:36 +00:00
Robert Bragg
66a5edd31a [mutter-shaped-texture] workaround multi-tex combine mode for RGB tfp textures
It seems that with the latest intel drivers when multi-texturing using an RGB
TFP texture, the texture is being setup internally as an RGBA texture, where
the alpha channel is mostly 0.0 so you only see a shimmer of the window. This
workaround forcibly defines the alpha channel as 1.0. Maybe there is some
clutter/cogl state that is interacting with this that is being overlooked,
but for now this seems to work. (Tested on i945 + DRI2)
2009-01-12 13:18:39 +00:00
Priit Laes
57dec338ba Translation updated by Mattias Põldaru
2009-01-03  Priit Laes  <plaes at svn dot gnome dot org>

	* et.po: Translation updated by Mattias Põldaru

svn path=/trunk/; revision=4070
2009-01-03 12:44:51 +00:00
Thomas James Alexander Thurman
9ecc00a33b Post-release bump to 2.25.144.
svn path=/trunk/; revision=4068
2008-12-26 18:22:00 +00:00
Owen W. Taylor
e11100e584 Restore the ability to use the default effect implementations
The addition of method implementations in the base class in the
plugin-gobject branch broke the logic for checking to see
if a plugin didn't implement an effect. Requiring a mandatory
chain up to the base class is a fiddly anyways, so this patch
does the 'running' count computations in a different (and more
robust) way.

mutter-plugin.h mutter-plugin.c: Add _mutter_plugin_effect_started()
 to increment the running count.
mutter-plugin-manager.c: Call _mutter_plugin_effect_started()
 as necessary.
mutter-plugin.c: Remove the "real" methods that did nothing
 but implement the runnning count.
plugins/default.c: Remove chain-ups.
2008-12-22 16:53:10 -05:00
Robert Bragg
13badba158 Adds a clear warning when GLX TFP is not being used
Since this is the most common cause of performance issues, this makes it
clearer when GLX TFP isn't being used. Note, there was a corresponding
fix to clutter_glx_texture_pixmap_using_extension() committed last week
as r3559 in the 0.8 branch.
2008-12-08 12:39:37 +00:00
Owen W. Taylor
e083742426 Filter out events handled before the plugin before they get GTK+
Fix a problem where GTK+ was warning
'gdk_window_set_user_time called on non-toplevel' for every button
press and click on the mutter stage by excluding such events from
GTK+ processing.

Add a boolean return value to meta_compositor_process_event that
indicates whether the event has been handled and should be filtered
out of the event stream and for mutter, base that on the return
value of the plugin's xevent_filter vfunc.
2008-11-22 13:07:32 -05:00
Jonathan Matthew
e5fc168a46 ignore minimizing windows in resize_win 2008-12-19 14:08:38 +10:00
Owen W. Taylor
be7067bc0a Handle 0x0 textures by skipping paint/pick
Before we've retrieved a pixmap for a window, the shaped texture
has a 0x0 texture, which will cause mutter_shaped_texture_ensure_mask()
to crash. Just skip all of paint/pick in this case.

http://bugzilla.openedhand.com/show_bug.cgi?id=1283
2008-11-22 11:19:17 -05:00
Neil Roberts
1ba3b3dd7d [mutter-shaped-texture] Create a rectangle texture if needed
If the window texture was created using the GL_TEXTURE_RECTANGLE_ARB
extension then also create a rectangle texture for the shape texture.
2008-11-17 16:15:00 +00:00
Owen W. Taylor
af8d281556 Add a few doc comments with annotations
Add (transfer none) annotations to mutter_window_get_texture()
and mutter_window_get_meta_window(), and while add doc comments,
actually add some docs as well.
2008-11-07 03:23:39 -05:00
Tomas Frydrych
0f73a011ce Fix module use tracking. 2008-12-18 12:56:32 +00:00
Tomas Frydrych
53cea00323 Fix following the renaming of meta_window_get_type() to meta_window_get_window_type(). 2008-12-18 12:46:53 +00:00
Tomas Frydrych
b7466365a1 Removed unused variable. 2008-12-18 12:46:39 +00:00
Tomas Frydrych
3b3226b678 Merge branch 'plugin-gobject' into next-generation
Conflicts:

	src/compositor/mutter/compositor-mutter.c
	src/core/window.c
2008-12-18 12:41:56 +00:00
Tomas Frydrych
ab2e925b65 Fixed xrender compositor following compositor API changes. 2008-12-18 12:37:34 +00:00
Tomas Frydrych
0214ece238 Merge commit 'clutter/override-redirect-core-1' into next-generation 2008-12-18 12:28:01 +00:00
Tomas Frydrych
a6d04255a8 Fixed bunch of warnings. 2008-12-18 11:05:17 +00:00
Tomas Frydrych
9821453b5f Merge branch 'upstream-2.25.55' into next-generation
Conflicts:

	configure.in
	src/Makefile.am
	src/core/screen-bindings.h
	src/metacity.schemas.in
2008-12-18 11:00:19 +00:00
Tomas Frydrych
c61eb77a70 GObjectified MutterPlugin. 2008-12-17 09:33:56 +00:00
Colin Walters
57a2d20d61 Add gproperties to MetaWindow: "title", "icon", "mini-icon"
We need these properties to do things outside of the frame, without
dropping to libwnck.

http://bugzilla.gnome.org/show_bug.cgi?id=563405
2008-12-05 20:03:27 -05:00
Colin Walters
8c3bcc7229 Make MetaDisplay a real GObject
We need this to be able to add signals, among other things.

http://bugzilla.gnome.org/show_bug.cgi?id=563047
2008-12-02 17:58:07 -05:00
Robert Bragg
f956853550 No longer handle ConfigureNotify events directly in mutter
We are now informed of window moves/resizes via callbacks from
src/core instead.
2008-11-27 13:40:52 +00:00
Robert Bragg
6849735e9d Adds support in src/core for tracking override redirect windows.
The metacity core is now directly aware of override redirect windows.
- They get MetaWindows like normal windows, so mutter no longer need to special
  case them. The net wm types applicable to override redirects are also
  recognised.
- The original positioning/stacking semantics of metacity with respect to OR
  windows are maintained, but now it's easier to synchronize the stacking
  between the core and mutter.
- mutter no longer needs to manualy track UnmapNotify, MapNotify,
  ReparentNotify, CreateNotify and DestroyNotify events; instead map, unmap,
  add and remove events can now be consistently delivered via the
  MetaCompositor callbacks.
2008-11-23 19:28:40 +00:00
Owen W. Taylor
06817df975 Add a 'n-workspaces' property to MetaScreen
Add a 'n-workspaces' property to MetaScreen to allow for notification
when the number of workspaces changes.

http://bugzilla.gnome.org/show_bug.cgi?id=561297
2008-11-17 17:22:28 -05:00
Owen W. Taylor
98ccfea388 Make MetaScreen and MetaWorkspace GObjects
src/core/screen.c src/core/screen-private.h src/include/screen.h:
Make MetaScreen a GObject.

src/core/workspace.c src/core/workspace-private.h src/include/workspace.h:
Make MetaWorkspace a GObject. Rename meta_workspace_free() to
meta_workspace_remove().

http://bugzilla.gnome.org/show_bug.cgi?id=561297
2008-11-17 15:56:34 -05:00
Owen W. Taylor
9a1be03205 Make MetaWindow a GObject
Make MetaWindow into a GObject so that it is accessible to
gobject-introspection (also allows for signals to be added.)

Renames:

 meta_window_free() => meta_window_unmanage()
 meta_window_get_type() => meta_window_get_window_type()
 meta_window_get_type_atom() => meta_window_get_window_type_atom()
2008-11-07 04:57:00 -05:00
Tomas Frydrych
026008a700 Fix to allow windows created from within Mutter itself to be managed. 2008-12-02 12:11:06 +00:00
Owen W. Taylor
b26fc771b1 Drain the clutter event queue
When multiple events are generated from a single event (for example,
when a motion event generates an enter/leave pair), events accumulate
in the clutter event queue if the clutter event source is not running.
Add a simple event source that checks clutter_events_pending() and
dispatches events as necessary.
2008-11-05 17:49:55 -05:00
Tomas Frydrych
04619df818 Added timestamp parameter to meta_window_change_workspace_by_index(). 2008-11-25 15:34:07 +00:00
Tomas Frydrych
c1928ead7c Exposed meta_display_get_current_time/_roundtrip(). 2008-11-25 15:24:48 +00:00
Tomas Frydrych
b43f9aec5a Fixed clutter-less build. 2008-11-25 12:26:26 +00:00
Tomas Frydrych
79d749fc82 Install atomnames.h 2008-11-24 11:25:12 +00:00
Tomas Frydrych
bcc5f104db Merge branch 'work' into clutter 2008-11-20 12:43:25 +00:00
Tomas Frydrych
99f6b2cdce meta_screen_get_active_workspace() 2008-11-20 12:41:28 +00:00
Thomas Wood
75d3845801 Add missing include header dependencies 2008-11-20 11:51:56 +00:00
Tomas Frydrych
c8e0acfef3 Added missing prototype for meta_compositor_set_window_hidden(). 2008-11-20 09:16:06 +00:00
Tomas Frydrych
da55d8e738 meta_window_change_workspace_by_index() 2008-11-20 09:14:58 +00:00
Tomas Frydrych
40c25dc426 Exposed meta_window_get_startup_id () 2008-11-19 12:30:45 +00:00
Tomas Frydrych
f3a8b2f12e Removed unused variable. 2008-11-07 10:14:36 +00:00
Tomas Frydrych
dcd350dd90 Fixed broken g_object_set_property() call.
Fixing this broken stuff, so it is disabled.
2008-11-07 10:13:40 +00:00
Owen W. Taylor
f826fb1d9a Support GL_ARB_texture_rectangle in MutterShapedTexture
mutter-shaped-texture.c: Retrieve the target from the cogl_texture
  and use it, instead of hardcoding GL_TEXTURE_2D.
2008-11-05 17:45:00 -05:00
Matthew Allum
123f4df31b Add support for setting MUTTER_DISABLE_MIPMAPS env var. 2008-11-05 11:48:07 +00:00
Robert Bragg
3211fb04d3 Merge branch 'fix-stacking' into clutter 2008-11-04 15:26:17 +00:00
Robert Bragg
17e12ccb6d [meta_window_hide] make sure the right xwindow gets mapped for live preview 2008-11-04 14:55:46 +00:00
Tomas Frydrych
6eab4fb9e8 Exposed meta_screen_get_n_workspaces() 2008-11-04 10:27:59 +00:00
Robert Bragg
8f8097aa2c Removes some g_print debugging 2008-11-03 17:49:24 +00:00
Robert Bragg
7a190f33f6 Tries to consider how window->hidden affects existing window->mapped tests
src/core does some things depending on window->mapped, but since we now
leave the window mapped for hidden windows we might get some wrong
descisions.

Also instead of calling meta_window_show when in meta_window_hide for
the case that the window isn't currently mapped, we now simply
XMapWindow.
2008-11-03 12:36:55 +00:00
Tomas Frydrych
7ec7a8fa44 meta_screen_get_active_workspace_index() 2008-11-03 12:32:25 +00:00
Robert Bragg
93b945ea42 Instead of hiding/showing the actors of hidden windows, reparent, it's more reliable
It's more awkward and error prone, considering plugin ininteractions, to simply
show/hide the actors of hidden windows, and it seems to be more reliable to
reparent them to a hidden group instead.
2008-11-03 10:26:21 +00:00
Robert Bragg
0058271aaa Re-works the approach to supporting live preview to handle stacking.
We can't easily use a metacity layer to hide windows as that means we
loose our original stacking position. (Metacity's stack positions are
only valid within a single layer) We now have a "guard window" per
screen that is a fullscreen override redirect that is lowered to the
bottom of the stack. Hidden windows now remain in their original layer
so the stacking position remains valid, but all hidden windows get
XRestacked under the guard window.

A new compositor hook is also added to inform it when a window becomes
hidden/unhidded, this lets us map/unmap the corresponding actor.

missing files in preview commit (TODO: rebase -i and squash this later)
2008-11-03 14:50:22 +00:00
Robert Bragg
cfa45beee1 exposes meta_window_showing_on_its_workspace via mutter_window_showing_on_its_workspace
This e.g. allows a switcher plugin to determine if a mutter window corresponds
to a minimized or visible window
2008-11-03 14:45:28 +00:00
Owen W. Taylor
20ce1e77d9 Don't show_all() the stage and overlay group at initialization.
Calling clutter_actor_show_all() on the stage and overlay_group breaks
the ability for plugins to create initially hidden actors. Call
clutter_actor_show() instead.
2008-10-31 18:59:04 -04:00
Robert Bragg
368346571a Ensure window->compositor_private is initialised in meta_window_new_with_attrs 2008-10-31 12:57:47 +00:00
Robert Bragg
7ea4380725 Adds a compositor_private member to MetaWindow
Since we often need to find a MutterWindow corresponding to a MetaWindow
this make it a simple de-reference of a compositor private pointer.
2008-10-31 09:10:10 +00:00
Owen W. Taylor
15daecacdc Allow absolute paths instead of plugin names
If a mutter plugin name (in GConf, or more likely on the command line)
looks like an absolute path, use that path directly rather than
looking for the plugin in the plugins directory.
2008-10-31 02:13:53 -04:00
Owen W. Taylor
1b943f8191 Add --mutter-plugins command line argument
src/core/main.c: Add --mutter-plugins argument (overrides GConf value)
src/core/prefs.c src/include/prefs.h: Add meta_prefs_override_clutter_plugins()
   to set a value for clutter_plugins that overrides the value from GConf
2008-10-31 08:33:37 -04:00
Robert Bragg
6d8baea4c2 [stacking] Simplifies the way compositor code has to handle stacking
The compositor now gets handed a GList of MetaWindows when the stacking
gets syncd with the X server.
2008-10-30 22:09:48 +00:00
Owen W. Taylor
6683b5efff Clean up messages when loading plugins
Remove a "got here" leftover, remove unnecessary trailing \n when
calling g_message(), include g_module_error() in the output when
loading a module fails.
2008-10-29 14:40:51 -04:00
Owen W. Taylor
783e51281a Fix installation with --disable-static
If --disable-static is passed to configure, then .a files won't be built
or installed. Make removing them in install-exec-hook not fatal if they
don't exist.
2008-10-29 11:58:43 -04:00
Tomas Frydrych
b5ac24e9c1 meta_screen_append_new_workspace() 2008-10-24 11:11:28 +01:00
Tomas Frydrych
d1635d13cb meta_screen_remove_workspace() 2008-10-24 11:03:43 +01:00
Tomas Frydrych
f80e39e2ca mutter_plugin_get_screen() 2008-11-03 10:07:12 +00:00
Tomas Frydrych
a7a0a0300f Exposed meta_screen_get_workspace_by_index. 2008-11-03 10:03:58 +00:00
Tomas Frydrych
685bbb2e64 Fixed format 2008-11-03 09:59:01 +00:00
Matthew Allum
e85f67f564 Fix minor warning 2008-10-31 23:37:46 +00:00
Matthew Allum
a2b47741ae Merge branch 'dev' into clutter 2008-10-31 23:13:27 +00:00
Matthew Allum
eeb762e1e2 Remove overlay debug message. 2008-10-31 23:12:40 +00:00
Emmanuele Bassi
6c5fc6b3d6 Make metacity.schemas compliant again
The clutter_plugins schema key did not define the type of the
elements inside the list, thus making gconftool choke when installing
the Metacity schemas.

Since clutter_plugins is a list of strings, the trivial fix is
to add the corresponding <list_type> element to the schema XML.
2008-10-31 16:57:00 +00:00
Matthew Allum
3991e82539 Set TFP texture filter-quality to high (as to enable mipmaps) 2008-10-31 16:28:33 +00:00
Tomas Frydrych
312cbf3e04 Added G_MODULE_BIND_LOCAL for plugin load.
See http://bugzilla.openedhand.com/show_bug.cgi?id=1216.
2008-10-31 08:08:08 +00:00
Tomas Frydrych
ce2bfc008d mutter_window_get_description()
Human redable description useful for debugging, now accessible to plugins and
  and also for override redirect windows.
2008-10-30 08:30:42 +00:00
Tomas Frydrych
b2fe0097e6 mutter_plugin_get_xdisplay() 2008-10-29 13:27:35 +00:00
Tomas Frydrych
e4501f801e mutter_plugin_set_stage_input_region() 2008-10-29 13:03:03 +00:00
Tomas Frydrych
7bef175590 MUTTER_PLUGIN_DIR variable/define
Define for use in plugin manager
  Makefile variable for plugin pc file and plugin installation.
2008-10-29 10:28:48 +00:00
Tomas Frydrych
a4a102726e Removed tridy-grid and scratch plugin 2008-10-29 09:01:50 +00:00
Matthew Allum
a42ea69d0e Tweak workspace switcher to display all windows 2008-10-28 23:04:51 +00:00
Tomas Frydrych
8f594c93cd Added StructureNotifyMask for override redirect windows.
We need to be getting ConfigureNotify events for these, so we can respond
    to changes in position of these windows. We cannot add this to windows
    Metacity manages, as this makes it got mental.
2008-10-28 13:02:33 +00:00
Tomas Frydrych
8f8a193c7e Revert "Add StructureNotifyMask windows the compositor is interested in."
This reverts commit f76f4dc898c435d9a15bc96a9aad89526f69fcb2.
2008-10-28 12:27:30 +00:00
Matthew Allum
c283fbe9b3 Merge branch 'clutter' of ssh://gitserver@git.o-hand.com/metacity-clutter into clutter 2008-10-28 11:34:05 +00:00
Matthew Allum
53d89a7fd5 Tweak/fix/improve workspace switching effect 2008-10-28 11:30:29 +00:00
Tomas Frydrych
68c2f75558 Changes necessary to build plugins out of tree:
metacity-plugins.pc.in
  installation necessary header files
  fixed misplaced inclusion of config.h
2008-10-28 10:45:45 +00:00
Tomas Frydrych
2a3445c865 Add StructureNotifyMask windows the compositor is interested in. 2008-10-27 17:17:09 +00:00
Tomas Frydrych
10f9a7f252 Forced live_hidden_windows to TRUE 2008-10-27 12:29:49 +00:00
Tomas Frydrych
b1c5a2e221 Added mutter_get_plugin() to mutter-plugin.h
So we can completely hide the struct name from plugins.
2008-10-27 10:34:32 +00:00
Tomas Frydrych
1d6e70a49d Fixed stale comment. 2008-10-27 09:38:21 +00:00
Tomas Frydrych
310970a91b De-C99fied default and scratch plugins. 2008-10-27 09:33:58 +00:00
Tomas Frydrych
07c1003905 Live previews for hidden windows.
ClutterActors for hidden windows (such windows on different than active
workspaces and windows that are minimized) are available, and reflect the
actual state of the window. This is intended for use in task-switchers etc.

This feature is disabled by default (due to increased demand on resources),
and can be enabled through the metacity/general/live_hidden_windows gconf key.

A trivial sample window switcher is included in the scratch plugin (activated
by clicking on the slide out panel).
2008-10-24 10:07:24 +01:00
Matthew Allum
273d213509 Integrate in Ebassi's workspace switching code from ui-hackfest branch. 2008-10-23 15:36:33 +01:00
Matthew Allum
4d441a6f7b Make the overlay message a little less in your face.. 2008-10-23 12:53:01 +01:00
Tomas Frydrych
3cc7b2c74d Fixed how windows are added to avoid duplication. 2008-10-22 17:12:15 +01:00
Tomas Frydrych
275cccb136 Fixed process_reparent() 2008-10-22 14:40:06 +01:00
Iain Holmes
be11a6bf72 Allow framed ARGB windows to have a shadow
When creating the drop shadow source, just have a translucent centre
2008-10-21 16:51:18 +01:00
Tomas Frydrych
0684ef95c5 Fixed up stage reactivity bug. 2008-10-21 08:58:44 +01:00
Tomas Frydrych
775cb1f4a4 Removed plugin .features member (no longer required); reanambled all effects in scratch plugin by popular demand. 2008-10-20 13:04:46 +01:00
Tomas Frydrych
73f90dfd69 Fixed 1-off bug in switch-workspace keybindings 2008-10-20 12:19:24 +01:00
Tomas Frydrych
8a0ffa93eb Merge branch 'clutter' of ssh://gitserver@git.o-hand.com/metacity-clutter into clutter 2008-10-20 08:54:03 +01:00
Tomas Frydrych
7ddb3a4663 Disabled event effects; disable_stage() convenience function. 2008-10-20 08:52:38 +01:00
Robert Bragg
9a66ce6b01 Removes unused files: compositor-clutter-plugin-manager.c and compositor-clutter-plugin.h 2008-10-17 17:12:57 +01:00
Robert Bragg
08c3c187eb Removes the running counter from the plugins and instead manage it internally
to the plugin manager
2008-10-17 17:10:15 +01:00
Tomas Frydrych
b422faa4fe Fixed build when building without --with-clutter 2008-10-17 12:45:45 +01:00
Tomas Frydrych
a8dd848ca4 Connect to captured-event signal on stage for generic panel processing
This is to allow the panel to handle events the normal way without interference
2008-10-17 11:02:04 +01:00
Tomas Frydrych
143cb3d60b white space tweaks 2008-10-17 07:25:18 +01:00
Tomas Frydrych
92610f53c3 renamed DefaultPluginState to PluginState 2008-10-17 07:23:34 +01:00
Tomas Frydrych
30ece059cf whitespace cleanup; use g_slice in scratch plugin. 2008-10-16 23:29:24 +01:00
Tomas Frydrych
1e59d63e31 adjusted panel color and opacity 2008-10-16 23:08:12 +01:00
Tomas Frydrych
7380163eaf Renamed moblin.c to avoid confusion 2008-10-16 23:04:32 +01:00
Tomas Frydrych
dc33ad1adf Merge branch 'moblin-plugin' into clutter
Conflicts:

	src/compositor/clutter/compositor-clutter-plugin-manager.c
	src/compositor/mutter/plugins/Makefile.am
	src/compositor/mutter/plugins/moblin.c
	src/include/compositor-clutter-plugin.h
	src/include/compositor-clutter.h
2008-10-16 23:02:34 +01:00
Tomas Frydrych
b5414c27a3 sliding panel 2008-10-16 15:50:03 +01:00
Robert Bragg
2f790b0165 This changes the meta_compositor_clutter namespacing to simply "mutter" which
helps makes code much more readable.
2008-10-16 12:50:01 +01:00
Tomas Frydrych
d185a84140 Api to set specific input region on stage from plugins. 2008-10-16 12:16:08 +01:00
Tomas Frydrych
749698eb54 connect xevent handler 2008-10-16 10:42:03 +01:00
Tomas Frydrych
6323467879 Fixed input mask on overlay window to get pointer and key events. 2008-10-16 10:41:34 +01:00
Tomas Frydrych
d94a34a2c1 disabled workspace switch effect 2008-10-16 08:27:46 +01:00
Tomas Frydrych
9005e4a68f set panel width to match screen 2008-10-16 08:26:37 +01:00
Tomas Frydrych
9e4f5a26dd hook moblin plugin into stage reactivity API 2008-10-16 08:05:50 +01:00
Tomas Frydrych
ae906b318a API for enabling/disabling input to stage window. 2008-10-16 07:50:49 +01:00
Tomas Frydrych
8d373e009d Process motion events on stage to handle panle closing. 2008-10-16 00:06:20 +01:00
Tomas Frydrych
f0364b2eed Panel sliding 2008-10-15 18:14:52 +01:00
Tomas Frydrych
5af56eebd1 panel slide timeout 2008-10-15 17:57:41 +01:00
Tomas Frydrych
5f3e27bbd7 Mockup panel, xevent skeleton. 2008-10-15 17:50:06 +01:00
Tomas Frydrych
f6c958ff26 Added moblin plugin to build system. 2008-10-15 17:26:24 +01:00
Robert Bragg
c4fe54d004 Passes through the plugin manager and default plugin trying to rename
terse variable names, simplify the plugin interface or consider tweaks
for maintainability.

* Renames plg -> plugin
* Renames mgr ->plugin_mgr (since in a combined window and composite
manager I think "mgr" will end up being ambiguous in places)
* Renames PluginWorkspaceRectangle -> MetaRectangle (We are no longer
concerned about mbwm2 portability)
* Renames a few one letter variable names e.g. a -> window, r ->rect
* Renames some vars to indicate what they represent not their data type,
e.g. group1, group2 ->workspace0, workspace1
* Renames the variable mcw -> mc_window to make it more immediately
obvious what it represents.
* Removes the verbose META_COMPOSITOR_CLUTTER_PLUGIN_SWITCH_WORKSPACE macro,
and just uses metacity_plugin instead.
* Instead of hanging data of the plugins global descriptor, we just use a
standalone static global variable.
* Make do_init a function pointer inside the plugin descriptors instead of
special casing it and using another g_module_symbol call. This also removes
the need for the META_COMPOSITOR_CLUTTER_PLUGIN_INIT_FUNC macro.
* A bunch of anal 80char fixes
* Removes the screen_width,height variables from the plugin descriptor struct
and add a plugin API instead.
2008-10-13 12:23:47 +01:00
Emmanuele Bassi
74b34fe239 [default] Use the slice allocator
The actor's private data created by the compositor is allocated
using g_new(), but since we are allocating a lot of small structures
all the time it's better to use the slice allocator instead.

Also, use a GQuark instead of using a string, so that the quark
lookup is done only once and the rest of the time is just an
integer comparison.
2008-10-10 17:11:13 +01:00
Tomas Frydrych
7124a7acc1 Removed unused compositer-clutter-plugin.c file. 2008-10-10 11:38:58 +01:00
Tomas Frydrych
2fffd6fe9f Removed no longer needed completed() pointer from plugin struct. 2008-10-10 11:38:00 +01:00
Tomas Frydrych
6b1719de1c Added direction parameter to plugin switch_workspace()
To facilitate nicer effects; extended direction defined in workspace.h so we
can represent up-left, etc.
2008-10-09 17:57:12 +01:00
Tomas Frydrych
0225449e12 Fallback to default plugin if no plugins are specified via gconf. 2008-10-09 15:33:06 +01:00
Tomas Frydrych
1a8e5872d1 Accessors for plugins to obtain stage and overlay_group actors. 2008-10-09 13:22:32 +01:00
Tomas Frydrych
0e6fba083f Removed unnecessary ActorPrivate::workspace member. 2008-10-08 16:10:15 +01:00
Tomas Frydrych
1178800abb Added convenience get_plugin () accessor. 2008-10-08 16:05:09 +01:00
Tomas Frydrych
f061a6d793 Added convenience function meta_comp_clutter_plugin_effect_completed() 2008-10-08 16:01:04 +01:00
Tomas Frydrych
976635a22b Merge branch 'clutter' of ssh://gitserver@git.o-hand.com/metacity-clutter into clutter 2008-10-08 14:53:37 +01:00
Robert Bragg
69c0da91e5 Creates a src/compositor/clutter directory to help de-clutter things 2008-10-08 14:17:54 +01:00
Tomas Frydrych
306a7497fc Fixed up for new plugin API; changed private key not to colide with default plugin. 2008-10-08 12:33:24 +01:00
Tomas Frydrych
1addb6ddc1 Added -export-dynamic to metacity LDFLAGS for sake of plugins. 2008-10-08 12:28:20 +01:00
Tomas Frydrych
0a7fc94799 Revert "Build metacity as library so that plugins can link against it."
This reverts commit 57c2e6d716485205a9178afe01dbc43641b5c2aa.
2008-10-08 12:19:08 +01:00
Tomas Frydrych
cca5e69c64 Removed debug printfs. 2008-10-08 10:16:53 +01:00
Tomas Frydrych
bbdd7d9b15 Build metacity as library so that plugins can link against it.
Renamed original main() to meta_main(); added wrapper main() into metacity.c.
2008-10-08 10:11:57 +01:00
Tomas Frydrych
60695fd89a Refactored plugin API to use MetaCompWindow. 2008-10-07 16:29:03 +01:00
Tomas Frydrych
c5d59254af Moved compositor-clutter.h to src/include so it can be used from plugins. 2008-10-07 15:08:36 +01:00
Tomas Frydrych
2bcd7c839b Renamed simple plugin to 'default' 2008-10-07 14:58:34 +01:00
Tomas Frydrych
cc50d99712 Public API around MetaCompWindow actor
Added accessors for xwindow, window type and workspace number.
2008-10-07 14:52:21 +01:00
Tomas Frydrych
93c316f3b8 Fixed warning
Removed static declartion of tidy_texture_frame_new and added appropriate #include.
2008-10-07 09:07:51 +01:00
Tomas Frydrych
7983c29f67 Plugin manager API cleanup
Renamed meta_compositor_clutter_plugin_manager_event_0 to
meta_compositor_clutter_plugin_manager_event_simple and
meta_compositor_clutter_plugin_manager_event_4i to
meta_compositor_clutter_plugin_manager_event_maximize for improved clarity.
2008-10-07 09:01:58 +01:00
Robert Bragg
22f386b35b Removes old static prototype for tidy_texture_frame_new from compositor-clutter.c 2008-10-06 15:52:01 +01:00
Robert Bragg
d6e4fc41c2 Splits tidy-texture-frame out from compositor-clutter.c 2008-10-06 15:07:39 +01:00
Robert Bragg
f65d898f80 Merge branch 'master' into bob/clutter
Conflicts:

	src/core/prefs.c
	src/include/prefs.h
2008-10-06 12:54:34 +01:00
Robert Bragg
f67f9bbf23 Merge branch 'master' into bob/clutter 2008-10-03 16:40:00 +01:00
Neil Roberts
735877d89a Don't try to use multisampling for textures that are sliced. 2008-09-30 16:54:12 +01:00
Neil Roberts
ee60128334 Support for GL ES in the Clutter compositor.
Check for whether clutter/glx/clutter-glx-texture-pixmap.h is
available in the configure script and if not use
ClutterX11TexturePixmap directly.

glGetTexLevelParameter isn't available on GL ES so instead it checks
whether NPOTs textures are available and assumes the next power of two
size if not.
2008-09-30 15:33:18 +01:00
Matthew Allum
3bbd5e32f2 Fix configure events generating too many updates
Split stage into window and overlay groups
Add an event hook to plugins
2008-10-02 12:16:15 +01:00
Tomas Frydrych
2d4a0c9cbe Added 'simple' plugin as default to metacity schema. 2008-09-25 15:11:12 +01:00
Neil Roberts
43e3fbc518 Set the input mask on the composited windows to include
ShapeNotifyMask. Remove the call to resize_win in process_shape
because it is redundant.
2008-09-25 13:30:34 +01:00
Tomas Frydrych
c58ade6600 When testing for shadow, test for window shape before override redirect. 2008-09-25 09:30:13 +01:00
Tomas Frydrych
33ae559eca Stripped trailing space. 2008-09-25 09:29:57 +01:00
Neil Roberts
4f1fd37231 Handle ShapeNotify events in the clutter compositor and update the
clip rectangles on the MetaShapedTexture.
2008-09-24 22:53:39 +01:00
Neil Roberts
6654cb65d7 Made MetaShapedTexure take XRectangles instead of ClutterGeometries to
represent the rectangles.
2008-09-24 22:52:56 +01:00
Neil Roberts
19d338cb50 Make MetaShapedTexture a subclass of ClutterGLXTexturePixmap and use
it for window actors.
2008-09-24 21:48:02 +01:00
Neil Roberts
0bbe8b8004 Add a cast in shaped-texture.c to prevent warnings about comparing
signed and unsigned integers.
2008-09-24 21:40:10 +01:00
Neil Roberts
99d3cc1b2b Add an actor for drawing textures clipped to a list rectangles 2008-09-24 21:36:38 +01:00
Tomas Frydrych
d6f340eb96 Fixed install-exec-hook for plugins to work correctly when $DESTDIR is set. 2008-09-24 09:46:52 +01:00
Tomas Frydrych
bd3d643f96 Use clutter_get_option_group_without_init() once available. 2008-09-23 08:28:13 +01:00
Tomas Frydrych
7bd5f61db7 Conflicts:
src/core/main.c
2008-09-23 08:26:51 +01:00
Tomas Frydrych
5e76e1b221 Hooked in clutter options. 2008-09-19 16:27:44 +01:00
Tomas Frydrych
9b3a0d1ad8 Basic plugin infastructure and a sample simple plugin. 2008-09-18 16:09:11 +01:00
Tomas Frydrych
d509097967 Sync with upstream r3901
Merge branch 'upstream' into clutter
2008-09-17 17:12:27 +01:00
Tomas Frydrych
b7bdc5ec69 Fall back on XRender if initializing clutter fails. 2008-09-17 16:39:32 +01:00
Tomas Frydrych
438ac55cb1 update to upstream 2.25.1
Merge commit '49cc773eb4801fb0ee3cddeeb1d27042f4a46e2e' into clutter
2008-09-03 19:48:23 +01:00
Tomas Frydrych
6946d6a4a3 Moved shadow source actor form screen to the compositor (only one needed). 2008-08-20 13:18:43 +01:00
Tomas Frydrych
2bcb7d73be Handle resize on root window. 2008-08-20 13:01:40 +01:00
Tomas Frydrych
655bfaec80 GType wrapper for XWindowAttributes, MetaCompWindow::x-window-attributes prop
So we do not have to query window attributes in the MetaCompWindow constructor
but can pass them as a property (so we can gracefully handle the case where no
attributes can be retrieved).
2008-08-20 11:48:00 +01:00
Tomas Frydrych
a3f56bb289 Added --with-clutter option; initialize Clutter from meta_ui_init().
Fixed up the build files so we do not build xrender compositor when building
clutter backend; moved clutter initialization to meta_ui_init() so commandline
arguments can be passed into clutter_init().
2008-08-20 10:31:10 +01:00
Tomas Frydrych
b48f9ca907 Code cleanup and pretification. 2008-08-20 09:33:39 +01:00
Tomas Frydrych
8589eab403 Cleaned up MetaCompWindow disposal. 2008-08-20 08:26:52 +01:00
Tomas Frydrych
1ee1842638 Made MetaCompWindow into ClutterGroup sub-class. 2008-08-19 17:02:00 +01:00
Tomas Frydrych
70afce0325 Cast shadows to SE. 2008-08-19 14:33:20 +01:00
Tomas Frydrych
1f29679c0d Basic CM minimize effect
Added minimize hook to the compositor, hooked up into MetaWindow, implemented
in the clutter compositor.
2008-08-19 11:47:30 +01:00
Tomas Frydrych
99b547bc1d Fixed handling of opacity and argb32 windows.
Parsing of _NET_WM_WINDOW_OPACITY; no shadows for argb32 and translucent
windows.
2008-08-19 10:57:15 +01:00
Tomas Frydrych
030afac8ab Cleaned up repar_win
Uncommented path for TFP; fixed leak of parts regions; removed unnecessary
'damaged' flag.
2008-08-19 10:15:16 +01:00
Tomas Frydrych
121a65e4f4 Fixed destroy effect
Stopped processing of unmap and damage messages when a destroy message is
already in the queue.
2008-08-19 09:20:04 +01:00
Tomas Frydrych
a8bcfb9a0c Removed process_expose
No Expose event processing is necessary, since clutter stage paints
automatically when changes are made to the scenegraph (so we only need to
update our window textures as damaged; everything else just works).
2008-08-18 17:08:01 +01:00
Tomas Frydrych
9f9df52ba6 Reduced MAX_TILE_SIZE to 8px so that shaddows work even with small windows
(e.g., tootips).
2008-08-18 16:23:50 +01:00
Tomas Frydrych
676a516ff2 Add shaddows to override-redirect windows, e.g. Gtk menus (Gtk should really
be fixed not to use override redirect for menus as the maemo fork does).
2008-08-18 16:16:38 +01:00
Tomas Frydrych
4134949d72 get_window_type:
Streamlined to use the MetaWindow type where that is available; for unmanaged
windows, query window props as before.
2008-08-18 15:44:26 +01:00
Tomas Frydrych
e6e6aecb93 Exposed MetaWindowType so it can be used by compositor backends.
meta_window_get_type:
meta_window_get_type_atom:
Accessors for window type/type atom.
2008-08-18 15:42:38 +01:00
Tomas Frydrych
f7f696c310 Moved atomnames.h to includes so can be included from display.h.
meta_display_get_atom: allow common atom retrieval via enum (to avoid interning
identical atoms at different places).
2008-08-18 15:10:13 +01:00
Tomas Frydrych
5ebaa15333 Updated to clutter-0.8. 2008-08-18 12:02:14 +01:00
Tomas Frydrych
e1965914a3 Synced with Metacity 2.23.89 (r3800)
Merge commit '51de9ef8605f7a195ef360afb3a504488125611f' into clutter
2008-08-18 11:11:32 +01:00
Matthew Allum
fa2f76d4d4 Now with slightly broken window close animations and lot of debug info. 2008-06-09 17:50:56 +01:00
Matthew Allum
2c6c5a6dd1 Add basic shadow support (stolen from m-w-m-2, thanks to tf) 2008-06-06 14:17:38 +01:00
Matthew Allum
c29232fd0d Misc cleanups, removal of stray printf's etc. Add basic win opacity handling 2008-06-04 20:51:08 +01:00
Matthew Allum
8fd2f1d22a synced up very rough local changes for clutter compositing support 2008-06-04 13:58:36 +01:00
342 changed files with 114367 additions and 124937 deletions

69
.gitignore vendored Normal file
View File

@@ -0,0 +1,69 @@
Makefile
Makefile.in
Makefile.in.in
aclocal.m4
autom4te.cache
compile
config.guess
config.h
config.h.in
config.log
config.status
config.sub
configure
depcomp
install-sh
intltool-extract.in
intltool-merge.in
libtool
ltmain.sh
missing
.deps
src/mutter-wm.desktop
src/mutter.desktop
*.o
*.a
*.lo
*.la
.libs
*.swp
*.gir
*.typelib
tidy-enum-types.[ch]
tidy-marshal.[ch]
stamp-tidy-enum-types.h
stamp-tidy-marshal.h
stamp-h1
*.gmo
*.make
*~
stamp-it
.intltool-merge-cache
POTFILES
50-metacity-desktop-key.xml
50-metacity-key.xml
inlinepixbufs.h
libmutter-private.pc
mutter
mutter-theme-viewer
mutter.desktop
mutter.schemas
testasyncgetprop
testboxes
testgradient
mutter-grayscale
mutter-mag
mutter-message
mutter-window-demo
focus-window
test-gravity
test-resizing
test-size-hints
wm-tester
INSTALL
mkinstalldirs
src/mutter-enum-types.[ch]
src/stamp-mutter-enum-types.h
src/mutter-marshal.[ch]
src/stamp-mutter-marshal.h
src/mutter-plugins.pc

123
ChangeLog
View File

@@ -1,3 +1,126 @@
2009-03-16 Thomas Thurman <tthurman@gnome.org>
* NEWS: 2.26.0 release.
2009-02-04 Neil Jagdish Patel <njpatel@gmail.com>
* src/core/frame.c: queue resize on window undecorate
2009-02-03 Luca Ferretti <elle.uca@libero.it>
* src/include/all-keybindings.h: Fix description, focus the
desktop, not desktop backgroung (Closes bug #569649)
2009-02-02 Matt Kraai <kraai@ftfbs.org>
* src/core/schema-bindings.c: Wrap g_error calls in braces.
2009-02-01 Thomas Thurman <tthurman@gnome.org>
* configure.in: Post-release bump to 2.25.233.
2009-02-01 Thomas Thurman <tthurman@gnome.org>
* NEWS: 2.25.144 release.
2009-02-01 Matt Kraai <kraai@ftbfs.org>
Set prop_hooks_table to NULL after freeing it.
* src/core/window-props.c:
2009-01-29 Thomas Thurman <tthurman@gnome.org>
Window properties are looked up in a hash table rather than
by iteration over an array. Saves ~44us per window, but
also makes the code cleaner.
* src/core/display-private.h:
* src/core/window-props.c:
2009-01-27 Matthias Claesen <mclasen@redhat.com>
* src/core/edge-resistance.c: some lists failed to keep track
of their contents and therefore didn't free correctly.
Closes #552303.
2009-01-27 Matthias Claesen <mclasen@redhat.com>
* src/core/prefs.c: Free name of old theme when new theme
is loaded. Closes #552973.
2009-01-27 Matthias Claesen <mclasen@redhat.com>
* src/ui/ui.c: free the result of gdk_text_property_to_utf8_list()
even when it returns no data.
2009-01-27 Owen Taylor <otaylor@redhat.com>
GtkStyle is specific to a particular colormap. Metacity
uses different colormaps for windows with different
visuals, so it must specialize the GtkStyle.
Closes #568365 and #513944.
* src/ui/frames.[ch]: Keep a GtkStyle for each MetaUIFrame, which is
obtained by calling gtk_style_attach() on the style for the
MetaFrames. When the style of the MetaFrames changes, reattach
everything. When we call gtk_style_set_background() pass in the
right style.
* src/ui/themes.[ch]: Create a _with_style() variant of functions that
previously took the style from widget->style passed in, so we
can draw with the right style for the colormap.
2009-01-27 Thomas Thurman <tthurman@gnome.org>
Added a gconf key to swap the meanings of the right and
middle buttons when the modifier key is held down.
Closes #437910. Thanks to Matt Kraai for looking over
the patch.
* src/core/display.c:
* src/core/prefs.c:
* src/include/prefs.h:
* src/metacity.schemas.in.in:
2009-01-27 Thomas Thurman <tthurman@gnome.org>
All the window properties are now handled using simple
window property handlers. Closes #549886.
* src/core/window-private.h:
* src/core/window-props.c:
* src/core/window.c:
2009-01-26 Thomas Thurman <tthurman@gnome.org>
More of the window properties are checked using simple
window property handlers. The ones which remain don't
actually look up the new value in the ordinary way, and
so are a little trickier to merge. Added an "initial"
flag to be on the safe side that the behaviour is the
same as before (so we don't do things when a window's
first mapped that we only used to do when a property
changed). Partial fix for bug #549886.
* src/core/window-props.c:
* src/core/window-props.h:
* src/core/window.c:
2009-01-25 Elijah Newren <newren gmail com>
* src/core/window.c: add support for _NET_WM_MOVERESIZE_CANCEL.
2009-01-10 Thomas Thurman <tthurman@gnome.org>
* src/ui/theme.[ch]: add meta_theme_draw_frame_by_name, which
is needed for the theme editor.
2008-12-26 Thomas Thurman <tthurman@gnome.org>
* configure.in: Post-release bump to 2.25.144.
2008-12-26 Thomas Thurman <tthurman@gnome.org>
* NEWS: 2.25.89 release.

View File

@@ -1,43 +1,8 @@
Currently active maintainers
--------------------------------
Tomas Frydrych
Email: tf linux intel com
Userid: tomasf
Elijah Newren
Email: newren gmail com
Userid: newren
Owen Taylor
Email: otaylor redhat com
Userid: otaylor
- Usually won't touch the theme bugs (isn't interested) or the
compositor (until open source nvidia drivers are up to snuff).
Tends to be most interested in libwnck/gtk interactions, focus
issues, constraints problems, and raising/stacking, but works on
just about anything other than themes and the compositor.
Thomas Thurman
Email: thomas thurman org uk
Userid: tthurman
- Responsible for all theme bugs and the compositor (thank goodness
Thomas got involved, eh?). I'm sure he'll replace this sentence
with his interests when he reads it. ;-)
Semi-active maintainers
--------------------------------
Havoc Pennington
Email: hp redhat com
Userid: hp
- Original author. Doesn't patch metacity anymore, but is active in
answering questions, responding to bugs, providing very helpful
suggestions and insight, and even assisting with debugging.
Important historical figureheads
--------------------------------
Rob Adams (readams readams net)
- Was the main maintainer of metacity for a while; particular areas
of focus included xinerama, placement, and an older version of the
constraints code. Still responds to bugs every once in a while.
Søren Sandmann (sandmann redhat com)
- Wrote most of the current compositing manager code + libcm

43
METACITY_MAINTAINERS Normal file
View File

@@ -0,0 +1,43 @@
Currently active maintainers
--------------------------------
Elijah Newren
Email: newren gmail com
Userid: newren
- Usually won't touch the theme bugs (isn't interested) or the
compositor (until open source nvidia drivers are up to snuff).
Tends to be most interested in libwnck/gtk interactions, focus
issues, constraints problems, and raising/stacking, but works on
just about anything other than themes and the compositor.
Thomas Thurman
Email: thomas thurman org uk
Userid: tthurman
- Responsible for all theme bugs and the compositor (thank goodness
Thomas got involved, eh?). I'm sure he'll replace this sentence
with his interests when he reads it. ;-)
Semi-active maintainers
--------------------------------
Havoc Pennington
Email: hp redhat com
Userid: hp
- Original author. Doesn't patch metacity anymore, but is active in
answering questions, responding to bugs, providing very helpful
suggestions and insight, and even assisting with debugging.
Important historical figureheads
--------------------------------
Rob Adams (readams readams net)
- Was the main maintainer of metacity for a while; particular areas
of focus included xinerama, placement, and an older version of the
constraints code. Still responds to bugs every once in a while.
Søren Sandmann (sandmann redhat com)
- Wrote most of the current compositing manager code + libcm

View File

@@ -1,7 +1,6 @@
SUBDIRS=src po doc
EXTRA_DIST = HACKING MAINTAINERS rationales.txt \
intltool-extract.in intltool-merge.in intltool-update.in
EXTRA_DIST = HACKING MAINTAINERS rationales.txt
DISTCLEANFILES = intltool-extract intltool-merge intltool-update po/stamp-it po/.intltool-merge-cache

43
NEWS
View File

@@ -1,3 +1,46 @@
2.26.0
======
Thanks to Luca Ferretti, Matt Kraai, and Neil Jagdish Patel for
improvements in this version.
- queue frame resize on window undecorate (Neil)
- fix description of desktop background (Luca) (#569649)
- wrap g_error calls in braces (Matt)
Translations
Amitakhya Phukan (as), Mikel González (ast), Ihar Hrachyshka (be@latin), Runa
Bhattacharjee (bn_IN), David Planella (ca), Petr Kovar (cs), Ask Hjorth
Larsen (da), Christian Kirbach (de), Jennie Petoumenou (el), David Lodge (en_GB),
Jorge González (es), Mattias Põldaru (et), Iñaki Larrañaga Murgoitio (eu),
Ilkka Tuohela (fi), Claude Paroz (fr), Ankit Patel (gu), Mark Krapivner (he),
Rajesh Ranjan (hi), Gabor Kelemen (hu), Luca Ferretti (it), Takeshi AIHANA (ja),
Changwoo Ryu (ko), Gintautas Miliauskas (lt), Sangeeta Kumari (mai), Sandeep
Shedmake (mr), Wouter Bolsterlee (nl), Manoj Kumar Giri (or), Duarte Loreto (pt),
Leonardo Ferreira Fontenelle (pt_BR), Adi Roiban (ro), Yuriy Penkin (ru), Daniel
Nylander (sv), I. Felix (ta), Krishna Babu K (te), Theppitak Karoonboonyanan (th),
Clytie Siddall (vi), Chao-Hsiung Liao (zh_HK), Chao-Hsiung Liao (zh_TW)
2.25.144
========
Thanks to Matthias Claesen, Matt Kraai, Elijah Newren, Owen Taylor, and Thomas
Thurman for improvements in this version.
- Optimise window property lookup (Thomas) (#549886)
- Fix slip in the above (Matt)
- Several memory leaks fixed (Matthias) (#552303, #552973, #552307)
- Fix longstanding crasher about colourmaps (Owen) (#568365)
- Alt+middle/right buttons can be switched (Thomas) (#437910)
- Support _NET_WM_MOVERESIZE_CANCEL (Elijah)
- minor fix paving the way for a theme editor (Thomas)
Translations
David Planella (ca), Jorge González (es), Mattias Põldaru (et), saudat
mohammed (ha), Yuval Tanny\n (he), Gabor Kelemen (hu), Onye, Sylvester (ig),
Changwoo Ryu (ko), Raivis Dejus (lv), Kjartan Maraas (nb), Daniel Nylander (sv),
Fajuyitan, Sunday Ayo (yo), 甘露 (Gan Lu) (zh_CN)
2.25.89
=======

84
README
View File

@@ -12,7 +12,7 @@ The stable releases so far are 2.4.x, 2.6.x, 2.8.[01], 2.8.1.x, 2.8.5-,
Unstable branches are 2.3.x, 2.5.x, 2.8.2-4, 2.9.x, 2.11.x, 2.13.x,
2.15.x, 2.17.x.
COMPILING METACITY
COMPILING MUTTER
===
You need GTK+ 2.2. For startup notification to work you need
@@ -20,6 +20,7 @@ libstartup-notification at
http://www.freedesktop.org/software/startup-notification/ or on the
GNOME ftp site. You also need GConf 1.2 (unless building a funky
extra-small embedded metacity with --disable-gconf, see below).
You need Clutter 1.0. You need gobject-introspection 0.6.3.
REPORTING BUGS AND SUBMITTING PATCHES
===
@@ -36,47 +37,11 @@ Feel free to send patches too; Metacity is relatively small and
simple, so if you find a bug or want to add a feature it should be
pretty easy. Send me mail, or put the patch in bugzilla.
See the HACKING file for some notes on hacking Metacity.
See the HACKING file for some notes on hacking Mutter.
SHRINKING METACITY
MUTTER FEATURES
===
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:
--disable-gconf
--disable-sm
--disable-verbose
--disable-startup-notification
However the result is no good for desktop use, all prefs have to be
hardcoded in the binary, for example. If you wanted to make a really
small metacity, here's some additional stuff you might consider
implementing:
- add --disable-themes, which would replace theme.c and theme-parser.c
with a hardcoded implementation of the interface in theme.h,
should save about 80K. This should be fairly easy.
- add --disable-gtk, which would implement the interface in ui.h
without using GTK. This one is easier than you think because the
main part of the window manager doesn't use GTK directly, but is
still fairly hard to do. You would probably have to give up some
of the features, such as window menus, as menus are pretty complex
to implement well. So time may be better spent adding a GTK
configure script feature to build GTK with only a small core set of
functionality.
METACITY FEATURES
===
- Boring window manager for the adult in you. Many window managers
are like Marshmallow Froot Loops; Metacity is like Cheerios.
- Uses GTK+ 2.0 for drawing window frames. This means colors, fonts,
etc. come from GTK+ theme.
@@ -132,8 +97,6 @@ METACITY FEATURES
Also try the GNOME keyboard shortcuts control panel, or
gconf-editor.
See metacity.schemas for all available bindings.
- Window keybindings:
Alt-space window menu
@@ -185,13 +148,13 @@ METACITY FEATURES
- Session management:
Metacity connects to the session manager and will set itself up to
Mutter connects to the session manager and will set itself up to
be respawned. It theoretically restores sizes/positions/workspace
for session-aware applications.
- Metacity implements much of the EWMH window manager specification
- Mutter 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
the COMPLIANCE file for information on mutter compliance with
these standards.
- Uses Pango to render text, so has cool i18n capabilities.
@@ -210,7 +173,7 @@ METACITY FEATURES
- handles the window manager selection from the ICCCM. Will exit if
another WM claims it, and can claim it from another WM if you pass
the --replace argument. So if you're running another
ICCCM-compliant WM, you can run "metacity --replace" to replace it
ICCCM-compliant WM, you can run "mutter --replace" to replace it
with Metacity.
- does basic colormap handling
@@ -220,7 +183,7 @@ METACITY FEATURES
HOW TO ADD EXTERNAL FEATURES
===
You can write a metacity "plugin" such as a pager, window list, icon
You can write a mutter "plugin" such as a pager, window list, icon
box, task menu, or even things like "window matching" using the
Extended Window Manager Hints. See http://www.freedesktop.org for the
EWMH specification. An easy-to-use library called "libwnck" is
@@ -228,10 +191,10 @@ available that uses the EWMH and is specifically designed for writing
WM accessories.
You might be interested in existing accessories such as "Devil's Pie"
by Ross Burton, which add features to Metacity (or other
by Ross Burton, which add features to Mutter (or other
EWMH-compliant WMs).
METACITY BUGS, NON-FEATURES, AND CAVEATS
MUTTER BUGS, NON-FEATURES, AND CAVEATS
===
See bugzilla: http://bugzilla.gnome.org/query.cgi
@@ -270,26 +233,15 @@ A: If it makes sense to turn on unconditionally, or is genuinely a
http://pobox.com/~hp/free-software-ui.html
http://pobox.com/~hp/features.html
Q: Will Metacity be part of GNOME?
Q: Will Mutter be part of GNOME?
A: It is officially part of GNOME as of GNOME 2.2. Prior to that,
it was unofficially shipped as the default GNOME WM by several
OS vendors.
A: It is not officially part of GNOME as of GNOME 2.27. We are
hoping to have mutter officially included as of GNOME 2.28.
Q: Is Metacity a Red Hat project?
A: Metacity's original creation was in no way funded, endorsed, or
encouraged by Red Hat, Inc. - I'm guessing Red Hat would not
consider "insufficient number of window managers for Linux" an
urgent problem. Just a wild guess though.
Now that metacity is the default WM however, Red Hat supports some
bugfixing and other work.
Q: Why does Metacity remember the workspace/position of some apps
Q: Why does Mutter remember the workspace/position of some apps
but not others across logout/login?
A: Metacity only stores sizes/positions for apps that are session
A: Mutter only stores sizes/positions for apps that are session
managed. As far as I can determine, there is no way to attempt to
remember workspace/position for non-session-aware apps without
causing a lot of weird effects.
@@ -304,7 +256,7 @@ A: Metacity only stores sizes/positions for apps that are session
place. And in fact I see a lot of bugs like this in window managers
that try to handle non-session-aware apps.
However, for session-aware apps, Metacity can tell that the
However, for session-aware apps, Mutter can tell that the
application instance is from the session and thus restore it
reliably, assuming the app properly restores the windows it had
open on session save.
@@ -456,7 +408,7 @@ A: There are quite a few, though many opportunities remain. Sometimes
- and much more.
Q: I think metacity sucks.
Q: I think mutter sucks.
A: Feel free to use any WM you like. The reason metacity follows the
ICCCM and EWMH specifications is that it makes metacity a modular,

View File

@@ -4,7 +4,7 @@
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
PKG_NAME="metacity"
PKG_NAME="mutter"
REQUIRED_AUTOMAKE_VERSION=1.10
(test -f $srcdir/configure.in \

View File

@@ -1,26 +1,40 @@
AC_PREREQ(2.50)
m4_define([metacity_major_version], [2])
m4_define([metacity_minor_version], [25])
# Fibonacci sequence for micro version numbering:
# 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987
m4_define([metacity_micro_version], [89])
m4_define([mutter_major_version], [2])
m4_define([mutter_minor_version], [29])
m4_define([mutter_micro_version], [1])
m4_define([metacity_version],
[metacity_major_version.metacity_minor_version.metacity_micro_version])
AC_INIT([metacity], [metacity_version],
[http://bugzilla.gnome.org/enter_bug.cgi?product=metacity])
m4_define([mutter_version],
[mutter_major_version.mutter_minor_version.mutter_micro_version])
m4_define([mutter_plugin_api_version], [2])
AC_INIT([mutter], [mutter_version],
[http://bugzilla.gnome.org/enter_bug.cgi?product=mutter])
AC_CONFIG_SRCDIR(src/core/display.c)
AC_CONFIG_HEADERS(config.h)
AM_INIT_AUTOMAKE
AM_INIT_AUTOMAKE([dist-bzip2 no-dist-gzip])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])],)
AM_MAINTAINER_MODE
MUTTER_MAJOR_VERSION=mutter_major_version
MUTTER_MINOR_VERSION=mutter_minor_version
MUTTER_MICRO_VERSION=mutter_micro_version
MUTTER_PLUGIN_API_VERSION=mutter_plugin_api_version
AC_SUBST(MUTTER_MAJOR_VERSION)
AC_SUBST(MUTTER_MINOR_VERSION)
AC_SUBST(MUTTER_MICRO_VERSION)
AC_SUBST(MUTTER_PLUGIN_API_VERSION)
MUTTER_PLUGIN_DIR="$libdir/$PACKAGE/plugins"
AC_SUBST(MUTTER_PLUGIN_DIR)
# Honor aclocal flags
AC_SUBST(ACLOCAL_AMFLAGS, "\${ACLOCAL_FLAGS}")
GETTEXT_PACKAGE=metacity
GETTEXT_PACKAGE=mutter
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Name of default gettext domain])
@@ -31,7 +45,10 @@ AC_HEADER_STDC
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
#### Integer sizes
# Sets GLIB_GENMARSHAL and GLIB_MKENUMS
AM_PATH_GLIB_2_0()
#### Integer sizes
AC_CHECK_SIZEOF(char)
AC_CHECK_SIZEOF(short)
@@ -107,7 +124,7 @@ if test "x$GCC" = "xyes"; then
fi
changequote([,])dnl
METACITY_PC_MODULES='gtk+-2.0 >= 2.10.0 pango >= 1.2.0'
MUTTER_PC_MODULES='gtk+-2.0 >= 2.10.0 pango >= 1.2.0'
AC_ARG_ENABLE(gconf,
AC_HELP_STRING([--disable-gconf],
@@ -116,12 +133,12 @@ AC_ARG_ENABLE(gconf,
if test x$enable_gconf = xyes; then
AC_DEFINE(HAVE_GCONF,1,[Build with gconf support])
METACITY_PC_MODULES="$METACITY_PC_MODULES gconf-2.0 >= 1.2.0"
MUTTER_PC_MODULES="$MUTTER_PC_MODULES gconf-2.0 >= 1.2.0"
fi
AC_ARG_ENABLE(verbose-mode,
AC_HELP_STRING([--disable-verbose-mode],
[disable metacity's ability to do verbose logging, for embedded/size-sensitive custom builds]),,
[disable mutter's ability to do verbose logging, for embedded/size-sensitive custom builds]),,
enable_verbose_mode=yes)
if test x$enable_verbose_mode = xyes; then
@@ -130,32 +147,32 @@ fi
AC_ARG_ENABLE(sm,
AC_HELP_STRING([--disable-sm],
[disable metacity's session management support, for embedded/size-sensitive custom non-GNOME builds]),,
[disable mutter's session management support, for embedded/size-sensitive custom non-GNOME builds]),,
enable_sm=auto)
AC_ARG_ENABLE(startup-notification,
AC_HELP_STRING([--disable-startup-notification],
[disable metacity's startup notification support, for embedded/size-sensitive custom non-GNOME builds]),,
[disable mutter's startup notification support, for embedded/size-sensitive custom non-GNOME builds]),,
enable_startup_notification=auto)
AC_ARG_ENABLE(compositor,
AC_HELP_STRING([--disable-compositor],
[disable metacity's compositing manager]),,
enable_compositor=auto)
AC_ARG_WITH(introspection,
AC_HELP_STRING([--without-introspection],
[disable the use of GObject introspection]),,
with_introspection=auto)
AC_ARG_WITH(libcanberra,
AC_HELP_STRING([--without-libcanberra],
[disable the use of libcanberra for playing sounds]),,
with_libcanberra=auto)
AC_ARG_ENABLE(xsync,
AC_HELP_STRING([--disable-xsync],
[disable metacity's use of the XSync extension]),,
[disable mutter's use of the XSync extension]),,
enable_xsync=auto)
AC_ARG_ENABLE(render,
AC_HELP_STRING([--disable-render],
[disable metacity's use of the RENDER extension]),,
enable_render=auto)
AC_ARG_ENABLE(shape,
AC_HELP_STRING([--disable-shape],
[disable metacity's use of the shaped window extension]),,
[disable mutter's use of the shaped window extension]),,
enable_shape=auto)
## try definining HAVE_BACKTRACE
@@ -164,17 +181,11 @@ AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)])
AM_GLIB_GNU_GETTEXT
## here we get the flags we'll actually use
# GOptionEntry requires glib-2.6.0
# GOptionEntry requires glib-2.6.0
PKG_CHECK_MODULES(ALL, glib-2.0 >= 2.6.0)
# gtk_window_set_icon_name requires gtk2+-2.60
PKG_CHECK_MODULES(METACITY_MESSAGE, gtk+-2.0 >= 2.6.0)
PKG_CHECK_MODULES(METACITY_WINDOW_DEMO, gtk+-2.0 >= 2.6.0)
if $PKG_CONFIG --atleast-version 1.2.0 pangoxft; then
echo "pangoxft found"
else
AC_MSG_ERROR("Pango 1.2.0 or greater based on Xft2 is required")
fi
# gtk_window_set_icon_name requires gtk2+-2.6.0
PKG_CHECK_MODULES(MUTTER_MESSAGE, gtk+-2.0 >= 2.6.0)
PKG_CHECK_MODULES(MUTTER_WINDOW_DEMO, gtk+-2.0 >= 2.6.0)
# Unconditionally use this dir to avoid a circular dep with gnomecc
GNOME_KEYBINDINGS_KEYSDIR="${datadir}/gnome-control-center/keybindings"
@@ -200,76 +211,87 @@ fi
if test x$have_startup_notification = xyes; then
echo "Building with libstartup-notification"
METACITY_PC_MODULES="$METACITY_PC_MODULES libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_VERSION"
MUTTER_PC_MODULES="$MUTTER_PC_MODULES libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_VERSION"
AC_DEFINE(HAVE_STARTUP_NOTIFICATION, , [Building with startup notification support])
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
have_libcanberra=no
AC_MSG_CHECKING([libcanberra-gtk])
if test x$with_libcanberra = xno ; then
AC_MSG_RESULT([disabled])
else
if $PKG_CONFIG --exists libcanberra-gtk; then
have_libcanberra=yes
AC_MSG_RESULT(yes)
MUTTER_PC_MODULES="$MUTTER_PC_MODULES libcanberra-gtk"
AC_DEFINE([HAVE_LIBCANBERRA], 1, [Building with libcanberra for playing sounds])
else
AC_MSG_RESULT(no)
if test x$with_libcanberra = xyes ; then
AC_MSG_ERROR([libcanberra forced and libcanberra-gtk was not found])
fi
fi
fi
XCOMPOSITE_VERSION=0.2
if test x$enable_compositor = xyes; then
have_xcomposite=yes
elif test x$enable_compositor = xauto; then
echo "Building compositing manager by default now."
have_xcomposite=yes
else
have_xcomposite=no
fi
if test x$have_xcomposite = xyes; then
AC_MSG_CHECKING([Xcomposite >= $XCOMPOSITE_VERSION])
if $PKG_CONFIG --atleast-version $XCOMPOSITE_VERSION xcomposite; then
AC_MSG_RESULT([yes])
else
AC_MSG_ERROR([no. Use --disable-compositor to disable.])
fi
fi
if test x$have_xcomposite = xyes; then
METACITY_PC_MODULES="$METACITY_PC_MODULES xcomposite >= $XCOMPOSITE_VERSION xfixes xrender xdamage"
AC_MSG_CHECKING([Xcomposite >= $XCOMPOSITE_VERSION])
if $PKG_CONFIG --atleast-version $XCOMPOSITE_VERSION xcomposite; then
MUTTER_PC_MODULES="$MUTTER_PC_MODULES xcomposite >= $XCOMPOSITE_VERSION xfixes xrender xdamage"
AC_DEFINE(HAVE_COMPOSITE_EXTENSIONS, 1, [Building with compositing manager support])
echo "Building with compositing manager"
## force on render also
have_xrender=yes
else
echo "Building without compositing manager"
AC_MSG_ERROR([no. Mutter requires the Xcomposite extension to build.])
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)
CLUTTER_VERSION=1.2.0
CLUTTER_PACKAGE=clutter-1.0
AC_SUBST(CLUTTER_PACKAGE)
if $PKG_CONFIG --atleast-version $CLUTTER_VERSION $CLUTTER_PACKAGE ; then
MUTTER_PC_MODULES="$MUTTER_PC_MODULES $CLUTTER_PACKAGE "
PKG_CHECK_MODULES(CLUTTER, $CLUTTER_PACKAGE)
AC_DEFINE(WITH_CLUTTER, , [Building with Clutter compositor])
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
dnl Check for the clutter-glx-texture-pixmap header
mutter_save_cppflags="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $CLUTTER_CFLAGS"
AC_CHECK_HEADER([clutter/glx/clutter-glx-texture-pixmap.h],
[have_glx_texture_pixmap=yes],
[have_glx_texture_pixmap=no])
CPPFLAGS="$mutter_save_cppflags"
if test x$have_xrender = xyes; then
echo "Building with Render"
METACITY_PC_MODULES="$METACITY_PC_MODULES xrender >= $XRENDER_VERSION"
if test x$have_glx_texture_pixmap = xyes; then
AC_DEFINE(HAVE_GLX_TEXTURE_PIXMAP, ,
[Is ClutterGLXTexturePixmap available?])
fi
fi ## have_composite
if test x$have_xrender = xyes; then
AC_DEFINE(HAVE_RENDER, , [Building with Render extension support])
else
AC_MSG_ERROR([no. Mutter requires Clutter version $CLUTTER_VERSION.])
fi
if test x$with_introspection != xno; then
PKG_CHECK_MODULES(INTROSPECTION, gobject-introspection-1.0, have_introspection=yes, have_introspection=no)
if test x$have_introspection=xyes; then
MUTTER_PC_MODULES="$MUTTER_PC_MODULES gobject-introspection-1.0"
AC_DEFINE(HAVE_INTROSPECTION, 1, [Define if GObject introspection is available])
G_IR_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
AC_SUBST(G_IR_SCANNER)
G_IR_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
AC_SUBST(G_IR_COMPILER)
G_IR_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
AC_SUBST(G_IR_GENERATE)
GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
AC_SUBST(GIRDIR)
TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
AC_SUBST(TYPELIBDIR)
fi
fi
AM_CONDITIONAL(WITH_INTROSPECTION, test "$have_introspection" = "yes")
AC_MSG_CHECKING([Xcursor])
if $PKG_CONFIG xcursor; then
have_xcursor=yes
@@ -280,23 +302,23 @@ if $PKG_CONFIG xcursor; then
if test x$have_xcursor = xyes; then
echo "Building with Xcursor"
METACITY_PC_MODULES="$METACITY_PC_MODULES xcursor"
AC_DEFINE(HAVE_XCURSOR, , [Building with Xcursor support])
MUTTER_PC_MODULES="$MUTTER_PC_MODULES xcursor"
AC_DEFINE(HAVE_XCURSOR, , [Building with Xcursor support])
fi
PKG_CHECK_MODULES(METACITY, $METACITY_PC_MODULES)
PKG_CHECK_MODULES(MUTTER, $MUTTER_PC_MODULES)
AC_PATH_XTRA
ALL_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
# Check for Xinerama extension (Solaris impl or Xfree impl)
metacity_save_cppflags="$CPPFLAGS"
mutter_save_cppflags="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $X_CFLAGS"
AC_ARG_ENABLE(xinerama,
AC_HELP_STRING([--disable-xinerama],
[disable metacity's use of the Xinerama extension]),
[disable mutter's use of the Xinerama extension]),
try_xinerama=$enable_xinerama,try_xinerama=yes)
use_solaris_xinerama=no
@@ -318,7 +340,7 @@ if test "${try_xinerama}" != no; then
AC_DEFINE(HAVE_XINERAMA, , [Have some version of Xinerama]),
use_solaris_xinerama=no,
[#include <X11/Xlib.h>])
fi
fi
AC_MSG_CHECKING(for Xinerama support on Solaris)
AC_MSG_RESULT($use_solaris_xinerama);
;;
@@ -327,12 +349,12 @@ if test "${try_xinerama}" != no; then
use_xfree_xinerama=yes
AC_CHECK_LIB(Xinerama, XineramaQueryExtension,
[AC_CHECK_HEADER(X11/extensions/Xinerama.h,
X_EXTRA_LIBS="-lXinerama $X_EXTRA_LIBS"
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]),
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)
@@ -342,7 +364,7 @@ if test "${try_xinerama}" != no; then
esac
fi
CPPFLAGS="$metacity_save_cppflags"
CPPFLAGS="$mutter_save_cppflags"
SHAPE_LIBS=
found_shape=no
@@ -413,21 +435,21 @@ if test "x$found_xsync" = "xyes"; then
AC_DEFINE(HAVE_XSYNC, , [Have the Xsync extension library])
fi
METACITY_LIBS="$METACITY_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm"
METACITY_MESSAGE_LIBS="$METACITY_MESSAGE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
METACITY_WINDOW_DEMO_LIBS="$METACITY_WINDOW_DEMO_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
METACITY_PROPS_LIBS="$METACITY_PROPS_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
MUTTER_LIBS="$MUTTER_LIBS $XSYNC_LIBS $RANDR_LIBS $SHAPE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm"
MUTTER_MESSAGE_LIBS="$MUTTER_MESSAGE_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
MUTTER_WINDOW_DEMO_LIBS="$MUTTER_WINDOW_DEMO_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm"
MUTTER_PROPS_LIBS="$MUTTER_PROPS_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
found_sm=no
case "$METACITY_LIBS" in
case "$MUTTER_LIBS" in
*-lSM*)
found_sm=yes
;;
*)
AC_CHECK_LIB(SM, SmcSaveYourselfDone,
AC_CHECK_LIB(SM, SmcSaveYourselfDone,
[AC_CHECK_HEADERS(X11/SM/SMlib.h,
METACITY_LIBS="-lSM -lICE $METACITY_LIBS" found_sm=yes)],
, $METACITY_LIBS)
MUTTER_LIBS="-lSM -lICE $MUTTER_LIBS" found_sm=yes)],
, $MUTTER_LIBS)
;;
esac
@@ -446,7 +468,7 @@ if test "$found_sm" = "yes"; then
AC_DEFINE(HAVE_SM, , [Building with SM support])
fi
AM_CONDITIONAL(HAVE_SM, test "$found_sm" = "yes")
AM_CONDITIONAL(HAVE_SM, test "$found_sm" = "yes")
HOST_ALIAS=$host_alias
AC_SUBST(HOST_ALIAS)
@@ -459,7 +481,7 @@ fi
AC_SUBST(GDK_PIXBUF_CSOURCE)
if test x$enable_gconf = xyes; then
if test x$enable_gconf = xyes; then
AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
if test x"$GCONFTOOL" = xno; then
AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf])
@@ -494,13 +516,13 @@ GNOME_DOC_INIT([0.8.0])
AC_CONFIG_FILES([
Makefile
doc/Makefile
doc/creating_themes/Makefile
doc/man/Makefile
src/Makefile
src/wm-tester/Makefile
src/libmetacity-private.pc
src/libmutter-private.pc
src/mutter-plugins.pc
src/tools/Makefile
src/themes/Makefile
src/compositor/plugins/Makefile
po/Makefile.in
])
@@ -516,14 +538,14 @@ fi
if test x$enable_verbose_mode = xno; then
echo "*** WARNING WARNING WARNING WARNING WARNING"
echo "*** Building without verbose mode"
echo "*** This means there's no way to debug metacity problems."
echo "*** Please build normal desktop versions of metacity"
echo "*** This means there's no way to debug mutter problems."
echo "*** Please build normal desktop versions of mutter"
echo "*** with verbose mode enabled so users can use it when they report bugs."
fi
dnl ==========================================================================
echo "
metacity-$VERSION:
mutter-$VERSION:
prefix: ${prefix}
source code location: ${srcdir}
@@ -533,21 +555,21 @@ metacity-$VERSION:
XFree86 Xinerama: ${use_xfree_xinerama}
Solaris Xinerama: ${use_solaris_xinerama}
Startup notification: ${have_startup_notification}
Compositing manager: ${have_xcomposite}
libcanberra: ${have_libcanberra}
Introspection: ${have_introspection}
Session management: ${found_sm}
Shape extension: ${found_shape}
Resize-and-rotate: ${found_randr}
Xsync: ${found_xsync}
Render: ${have_xrender}
Xcursor: ${have_xcursor}
"
METACITY_MINOR_VERSION=metacity_minor_version
if test $(( $(echo $METACITY_MINOR_VERSION) %2)) == "1"; then
stable_version=$(( ($METACITY_MINOR_VERSION / 2) * 2))
echo "This is the UNSTABLE branch of metacity"
MUTTER_MINOR_VERSION=mutter_minor_version
if expr $MUTTER_MINOR_VERSION % 2 > /dev/null ; then
stable_version=`expr $MUTTER_MINOR_VERSION - 1`
echo "This is the UNSTABLE branch of mutter"
echo -n "Use 2.$stable_version.x for stable "
echo "(gnome-2-$stable_version branch in Subversion)"
else
echo "This is the stable branch of metacity"
echo "This is the stable branch of mutter"
fi

View File

@@ -1,4 +1,4 @@
SUBDIRS = man creating_themes
SUBDIRS = man
EXTRA_DIST=theme-format.txt metacity-theme.dtd dialogs.txt code-overview.txt \
EXTRA_DIST=theme-format.txt dialogs.txt code-overview.txt \
how-to-get-focus-right.txt

View File

@@ -42,5 +42,5 @@ options you can set are:
menus zooming, dialogues being semi-transparent, and so on. Try it
and see whether you like it.
If you have any problems, ask on metacity-devel-list@gnome.org, or
If you have any problems, ask on mutter-devel-list@gnome.org, or
#gnome-hackers on gimpnet, or come and find me (tthurman at gnome) and ask.

View File

@@ -1,286 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://docbook.org/docbook/xml/4.5/docbookx.dtd" [
]>
<book id="index">
<bookinfo>
<title>Understanding Metacity Themes</title>
<authorgroup>
<author>
<firstname>Thomas</firstname>
<surname>Thurman</surname>
</author>
</authorgroup>
<abstract>
<para>
We very much appreciate any reports of inaccuracies or other errors in
this document. Contributions are also most welcome. Post your
suggestions, critiques or addenda to the <ulink
url="mailto:tthurman@gnome.org">team</ulink>.</para>
</abstract>
<copyright>
<year>2008</year>
<holder>Thomas Thurman</holder>
</copyright>
<legalnotice>
<para>
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
You may obtain a copy of the GNU Free Documentation License from the Free Software Foundation by visiting their Web site or by writing to: Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
</para>
</legalnotice>
</bookinfo>
<chapter id="sec-introduction">
<title>Introduction</title>
<para>This is an article about how to theme Metacity. It is a work in progress, and I have had to dig deeply to find some answers; I may well have made mistakes and I welcome corrections and suggestions.</para>
<para>GNOME lets you theme a bunch of different things, but we're only talking about <literal>window border</literal> themes here, which some people call Metacity themes; <ulink url="http://en.wikipedia.org/wiki/Metacity#Themes">Wikipedia begins a sentence</ulink> with &quot;Despite the incomplete state of Metacity theme development documentation&quot;, and though there <emphasis>is</emphasis> <ulink url="http://svn.gnome.org/viewvc/metacity/trunk/doc/theme-format.txt?view=markup">documentation in the source</ulink>, apparently not many people find it, and it's written more for programmers than theme designers. Glynn Foster also wrote <ulink url="http://developer.gnome.org/doc/tutorials/metacity/metacity-themes.html">a very good introduction to Metacity themes</ulink> (<ulink url="http://home.arcor.de/rybaczyk/documents/tutorials/metacity/metacity-themes.de.html">[de]</ulink>) six years ago, but things have changed a little since then. <ulink url="http://lists.freedesktop.org/archives/compiz/2006-September/000445.html">Metacity themes can also be used by Compiz</ulink>, and perhaps by other window managers for all I know.</para>
<para>So, a Metacity theme is a set of instructions about how to &quot;decorate&quot; (draw the borders around) a window. Presumably you don't want to style all windows identically, so the format lets you specify details for different kinds of window:</para>
<para>
<variablelist>
<varlistentry>
<term>state:</term><listitem><para>Every window must be in exactly one of these states: <literal>normal</literal>, <literal>dialog</literal>, <literal>modal dialog</literal> (i.e. a dialogue which means you can't interact with the rest of the program while it's up), <literal>menu</literal> (torn off from the main application, not that people do that much these days), <literal>utility</literal> (that is, palettes and toolboxes and things), and <literal>border</literal>. X also allows a window to explicitly ask to be undecorated, but of course we don't provide for those in a list of decoration instructions.</para></listitem>
</varlistentry>
<varlistentry>
<term>focused</term><listitem><para>Every window is either the active window (which X people call &quot;focused&quot;), or it isn't.</para></listitem>
</varlistentry>
<varlistentry>
<term>maximized</term><listitem><para>Every window is either (fully) maximised (horizontal and vertical only don't count), or it isn't.</para></listitem>
</varlistentry>
<varlistentry>
<term>shaded</term><listitem><para>Every window is either rolled up to show just its titlebar (which techies call &quot;shaded&quot; for some reason I can't fathom), or it isn't.</para></listitem>
</varlistentry>
</variablelist>
</para>
<para>
<itemizedlist>
<listitem><para><emphasis>If a window is not fully maximised and not shaded,</emphasis> it either allows horizontal resizing, or it doesn't.</para></listitem>
<listitem><para><emphasis>If a window is not fully maximised and not shaded,</emphasis> it either allows vertical resizing, or it doesn't.</para></listitem>
</itemizedlist>
</para>
</chapter>
<chapter>
<title>What's in the file</title>
<para>The files must be called either</para>
<para>
<itemizedlist>
<listitem><para>~/.themes/<varname>N</varname>/metacity-1/metacity-theme-<varname>V</varname>.xml
for a theme used only by you, or</para></listitem>
<listitem><para>/usr/share/themes/<varname>N</varname>/metacity-1/metacity-theme-<varname>V</varname>.xml
for a theme installed for all users.</para></listitem>
</itemizedlist>
</para>
<para>where <varname>N</varname> is the name of the theme and <varname>V</varname> is the version of the format. Version 2, <ulink url="http://svn.gnome.org/viewvc/metacity?view=revision&amp;revision=2973">introduced in October 2006</ulink>, adds a few extra features, but it's rarely used. Version 1 is the original format. The formats are fixed once they're stable for both backwards and forwards compatibility; <ulink url="http://bugzilla.gnome.org/show_bug.cgi?id=482165">new features</ulink> can't be added without introducing a new version number, which is why improvements come out rarely and in large clumps. <literal>metacity-1</literal> in the names is a fossil and doesn't mean version 1 of anything.</para>
<para>The metacity-theme-V.xml files are <ulink url="http://blogs.gnome.org/tthurman/2008/02/14/gmarkup/">GMarkup files</ulink>, which are very similar to XML. For now, you actually have to write these in a text editor or something; you can either start with a blank page, or modify a theme someone else has made. (I am thinking of writing a general theme editor program, but that'll have to wait until I've reduced Metacity's open bug queue a little.) If you want to see a fully-fledged one, you can look at <ulink url="http://svn.gnome.org/viewvc/metacity/trunk/src/themes/Atlanta/metacity-theme-1.xml?view=markup">the current version of &quot;Atlanta&quot;</ulink>, one of the simplest themes, but even that is quite complicated-looking at first.</para>
<para>So, let's talk about what actually goes inside the files. As in any XML file, &lt;!-<!-- x -->- &#8230; <!-- x -->&gt; are comments. At its most basic, it would go:</para>
<para>
<programlisting>
&lt;metacity_theme&gt;
&lt;!-<!-- x -->- Helper stuff: -<!-- x -->-&gt;
&lt;info &#8230;&gt; &lt;!-<!-- x -->- to be explained -<!-- x -->-&gt;
&lt;constant &#8230;&gt; &lt;!-<!-- x -->- maybe; to be explained -<!-- x -->-&gt;
&lt;draw_ops &#8230;&gt; &lt;!-<!-- x -->- maybe; to be explained -<!-- x -->-&gt;
&lt;!-<!-- x -->- Things we build the top level onto: -<!-- x -->-&gt;
&lt;frame_geometry &#8230;&gt; &lt;!-<!-- x -->- to be explained -<!-- x -->-&gt;
&lt;frame_style &#8230;&gt; &lt;!-<!-- x -->- to be explained -<!-- x -->-&gt;
&lt;frame_style_set &#8230;&gt; &lt;!-<!-- x -->- to be explained -<!-- x -->-&gt;
&lt;!-<!-- x -->- And the top level: -<!-- x -->-&gt;
&lt;window type=&quot;normal&quot; style_set=&quot;&#8230;&quot; /&gt;
&lt;window type=&quot;dialog&quot; style_set=&quot;&#8230;&quot; /&gt;
&lt;window type=&quot;modal_dialog&quot; style_set=&quot;&#8230;&quot; /&gt;
&lt;window type=&quot;menu&quot; style_set=&quot;&#8230;&quot; /&gt;
&lt;window type=&quot;utility&quot; style_set=&quot;&#8230;&quot; /&gt;
&lt;window type=&quot;border&quot; style_set=&quot;&#8230;&quot; /&gt;
&lt;/metacity_theme&gt;
</programlisting>
</para>
</chapter>
<chapter>
<title>Matching windows</title>
<para>
<variablelist>
<varlistentry>
<term>window</term><listitem><para>You see that at the top level we have a list of &lt;window&gt; tags, one for each window state we discussed above. The style_set argument of each of these gives the name of a frame_style_set.</para></listitem>
</varlistentry>
<varlistentry>
<term>frame_style_set:</term><listitem><para>tells Metacity how to draw windows according to whether they're focused or not, maximised or not, shaded or not, and allowing resizing vertically, horizontally, both, or neither. It looks like this:</para></listitem>
</varlistentry>
</variablelist>
</para>
<para>
<programlisting>
&lt;frame_style_set&gt;
&lt;frame focus=&quot;F&quot; state=&quot;S&quot; resize=&quot;R&quot; style=&quot;N&quot;/&gt;
&lt;frame&#8230; /&gt;
&#8230;
&lt;/frame_style_set&gt;
</programlisting>
</para>
<para>where:</para>
<para>
<variablelist>
<varlistentry>
<term>F</term><listitem><para>is yes for focused, no for unfocused.</para></listitem>
</varlistentry>
<varlistentry>
<term>S</term><listitem><para>combines the shaded and maximized flags: normal, maximized, shaded, or maximized_and_shaded.</para></listitem>
</varlistentry>
<varlistentry>
<term>R</term><listitem><para>represents resize permissions that the window gives us: none, vertical, horizontal, or both. Frame settings for maximised windows, which can't be resized, don't have this attribute.</para></listitem>
</varlistentry>
</variablelist>
</para>
<para>
<varname>N</varname> is the name of a <literal>frame_style</literal> to apply to a window which has these attributes.</para>
<para>A <literal>frame_style_set</literal> tag may also have a &quot;parent&quot; tag, which should be the name of another <literal>frame_style_set</literal>. This means that if Metacity wants to know about a kind of window which that <literal>frame_style_set</literal> doesn't describe, it should look in the parent. Most of the more complicated tags in Metacity theme files also have a &quot;parent&quot; attribute which work the same way. This is particularly useful because, taken together, all the <literal>frame_style_set</literal>s in a theme file must be capable of matching every possible kind of window; if a window turns up that they can't match, there will be an error at runtime.</para>
<para>Let's recap what we've seen so far. The combination of a <literal>window</literal>, which matches a window's state (normal, dialog, and so forth), with an entry in the corresponding <literal>frame_style_set</literal>, which matches its focus, shadedness, maximisedness, and resize permissions where relevant, will allow you to make a list of rules to match any window against. The next piece of this puzzle lets you specify what Metacity should do with such windows once it's matched them.</para>
</chapter>
<chapter>
<title>Actually drawing stuff</title>
<para><literal>frame_style:</literal> This is probably the most complicated part of the whole system. A <literal>frame_style</literal> a series of <emphasis><literal>piece</literal></emphasis>s and <emphasis><literal>button</literal></emphasis>s. It looks like this:</para>
<para>
<programlisting>
&lt;frame_style name=&quot;&#8230;&quot; geometry=&quot;G&quot;&gt;
&lt;piece position=&quot;P&quot;&gt;
&lt;draw_ops&gt;
&lt;/draw_ops&gt;
&lt;/piece&gt;
&#8230;
&lt;button function=&quot;F&quot; state=&quot;S&quot; draw_ops=&quot;D&quot;/&gt;
&lt;draw_ops&gt;
&lt;/draw_ops&gt;
&lt;/button&gt;
&#8230;
&lt;/frame_style&gt;
</programlisting>
</para>
<para>The <literal>pieces</literal> are pieces of the window frame. When Metacity draws a window frame, it renders its various pieces always in the same order. The bolded parts are all the possible values of P:</para>
<para>
<itemizedlist>
<listitem><para>the <literal>entire_background</literal>, covering the whole frame</para></listitem>
<listitem><para>the <literal>titlebar</literal>, covering the entire background of the titlebar</para></listitem>
<listitem><para>the <literal>titlebar_middle</literal>, the part of the titlebar that doesn't touch its edges</para></listitem>
<listitem><para>the <literal>left_titlebar_edge</literal>, <literal>right_titlebar_edge</literal>, <literal>top_titlebar_edge</literal>, and <literal>bottom_titlebar_edge</literal></para></listitem>
<listitem><para>the <literal>title</literal>, just exactly that area which is covered by the text on the titlebar</para></listitem>
<listitem><para>the <literal>left_edge</literal>, <literal>right_edge</literal>, and <literal>bottom_edge</literal> of the frame (yes, there is no top_edge: it's identical to top_titlebar_edge, isn't it?)</para></listitem>
<listitem><para>the <literal>overlay</literal>, which covers everything&#8211; the same as entire_background, but done last instead of first.</para></listitem>
</itemizedlist>
</para>
<para><emphasis>What</emphasis> Metacity draws in these pieces is decided by the theme. If a <literal>frame_style</literal> or its parents don't specify a particular piece, nothing will be drawn for that piece. You have two ways to specify what to draw: one is that the <literal>piece</literal> tag can have a <literal>draw_ops</literal> tag inside it which lists a sequence of drawing operations in Metacity's custom format. <ulink url="http://bugzilla.gnome.org/show_bug.cgi?id=107012">You might ask why we don't use SVG</ulink>; one answer is that SVG support wasn't very strong when this format was designed, and another answer is that these days you can use SVG all you like; just include it as an image and Metacity will know what to do.</para>
<para>An alternative to including a draw_ops tag inside a piece tag is to add a draw_ops attribute to the piece tag. Then you can add a draw_ops tag at top level (inside the metacity_theme tag) with a name attribute, and Metacity will use that. This is useful if you use similar draw_ops over and over.</para>
<para>I'm not going to document draw_ops at present, because this is already very long. I will write it up later and link it from here.</para>
<para>The <literal>button</literal> tag tells Metacity how, but not where, to draw buttons. Buttons are drawn after all the pieces are finished, and the way to draw them is also given using draw_ops. You ought to provide buttons for all the possible kinds of button; if you don't give one it won't be drawn, which is unfortunate for the user who wants to use it:</para>
<para>
<itemizedlist>
<listitem><para><literal>left_left_background</literal>, <literal>left_middle_background</literal>, and <literal>left_right_background</literal> don't represent buttons as such, but the background behind them, assuming there can be at most three buttons on the left. These days there can be more, so the extra ones also use left_middle_background.</para></listitem>
<listitem><para><literal>right_left_background</literal>, <literal>right_middle_background</literal>, and <literal>right_right_background</literal> similarly.</para></listitem>
<listitem><para><literal>close</literal>, <literal>minimize</literal>, <literal>maximize</literal> are the obvious original three buttons.</para></listitem>
<listitem><para><literal>menu</literal> is the menu button you can click to get a list of actions you can perform on the window.</para></listitem>
<listitem><para><literal>shade</literal>, <literal>above</literal>, <literal>stick</literal> are similar to the original buttons but only allowed in version 2</para></listitem>
<listitem><para><literal>unshade</literal>, <literal>unabove</literal>, <literal>unstick</literal> are the toggled versions of these buttons. Again, version 2 only.</para></listitem>
</itemizedlist>
</para>
<para>The reason there are toggled versions of shade, above, and stick, and not maximize, is that by the time you get this far you've probably already decided whether you're drawing a maximised window. So if you <emphasis>are</emphasis> drawing a maximised window, you can make the button called &quot;maximize&quot; look how you want the restore button to be; otherwise, make it look like you want the maximise button to be.</para>
<para>For each button tag you should also set a &quot;state&quot; attribute; this time the state is either <literal>normal</literal> (the way you see it most of the time), <literal>pressed</literal>, or <literal>prelight</literal> (this makes the buttons subtly light up when you hover over them). You only really need &quot;normal&quot;, but the others are good to have too.</para>
<para>The &quot;geometry&quot; attribute of a <literal>frame_style</literal> tag is the name of a&#8230;</para>
</chapter>
<chapter>
<title>Geometry</title>
<para>The <literal>geometry</literal> tag defines the sizes of things around the window. It is important, but not easy to explain, and again this file has gone on too long. I'll write it up later.</para>
</chapter>
<chapter>
<title>Other things which lie around a file</title>
<para>The most important other thing in a theme file is the metadata held in the <literal>info</literal> tag. This contains a set of tags each of which contains some text explaining something about the theme itself, in a sort of <ulink url="http://en.wikipedia.org/wiki/Dublin_Core">Dublin Core</ulink> sort of way. (Next time around, we should probably use the actual Dublin Core.) The tags are <literal>name</literal>, <literal>author</literal>, <literal>copyright</literal>, <literal>date</literal>, and <literal>description</literal>.</para>
<para>Version 1 of the format had a <literal>menu_icon</literal> tag at top level, which let themes specify the icons beside options in the menu you get from the menu icon. This has become redundant; the icons are taken from the icon theme! The tag can still be used in all formats, but does nothing and is deprecated.</para>
<para>Version 2 of the format has a <literal>fallback</literal> tag at top level, which let the theme specify what icon a window should be considered to have if it doesn't provide an icon of its own. This should also be taken from the icon theme, <ulink url="http://bugzilla.gnome.org/show_bug.cgi?id=524343">if anyone fancies fixing it</ulink>, and the tag should also then be deprecated. It shouldn't be hard.</para>
</chapter>
<chapter>
<title>When you're working on a theme</title>
<para>When you're editing a theme, you can view it without using it on the whole desktop using
<command>metacity-theme-viewer YourThemeName</command></para>
<para>and view it on the whole desktop using
<command>gconftool -<!-- x -->-type=string -<!-- x -->-set /apps/metacity/general/theme YourThemeName</command></para>
<para>Whenever you change the selected theme in GConf, Metacity will load the newly-chosen theme. This is how control-center does it. But when you change a theme, as you're working on it, you might want to ask Metacity to reload the theme which is currently used on the whole desktop to reflect your changes. You can do this using the little-known <command>metacity-message</command> program, with the command <literal>metacity-message reload-theme</literal>. This works by sending the ClientMessage <literal>_METACITY_RELOAD_THEME_MESSAGE</literal> to the root window, in case you're interested.</para>
<para>Once you're done with your theme, consider submitting it to <ulink url="http://art.gnome.org/themes/metacity/">the art.gnome.org site</ulink>, or <ulink url="http://www.gnome-look.org/index.php?xcontentmode=101">the gnome-look site</ulink>.</para>
</chapter>
<chapter>
<title>The future</title>
<para>Please feel free to link to this so people don't have to keep asking the basic questions and can start asking the deeper ones. One of the important deeper ones is: where should we go in the future? Since this format is becoming something of a de facto standard between window managers, should we set up some kind of freedesktop.org standards discussion? Would it be useful to spin off Metacity's theme parsing code into a separate, LGPL-licensed library so that other applications could use it more easily?</para>
<para>What would a version 3 of this format look like? Could we simplify the window / frame_style_set system? (I can imagine abolishing both, and being able to write <literal>&lt;frame_style for=&quot;normal+unfocused+maximized&quot;&gt;&#8230;</literal> and having Metacity assume it applied to all resize permissions and shadednesses.) Maybe we should try to do everything with SVG we can? Getting more wild and handwavey, is it worth keeping XML-like? Maybe if other window managers were dealing with the files, .ini-style files would be more universally useful? Or perhaps not. And then of course we need a decent graphical editor for it. I have a few ideas, but if anyone fancies jumping in...</para>
</chapter>
</book>

View File

@@ -1,24 +0,0 @@
### This part of Makefile.am can be customized by you.
# gnome-doc-utils standard variables:
include $(top_srcdir)/gnome-doc-utils.make
dist-hook: doc-dist-hook
# The name of the directory in /usr/share/gnome/help/,
# and the name of the main .xml file:
DOC_MODULE = creating-metacity-themes
# The names of any files included via entity declarations.
DOC_ENTITIES =
# The names of any files included by xincluded (preferred):
DOC_INCLUDES =
# The names of any pictures:
DOC_FIGURES =
# The names of any locales for which documentation translations exist:
DOC_LINGUAS =

View File

@@ -1,4 +1,4 @@
man_MANS = metacity.1 metacity-theme-viewer.1 \
metacity-window-demo.1 metacity-message.1
man_MANS = mutter.1 mutter-theme-viewer.1 \
mutter-window-demo.1 mutter-message.1
EXTRA_DIST = $(man_MANS)

View File

@@ -12,7 +12,7 @@
.\" > Right I know. any licenses that is DFSG-free, I'm ok with whatever,
.\" > since I have contributed that for Debian. so GPL is no problem for me.
.\" -----
.TH METACITY\-MESSAGE 1 "28 August 2002"
.TH MUTTER\-MESSAGE 1 "28 August 2002"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@@ -26,24 +26,24 @@
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
METACITY\-MESSAGE \- a command to send a message to Metacity
MUTTER\-MESSAGE \- a command to send a message to Mutter
.SH SYNOPSIS
.B METACITY\-MESSAGE
.B MUTTER\-MESSAGE
[restart|reload\-theme|enable\-keybindings|disable\-keybindings]
.SH DESCRIPTION
This manual page documents briefly the
.B metacity\-message\fP.
.B mutter\-message\fP.
This manual page was written for the Debian distribution
because the original program does not have a manual page.
.PP
.\" TeX users may be more comfortable with the \fB<whatever>\fP and
.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
.\" respectively.
\fBmetacity\-message\fP send a specified message to \fBmetacity\fP(1).
\fBmutter\-message\fP send a specified message to \fBmutter\fP(1).
.SH OPTIONS
.TP
.B restart
Restart \fBmetacity\fP(1) which is running.
Restart \fBmutter\fP(1) which is running.
.TP
.B reload-theme
Reload a theme which is specified on gconf database.
@@ -54,7 +54,7 @@ Enable all of keybindings which is specified on gconf database.
.B disable-keybindings
Disable all of keybindings which is specified on gconf database.
.SH SEE ALSO
.BR metacity (1)
.BR mutter (1)
.SH AUTHOR
This manual page was written by Akira TAGOH <tagoh@debian.org>,
for the Debian GNU/Linux system (but may be used by others).

View File

@@ -3,21 +3,21 @@
.\"
.\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>.
.\"
.TH METACITY-THEME-VIEWER 1 "1 June 2004"
.TH MUTTER-THEME-VIEWER 1 "1 June 2004"
.SH NAME
metacity-theme-viewer \- view metacity themes
mutter-theme-viewer \- view mutter themes
.SH SYNOPSIS
.B metacity-theme-viewer
.B mutter-theme-viewer
[
.I THEMENAME
]
.SH DESCRIPTION
.\" Putting a newline after each sentence can generate better output.
.B metacity-theme-viewer
allows you to preview any installed Metacity theme.
.B mutter-theme-viewer
allows you to preview any installed Mutter theme.
.PP
When designing a new Metacity theme, you can use
.B metacity-theme-viewer
When designing a new Mutter theme, you can use
.B mutter-theme-viewer
to measure the performance of a window frame option, and to preview
the option.
.SH OPTIONS
@@ -32,12 +32,12 @@ It is case-sensitive.
.I /usr/share/themes
system themes directory
.TP
.I /usr/share/themes/*/metacity-1/metacity-theme-1.xml
.I /usr/share/themes/*/mutter-1/mutter-theme-1.xml
theme specification file
.SH AUTHOR
This manual page was written by Jose M. Moya <josem@die.upm.es>, for
the Debian GNU/Linux system (but may be used by others).
.SH "SEE ALSO"
.\" Always quote multiple words for .SH
.BR metacity (1),
.BR metacity-window-demo (1).
.BR mutter (1),
.BR mutter-window-demo (1).

View File

@@ -3,11 +3,11 @@
.\"
.\" Based on template provided by Tom Christiansen <tchrist@jhereg.perl.com>.
.\"
.TH METACITY-WINDOW-DEMO 1 "1 June 2004"
.TH MUTTER-WINDOW-DEMO 1 "1 June 2004"
.SH NAME
metacity-window-demo \- demo of window features
mutter-window-demo \- demo of window features
.SH SYNOPSIS
.B metacity-window-demo
.B mutter-window-demo
.SH DESCRIPTION
.\" Putting a newline after each sentence can generate better output.
This program demonstrates various kinds of windows that window
@@ -21,5 +21,5 @@ the Debian GNU/Linux system (but may be used by others).
.SH "SEE ALSO"
.\" Always quote multiple words for .SH
.BR x-window-manager (1),
.BR metacity (1),
.BR metacity-theme-viewer (1).
.BR mutter (1),
.BR mutter-theme-viewer (1).

View File

@@ -2,7 +2,7 @@
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH METACITY 1 "11 February 2006"
.TH MUTTER 1 "11 February 2006"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@@ -16,25 +16,25 @@
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
METACITY \- minimal GTK2 Window Manager
MUTTER \- Clutter based compositing GTK2 Window Manager
.SH SYNOPSIS
.B metacity
.B mutter
[\-\-display=\fIDISPLAY\fP] [\-\-replace] [\-\-sm\-client\-id=\fIID\fP] [\-\-sm\-disable] [\-\-sm\-save\-file=\fIFILENAME\fP] [\-\-version] [\-\-help]
.SH DESCRIPTION
This manual page documents briefly
.B metacity\fP.
.B mutter\fP.
.PP
.\" TeX users may be more comfortable with the \fB<whatever>\fP and
.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
.\" respectively.
\fBmetacity\fP is a minimal X window manager aimed at nontechnical users and is designed to integrate well with the GNOME desktop. \fBmetacity\fP lacks some features that may be expected by traditional UNIX or other technical users; these users may want to investigate other available window managers for use with GNOME or standalone.
\fBmutter\fP is a minimal X window manager aimed at nontechnical users and is designed to integrate well with the GNOME desktop. \fBmutter\fP lacks some features that may be expected by traditional UNIX or other technical users; these users may want to investigate other available window managers for use with GNOME or standalone.
.SH OPTIONS
.TP
.B \-\-display=DISPLAY
Connect to X display \fIDISPLAY\fP.
.TP
.B \-\-replace
a window manager which is running is replaced by \fBmetacity\fP. Users are encouraged to change the GNOME window manager by running the new WM with the --replace or -replace option, and subsequently saving the session.
a window manager which is running is replaced by \fBmutter\fP. Users are encouraged to change the GNOME window manager by running the new WM with the --replace or -replace option, and subsequently saving the session.
.TP
.B \-\-sm\-client\-id=ID
Specify a session management \fIID\fP.
@@ -51,10 +51,10 @@ Print the version number.
.B \-?, \-\-help
Show summary of options.
.SH CONFIGURATION
\fBmetacity\fP configuration can be found under \fIPreferences\fP->\fIWindows\fP and \fIPreferences\fP->\fIKeyboard Shortcuts\fP on the menu-panel. Advanced configuration can be achieved directly through gconf editing (gconf-editor or gconftool-2).
\fBmutter\fP configuration can be found under \fIPreferences\fP->\fIWindows\fP and \fIPreferences\fP->\fIKeyboard Shortcuts\fP on the menu-panel. Advanced configuration can be achieved directly through gconf editing (gconf-editor or gconftool-2).
.SH SEE ALSO
.BR metacity-message (1)
.BR mutter-message (1)
.SH AUTHOR
The original manual page was written by Thom May <thom@debian.org>. It was updated by Akira TAGOH <tagoh@debian.org>
for the Debian GNU/Linux system (with permission to use by others), and then updated by Luke Morton and Philip O'Brien
for inclusion in metacity.
for inclusion in mutter.

View File

@@ -1,273 +0,0 @@
<!--
DTD for Metacity themes, as of Metacity 2.4.1
Author: Ross Burton <ross@burtonini.com>
Copyright (C) 2002 Ross Burton
Licensed under the GPL, version 2
-->
<!-- Top-level element -->
<!ELEMENT metacity_theme (info,(window|frame_style_set|frame_style|frame_geometry|constant|draw_ops|menu_icon)+)>
<!-- Theme metadata -->
<!ELEMENT info (name?|author?|copyright?|date?|description?)*>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT copyright (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ENTITY % xyrequired "
x CDATA #REQUIRED
y CDATA #REQUIRED
">
<!ENTITY % xyimplied "
x CDATA #IMPLIED
y CDATA #IMPLIED
">
<!ENTITY % widthheightrequired "
width CDATA #REQUIRED
height CDATA #REQUIRED
">
<!ENTITY % widthheightimplied "
width CDATA #IMPLIED
height CDATA #IMPLIED
">
<!ENTITY % boolean "(true|false)">
<!ENTITY % piece_positions "
(entire_background|titlebar|titlebar_middle|left_titlebar_edge|right_titlebar_edge|top_titlebar_edge|bottom_titlebar_edge|title|left_edge|right_edge|bottom_edge|overlay)
">
<!ENTITY % gtk-state "
state (normal|prelight|active|selected|insensitive) #REQUIRED
">
<!ENTITY % gtk-shadow "
shadow (none|in|out|etched_in|etched_out) #REQUIRED
">
<!-- The actual theme -->
<!ELEMENT window EMPTY>
<!ATTLIST window
type (normal|dialog|modal_dialog|menu|utility|border) #REQUIRED
style_set CDATA #REQUIRED
>
<!ELEMENT frame_style_set (frame+)>
<!ATTLIST frame_style_set
name CDATA #REQUIRED
parent CDATA #IMPLIED
>
<!ELEMENT frame EMPTY>
<!ATTLIST frame
focus (yes|no) #REQUIRED
state (normal|maximized|shaded|maximized_and_shaded) #REQUIRED
resize (both|horizontal|vertical|none) #IMPLIED
style CDATA #REQUIRED
>
<!ELEMENT frame_style (piece|button)*>
<!ATTLIST frame_style
name CDATA #REQUIRED
geometry CDATA #REQUIRED
parent CDATA #IMPLIED
>
<!ELEMENT piece (draw_ops?)>
<!ATTLIST piece
position %piece_positions; #REQUIRED
draw_ops CDATA #IMPLIED
>
<!ELEMENT button (draw_ops?)>
<!ATTLIST button
function (menu|minimize|maximize|close|left_left_background|left_middle_background|left_right_background|right_left_background|right_middle_background|right_right_background) #REQUIRED
state (normal|prelight|pressed) #REQUIRED
draw_ops CDATA #IMPLIED
>
<!ELEMENT frame_geometry (border|(aspect_ratio|distance))+>
<!ATTLIST frame_geometry
name CDATA #REQUIRED
parent CDATA #IMPLIED
title_scale (xx-small|x-small|small|medium|large|x-large|xx-large) #IMPLIED
has_title (true|false) 'true'
rounded_top_left %boolean; #IMPLIED
rounded_top_right %boolean; #IMPLIED
rounded_bottom_left %boolean; #IMPLIED
rounded_bottom_right %boolean; #IMPLIED
>
<!ELEMENT distance EMPTY>
<!ATTLIST distance
name (left_width|right_width|bottom_height|title_vertical_pad|right_titlebar_edge|left_titlebar_edge|button_width|button_height) #REQUIRED
value CDATA #REQUIRED
>
<!ELEMENT border EMPTY>
<!ATTLIST border
name CDATA #REQUIRED
top CDATA #REQUIRED
bottom CDATA #REQUIRED
left CDATA #REQUIRED
right CDATA #REQUIRED
>
<!ELEMENT aspect_ratio EMPTY>
<!ATTLIST aspect_ratio
name CDATA #REQUIRED
value CDATA #REQUIRED
>
<!ELEMENT draw_ops (line|rectangle|arc|tint|gradient|image|gtk_arrow|gtk_box|gtk_vline|icon|title|clip|include|tile)*>
<!-- not sure about this.. maybe it should be removed. see #3478 in theme-parser.c -->
<!ATTLIST draw_ops
name CDATA #IMPLIED
>
<!ELEMENT line EMPTY>
<!ATTLIST line
color CDATA #REQUIRED
x1 CDATA #REQUIRED
y1 CDATA #REQUIRED
x2 CDATA #REQUIRED
y2 CDATA #REQUIRED
width CDATA #IMPLIED
dash_on_length CDATA #IMPLIED
dash_off_length CDATA #IMPLIED
>
<!ELEMENT rectangle EMPTY>
<!ATTLIST rectangle
color CDATA #REQUIRED
%xyrequired;
%widthheightrequired;
filled %boolean; 'false'
>
<!ELEMENT arc EMPTY>
<!ATTLIST arc
color CDATA #REQUIRED
%xyrequired;
%widthheightrequired;
start_angle CDATA #REQUIRED
extent_angle CDATA #REQUIRED
filled %boolean; 'false'
>
<!ELEMENT icon EMPTY>
<!ATTLIST icon
%xyrequired;
width CDATA #REQUIRED
height CDATA #REQUIRED
alpha CDATA #IMPLIED
fill_type (tile|scale) 'scale'
>
<!ELEMENT image EMPTY>
<!ATTLIST image
filename CDATA #REQUIRED
colorize CDATA #IMPLIED
%xyrequired;
%widthheightrequired;
alpha CDATA #IMPLIED
fill_type (tile|scale) 'scale'
>
<!ELEMENT tile EMPTY>
<!ATTLIST tile
name CDATA #REQUIRED
%xyrequired;
%widthheightrequired;
tile_xoffset CDATA #IMPLIED
tile_yoffset CDATA #IMPLIED
tile_width CDATA #REQUIRED
tile_height CDATA #REQUIRED
>
<!ELEMENT clip EMPTY>
<!ATTLIST clip
%xyrequired;
%widthheightrequired;
>
<!ELEMENT title EMPTY>
<!ATTLIST title
color CDATA #REQUIRED
%xyrequired;
>
<!ELEMENT tint EMPTY>
<!ATTLIST tint
color CDATA #REQUIRED
%xyrequired;
%widthheightrequired;
alpha CDATA #REQUIRED
>
<!ELEMENT gtk_box EMPTY>
<!ATTLIST gtk_box
%gtk-state;
%gtk-shadow;
%xyrequired;
%widthheightrequired;
>
<!ELEMENT gtk_arrow EMPTY>
<!ATTLIST gtk_arrow
%gtk-state;
%gtk-shadow;
arrow (up|down|left|right) #REQUIRED
%xyrequired;
%widthheightrequired;
filed CDATA #IMPLIED
>
<!ELEMENT gtk_vline EMPTY>
<!ATTLIST gtk_vline
%gtk-state;
x CDATA #REQUIRED
y1 CDATA #REQUIRED
y2 CDATA #REQUIRED
>
<!ELEMENT gradient (color)+>
<!ATTLIST gradient
type (vertical|horizontal|diagonal) #REQUIRED
%xyrequired;
%widthheightrequired;
alpha CDATA #IMPLIED
>
<!ELEMENT color EMPTY>
<!ATTLIST color
value CDATA #REQUIRED
>
<!ELEMENT include EMPTY>
<!ATTLIST include
name CDATA #REQUIRED
%xyimplied;
%widthheightimplied;
>
<!ELEMENT constant EMPTY>
<!ATTLIST constant
name CDATA #REQUIRED
value CDATA #REQUIRED
>
<!ELEMENT menu_icon (draw_ops?)>
<!ATTLIST menu_icon
function (close|maximize|minimize|unmaximize) #REQUIRED
%gtk-state;
draw_ops CDATA #IMPLIED
>

View File

@@ -1,710 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<Project
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns="http://usefulinc.com/ns/doap#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:admin="http://webns.net/mvcb/">
<name>The Metacity Window Manager</name>
<shortname>Metacity</shortname>
<!-- It's a blog. Metacity has no homepage. -->
<homepage rdf:resource="http://blogs.gnome.org/metacity/" />
<!-- The date when the source control was initialised. -->
<created>2001-05-30</created>
<shortdesc xml:lang="en">
Metacity is a simple compositing window manager that integrates nicely with GNOME 2.
</shortdesc>
<description xml:lang="en">
A window manager for GNOME, with a focus on simplicity and usability
rather than novelties or gimmicks. It uses GTK+ 2 for drawing window frames,
so that it inherits colours, fonts, and so on from the GTK+ theme. Its author
has characterised it as a &quot;boring window manager for the adult in you.
Many window managers are like Marshmallow Froot Loops; Metacity is like Cheerios.&quot;
</description>
<!-- I haven't found anything appropriate; I made this up. -->
<category>window-manager</category>
<wiki rdf:resource="http://live.gnome.org/Metacity" />
<bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=metacity" />
<screenshots rdf:resource="http://commons.wikimedia.org/wiki/Image:Metacity-screenshot.png" />
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/metacity-devel-list" />
<programming-language>C</programming-language>
<license rdf:resource="http://usefulinc.com/doap/licenses/gpl" />
<download-page rdf:resource="http://download.gnome.org/sources/metacity/" />
<repository>
<SVNRepository>
<location rdf:resource="http://svn.gnome.org/svn/metacity" />
<browse rdf:resource="http://svn.gnome.org/viewvc/metacity/" />
</SVNRepository>
</repository>
<author>
<foaf:Person>
<foaf:name>Havoc Pennington</foaf:name>
</foaf:Person>
</author>
<maintainer>
<foaf:Person>
<foaf:name>Elijah Newren</foaf:name>
</foaf:Person>
</maintainer>
<maintainer>
<foaf:Person>
<foaf:name>Thomas Thurman</foaf:name>
<foaf:mbox rdf:resource="mailto:tthurman@gnome.org"/>
</foaf:Person>
</maintainer>
<release><Version>
<name>2.25.1 release</name>
<created>2008-09-01</created>
<branch></branch>
<revision>2.25.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.25/2.25.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.25/2.25.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.25.0 release</name>
<created>2008-08-18</created>
<branch></branch>
<revision>2.25.0</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.25/2.25.0.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.25/2.25.0.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.89 release</name>
<created>2008-08-04</created>
<branch></branch>
<revision>2.23.89</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.89.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.89.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.55 release</name>
<created>2008-07-14</created>
<branch></branch>
<revision>2.23.55</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.55.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.55.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.34 release</name>
<created>2008-06-16</created>
<branch></branch>
<revision>2.23.34</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.34.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.34.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.34 release</name>
<created>2008-06-16</created>
<branch></branch>
<revision>2.23.34</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.34.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.34.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.34 release</name>
<created>2008-06-02</created>
<branch></branch>
<revision>2.23.34</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.34.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.34.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.21 release</name>
<created>2008-05-26</created>
<branch></branch>
<revision>2.23.21</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.21.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.21.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.13 release</name>
<created>2008-04-27</created>
<branch></branch>
<revision>2.23.13</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.13.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.13.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.8 release</name>
<created>2008-04-22</created>
<branch></branch>
<revision>2.23.8</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.8.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.8.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.5 release</name>
<created>2008-04-06</created>
<branch></branch>
<revision>2.23.5</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.5.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.5.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.3 release</name>
<created>2008-03-21</created>
<branch></branch>
<revision>2.23.3</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.3.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.3.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.2 release</name>
<created>2008-03-07</created>
<branch></branch>
<revision>2.23.2</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.2.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.2.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.1 release</name>
<created>2008-03-06</created>
<branch></branch>
<revision>2.23.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.23.0 release</name>
<created>2008-02-26</created>
<branch></branch>
<revision>2.23.0</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.0.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.23/2.23.0.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.21.13 release</name>
<created>2008-02-11</created>
<branch></branch>
<revision>2.21.13</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.13.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.13.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.21.8 release</name>
<created>2008-02-03</created>
<branch></branch>
<revision>2.21.8</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.8.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.8.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.21.5 release</name>
<created>2007-12-19</created>
<branch></branch>
<revision>2.21.5</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.5.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.5.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.21.3 release</name>
<created>2007-12-14</created>
<branch></branch>
<revision>2.21.3</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.3.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.3.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.21.2 release</name>
<created>2007-11-17</created>
<branch></branch>
<revision>2.21.2</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.2.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.2.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.21.1 release</name>
<created>2007-11-11</created>
<branch></branch>
<revision>2.21.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.21/2.21.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.20.0 release</name>
<created>2007-09-15</created>
<branch></branch>
<revision>2.20.0</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.20/2.20.0.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.20/2.20.0.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.19.55 release</name>
<created>2007-08-07</created>
<branch></branch>
<revision>2.19.55</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.55.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.55.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.19.34 release</name>
<created>2007-07-22</created>
<branch></branch>
<revision>2.19.34</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.34.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.34.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.19.21 release</name>
<created>2007-06-18</created>
<branch></branch>
<revision>2.19.21</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.21.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.21.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.19.13 release</name>
<created>2007-06-10</created>
<branch></branch>
<revision>2.19.13</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.13.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.13.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.19.8 release</name>
<created>2007-06-04</created>
<branch></branch>
<revision>2.19.8</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.8.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.8.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.19.5 release</name>
<created>2007-04-23</created>
<branch></branch>
<revision>2.19.5</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.5.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.5.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.19.3 release</name>
<created>2007-04-16</created>
<branch></branch>
<revision>2.19.3</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.3.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.3.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.19.2 release</name>
<created>2007-04-09</created>
<branch></branch>
<revision>2.19.2</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.2.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.2.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.19.1 release</name>
<created>2007-04-04</created>
<branch></branch>
<revision>2.19.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.19/2.19.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.17.3 release</name>
<created>2006-12-10</created>
<branch></branch>
<revision>2.17.3</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.17/2.17.3.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.17/2.17.3.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.17.2 release</name>
<created>2006-11-06</created>
<branch></branch>
<revision>2.17.2</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.17/2.17.2.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.17/2.17.2.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.17.1 release</name>
<created>2006-10-16</created>
<branch></branch>
<revision>2.17.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.17/2.17.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.17/2.17.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.17.0 release</name>
<created>2006-10-07</created>
<branch></branch>
<revision>2.17.0</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.17/2.17.0.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.17/2.17.0.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.16.2 release</name>
<created>2006-09-18</created>
<branch></branch>
<revision>2.16.2</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.16/2.16.2.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.16/2.16.2.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.16.1 release</name>
<created>2006-09-11</created>
<branch></branch>
<revision>2.16.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.16/2.16.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.16/2.16.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.16.0 release</name>
<created>2006-09-04</created>
<branch></branch>
<revision>2.16.0</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.16/2.16.0.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.16/2.16.0.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.15.34 release</name>
<created>2006-08-21</created>
<branch></branch>
<revision>2.15.34</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.34.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.34.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.15.21 release</name>
<created>2006-08-07</created>
<branch></branch>
<revision>2.15.21</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.21.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.21.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.15.13 release</name>
<created>2006-07-24</created>
<branch></branch>
<revision>2.15.13</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.13.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.13.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.15.8 release</name>
<created>2006-07-10</created>
<branch></branch>
<revision>2.15.8</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.8.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.8.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.15.5 release</name>
<created>2006-06-12</created>
<branch></branch>
<revision>2.15.5</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.5.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.5.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.15.3 release</name>
<created>2006-05-15</created>
<branch></branch>
<revision>2.15.3</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.3.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.3.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.15.2 release</name>
<created>2006-04-25</created>
<branch></branch>
<revision>2.15.2</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.2.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.2.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.15.1 release</name>
<created>2006-04-25</created>
<branch></branch>
<revision>2.15.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.15.0 release</name>
<created>2006-04-24</created>
<branch></branch>
<revision>2.15.0</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.0.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.15/2.15.0.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.89 release</name>
<created>2006-02-13</created>
<branch></branch>
<revision>2.13.89</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.89.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.89.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.55 release</name>
<created>2006-01-30</created>
<branch></branch>
<revision>2.13.55</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.55.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.55.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.34 release</name>
<created>2006-01-20</created>
<branch></branch>
<revision>2.13.34</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.34.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.34.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.21 release</name>
<created>2006-01-16</created>
<branch></branch>
<revision>2.13.21</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.21.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.21.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.13 release</name>
<created>2006-01-10</created>
<branch></branch>
<revision>2.13.13</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.13.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.13.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.8 release</name>
<created>2006-01-02</created>
<branch></branch>
<revision>2.13.8</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.8.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.8.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.5 release</name>
<created>2005-12-12</created>
<branch></branch>
<revision>2.13.5</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.5.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.5.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.3 release</name>
<created>2005-11-22</created>
<branch></branch>
<revision>2.13.3</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.3.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.3.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.2 release</name>
<created>2005-11-19</created>
<branch></branch>
<revision>2.13.2</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.2.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.2.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.1 release</name>
<created>2005-11-14</created>
<branch></branch>
<revision>2.13.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.13.0 release</name>
<created>2005-10-24</created>
<branch></branch>
<revision>2.13.0</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.0.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.13/2.13.0.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.12.1 release</name>
<created>2005-10-03</created>
<branch></branch>
<revision>2.12.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.12/2.12.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.12/2.12.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.12.0 release</name>
<created>2005-09-05</created>
<branch></branch>
<revision>2.12.0</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.12/2.12.0.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.12/2.12.0.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.11.3 release</name>
<created>2005-08-22</created>
<branch></branch>
<revision>2.11.3</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.11/2.11.3.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.11/2.11.3.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.11.2 release</name>
<created>2005-08-08</created>
<branch></branch>
<revision>2.11.2</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.11/2.11.2.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.11/2.11.2.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.11.1 release</name>
<created>2005-07-24</created>
<branch></branch>
<revision>2.11.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.11/2.11.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.11/2.11.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.11.0 release</name>
<created>2005-07-12</created>
<branch></branch>
<revision>2.11.0</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.11/2.11.0.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.11/2.11.0.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.10.2 release</name>
<created>2005-06-27</created>
<branch></branch>
<revision>2.10.2</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.10/2.10.2.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.10/2.10.2.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.10.1 release</name>
<created>2005-04-11</created>
<branch></branch>
<revision>2.10.1</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.10/2.10.1.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.10/2.10.1.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.10.0 release</name>
<created>2005-03-07</created>
<branch></branch>
<revision>2.10.0</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.10/2.10.0.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.10/2.10.0.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.8.5 release</name>
<created>2004-09-13</created>
<branch></branch>
<revision>2.8.5</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.8/2.8.5.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.8/2.8.5.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.8.5 release</name>
<created>2004-09-13</created>
<branch></branch>
<revision>2.8.5</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.8/2.8.5.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.8/2.8.5.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.8.4 release</name>
<created>2004-08-29</created>
<branch></branch>
<revision>2.8.4</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.8/2.8.4.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.8/2.8.4.tar.bz2"/>
</Version></release>
<release><Version>
<name>2.8.3 release</name>
<created>2004-08-15</created>
<branch></branch>
<revision>2.8.3</revision>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.8/2.8.3.tar.gz"/>
<file-release rdf:resource="http://download.gnome.org/sources/metacity/2.8/2.8.3.tar.bz2"/>
</Version></release>
<!-- earlier ones not yet documented, and will have to be added by hand -->
</Project>

32
mutter.doap Normal file
View File

@@ -0,0 +1,32 @@
<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:gnome="http://api.gnome.org/doap-extensions#"
xmlns="http://usefulinc.com/ns/doap#">
<name xml:lang="en">mutter</name>
<shortdesc xml:lang="en">Window and compositing manager based on Clutter</shortdesc>
<!--
<homepage rdf:resource="http://www.gnome.org/" />
-->
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gnome-shell-list" />
<download-page rdf:resource="http://download.gnome.org/sources/mutter/" />
<bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=mutter" />
<category rdf:resource="http://api.gnome.org/doap-extensions#desktop" />
<maintainer>
<foaf:Person>
<foaf:name>Tomas Frydrych</foaf:name>
<foaf:mbox rdf:resource="mailto:tf@linux.intel.com" />
<gnome:userid>tomasf</gnome:userid>
</foaf:Person>
</maintainer>
<maintainer>
<foaf:Person>
<foaf:name>Owen Taylor</foaf:name>
<foaf:mbox rdf:resource="mailto:otaylor@redhat.com" />
<gnome:userid>otaylor</gnome:userid>
</foaf:Person>
</maintainer>
</Project>

View File

@@ -1,3 +1,265 @@
2009-04-05 Kjartan Maraas <kmaraas@gnome.org>
* nb.po: Updated Norwegian bokmål translation.
2009-03-30 Baris Cicek <baris@teamforce.name.tr>
* tr.po: Updated Turkish translation.
2009-03-28 Simos Xenitellis <simos@gnome.org>
* el.po: Updated Greek translation.
2009-03-27 Simos Xenitellis <simos@gnome.org>
* el.po: Updated Greek translation.
2009-03-21 Goran Rakic <grakic@devbase.net>
* sr.po, sr@latin.po: Updated Serbian translation by Miloš Popović.
2009-03-19 Tomasz Dominikowski <tdominikowski@aviary.pl>
* pl.po: Updated Polish translation
2009-03-19 Kjartan Maraas <kmaraas@gnome.org>
* nb.po: Updated Norwegian bokmål translation.
2009-03-18 Ignacio Casal Quinteiro <icq@gnome.org>
* gl.po: Updated Galician translation by Suso Baleato.
2009-03-18 Kostas Papadimas <pkst@gnome.org>
* el.po: Updated Greek Translation by Fotis Tsamis.
2009-03-18 Djihed Afifi <djihed@gmail.com>
* ar.po: Updated Arabic translation.
2009-03-17 Alexander Shopov <ash@contact.bg>
* bg.po: Updated Bulgarian translation by
Alexander Shopov <ash@contact.bg>
2009-03-16 Amitakhya Phukan <amitakhya@svn.gnome.org>
* as.po: Updated Assamese translations.
2009-03-15 Rajesh Ranjan <rajeshkajha@yahoo.com>
* mai.po: added Maithili translation.
* LINGUAS: Added Maithili (mai) to the list of Languages.
2009-03-15 Ankitkumar Patel <ankit@redhat.com>
* gu.po: Updated Gujarati Translations.
2009-03-14 Gintautas Miliauskas <gintautas@miliauskas.lt>
* lt.po: Updated Lithuanian translation.
2009-03-14 Nickolay V. Shmyrev <nshmyrev@yandex.ru>
* ru.po: Updated Russian translation by Yuriy Penkin.
2009-03-14 Sandeep Shedmake <sshedmak@redhat.com>
* mr.po: Updated Marathi Translations.
2009-03-14 Rajesh Ranjan <rranjan@redhat.com>
* hi.po: Updated Hindi Translation.
2009-03-13 Kostas Papadimas <pkst@gnome.org>
* el.po: Updated Greek Translation by Jennie Petoumenou.
2009-03-13 Priit Laes <plaes at svn dot gnome dot org>
* et.po: Translation updated by Mattias Põldaru
2009-03-12 Manoj Kumar Giri <mgiri@redhat.com>
* or.po: Updated Oriya Translation.
2009-03-11 Krishnababu K <kkrothap@redhat.com>
* te.po: Updated Telugu Translation.
* LINGUAS: Added Telugu [te] language.
2009-03-10 Runa Bhattacharjee <runab@redhat.com>
* bn_IN.po: Updated partial Bengali India Translation
2009-03-08 Petr Kovar <pknbe@volny.cz>
* cs.po: Updated Czech translation.
2009-03-07 Mark Krapivner <mark125@gmail.com>
* he.po: Updated Hebrew translation.
2009-03-06 Milo Casagrande <milo@ubuntu.com>
* it.po: Updated Italian translation by Luca Ferretti.
2009-03-04 Luca Ferretti <elle.uca@libero.it>
* it.po: Updated Italian translation
2009-03-02 Claude Paroz <claude@2xlibre.net>
* fr.po: Updated French translation by Frédéric Peters and Claude Paroz.
2009-03-02 I. Felix <ifelix@redhat.com>
* ta.po: Tamil Translation updated by Tirumurthi Vasudevan
2009-02-28 Duarte Loreto <happyguy_pt@hotmail.com>
* pt.po: Updated Portuguese translation.
2009-02-23 Philip Withnall <philip@tecnocode.co.uk>
* en_GB.po: Updated British English translation.
2009-02-23 Gil Forcada <gforcada@gnome.org>
* ca.po: Updated Catalan translation by David Planella.
2009-02-23 Ilkka Tuohela <hile@iki.fi>
* fi.po: Updated Finnish translation.
2009-02-21 Christian Kirbach <Christian.Kirbach@googlemail.com>
* de.po: Updated German translation.
2009-02-20 Og Maciel <ogmaciel@gnome.org>
* pt_BR.po: Updated Brazilian Portuguese translation by
Vladimir Melo.
2009-02-19 Jani Monoses <jani@ubuntu.com>
* ro.po: Updated Romanian translation
by Adi Roiban <adi@roiban.ro>
2009-02-19 Ilkka Tuohela <hile@iki.fi>
* fi.po: Updated Finnish translation.
2009-02-18 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
* zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
* zh_TW.po: Updated Traditional Chinese translation(Taiwan).
2009-02-18 Changwoo Ryu <cwryu@debian.org>
* ko.po: Updated Korean translation.
2009-02-17 Gabor Kelemen <kelemeng@gnome.hu>
* hu.po: Translation updated.
2009-02-16 Wouter Bolsterlee <wbolster@svn.gnome.org>
* nl.po: Updated Dutch translation by Wouter Bolsterlee.
2009-02-15 Kenneth Nielsen <k.nielsen81@gmail.com>
* da.po: Updated Danish translation by Ask H. Larsen
2009-02-15 Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>
* zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
* zh_TW.po: Updated Traditional Chinese translation(Taiwan).
2009-02-14 Ihar Hrachyshka <booxter@lacinka.org>
* be@latin.po: Updated Belarusian Latin translation by Ihar Hrachyshka.
2009-02-13 Theppitak Karoonboonyanan <thep@linux.thai.net>
* th.po: Updated Thai translation.
2009-02-12 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
* eu.po: Updated Basque translation.
2009-02-11 Daniel Nylander <po@danielnylander.se>
* sv.po: Updated Swedish translation.
2009-02-11 Takeshi AIHANA <takeshi.aihana@gmail.com>
* ja.po: Updated Japanese translation.
2009-02-10 Gil Forcada <gforcada@gnome.org>
* ast.po: Updated Asturian translation on behalf of Mikel González.
2009-02-07 Clytie Siddall <clytie@riverland.net.au>
* vi.po: Updated Vietnamese translation.
2009-02-03 Jorge Gonzalez <jorgegonz@svn.gnome.org>
* es.po: Updated Spanish translation.
2009-02-01 Gil Forcada <gforcada@gnome.org>
* ca.po: Updated Catalan translation by David Planella.
2009-01-31 Jorge Gonzalez <jorgegonz@svn.gnome.org>
* es.po: Updated Spanish translation
2009-01-31 Daniel Nylander <po@danielnylander.se>
* sv.po: Updated Swedish translation.
2009-01-29 Kjartan Maraas <kmaraas@gnome.org>
* nb.po: Updated Norwegian bokmål translation.
2009-01-29 Changwoo Ryu <cwryu@debian.org>
* ko.po: Updated Korean translation.
2009-01-24 Raivis DEjus <orvils@gmail.com>
* lv.po: Updated Latvian translation.
2009-01-22 Yair Hershkovitz <yairhr@gmail.com>
* he.po: Updated Hebrew translation.
2009-01-17 Thomas Thurman <tthurman@gnome.org>
* ig.po: Added Igbo translation by Sylvester Onye.
* yo.po Added Yoruba translation by Sunday Ayo Fajuyitan.
* ha.po: Added Hausa translation by Saudat Mohammed.
* LINGUAS: added Igbo, Yoruba and Hausa.
2009-01-17 Gabor Kelemen <kelemeng@gnome.hu>
* hu.po: Translation updated.
2009-01-09 Daniel Nylander <po@danielnylander.se>
* sv.po: Updated Swedish translation.
2009-01-03 甘露(Gan Lu) <rhythm.gan@gmail.com>
* zh_CN.po: Updated Chinese Simplified translation
2009-01-03 Priit Laes <plaes at svn dot gnome dot org>
* et.po: Translation updated by Mattias Põldaru
2008-12-26 Jorge Gonzalez <jorgegonz@svn.gnome.org>
* es.po: Updated Spanish translation.
@@ -148,7 +410,7 @@
2008-09-12 Goran Rakić <grakic@devbase.net>
* sr.po, sr@latin.po: Updated Serbian translation (by Miloš Popović).
* sr.po, sr@latin.po: Updated Serbian translation (by Miloš Popović).
2008-09-09 Robert Sedak <robert.sedak@sk.t-com.hr>
@@ -284,7 +546,7 @@
* nb.po: Updated Norwegian bokmål translation.
2008-06-01 Clytie Siddall <clytie@riverland.net.au>
2008-06-01 Clytie Siddall <clytie@riverland.net.au>
* vi.po: Updated Vietnamese translation.
@@ -370,7 +632,7 @@
2008-03-07 Maxim Dziumanenko <dziumanenko@gmail.com>
* uk.po: Updated Ukrainian translation.
* uk.po: Updated Ukrainian translation.
2008-03-03 Jorge Gonzalez <jorgegonz@svn.gnome.org>

View File

@@ -10,6 +10,7 @@ be@latin
bg
bn
bn_IN
br
bs
ca
ca@valencia
@@ -30,12 +31,14 @@ fr
ga
gl
gu
ha
he
hi
hr
hu
hy
id
ig
is
it
ja
@@ -46,6 +49,7 @@ ku
la
lt
lv
mai
mg
mk
ml
@@ -53,6 +57,7 @@ mn
mr
ms
nb
nds
ne
nl
nn
@@ -73,6 +78,7 @@ sr
sr@latin
sv
ta
te
th
tk
tr
@@ -80,6 +86,7 @@ uk
vi
wa
xh
yo
zh_CN
zh_HK
zh_TW

View File

@@ -1,7 +1,6 @@
# List of source files containing translatable strings.
# Please keep this file sorted alphabetically.
src/50-metacity-desktop-key.xml.in
src/50-metacity-key.xml.in
src/core/bell.c
src/core/core.c
src/core/delete.c
src/core/display.c
@@ -10,21 +9,19 @@ src/core/keybindings.c
src/core/main.c
src/core/prefs.c
src/core/screen.c
src/core/schema-bindings.c
src/core/session.c
src/core/util.c
src/core/window.c
src/core/window-props.c
src/core/xprops.c
src/include/all-keybindings.h
src/metacity.desktop.in
src/metacity.schemas.in.in
src/metacity-wm.desktop.in
src/tools/metacity-message.c
src/mutter.desktop.in
src/mutter-wm.desktop.in
src/mutter.schemas.in
src/tools/mutter-message.c
src/ui/frames.c
src/ui/menu.c
src/ui/metaaccellabel.c
src/ui/metacity-dialog.c
src/ui/resizepopup.c
src/ui/theme.c
src/ui/theme-parser.c

5036
po/ar.po

File diff suppressed because it is too large Load Diff

4929
po/as.po

File diff suppressed because it is too large Load Diff

1186
po/ast.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3278
po/bg.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1835
po/br.po Normal file

File diff suppressed because it is too large Load Diff

4188
po/ca.po

File diff suppressed because it is too large Load Diff

3879
po/cs.po

File diff suppressed because it is too large Load Diff

4198
po/da.po

File diff suppressed because it is too large Load Diff

5631
po/de.po

File diff suppressed because it is too large Load Diff

4229
po/el.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1739
po/es.po

File diff suppressed because it is too large Load Diff

510
po/et.po

File diff suppressed because it is too large Load Diff

3505
po/eu.po

File diff suppressed because it is too large Load Diff

3268
po/fi.po

File diff suppressed because it is too large Load Diff

3396
po/fr.po

File diff suppressed because it is too large Load Diff

5698
po/gl.po

File diff suppressed because it is too large Load Diff

4096
po/gu.po

File diff suppressed because it is too large Load Diff

3599
po/ha.po Normal file

File diff suppressed because it is too large Load Diff

5363
po/he.po

File diff suppressed because it is too large Load Diff

5250
po/hi.po

File diff suppressed because it is too large Load Diff

3591
po/hu.po

File diff suppressed because it is too large Load Diff

3513
po/ig.po Normal file

File diff suppressed because it is too large Load Diff

2366
po/it.po

File diff suppressed because it is too large Load Diff

3245
po/ja.po

File diff suppressed because it is too large Load Diff

4394
po/ko.po

File diff suppressed because it is too large Load Diff

4385
po/lt.po

File diff suppressed because it is too large Load Diff

4125
po/lv.po

File diff suppressed because it is too large Load Diff

2272
po/mai.po Normal file

File diff suppressed because it is too large Load Diff

3649
po/mr.po

File diff suppressed because it is too large Load Diff

3037
po/nb.po

File diff suppressed because it is too large Load Diff

1814
po/nds.po Normal file

File diff suppressed because it is too large Load Diff

3244
po/nl.po

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: nn\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-04-04 13:50+0200\n"
"PO-Revision-Date: 2008-04-04 13:59+0200\n"
"PO-Revision-Date: 2009-06-16 09:54-0400\n"
"Last-Translator: Eskild Hustvedt <eskildh@gnome.org>\n"
"Language-Team: Norwegian Nynorsk <i18n-no@lister.ping.uio.no>\n"
"MIME-Version: 1.0\n"
@@ -2300,7 +2300,7 @@ msgstr "_Lukk"
#: ../src/ui/menu.c:203
#, c-format
msgid "Workspace %d%n"
msgstr "Arbeidsflate %d"
msgstr "Arbeidsflate %d%n"
#: ../src/ui/menu.c:213
#, c-format

5091
po/or.po

File diff suppressed because it is too large Load Diff

5250
po/pa.po

File diff suppressed because it is too large Load Diff

4017
po/pl.po

File diff suppressed because it is too large Load Diff

4427
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

5065
po/ro.po

File diff suppressed because it is too large Load Diff

4728
po/ru.po

File diff suppressed because it is too large Load Diff

2670
po/sl.po

File diff suppressed because it is too large Load Diff

4292
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1014
po/sv.po

File diff suppressed because it is too large Load Diff

4153
po/ta.po

File diff suppressed because it is too large Load Diff

2172
po/te.po Normal file

File diff suppressed because it is too large Load Diff

3792
po/th.po

File diff suppressed because it is too large Load Diff

3288
po/tr.po

File diff suppressed because it is too large Load Diff

3936
po/vi.po

File diff suppressed because it is too large Load Diff

3493
po/yo.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<KeyListEntries _name="Desktop" wm_name="Metacity" package="metacity">
<KeyListEntry
name="/apps/metacity/global_keybindings/panel_run_dialog" />
<KeyListEntry
name="/apps/metacity/global_keybindings/panel_main_menu" />
<KeyListEntry
name="/apps/metacity/global_keybindings/run_command_screenshot" />
<KeyListEntry
name="/apps/metacity/global_keybindings/run_command_window_screenshot" />
<KeyListEntry
name="/apps/metacity/global_keybindings/run_command_terminal" />
</KeyListEntries>

View File

@@ -1,269 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<KeyListEntries _name="Window Management" wm_name="Metacity" package="metacity">
<KeyListEntry
name="/apps/metacity/window_keybindings/activate_window_menu" />
<KeyListEntry
name="/apps/metacity/window_keybindings/toggle_fullscreen" />
<KeyListEntry
name="/apps/metacity/window_keybindings/toggle_maximized" />
<KeyListEntry
name="/apps/metacity/window_keybindings/maximize" />
<KeyListEntry
name="/apps/metacity/window_keybindings/unmaximize" />
<KeyListEntry
name="/apps/metacity/window_keybindings/toggle_shaded" />
<KeyListEntry
name="/apps/metacity/window_keybindings/close" />
<KeyListEntry
name="/apps/metacity/window_keybindings/minimize" />
<KeyListEntry
name="/apps/metacity/window_keybindings/begin_move" />
<KeyListEntry
name="/apps/metacity/window_keybindings/begin_resize" />
<KeyListEntry
name="/apps/metacity/window_keybindings/toggle_on_all_workspaces"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/raise_or_lower" />
<KeyListEntry
name="/apps/metacity/window_keybindings/raise" />
<KeyListEntry
name="/apps/metacity/window_keybindings/lower" />
<KeyListEntry
name="/apps/metacity/window_keybindings/maximize_vertically" />
<KeyListEntry
name="/apps/metacity/window_keybindings/maximize_horizontally" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_1"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_2"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_3"
value="2"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_4"
value="3"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_5"
value="4"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_6"
value="5"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_7"
value="6"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_8"
value="7"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_9"
value="8"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_10"
value="9"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_11"
value="10"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_12"
value="11"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_left"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_right"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_up"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/window_keybindings/move_to_workspace_down"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_windows" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_group" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_panels" />
<KeyListEntry
name="/apps/metacity/global_keybindings/cycle_windows" />
<KeyListEntry
name="/apps/metacity/global_keybindings/cycle_group" />
<KeyListEntry
name="/apps/metacity/global_keybindings/cycle_panels" />
<KeyListEntry
name="/apps/metacity/global_keybindings/show_desktop" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_1"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_2"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_3"
value="2"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_4"
value="3"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_5"
value="4"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_6"
value="5"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_7"
value="6"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_8"
value="7"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_9"
value="8"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_10"
value="9"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_11"
value="10"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_12"
value="11"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_left"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_right"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_up"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
<KeyListEntry
name="/apps/metacity/global_keybindings/switch_to_workspace_down"
value="1"
key="/apps/metacity/general/num_workspaces"
comparison="gt" />
</KeyListEntries>

View File

@@ -1,22 +1,48 @@
lib_LTLIBRARIES = libmetacity-private.la
# Flag build for parallelism; see https://savannah.gnu.org/patch/?6905
.AUTOPARALLEL:
SUBDIRS=wm-tester tools themes
lib_LTLIBRARIES = libmutter-private.la
INCLUDES=-I$(srcdir)/include -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 @METACITY_CFLAGS@
SUBDIRS=wm-tester tools compositor/plugins
metacity_SOURCES= \
INCLUDES=@MUTTER_CFLAGS@ -I $(srcdir)/include -I$(srcdir)/compositor -DMUTTER_LIBEXECDIR=\"$(libexecdir)\" -DHOST_ALIAS=\"@HOST_ALIAS@\" -DMUTTER_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" -DMUTTER_PKGDATADIR=\"$(pkgdatadir)\" -DMUTTER_DATADIR=\"$(datadir)\" -DG_LOG_DOMAIN=\"mutter\" -DSN_API_NOT_YET_FROZEN=1 -DMUTTER_MAJOR_VERSION=$(MUTTER_MAJOR_VERSION) -DMUTTER_MINOR_VERSION=$(MUTTER_MINOR_VERSION) -DMUTTER_MICRO_VERSION=$(MUTTER_MICRO_VERSION) -DMUTTER_PLUGIN_API_VERSION=$(MUTTER_PLUGIN_API_VERSION) -DMUTTER_PKGLIBDIR=\"$(pkglibdir)\" -DMUTTER_PLUGIN_DIR=\"@MUTTER_PLUGIN_DIR@\"
mutter_built_sources = \
mutter-marshal.h \
mutter-marshal.c \
mutter-enum-types.h \
mutter-enum-types.c
mutter_SOURCES= \
core/async-getprop.c \
core/async-getprop.h \
core/atomnames.h \
core/bell.c \
core/bell.h \
core/boxes.c \
include/boxes.h \
compositor/compositor.c \
compositor/compositor-private.h \
compositor/compositor-xrender.c \
compositor/compositor-xrender.h \
compositor/mutter-module.c \
compositor/mutter-module.h \
compositor/mutter-plugin.c \
compositor/mutter-plugin-manager.c \
compositor/mutter-plugin-manager.h \
compositor/mutter-shaped-texture.c \
compositor/mutter-texture-tower.c \
compositor/mutter-texture-tower.h \
compositor/mutter-window.c \
compositor/mutter-window-private.h \
compositor/mutter-window-group.c \
compositor/mutter-window-group.h \
compositor/shadow.c \
compositor/shadow.h \
compositor/mutter-shaped-texture.h \
compositor/tidy/tidy-texture-frame.c \
compositor/tidy/tidy-texture-frame.h \
include/compositor.h \
include/mutter-plugin.h \
include/mutter-window.h \
include/compositor-mutter.h \
core/constraints.c \
core/constraints.h \
core/core.c \
@@ -28,8 +54,6 @@ metacity_SOURCES= \
ui/draw-workspace.h \
core/edge-resistance.c \
core/edge-resistance.h \
core/effects.c \
core/effects.h \
core/errors.c \
include/errors.h \
core/eventqueue.c \
@@ -43,14 +67,13 @@ metacity_SOURCES= \
core/group-props.c \
core/group-props.h \
core/group.c \
core/group.h \
include/group.h \
core/iconcache.c \
core/iconcache.h \
core/keybindings.c \
core/keybindings.h \
core/keybindings-private.h \
core/main.c \
include/main.h \
core/metacity-Xatomtype.h \
core/mutter-Xatomtype.h \
core/place.c \
core/place.h \
core/prefs.c \
@@ -63,6 +86,8 @@ metacity_SOURCES= \
core/session.h \
core/stack.c \
core/stack.h \
core/stack-tracker.c \
core/stack-tracker.h \
core/util.c \
include/util.h \
core/window-props.c \
@@ -71,7 +96,7 @@ metacity_SOURCES= \
core/window-private.h \
include/window.h \
core/workspace.c \
core/workspace.h \
core/workspace-private.h \
core/xprops.c \
include/xprops.h \
include/common.h \
@@ -97,12 +122,13 @@ metacity_SOURCES= \
ui/themewidget.c \
ui/themewidget.h \
ui/ui.c \
include/all-keybindings.h
include/all-keybindings.h \
$(mutter_built_sources)
# by setting libmetacity_private_la_CFLAGS, the files shared with
# metacity proper will be compiled with different names.
libmetacity_private_la_CFLAGS =
libmetacity_private_la_SOURCES= \
# by setting libmutter_private_la_CFLAGS, the files shared with
# mutter proper will be compiled with different names.
libmutter_private_la_CFLAGS =
libmutter_private_la_SOURCES= \
core/boxes.c \
include/boxes.h \
ui/gradient.c \
@@ -117,75 +143,123 @@ libmetacity_private_la_SOURCES= \
ui/theme.c \
ui/theme.h
libmetacity_private_la_LDFLAGS = -no-undefined
libmetacity_private_la_LIBADD = @METACITY_LIBS@
libmutter_private_la_LDFLAGS = -no-undefined
libmutter_private_la_LIBADD = @MUTTER_LIBS@
libmetacityincludedir = $(includedir)/metacity-1/metacity-private
libmutterincludedir = $(includedir)/mutter/mutter-private
libmetacityinclude_HEADERS = \
# Headers installed for plugins; introspected information will
# be extracted into Mutter-<version>.gir
libmutterinclude_base_headers = \
include/boxes.h \
ui/gradient.h \
include/main.h \
include/util.h \
include/common.h \
ui/preview-widget.h \
ui/theme-parser.h \
ui/theme.h
ui/theme.h \
include/prefs.h \
include/window.h \
include/workspace.h \
include/compositor.h \
include/compositor-mutter.h \
include/types.h \
include/errors.h \
include/screen.h \
include/display.h \
include/group.h \
include/keybindings.h \
include/mutter-plugin.h \
include/mutter-window.h
metacity_theme_viewer_SOURCES= \
# Excluded from scanning for introspection but installed
# preview-widget.h: only part of libmutter-private
# atomnames.h: macros cause problems for scanning process
libmutterinclude_extra_headers = \
ui/preview-widget.h \
include/atomnames.h
libmutterinclude_HEADERS = \
$(libmutterinclude_base_headers) \
$(libmutterinclude_extra_headers)
mutter_theme_viewer_SOURCES= \
ui/theme-viewer.c
metacity_dialog_SOURCES= \
ui/metacity-dialog.c
bin_PROGRAMS=mutter mutter-theme-viewer
schema_bindings_SOURCES = \
core/schema-bindings.c \
metacity.schemas.in.in
api_version = $(MUTTER_MAJOR_VERSION).$(MUTTER_MINOR_VERSION)
schema_bindings_LDADD = @METACITY_LIBS@
metacity.schemas.in: schema_bindings ${srcdir}/metacity.schemas.in.in
@echo Generating keybinding schemas... ${srcdir}/metacity.schemas.in.in
${builddir}/schema_bindings ${srcdir}/metacity.schemas.in.in ${builddir}/metacity.schemas.in
if WITH_INTROSPECTION
# These files are in package-private directories, even though they may be used
# by plugins. If you're writing a plugin, use g-ir-compiler --add-include-path
# and g-ir-compiler --includedir.
girdir = $(pkglibdir)
gir_DATA = Meta-$(api_version).gir
bin_PROGRAMS=metacity metacity-theme-viewer
libexec_PROGRAMS=metacity-dialog
typelibdir = $(pkglibdir)
typelib_DATA = Meta-$(api_version).typelib
# We need to strip out the attribute that would point back to libmutter-introspect
# so that libgirepository looks for symbols in the executable instead
Meta-$(api_version).gir: $(G_IR_SCANNER) mutter $(libmutterinclude_HEADERS) $(mutter_SOURCES)
$(AM_V_GEN) pwd=`pwd` ; \
cd $(srcdir) && \
$(G_IR_SCANNER) \
--namespace=Meta \
--nsversion=$(api_version) \
--include=GObject-2.0 \
--include=Gdk-2.0 \
--include=Gtk-2.0 \
--include=Clutter-1.0 \
--pkg=clutter-1.0 \
--pkg=gtk+-2.0 \
--include=xlib-2.0 \
--include=xfixes-4.0 \
--program=$$pwd/mutter \
$(filter %.c,$(mutter_SOURCES)) \
$(libmutterinclude_base_headers) \
$(INCLUDES) \
-o $$pwd/$@
Meta-$(api_version).typelib: $(G_IR_COMPILER) Meta-$(api_version).gir
$(AM_V_GEN) LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(G_IR_COMPILER) Meta-$(api_version).gir -o $@
endif
EFENCE=
metacity_LDADD=@METACITY_LIBS@ $(EFENCE)
metacity_theme_viewer_LDADD= @METACITY_LIBS@ libmetacity-private.la
metacity_dialog_LDADD=@METACITY_LIBS@
mutter_LDADD=@MUTTER_LIBS@ $(EFENCE)
mutter_LDFLAGS=-export-dynamic
mutter_theme_viewer_LDADD= @MUTTER_LIBS@ libmutter-private.la
testboxes_SOURCES=include/util.h core/util.c include/boxes.h core/boxes.c core/testboxes.c
testgradient_SOURCES=ui/gradient.h ui/gradient.c ui/testgradient.c
testasyncgetprop_SOURCES=core/async-getprop.h core/async-getprop.c core/testasyncgetprop.c
noinst_PROGRAMS=testboxes testgradient testasyncgetprop schema_bindings
noinst_PROGRAMS=testboxes testgradient testasyncgetprop
testboxes_LDADD= @METACITY_LIBS@
testgradient_LDADD= @METACITY_LIBS@
testasyncgetprop_LDADD= @METACITY_LIBS@
testboxes_LDADD= @MUTTER_LIBS@
testgradient_LDADD= @MUTTER_LIBS@
testasyncgetprop_LDADD= @MUTTER_LIBS@
@INTLTOOL_DESKTOP_RULE@
desktopfilesdir=$(datadir)/applications
desktopfiles_in_files=metacity.desktop.in
desktopfiles_in_files=mutter.desktop.in
desktopfiles_files=$(desktopfiles_in_files:.desktop.in=.desktop)
desktopfiles_DATA = $(desktopfiles_files)
wmpropertiesdir=$(datadir)/gnome/wm-properties
wmproperties_in_files=metacity-wm.desktop.in
wmproperties_in_files=mutter-wm.desktop.in
wmproperties_files=$(wmproperties_in_files:.desktop.in=.desktop)
wmproperties_DATA = $(wmproperties_files)
schemadir = @GCONF_SCHEMA_FILE_DIR@
schema_in_files = metacity.schemas.in
schema_in_files = mutter.schemas.in
schema_DATA = $(schema_in_files:.schemas.in=.schemas)
@INTLTOOL_XML_NOMERGE_RULE@
xmldir = @GNOME_KEYBINDINGS_KEYSDIR@
xml_in_files = 50-metacity-desktop-key.xml.in 50-metacity-key.xml.in
xml_DATA = $(xml_in_files:.xml.in=.xml)
@INTLTOOL_SCHEMAS_RULE@
if GCONF_SCHEMAS_INSTALL
@@ -201,21 +275,73 @@ VARIABLES=stock_maximize_data $(srcdir)/stock_maximize.png \
stock_delete_data $(srcdir)/stock_delete.png
BUILT_SOURCES = inlinepixbufs.h
CLEANFILES = inlinepixbufs.h metacity.desktop metacity-wm.desktop metacity.schemas metacity.schemas.in 50-metacity-desktop-key.xml 50-metacity-key.xml
CLEANFILES = \
inlinepixbufs.h \
mutter.desktop \
mutter-wm.desktop \
mutter.schemas \
$(mutter_built_sources) \
$(typelib_DATA) \
$(gir_DATA)
inlinepixbufs.h: $(IMAGES)
$(GDK_PIXBUF_CSOURCE) --raw --build-list $(VARIABLES) >$(srcdir)/inlinepixbufs.h
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libmetacity-private.pc
pkgconfig_DATA = libmutter-private.pc mutter-plugins.pc
EXTRA_DIST=$(desktopfiles_files) \
$(wmproperties_files) \
$(IMAGES) $(schema_DATA) \
$(wmproperties_files) \
$(IMAGES) \
$(desktopfiles_in_files) \
$(wmproperties_in_files) \
$(schema_in_files) \
$(xml_in_files) \
libmetacity-private.pc.in
libmutter-private.pc.in \
mutter-plugins.pc.in \
mutter-enum-types.h.in \
mutter-enum-types.c.in \
mutter-marshal.list
BUILT_SOURCES += $(mutter_built_sources)
MUTTER_STAMP_FILES = stamp-mutter-marshal.h stamp-mutter-enum-types.h
CLEANFILES += $(MUTTER_STAMP_FILES)
mutter-marshal.h: stamp-mutter-marshal.h
@true
stamp-mutter-marshal.h: Makefile mutter-marshal.list
$(AM_V_GEN) $(GLIB_GENMARSHAL) \
--prefix=_mutter_marshal \
--header \
$(srcdir)/mutter-marshal.list > xgen-tmh && \
(cmp -s xgen-tmh mutter-marshal.h || cp -f xgen-tmh mutter-marshal.h) && \
rm -f xgen-tmh && \
echo timestamp > $(@F)
mutter-marshal.c: Makefile mutter-marshal.list
$(AM_V_GEN) (echo "#include \"mutter-marshal.h\"" ; \
$(GLIB_GENMARSHAL) \
--prefix=_mutter_marshal \
--body \
$(srcdir)/mutter-marshal.list ) > xgen-tmc && \
cp -f xgen-tmc mutter-marshal.c && \
rm -f xgen-tmc
mutter-enum-types.h: stamp-mutter-enum-types.h Makefile
@true
stamp-mutter-enum-types.h: $(libmutterinclude_base_headers) mutter-enum-types.h.in
$(AM_V_GEN) ( cd $(srcdir) && \
$(GLIB_MKENUMS) \
--template $(srcdir)/mutter-enum-types.h.in \
$(libmutterinclude_base_headers) ) >> xgen-teth && \
(cmp -s xgen-teth mutter-enum-types.h || cp xgen-teth mutter-enum-types.h) && \
rm -f xgen-teth && \
echo timestamp > $(@F)
mutter-enum-types.c: stamp-mutter-enum-types.h mutter-enum-types.c.in
$(AM_V_GEN) ( cd $(srcdir) && \
$(GLIB_MKENUMS) \
--template $(srcdir)/mutter-enum-types.c.in \
$(libmutterinclude_base_headers) ) >> xgen-tetc && \
cp xgen-tetc mutter-enum-types.c && \
rm -f xgen-tetc

10
src/compositor/README Normal file
View File

@@ -0,0 +1,10 @@
Intro
=====
Fix me.
Env Vars
========
MUTTER_DISABLE_MIPMAPS - set to disable use of mipmaped windows.

View File

@@ -1,54 +1,68 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (C) 2008 Iain Holmes
*
* 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_PRIVATE_H
#define META_COMPOSITOR_PRIVATE_H
#include <X11/extensions/Xfixes.h>
#include "compositor.h"
#include "display.h"
#include "mutter-plugin-manager.h"
#include <clutter/clutter.h>
typedef struct _MetaCompScreen MetaCompScreen;
struct _MetaCompositor
{
void (* destroy) (MetaCompositor *compositor);
MetaDisplay *display;
void (*manage_screen) (MetaCompositor *compositor,
MetaScreen *screen);
void (*unmanage_screen) (MetaCompositor *compositor,
MetaScreen *screen);
void (*add_window) (MetaCompositor *compositor,
MetaWindow *window,
Window xwindow,
XWindowAttributes *attrs);
void (*remove_window) (MetaCompositor *compositor,
Window xwindow);
void (*set_updates) (MetaCompositor *compositor,
MetaWindow *window,
gboolean update);
void (*process_event) (MetaCompositor *compositor,
XEvent *event,
MetaWindow *window);
Pixmap (*get_window_pixmap) (MetaCompositor *compositor,
MetaWindow *window);
void (*set_active_window) (MetaCompositor *compositor,
MetaScreen *screen,
MetaWindow *window);
Atom atom_x_root_pixmap;
Atom atom_x_set_root;
Atom atom_net_wm_window_opacity;
guint repaint_func_id;
ClutterActor *shadow_src;
MutterPlugin *modal_plugin;
gboolean show_redraw : 1;
gboolean debug : 1;
gboolean no_mipmaps : 1;
};
#endif
struct _MetaCompScreen
{
MetaScreen *screen;
ClutterActor *stage, *window_group, *overlay_group;
ClutterActor *hidden_group;
GList *windows;
GHashTable *windows_by_xid;
Window output;
/* Before we create the output window */
XserverRegion pending_input_region;
gint switch_workspace_in_progress;
MutterPluginManager *plugin_mgr;
};
void mutter_switch_workspace_completed (MetaScreen *screen);
void mutter_set_stage_input_region (MetaScreen *screen,
XserverRegion region);
void mutter_empty_stage_input_region (MetaScreen *screen);
gboolean mutter_begin_modal_for_plugin (MetaScreen *screen,
MutterPlugin *plugin,
Window grab_window,
Cursor cursor,
MetaModalOptions options,
guint32 timestamp);
void mutter_end_modal_for_plugin (MetaScreen *screen,
MutterPlugin *plugin,
guint32 timestamp);
void mutter_check_end_modal (MetaScreen *screen);
#endif /* META_COMPOSITOR_PRIVATE_H */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,208 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (c) 2008 Intel Corp.
*
* Author: Tomas Frydrych <tf@linux.intel.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "mutter-plugin.h"
#include "mutter-module.h"
#include <gmodule.h>
enum
{
PROP_0,
PROP_PATH,
};
struct _MutterModulePrivate
{
GModule *lib;
gchar *path;
GType plugin_type;
};
#define MUTTER_MODULE_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), MUTTER_TYPE_MODULE, MutterModulePrivate))
G_DEFINE_TYPE (MutterModule, mutter_module, G_TYPE_TYPE_MODULE);
static gboolean
mutter_module_load (GTypeModule *gmodule)
{
MutterModulePrivate *priv = MUTTER_MODULE (gmodule)->priv;
MutterPluginVersion *info = NULL;
GType (*register_type) (GTypeModule *) = NULL;
if (priv->lib && priv->plugin_type)
return TRUE;
g_assert (priv->path);
if (!priv->lib &&
!(priv->lib = g_module_open (priv->path, 0)))
{
g_warning ("Could not load library [%s (%s)]",
priv->path, g_module_error ());
return FALSE;
}
if (g_module_symbol (priv->lib, "mutter_plugin_version",
(gpointer *)(void *)&info) &&
g_module_symbol (priv->lib, "mutter_plugin_register_type",
(gpointer *)(void *)&register_type) &&
info && register_type)
{
if (info->version_api != MUTTER_PLUGIN_API_VERSION)
g_warning ("Plugin API mismatch for [%s]", priv->path);
else
{
GType plugin_type;
if (!(plugin_type = register_type (gmodule)))
{
g_warning ("Could not register type for plugin %s",
priv->path);
return FALSE;
}
else
{
priv->plugin_type = plugin_type;
}
return TRUE;
}
}
else
g_warning ("Broken plugin module [%s]", priv->path);
return FALSE;
}
static void
mutter_module_unload (GTypeModule *gmodule)
{
MutterModulePrivate *priv = MUTTER_MODULE (gmodule)->priv;
g_module_close (priv->lib);
priv->lib = NULL;
priv->plugin_type = 0;
}
static void
mutter_module_dispose (GObject *object)
{
G_OBJECT_CLASS (mutter_module_parent_class)->dispose (object);
}
static void
mutter_module_finalize (GObject *object)
{
MutterModulePrivate *priv = MUTTER_MODULE (object)->priv;
g_free (priv->path);
priv->path = NULL;
G_OBJECT_CLASS (mutter_module_parent_class)->finalize (object);
}
static void
mutter_module_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
MutterModulePrivate *priv = MUTTER_MODULE (object)->priv;
switch (prop_id)
{
case PROP_PATH:
g_free (priv->path);
priv->path = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
mutter_module_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
MutterModulePrivate *priv = MUTTER_MODULE (object)->priv;
switch (prop_id)
{
case PROP_PATH:
g_value_set_string (value, priv->path);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
mutter_module_class_init (MutterModuleClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GTypeModuleClass *gmodule_class = G_TYPE_MODULE_CLASS (klass);
gobject_class->finalize = mutter_module_finalize;
gobject_class->dispose = mutter_module_dispose;
gobject_class->set_property = mutter_module_set_property;
gobject_class->get_property = mutter_module_get_property;
gmodule_class->load = mutter_module_load;
gmodule_class->unload = mutter_module_unload;
g_object_class_install_property (gobject_class,
PROP_PATH,
g_param_spec_string ("path",
"Path",
"Load path",
NULL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_type_class_add_private (gobject_class, sizeof (MutterModulePrivate));
}
static void
mutter_module_init (MutterModule *self)
{
MutterModulePrivate *priv;
self->priv = priv = MUTTER_MODULE_GET_PRIVATE (self);
}
GType
mutter_module_get_plugin_type (MutterModule *module)
{
MutterModulePrivate *priv = MUTTER_MODULE (module)->priv;
return priv->plugin_type;
}

View File

@@ -0,0 +1,57 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (c) 2008 Intel Corp.
*
* Author: Tomas Frydrych <tf@linux.intel.com>
*
* 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 MUTTER_MODULE_H_
#define MUTTER_MODULE_H_
#include <glib-object.h>
#define MUTTER_TYPE_MODULE (mutter_module_get_type ())
#define MUTTER_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MUTTER_TYPE_MODULE, MutterModule))
#define MUTTER_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MUTTER_TYPE_MODULE, MutterModuleClass))
#define MUTTER_IS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MUTTER_MODULE_TYPE))
#define MUTTER_IS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MUTTER_TYPE_MODULE))
#define MUTTER_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MUTTER_TYPE_MODULE, MutterModuleClass))
typedef struct _MutterModule MutterModule;
typedef struct _MutterModuleClass MutterModuleClass;
typedef struct _MutterModulePrivate MutterModulePrivate;
struct _MutterModule
{
GTypeModule parent;
MutterModulePrivate *priv;
};
struct _MutterModuleClass
{
GTypeModuleClass parent_class;
};
GType mutter_module_get_type (void);
GType mutter_module_get_plugin_type (MutterModule *module);
#endif

View File

@@ -0,0 +1,652 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (c) 2008 Intel Corp.
*
* Author: Tomas Frydrych <tf@linux.intel.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "config.h"
#include "compositor-private.h"
#include "mutter-plugin-manager.h"
#include "prefs.h"
#include "errors.h"
#include "workspace.h"
#include "mutter-module.h"
#include "../core/window-private.h"
#include <string.h>
#include <clutter/x11/clutter-x11.h>
/*
* There is only one instace of each module per the process.
*/
static GHashTable *plugin_modules = NULL;
static gboolean mutter_plugin_manager_reload (MutterPluginManager *plugin_mgr);
struct MutterPluginManager
{
MetaScreen *screen;
GList /* MutterPluginPending */ *pending_plugin_modules; /* Plugins not yet fully loaded */
GList /* MutterPlugin */ *plugins; /* TODO -- maybe use hash table */
GList *unload; /* Plugins that are disabled and pending unload */
guint idle_unload_id;
};
typedef struct MutterPluginPending
{
MutterModule *module;
char *path;
char *params;
} MutterPluginPending;
/*
* Checks that the plugin is compatible with the WM and sets up the plugin
* struct.
*/
static MutterPlugin *
mutter_plugin_load (MutterPluginManager *mgr,
MutterModule *module,
const gchar *params)
{
MutterPlugin *plugin = NULL;
GType plugin_type = mutter_module_get_plugin_type (module);
if (!plugin_type)
{
g_warning ("Plugin type not registered !!!");
return NULL;
}
plugin = g_object_new (plugin_type,
"screen", mgr->screen,
"params", params,
NULL);
return plugin;
}
/*
* Attempst to unload a plugin; returns FALSE if plugin cannot be unloaded at
* present (e.g., and effect is in progress) and should be scheduled for
* removal later.
*/
static gboolean
mutter_plugin_unload (MutterPlugin *plugin)
{
if (mutter_plugin_running (plugin))
{
g_object_set (plugin, "disabled", TRUE, NULL);
return FALSE;
}
g_object_unref (plugin);
return TRUE;
}
/*
* Iddle callback to remove plugins that could not be removed directly and are
* pending for removal.
*/
static gboolean
mutter_plugin_manager_idle_unload (MutterPluginManager *plugin_mgr)
{
GList *l = plugin_mgr->unload;
gboolean dont_remove = TRUE;
while (l)
{
MutterPlugin *plugin = l->data;
if (mutter_plugin_unload (plugin))
{
/* Remove from list */
GList *p = l->prev;
GList *n = l->next;
if (!p)
plugin_mgr->unload = n;
else
p->next = n;
if (n)
n->prev = p;
g_list_free_1 (l);
l = n;
}
else
l = l->next;
}
if (!plugin_mgr->unload)
{
/* If no more unloads are pending, remove the handler as well */
dont_remove = FALSE;
plugin_mgr->idle_unload_id = 0;
}
return dont_remove;
}
/*
* Unloads all plugins
*/
static void
mutter_plugin_manager_unload (MutterPluginManager *plugin_mgr)
{
GList *plugins = plugin_mgr->plugins;
while (plugins)
{
MutterPlugin *plugin = plugins->data;
/* If the plugin could not be removed, move it to the unload list */
if (!mutter_plugin_unload (plugin))
{
plugin_mgr->unload = g_list_prepend (plugin_mgr->unload, plugin);
if (!plugin_mgr->idle_unload_id)
{
plugin_mgr->idle_unload_id = g_idle_add ((GSourceFunc)
mutter_plugin_manager_idle_unload,
plugin_mgr);
}
}
plugins = plugins->next;
}
g_list_free (plugin_mgr->plugins);
plugin_mgr->plugins = NULL;
}
static void
prefs_changed_callback (MetaPreference pref,
void *data)
{
MutterPluginManager *plugin_mgr = data;
if (pref == META_PREF_CLUTTER_PLUGINS)
{
mutter_plugin_manager_reload (plugin_mgr);
}
}
static MutterModule *
mutter_plugin_manager_get_module (const gchar *path)
{
MutterModule *module = g_hash_table_lookup (plugin_modules, path);
if (!module &&
(module = g_object_new (MUTTER_TYPE_MODULE, "path", path, NULL)))
{
g_hash_table_insert (plugin_modules, g_strdup (path), module);
}
return module;
}
/*
* Loads all plugins listed in gconf registry.
*/
gboolean
mutter_plugin_manager_load (MutterPluginManager *plugin_mgr)
{
const gchar *dpath = MUTTER_PLUGIN_DIR "/";
GSList *plugins, *fallback = NULL;
plugins = meta_prefs_get_clutter_plugins ();
if (!plugins)
{
/*
* If no plugins are specified, try to load the default plugin.
*/
fallback = g_slist_append (fallback, "default");
plugins = fallback;
}
while (plugins)
{
gchar *plugin_string;
gchar *params;
plugin_string = g_strdup (plugins->data);
if (plugin_string)
{
MutterModule *module;
gchar *path;
params = strchr (plugin_string, ':');
if (params)
{
*params = 0;
++params;
}
if (g_path_is_absolute (plugin_string))
path = g_strdup (plugin_string);
else
path = g_strconcat (dpath, plugin_string, ".so", NULL);
module = mutter_plugin_manager_get_module (path);
if (module)
{
gboolean use_succeeded;
/*
* This dlopens the module and registers the plugin type with the
* GType system, if the module is not already loaded. When we
* create a plugin, the type system also calls g_type_module_use()
* to guarantee the module will not be unloaded during the plugin
* life time. Consequently we can unuse() the module again.
*/
use_succeeded = g_type_module_use (G_TYPE_MODULE (module));
if (use_succeeded)
{
MutterPluginPending *pending = g_new0 (MutterPluginPending, 1);
pending->module = module;
pending->path = g_strdup (path);
pending->params = g_strdup (params);
plugin_mgr->pending_plugin_modules =
g_list_prepend (plugin_mgr->pending_plugin_modules, pending);
}
}
else
g_warning ("Unable to load plugin module [%s]: %s",
path, g_module_error());
g_free (path);
g_free (plugin_string);
}
plugins = plugins->next;
}
if (fallback)
g_slist_free (fallback);
if (plugin_mgr->pending_plugin_modules != NULL)
{
meta_prefs_add_listener (prefs_changed_callback, plugin_mgr);
return TRUE;
}
return FALSE;
}
gboolean
mutter_plugin_manager_initialize (MutterPluginManager *plugin_mgr)
{
GList *iter;
for (iter = plugin_mgr->pending_plugin_modules; iter; iter = iter->next)
{
MutterPluginPending *pending = (MutterPluginPending*) iter->data;
MutterPlugin *p;
if ((p = mutter_plugin_load (plugin_mgr, pending->module, pending->params)))
{
plugin_mgr->plugins = g_list_prepend (plugin_mgr->plugins, p);
}
else
{
g_warning ("Plugin load for [%s] failed", pending->path);
}
g_type_module_unuse (G_TYPE_MODULE (pending->module));
g_free (pending->path);
g_free (pending->params);
g_free (pending);
}
g_list_free (plugin_mgr->pending_plugin_modules);
plugin_mgr->pending_plugin_modules = NULL;
return TRUE;
}
/*
* Reloads all plugins
*/
static gboolean
mutter_plugin_manager_reload (MutterPluginManager *plugin_mgr)
{
/* TODO -- brute force; should we build a list of plugins to load and list of
* plugins to unload? We are probably not going to have large numbers of
* plugins loaded at the same time, so it might not be worth it.
*/
/* Prevent stale grabs on unloaded plugins */
mutter_check_end_modal (plugin_mgr->screen);
mutter_plugin_manager_unload (plugin_mgr);
return mutter_plugin_manager_load (plugin_mgr);
}
MutterPluginManager *
mutter_plugin_manager_new (MetaScreen *screen)
{
MutterPluginManager *plugin_mgr;
if (!plugin_modules)
{
plugin_modules = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
NULL);
}
plugin_mgr = g_new0 (MutterPluginManager, 1);
plugin_mgr->screen = screen;
return plugin_mgr;
}
static void
mutter_plugin_manager_kill_effect (MutterPluginManager *plugin_mgr,
MutterWindow *actor,
unsigned long events)
{
GList *l = plugin_mgr->plugins;
while (l)
{
MutterPlugin *plugin = l->data;
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
if (!mutter_plugin_disabled (plugin)
&& (mutter_plugin_features (plugin) & events)
&& klass->kill_effect)
klass->kill_effect (plugin, actor, events);
l = l->next;
}
}
#define ALL_BUT_SWITCH \
MUTTER_PLUGIN_ALL_EFFECTS & \
~MUTTER_PLUGIN_SWITCH_WORKSPACE
/*
* Public method that the compositor hooks into for events that require
* no additional parameters.
*
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
* if the return value is FALSE, there will be no subsequent call to the
* manager completed() callback, and the compositor must ensure that any
* appropriate post-effect cleanup is carried out.
*/
gboolean
mutter_plugin_manager_event_simple (MutterPluginManager *plugin_mgr,
MutterWindow *actor,
unsigned long event)
{
GList *l = plugin_mgr->plugins;
gboolean retval = FALSE;
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
if (display->display_opening)
return FALSE;
while (l)
{
MutterPlugin *plugin = l->data;
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
if (!mutter_plugin_disabled (plugin) &&
(mutter_plugin_features (plugin) & event))
{
retval = TRUE;
switch (event)
{
case MUTTER_PLUGIN_MINIMIZE:
if (klass->minimize)
{
mutter_plugin_manager_kill_effect (
plugin_mgr,
actor,
ALL_BUT_SWITCH);
_mutter_plugin_effect_started (plugin);
klass->minimize (plugin, actor);
}
break;
case MUTTER_PLUGIN_MAP:
if (klass->map)
{
mutter_plugin_manager_kill_effect (
plugin_mgr,
actor,
ALL_BUT_SWITCH);
_mutter_plugin_effect_started (plugin);
klass->map (plugin, actor);
}
break;
case MUTTER_PLUGIN_DESTROY:
if (klass->destroy)
{
_mutter_plugin_effect_started (plugin);
klass->destroy (plugin, actor);
}
break;
default:
g_warning ("Incorrect handler called for event %lu", event);
}
}
l = l->next;
}
return retval;
}
/*
* The public method that the compositor hooks into for maximize and unmaximize
* events.
*
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
* if the return value is FALSE, there will be no subsequent call to the
* manager completed() callback, and the compositor must ensure that any
* appropriate post-effect cleanup is carried out.
*/
gboolean
mutter_plugin_manager_event_maximize (MutterPluginManager *plugin_mgr,
MutterWindow *actor,
unsigned long event,
gint target_x,
gint target_y,
gint target_width,
gint target_height)
{
GList *l = plugin_mgr->plugins;
gboolean retval = FALSE;
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
if (display->display_opening)
return FALSE;
while (l)
{
MutterPlugin *plugin = l->data;
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
if (!mutter_plugin_disabled (plugin) &&
(mutter_plugin_features (plugin) & event))
{
retval = TRUE;
switch (event)
{
case MUTTER_PLUGIN_MAXIMIZE:
if (klass->maximize)
{
mutter_plugin_manager_kill_effect (
plugin_mgr,
actor,
ALL_BUT_SWITCH);
_mutter_plugin_effect_started (plugin);
klass->maximize (plugin, actor,
target_x, target_y,
target_width, target_height);
}
break;
case MUTTER_PLUGIN_UNMAXIMIZE:
if (klass->unmaximize)
{
mutter_plugin_manager_kill_effect (
plugin_mgr,
actor,
ALL_BUT_SWITCH);
_mutter_plugin_effect_started (plugin);
klass->unmaximize (plugin, actor,
target_x, target_y,
target_width, target_height);
}
break;
default:
g_warning ("Incorrect handler called for event %lu", event);
}
}
l = l->next;
}
return retval;
}
/*
* The public method that the compositor hooks into for desktop switching.
*
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
* if the return value is FALSE, there will be no subsequent call to the
* manager completed() callback, and the compositor must ensure that any
* appropriate post-effect cleanup is carried out.
*/
gboolean
mutter_plugin_manager_switch_workspace (MutterPluginManager *plugin_mgr,
const GList **actors,
gint from,
gint to,
MetaMotionDirection direction)
{
GList *l = plugin_mgr->plugins;
gboolean retval = FALSE;
MetaDisplay *display = meta_screen_get_display (plugin_mgr->screen);
if (display->display_opening)
return FALSE;
while (l)
{
MutterPlugin *plugin = l->data;
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
if (!mutter_plugin_disabled (plugin) &&
(mutter_plugin_features (plugin) & MUTTER_PLUGIN_SWITCH_WORKSPACE) &&
(actors && *actors))
{
if (klass->switch_workspace)
{
retval = TRUE;
mutter_plugin_manager_kill_effect (
plugin_mgr,
MUTTER_WINDOW ((*actors)->data),
MUTTER_PLUGIN_SWITCH_WORKSPACE);
_mutter_plugin_effect_started (plugin);
klass->switch_workspace (plugin, actors, from, to, direction);
}
}
l = l->next;
}
return retval;
}
/*
* The public method that the compositor hooks into for desktop switching.
*
* Returns TRUE if at least one of the plugins handled the event type (i.e.,
* if the return value is FALSE, there will be no subsequent call to the
* manager completed() callback, and the compositor must ensure that any
* appropriate post-effect cleanup is carried out.
*/
gboolean
mutter_plugin_manager_xevent_filter (MutterPluginManager *plugin_mgr,
XEvent *xev)
{
GList *l;
gboolean have_plugin_xevent_func;
if (!plugin_mgr)
return FALSE;
l = plugin_mgr->plugins;
/* We need to make sure that clutter gets certain events, like
* ConfigureNotify on the stage window. If there is a plugin that
* provides an xevent_filter function, then it's the responsibility
* of that plugin to pass events to Clutter. Otherwise, we send the
* event directly to Clutter ourselves.
*
* What happens if there are two plugins with xevent_filter functions
* is undefined; in general, multiple competing plugins are something
* we don't support well or care much about.
*
* FIXME: Really, we should just always handle sending the event to
* clutter if a plugin doesn't report the event as handled by
* returning TRUE, but it doesn't seem worth breaking compatibility
* of the plugin interface right now to achieve this; the way it is
* now works fine in practice.
*/
have_plugin_xevent_func = FALSE;
while (l)
{
MutterPlugin *plugin = l->data;
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
if (klass->xevent_filter)
{
have_plugin_xevent_func = TRUE;
if (klass->xevent_filter (plugin, xev) == TRUE)
return TRUE;
}
l = l->next;
}
if (!have_plugin_xevent_func)
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
return FALSE;
}

View File

@@ -0,0 +1,63 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (c) 2008 Intel Corp.
*
* Author: Tomas Frydrych <tf@linux.intel.com>
*
* 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 MUTTER_PLUGIN_MANAGER_H_
#define MUTTER_PLUGIN_MANAGER_H_
#include "types.h"
#include "screen.h"
#define MUTTER_PLUGIN_FROM_MANAGER_
#include "mutter-plugin.h"
#undef MUTTER_PLUGIN_FROM_MANAGER_
typedef struct MutterPluginManager MutterPluginManager;
MutterPluginManager * mutter_plugin_manager_new (MetaScreen *screen);
gboolean mutter_plugin_manager_load (MutterPluginManager *mgr);
gboolean mutter_plugin_manager_initialize (MutterPluginManager *plugin_mgr);
gboolean mutter_plugin_manager_event_simple (MutterPluginManager *mgr,
MutterWindow *actor,
unsigned long event);
gboolean mutter_plugin_manager_event_maximize (MutterPluginManager *mgr,
MutterWindow *actor,
unsigned long event,
gint target_x,
gint target_y,
gint target_width,
gint target_height);
void mutter_plugin_manager_update_workspaces (MutterPluginManager *mgr);
void mutter_plugin_manager_update_workspace (MutterPluginManager *mgr, MetaWorkspace *w);
gboolean mutter_plugin_manager_switch_workspace (MutterPluginManager *mgr,
const GList **actors,
gint from,
gint to,
MetaMotionDirection direction);
gboolean mutter_plugin_manager_xevent_filter (MutterPluginManager *mgr,
XEvent *xev);
#endif

View File

@@ -0,0 +1,567 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* Copyright (c) 2008 Intel Corp.
*
* Author: Tomas Frydrych <tf@linux.intel.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "mutter-plugin.h"
#include "screen.h"
#include "display.h"
#include <string.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/shape.h>
#include <clutter/x11/clutter-x11.h>
#include "compositor-private.h"
#include "mutter-window-private.h"
G_DEFINE_ABSTRACT_TYPE (MutterPlugin, mutter_plugin, G_TYPE_OBJECT);
#define MUTTER_PLUGIN_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), MUTTER_TYPE_PLUGIN, MutterPluginPrivate))
enum
{
PROP_0,
PROP_SCREEN,
PROP_PARAMS,
PROP_FEATURES,
PROP_DISABLED,
PROP_DEBUG_MODE,
};
struct _MutterPluginPrivate
{
MetaScreen *screen;
gchar *params;
gulong features;
gint running;
gboolean disabled : 1;
gboolean debug : 1;
};
static void
mutter_plugin_dispose (GObject *object)
{
G_OBJECT_CLASS (mutter_plugin_parent_class)->dispose (object);
}
static void
mutter_plugin_finalize (GObject *object)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (object)->priv;
g_free (priv->params);
priv->params = NULL;
G_OBJECT_CLASS (mutter_plugin_parent_class)->finalize (object);
}
static void
mutter_plugin_parse_params (MutterPlugin *plugin)
{
char *p;
gulong features = 0;
MutterPluginPrivate *priv = plugin->priv;
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
/*
* Feature flags: identify events that the plugin can handle; a plugin can
* handle one or more events.
*/
if (klass->minimize)
features |= MUTTER_PLUGIN_MINIMIZE;
if (klass->maximize)
features |= MUTTER_PLUGIN_MAXIMIZE;
if (klass->unmaximize)
features |= MUTTER_PLUGIN_UNMAXIMIZE;
if (klass->map)
features |= MUTTER_PLUGIN_MAP;
if (klass->destroy)
features |= MUTTER_PLUGIN_DESTROY;
if (klass->switch_workspace)
features |= MUTTER_PLUGIN_SWITCH_WORKSPACE;
if (priv->params)
{
gboolean debug = FALSE;
if ((p = strstr (priv->params, "disable:")))
{
gchar *d = g_strdup (p+8);
p = strchr (d, ';');
if (p)
*p = 0;
if (strstr (d, "minimize"))
features &= ~ MUTTER_PLUGIN_MINIMIZE;
if (strstr (d, "maximize"))
features &= ~ MUTTER_PLUGIN_MAXIMIZE;
if (strstr (d, "unmaximize"))
features &= ~ MUTTER_PLUGIN_UNMAXIMIZE;
if (strstr (d, "map"))
features &= ~ MUTTER_PLUGIN_MAP;
if (strstr (d, "destroy"))
features &= ~ MUTTER_PLUGIN_DESTROY;
if (strstr (d, "switch-workspace"))
features &= ~MUTTER_PLUGIN_SWITCH_WORKSPACE;
g_free (d);
}
if (strstr (priv->params, "debug"))
debug = TRUE;
if (debug != priv->debug)
{
priv->debug = debug;
g_object_notify (G_OBJECT (plugin), "debug-mode");
}
}
if (features != priv->features)
{
priv->features = features;
g_object_notify (G_OBJECT (plugin), "features");
}
}
static void
mutter_plugin_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (object)->priv;
switch (prop_id)
{
case PROP_SCREEN:
priv->screen = g_value_get_object (value);
break;
case PROP_PARAMS:
priv->params = g_value_dup_string (value);
mutter_plugin_parse_params (MUTTER_PLUGIN (object));
break;
case PROP_DISABLED:
priv->disabled = g_value_get_boolean (value);
break;
case PROP_DEBUG_MODE:
priv->debug = g_value_get_boolean (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
mutter_plugin_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (object)->priv;
switch (prop_id)
{
case PROP_SCREEN:
g_value_set_object (value, priv->screen);
break;
case PROP_PARAMS:
g_value_set_string (value, priv->params);
break;
case PROP_DISABLED:
g_value_set_boolean (value, priv->disabled);
break;
case PROP_DEBUG_MODE:
g_value_set_boolean (value, priv->debug);
break;
case PROP_FEATURES:
g_value_set_ulong (value, priv->features);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
mutter_plugin_class_init (MutterPluginClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->finalize = mutter_plugin_finalize;
gobject_class->dispose = mutter_plugin_dispose;
gobject_class->set_property = mutter_plugin_set_property;
gobject_class->get_property = mutter_plugin_get_property;
g_object_class_install_property (gobject_class,
PROP_SCREEN,
g_param_spec_object ("screen",
"MetaScreen",
"MetaScreen",
META_TYPE_SCREEN,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (gobject_class,
PROP_PARAMS,
g_param_spec_string ("params",
"Parameters",
"Plugin Parameters",
NULL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
g_object_class_install_property (gobject_class,
PROP_FEATURES,
g_param_spec_ulong ("features",
"Features",
"Plugin Features",
0 , G_MAXULONG, 0,
G_PARAM_READABLE));
g_object_class_install_property (gobject_class,
PROP_DISABLED,
g_param_spec_boolean ("disabled",
"Plugin disabled",
"Plugin disabled",
FALSE,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_DEBUG_MODE,
g_param_spec_boolean ("debug-mode",
"Debug Mode",
"Debug Mode",
FALSE,
G_PARAM_READABLE));
g_type_class_add_private (gobject_class, sizeof (MutterPluginPrivate));
}
static void
mutter_plugin_init (MutterPlugin *self)
{
MutterPluginPrivate *priv;
self->priv = priv = MUTTER_PLUGIN_GET_PRIVATE (self);
}
gulong
mutter_plugin_features (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
return priv->features;
}
gboolean
mutter_plugin_disabled (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
return priv->disabled;
}
gboolean
mutter_plugin_running (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
return (priv->running > 0);
}
gboolean
mutter_plugin_debug_mode (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
return priv->debug;
}
const MutterPluginInfo *
mutter_plugin_get_info (MutterPlugin *plugin)
{
MutterPluginClass *klass = MUTTER_PLUGIN_GET_CLASS (plugin);
if (klass && klass->plugin_info)
return klass->plugin_info (plugin);
return NULL;
}
ClutterActor *
mutter_plugin_get_overlay_group (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
return mutter_get_overlay_group_for_screen (priv->screen);
}
ClutterActor *
mutter_plugin_get_stage (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
return mutter_get_stage_for_screen (priv->screen);
}
ClutterActor *
mutter_plugin_get_window_group (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
return mutter_get_window_group_for_screen (priv->screen);
}
/**
* _mutter_plugin_effect_started:
* @plugin: the plugin
*
* Mark that an effect has started for the plugin. This is called
* internally by MutterPluginManager.
*/
void
_mutter_plugin_effect_started (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
priv->running++;
}
void
mutter_plugin_effect_completed (MutterPlugin *plugin,
MutterWindow *actor,
unsigned long event)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
if (priv->running-- < 0)
{
g_warning ("Error in running effect accounting, adjusting.");
priv->running = 0;
}
if (!actor)
{
const MutterPluginInfo *info;
const gchar *name = NULL;
if (plugin && (info = mutter_plugin_get_info (plugin)))
name = info->name;
g_warning ("Plugin [%s] passed NULL for actor!",
name ? name : "unknown");
}
if (event == MUTTER_PLUGIN_SWITCH_WORKSPACE)
{
/* The window is just used to identify the screen */
MetaWindow *window = mutter_window_get_meta_window (actor);
MetaScreen *screen = meta_window_get_screen (window);
mutter_switch_workspace_completed (screen);
}
else
{
mutter_window_effect_completed (actor, event);
}
}
void
mutter_plugin_query_screen_size (MutterPlugin *plugin,
int *width,
int *height)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
meta_screen_get_size (priv->screen, width, height);
}
void
mutter_plugin_set_stage_reactive (MutterPlugin *plugin,
gboolean reactive)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
MetaScreen *screen = priv->screen;
if (reactive)
mutter_set_stage_input_region (screen, None);
else
mutter_empty_stage_input_region (screen);
}
void
mutter_plugin_set_stage_input_area (MutterPlugin *plugin,
gint x, gint y, gint width, gint height)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
MetaScreen *screen = priv->screen;
MetaDisplay *display = meta_screen_get_display (screen);
Display *xdpy = meta_display_get_xdisplay (display);
XRectangle rect;
XserverRegion region;
rect.x = x;
rect.y = y;
rect.width = width;
rect.height = height;
region = XFixesCreateRegion (xdpy, &rect, 1);
mutter_set_stage_input_region (screen, region);
XFixesDestroyRegion (xdpy, region);
}
void
mutter_plugin_set_stage_input_region (MutterPlugin *plugin,
XserverRegion region)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
MetaScreen *screen = priv->screen;
mutter_set_stage_input_region (screen, region);
}
/**
* mutter_plugin_get_windows:
* @plugin: A #MutterPlugin
*
* This function returns all of the #MutterWindow objects referenced by Mutter, including
* override-redirect windows. The returned list is a snapshot of Mutter's current
* stacking order, with the topmost window last.
*
* The 'restacked' signal of #MetaScreen signals when this value has changed.
*
* Returns: (transfer none) (element-type MutterWindow): Windows in stacking order, topmost last
*/
GList *
mutter_plugin_get_windows (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
return mutter_get_windows (priv->screen);
}
/**
* mutter_plugin_begin_modal:
* @plugin: a #MutterPlugin
* @grab_window: the X window to grab the keyboard and mouse on
* @cursor: the cursor to use for the pointer grab, or None,
* to use the normal cursor for the grab window and
* its descendants.
* @options: flags that modify the behavior of the modal grab
* @timestamp: the timestamp used for establishing grabs
*
* This function is used to grab the keyboard and mouse for the exclusive
* use of the plugin. Correct operation requires that both the keyboard
* and mouse are grabbed, or thing will break. (In particular, other
* passive X grabs in Mutter can trigger but not be handled by the normal
* keybinding handling code.) However, the plugin can establish the keyboard
* and/or mouse grabs ahead of time and pass in the
* %META_MODAL_POINTER_ALREADY_GRABBED and/or %META_MODAL_KEYBOARD_ALREADY_GRABBED
* options. This facility is provided for two reasons: first to allow using
* this function to establish modality after a passive grab, and second to
* allow using obscure features of XGrabPointer() and XGrabKeyboard() without
* having to add them to this API.
*
* Return value: whether we successfully grabbed the keyboard and
* mouse and made the plugin modal.
*/
gboolean
mutter_plugin_begin_modal (MutterPlugin *plugin,
Window grab_window,
Cursor cursor,
MetaModalOptions options,
guint32 timestamp)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
return mutter_begin_modal_for_plugin (priv->screen, plugin,
grab_window, cursor, options, timestamp);
}
/**
* mutter_plugin_end_modal
* @plugin: a #MutterPlugin
* @timestamp: the time used for releasing grabs
*
* Ends the modal operation begun with meta_plugin_begin_modal(). This
* ungrabs both the mouse and keyboard even when
* %META_MODAL_POINTER_ALREADY_GRABBED or
* %META_MODAL_KEYBOARD_ALREADY_GRABBED were provided as options
* when beginnning the modal operation.
*/
void
mutter_plugin_end_modal (MutterPlugin *plugin,
guint32 timestamp)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
mutter_end_modal_for_plugin (priv->screen, plugin, timestamp);
}
Display *
mutter_plugin_get_xdisplay (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
MetaDisplay *display = meta_screen_get_display (priv->screen);
Display *xdpy = meta_display_get_xdisplay (display);
return xdpy;
}
/**
* mutter_plugin_get_screen:
* @plugin: a #MutterPlugin
*
* Gets the #MetaScreen corresponding to a plugin. Each plugin instance
* is associated with exactly one screen; if Metacity is managing
* multiple screens, multiple plugin instances will be created.
*
* Return value: (transfer none): the #MetaScreen for the plugin
*/
MetaScreen *
mutter_plugin_get_screen (MutterPlugin *plugin)
{
MutterPluginPrivate *priv = MUTTER_PLUGIN (plugin)->priv;
return priv->screen;
}

View File

@@ -0,0 +1,575 @@
/*
* shaped texture
*
* An actor to draw a texture clipped to a list of rectangles
*
* Authored By Neil Roberts <neil@linux.intel.com>
*
* Copyright (C) 2008 Intel Corporation
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <config.h>
#include "mutter-shaped-texture.h"
#include "mutter-texture-tower.h"
#include <clutter/clutter.h>
#include <cogl/cogl.h>
#include <string.h>
static void mutter_shaped_texture_dispose (GObject *object);
static void mutter_shaped_texture_finalize (GObject *object);
static void mutter_shaped_texture_notify (GObject *object,
GParamSpec *pspec);
static void mutter_shaped_texture_paint (ClutterActor *actor);
static void mutter_shaped_texture_pick (ClutterActor *actor,
const ClutterColor *color);
static void mutter_shaped_texture_update_area (ClutterX11TexturePixmap *texture,
int x,
int y,
int width,
int height);
static void mutter_shaped_texture_dirty_mask (MutterShapedTexture *stex);
#ifdef HAVE_GLX_TEXTURE_PIXMAP
G_DEFINE_TYPE (MutterShapedTexture, mutter_shaped_texture,
CLUTTER_GLX_TYPE_TEXTURE_PIXMAP);
#else /* HAVE_GLX_TEXTURE_PIXMAP */
G_DEFINE_TYPE (MutterShapedTexture, mutter_shaped_texture,
CLUTTER_X11_TYPE_TEXTURE_PIXMAP);
#endif /* HAVE_GLX_TEXTURE_PIXMAP */
#define MUTTER_SHAPED_TEXTURE_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), MUTTER_TYPE_SHAPED_TEXTURE, \
MutterShapedTexturePrivate))
struct _MutterShapedTexturePrivate
{
MutterTextureTower *paint_tower;
CoglHandle mask_texture;
CoglHandle material;
CoglHandle material_unshaped;
#if 1 /* see workaround comment in mutter_shaped_texture_paint */
CoglHandle material_workaround;
#endif
GdkRegion *clip_region;
guint mask_width, mask_height;
GArray *rectangles;
};
static void
mutter_shaped_texture_class_init (MutterShapedTextureClass *klass)
{
GObjectClass *gobject_class = (GObjectClass *) klass;
ClutterActorClass *actor_class = (ClutterActorClass *) klass;
ClutterX11TexturePixmapClass *x11_texture_class = (ClutterX11TexturePixmapClass *) klass;
gobject_class->dispose = mutter_shaped_texture_dispose;
gobject_class->finalize = mutter_shaped_texture_finalize;
gobject_class->notify = mutter_shaped_texture_notify;
actor_class->paint = mutter_shaped_texture_paint;
actor_class->pick = mutter_shaped_texture_pick;
x11_texture_class->update_area = mutter_shaped_texture_update_area;
g_type_class_add_private (klass, sizeof (MutterShapedTexturePrivate));
}
static void
mutter_shaped_texture_init (MutterShapedTexture *self)
{
MutterShapedTexturePrivate *priv;
priv = self->priv = MUTTER_SHAPED_TEXTURE_GET_PRIVATE (self);
priv->rectangles = g_array_new (FALSE, FALSE, sizeof (XRectangle));
priv->paint_tower = mutter_texture_tower_new ();
priv->mask_texture = COGL_INVALID_HANDLE;
}
static void
mutter_shaped_texture_dispose (GObject *object)
{
MutterShapedTexture *self = (MutterShapedTexture *) object;
MutterShapedTexturePrivate *priv = self->priv;
if (priv->paint_tower)
mutter_texture_tower_free (priv->paint_tower);
priv->paint_tower = NULL;
mutter_shaped_texture_dirty_mask (self);
if (priv->material != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->material);
priv->material = COGL_INVALID_HANDLE;
}
if (priv->material_unshaped != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->material_unshaped);
priv->material_unshaped = COGL_INVALID_HANDLE;
}
#if 1 /* see comment in mutter_shaped_texture_paint */
if (priv->material_workaround != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->material_workaround);
priv->material_workaround = COGL_INVALID_HANDLE;
}
#endif
mutter_shaped_texture_set_clip_region (self, NULL);
G_OBJECT_CLASS (mutter_shaped_texture_parent_class)->dispose (object);
}
static void
mutter_shaped_texture_finalize (GObject *object)
{
MutterShapedTexture *self = (MutterShapedTexture *) object;
MutterShapedTexturePrivate *priv = self->priv;
g_array_free (priv->rectangles, TRUE);
G_OBJECT_CLASS (mutter_shaped_texture_parent_class)->finalize (object);
}
static void
mutter_shaped_texture_notify (GObject *object,
GParamSpec *pspec)
{
if (G_OBJECT_CLASS (mutter_shaped_texture_parent_class)->notify)
G_OBJECT_CLASS (mutter_shaped_texture_parent_class)->notify (object, pspec);
/* It seems like we could just do this out of update_area(), but unfortunately,
* clutter_glx_texture_pixmap() doesn't call through the vtable on the
* initial update_area, so we need to look for changes to the texture
* explicitly.
*/
if (strcmp (pspec->name, "cogl-texture") == 0)
{
MutterShapedTexture *stex = (MutterShapedTexture *) object;
MutterShapedTexturePrivate *priv = stex->priv;
mutter_texture_tower_set_base_texture (priv->paint_tower,
clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex)));
}
}
static void
mutter_shaped_texture_dirty_mask (MutterShapedTexture *stex)
{
MutterShapedTexturePrivate *priv = stex->priv;
if (priv->mask_texture != COGL_INVALID_HANDLE)
{
GLuint mask_gl_tex;
GLenum mask_gl_target;
cogl_texture_get_gl_texture (priv->mask_texture,
&mask_gl_tex, &mask_gl_target);
if (mask_gl_target == GL_TEXTURE_RECTANGLE_ARB)
glDeleteTextures (1, &mask_gl_tex);
cogl_handle_unref (priv->mask_texture);
priv->mask_texture = COGL_INVALID_HANDLE;
}
}
static void
mutter_shaped_texture_ensure_mask (MutterShapedTexture *stex)
{
MutterShapedTexturePrivate *priv = stex->priv;
CoglHandle paint_tex;
guint tex_width, tex_height;
paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex));
if (paint_tex == COGL_INVALID_HANDLE)
return;
tex_width = cogl_texture_get_width (paint_tex);
tex_height = cogl_texture_get_height (paint_tex);
/* If the mask texture we have was created for a different size then
recreate it */
if (priv->mask_texture != COGL_INVALID_HANDLE
&& (priv->mask_width != tex_width || priv->mask_height != tex_height))
mutter_shaped_texture_dirty_mask (stex);
/* If we don't have a mask texture yet then create one */
if (priv->mask_texture == COGL_INVALID_HANDLE)
{
guchar *mask_data;
const XRectangle *rect;
GLenum paint_gl_target;
/* Create data for an empty image */
mask_data = g_malloc0 (tex_width * tex_height);
/* Cut out a hole for each rectangle */
for (rect = (XRectangle *) priv->rectangles->data
+ priv->rectangles->len;
rect-- > (XRectangle *) priv->rectangles->data;)
{
gint x1 = rect->x, x2 = x1 + rect->width;
gint y1 = rect->y, y2 = y1 + rect->height;
guchar *p;
/* Clip the rectangle to the size of the texture */
x1 = CLAMP (x1, 0, (gint) tex_width - 1);
x2 = CLAMP (x2, x1, (gint) tex_width);
y1 = CLAMP (y1, 0, (gint) tex_height - 1);
y2 = CLAMP (y2, y1, (gint) tex_height);
/* Fill the rectangle */
for (p = mask_data + y1 * tex_width + x1;
y1 < y2;
y1++, p += tex_width)
memset (p, 255, x2 - x1);
}
cogl_texture_get_gl_texture (paint_tex, NULL, &paint_gl_target);
if (paint_gl_target == GL_TEXTURE_RECTANGLE_ARB)
{
GLuint tex;
glGenTextures (1, &tex);
glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex);
glPixelStorei (GL_UNPACK_ROW_LENGTH, tex_width);
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
glPixelStorei (GL_UNPACK_SKIP_ROWS, 0);
glPixelStorei (GL_UNPACK_SKIP_PIXELS, 0);
glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0,
GL_ALPHA, tex_width, tex_height,
0, GL_ALPHA, GL_UNSIGNED_BYTE, mask_data);
priv->mask_texture
= cogl_texture_new_from_foreign (tex,
GL_TEXTURE_RECTANGLE_ARB,
tex_width, tex_height,
0, 0,
COGL_PIXEL_FORMAT_A_8);
}
else
priv->mask_texture = cogl_texture_new_from_data (tex_width, tex_height,
COGL_TEXTURE_NONE,
COGL_PIXEL_FORMAT_A_8,
COGL_PIXEL_FORMAT_ANY,
tex_width,
mask_data);
g_free (mask_data);
priv->mask_width = tex_width;
priv->mask_height = tex_height;
}
}
static void
mutter_shaped_texture_paint (ClutterActor *actor)
{
MutterShapedTexture *stex = (MutterShapedTexture *) actor;
MutterShapedTexturePrivate *priv = stex->priv;
CoglHandle paint_tex;
guint tex_width, tex_height;
ClutterActorBox alloc;
CoglHandle material;
if (priv->clip_region && gdk_region_empty (priv->clip_region))
return;
if (!CLUTTER_ACTOR_IS_REALIZED (CLUTTER_ACTOR (stex)))
clutter_actor_realize (CLUTTER_ACTOR (stex));
/* If mipmaps are supported, then the texture filter quality will
* still be HIGH here. In that case we just want to use the base
* texture. If mipmaps are not support then
* on_glx_texture_pixmap_pre_paint() will have reset the texture
* filter quality to MEDIUM, and we should use the MutterTextureTower
* mipmap emulation.
*
* http://bugzilla.openedhand.com/show_bug.cgi?id=1877 is an RFE
* for a better way of handling this.
*
* While it would be nice to have direct access to the 'can_mipmap'
* boolean in ClutterGLXTexturePixmap, since since MutterTextureTower
* creates the scaled down images on demand there is no substantial
* overhead from doing the work to create and update the tower and
* not using it, other than the memory allocated for the MutterTextureTower
* structure itself.
*/
if (clutter_texture_get_filter_quality (CLUTTER_TEXTURE (stex)) == CLUTTER_TEXTURE_QUALITY_HIGH)
paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex));
else
paint_tex = mutter_texture_tower_get_paint_texture (priv->paint_tower);
if (paint_tex == COGL_INVALID_HANDLE)
return;
tex_width = cogl_texture_get_width (paint_tex);
tex_height = cogl_texture_get_height (paint_tex);
if (tex_width == 0 || tex_height == 0) /* no contents yet */
return;
if (priv->rectangles->len < 1)
{
/* If there are no rectangles use a single-layer texture */
if (priv->material_unshaped == COGL_INVALID_HANDLE)
priv->material_unshaped = cogl_material_new ();
material = priv->material_unshaped;
}
else
{
mutter_shaped_texture_ensure_mask (stex);
if (priv->material == COGL_INVALID_HANDLE)
{
priv->material = cogl_material_new ();
cogl_material_set_layer_combine (priv->material, 1,
"RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
NULL);
}
material = priv->material;
cogl_material_set_layer (material, 1, priv->mask_texture);
}
cogl_material_set_layer (material, 0, paint_tex);
{
CoglColor color;
guchar opacity = clutter_actor_get_paint_opacity (actor);
cogl_color_set_from_4ub (&color, opacity, opacity, opacity, opacity);
cogl_material_set_color (material, &color);
}
cogl_set_source (material);
clutter_actor_get_allocation_box (actor, &alloc);
if (priv->clip_region)
{
GdkRectangle *rects;
int n_rects;
int i;
/* Limit to how many separate rectangles we'll draw; beyond this just
* fall back and draw the whole thing */
# define MAX_RECTS 16
/* Would be nice to be able to check the number of rects first */
gdk_region_get_rectangles (priv->clip_region, &rects, &n_rects);
if (n_rects > MAX_RECTS)
{
g_free (rects);
/* Fall through to following code */
}
else
{
float coords[8];
float x1, y1, x2, y2;
for (i = 0; i < n_rects; i++)
{
GdkRectangle *rect = &rects[i];
x1 = rect->x;
y1 = rect->y;
x2 = rect->x + rect->width;
y2 = rect->y + rect->height;
coords[0] = rect->x / (alloc.x2 - alloc.x1);
coords[1] = rect->y / (alloc.y2 - alloc.y1);
coords[2] = (rect->x + rect->width) / (alloc.x2 - alloc.x1);
coords[3] = (rect->y + rect->height) / (alloc.y2 - alloc.y1);
coords[4] = coords[0];
coords[5] = coords[1];
coords[6] = coords[2];
coords[7] = coords[3];
cogl_rectangle_with_multitexture_coords (x1, y1, x2, y2,
&coords[0], 8);
}
g_free (rects);
return;
}
}
cogl_rectangle (0, 0,
alloc.x2 - alloc.x1,
alloc.y2 - alloc.y1);
}
static void
mutter_shaped_texture_pick (ClutterActor *actor,
const ClutterColor *color)
{
MutterShapedTexture *stex = (MutterShapedTexture *) actor;
MutterShapedTexturePrivate *priv = stex->priv;
/* If there are no rectangles then use the regular pick */
if (priv->rectangles->len < 1)
CLUTTER_ACTOR_CLASS (mutter_shaped_texture_parent_class)
->pick (actor, color);
else if (clutter_actor_should_pick_paint (actor))
{
CoglHandle paint_tex;
ClutterActorBox alloc;
guint tex_width, tex_height;
paint_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE (stex));
if (paint_tex == COGL_INVALID_HANDLE)
return;
tex_width = cogl_texture_get_width (paint_tex);
tex_height = cogl_texture_get_height (paint_tex);
if (tex_width == 0 || tex_height == 0) /* no contents yet */
return;
mutter_shaped_texture_ensure_mask (stex);
cogl_set_source_color4ub (color->red, color->green, color->blue,
color->alpha);
clutter_actor_get_allocation_box (actor, &alloc);
/* Paint the mask rectangle in the given color */
cogl_set_source_texture (priv->mask_texture);
cogl_rectangle_with_texture_coords (0, 0,
alloc.x2 - alloc.x1,
alloc.y2 - alloc.y1,
0, 0, 1, 1);
}
}
static void
mutter_shaped_texture_update_area (ClutterX11TexturePixmap *texture,
int x,
int y,
int width,
int height)
{
MutterShapedTexture *stex = (MutterShapedTexture *) texture;
MutterShapedTexturePrivate *priv = stex->priv;
CLUTTER_X11_TEXTURE_PIXMAP_CLASS (mutter_shaped_texture_parent_class)->update_area (texture,
x, y, width, height);
mutter_texture_tower_update_area (priv->paint_tower, x, y, width, height);
}
ClutterActor *
mutter_shaped_texture_new (void)
{
ClutterActor *self = g_object_new (MUTTER_TYPE_SHAPED_TEXTURE, NULL);
return self;
}
void
mutter_shaped_texture_clear_rectangles (MutterShapedTexture *stex)
{
MutterShapedTexturePrivate *priv;
g_return_if_fail (MUTTER_IS_SHAPED_TEXTURE (stex));
priv = stex->priv;
g_array_set_size (priv->rectangles, 0);
mutter_shaped_texture_dirty_mask (stex);
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
}
void
mutter_shaped_texture_add_rectangle (MutterShapedTexture *stex,
const XRectangle *rect)
{
g_return_if_fail (MUTTER_IS_SHAPED_TEXTURE (stex));
mutter_shaped_texture_add_rectangles (stex, 1, rect);
}
void
mutter_shaped_texture_add_rectangles (MutterShapedTexture *stex,
size_t num_rects,
const XRectangle *rects)
{
MutterShapedTexturePrivate *priv;
g_return_if_fail (MUTTER_IS_SHAPED_TEXTURE (stex));
priv = stex->priv;
g_array_append_vals (priv->rectangles, rects, num_rects);
mutter_shaped_texture_dirty_mask (stex);
clutter_actor_queue_redraw (CLUTTER_ACTOR (stex));
}
/**
* mutter_shaped_texture_set_clip_region:
* @frame: a #TidyTextureframe
* @clip_region: (transfer full): the region of the texture that
* is visible and should be painted. OWNERSHIP IS ASSUMED BY
* THE FUNCTION (for efficiency to avoid a copy.)
*
* Provides a hint to the texture about what areas of the texture
* are not completely obscured and thus need to be painted. This
* is an optimization and is not supposed to have any effect on
* the output.
*
* Typically a parent container will set the clip region before
* painting its children, and then unset it afterwards.
*/
void
mutter_shaped_texture_set_clip_region (MutterShapedTexture *stex,
GdkRegion *clip_region)
{
MutterShapedTexturePrivate *priv;
g_return_if_fail (MUTTER_IS_SHAPED_TEXTURE (stex));
priv = stex->priv;
if (priv->clip_region)
{
gdk_region_destroy (priv->clip_region);
priv->clip_region = NULL;
}
priv->clip_region = clip_region;
}

View File

@@ -0,0 +1,101 @@
/*
* shaped texture
*
* An actor to draw a texture clipped to a list of rectangles
*
* Authored By Neil Roberts <neil@linux.intel.com>
*
* Copyright (C) 2008 Intel Corporation
*
* 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 __MUTTER_SHAPED_TEXTURE_H__
#define __MUTTER_SHAPED_TEXTURE_H__
#include <clutter/clutter.h>
#ifdef HAVE_GLX_TEXTURE_PIXMAP
#include <clutter/glx/clutter-glx.h>
#endif /* HAVE_GLX_TEXTURE_PIXMAP */
#include <gdk/gdkregion.h>
G_BEGIN_DECLS
#define MUTTER_TYPE_SHAPED_TEXTURE \
(mutter_shaped_texture_get_type())
#define MUTTER_SHAPED_TEXTURE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
MUTTER_TYPE_SHAPED_TEXTURE, \
MutterShapedTexture))
#define MUTTER_SHAPED_TEXTURE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
MUTTER_TYPE_SHAPED_TEXTURE, \
MutterShapedTextureClass))
#define MUTTER_IS_SHAPED_TEXTURE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
MUTTER_TYPE_SHAPED_TEXTURE))
#define MUTTER_IS_SHAPED_TEXTURE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
MUTTER_TYPE_SHAPED_TEXTURE))
#define MUTTER_SHAPED_TEXTURE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
MUTTER_TYPE_SHAPED_TEXTURE, \
MutterShapedTextureClass))
typedef struct _MutterShapedTexture MutterShapedTexture;
typedef struct _MutterShapedTextureClass MutterShapedTextureClass;
typedef struct _MutterShapedTexturePrivate MutterShapedTexturePrivate;
struct _MutterShapedTextureClass
{
#ifdef HAVE_GLX_TEXTURE_PIXMAP
ClutterGLXTexturePixmapClass parent_class;
#else
ClutterX11TexturePixmapClass parent_class;
#endif
};
struct _MutterShapedTexture
{
#ifdef HAVE_GLX_TEXTURE_PIXMAP
ClutterGLXTexturePixmap parent;
#else
ClutterX11TexturePixmap parent;
#endif
MutterShapedTexturePrivate *priv;
};
GType mutter_shaped_texture_get_type (void) G_GNUC_CONST;
ClutterActor *mutter_shaped_texture_new (void);
void mutter_shaped_texture_clear_rectangles (MutterShapedTexture *stex);
void mutter_shaped_texture_add_rectangle (MutterShapedTexture *stex,
const XRectangle *rect);
void mutter_shaped_texture_add_rectangles (MutterShapedTexture *stex,
size_t num_rects,
const XRectangle *rects);
/* Assumes ownership of clip_region */
void mutter_shaped_texture_set_clip_region (MutterShapedTexture *stex,
GdkRegion *clip_region);
G_END_DECLS
#endif /* __MUTTER_SHAPED_TEXTURE_H__ */

View File

@@ -0,0 +1,649 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* MutterTextureTower
*
* Mipmap emulation by creation of scaled down images
*
* Copyright (C) 2009 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include <math.h>
#include <string.h>
#include "mutter-texture-tower.h"
#ifndef M_LOG2E
#define M_LOG2E 1.4426950408889634074
#endif
#define MAX_TEXTURE_LEVELS 12
/* If the texture format in memory doesn't match this, then Mesa
* will do the conversion, so things will still work, but it might
* be slow depending on how efficient Mesa is. These should be the
* native formats unless the display is 16bpp. If conversions
* here are a bottleneck, investigate whether we are converting when
* storing window data *into* the texture before adding extra code
* to handle multiple texture formats.
*/
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
#define TEXTURE_FORMAT COGL_PIXEL_FORMAT_BGRA_8888_PRE
#else
#define TEXTURE_FORMAT COGL_PIXEL_FORMAT_ARGB_8888_PRE
#endif
typedef struct
{
guint16 x1;
guint16 y1;
guint16 x2;
guint16 y2;
} Box;
struct _MutterTextureTower
{
int n_levels;
CoglHandle textures[MAX_TEXTURE_LEVELS];
CoglHandle fbos[MAX_TEXTURE_LEVELS];
Box invalid[MAX_TEXTURE_LEVELS];
};
/**
* mutter_texture_tower_new:
*
* Creates a new texture tower. The base texture has to be set with
* mutter_texture_tower_set_base_texture() before use.
*
* Return value: the new texture tower. Free with mutter_texture_tower_free()
*/
MutterTextureTower *
mutter_texture_tower_new (void)
{
MutterTextureTower *tower;
tower = g_slice_new0 (MutterTextureTower);
return tower;
}
/**
* mutter_texture_tower_free:
* @tower: a #MutterTextureTower
*
* Frees a texture tower created with mutter_texture_tower_new().
*/
void
mutter_texture_tower_free (MutterTextureTower *tower)
{
g_return_if_fail (tower != NULL);
mutter_texture_tower_set_base_texture (tower, COGL_INVALID_HANDLE);
g_slice_free (MutterTextureTower, tower);
}
static gboolean
texture_is_rectangle (CoglHandle texture)
{
GLuint gl_tex;
GLenum gl_target;
cogl_texture_get_gl_texture (texture, &gl_tex, &gl_target);
return gl_target == GL_TEXTURE_RECTANGLE_ARB;
}
static void
free_texture (CoglHandle texture)
{
GLuint gl_tex;
GLenum gl_target;
cogl_texture_get_gl_texture (texture, &gl_tex, &gl_target);
if (gl_target == GL_TEXTURE_RECTANGLE_ARB)
glDeleteTextures (1, &gl_tex);
cogl_handle_unref (texture);
}
/**
* mutter_texture_tower_update_area:
* @tower: a MutterTextureTower
* @texture: the new texture used as a base for scaled down versions
*
* Sets the base texture that is the scaled texture that the
* scaled textures of the tower are derived from. The texture itself
* will be used as level 0 of the tower and will be referenced until
* unset or until the tower is freed.
*/
void
mutter_texture_tower_set_base_texture (MutterTextureTower *tower,
CoglHandle texture)
{
int i;
g_return_if_fail (tower != NULL);
if (texture == tower->textures[0])
return;
if (tower->textures[0] != COGL_INVALID_HANDLE)
{
for (i = 1; i < tower->n_levels; i++)
{
if (tower->textures[i] != COGL_INVALID_HANDLE)
{
free_texture (tower->textures[i]);
tower->textures[i] = COGL_INVALID_HANDLE;
}
if (tower->fbos[i] != COGL_INVALID_HANDLE)
{
cogl_handle_unref (tower->fbos[i]);
tower->fbos[i] = COGL_INVALID_HANDLE;
}
}
cogl_handle_unref (tower->textures[0]);
}
tower->textures[0] = texture;
if (tower->textures[0] != COGL_INVALID_HANDLE)
{
int width, height;
cogl_handle_ref (tower->textures[0]);
width = cogl_texture_get_width (tower->textures[0]);
height = cogl_texture_get_height (tower->textures[0]);
tower->n_levels = 1 + MAX ((int)(M_LOG2E * log (width)), (int)(M_LOG2E * log (height)));
tower->n_levels = MIN(tower->n_levels, MAX_TEXTURE_LEVELS);
mutter_texture_tower_update_area (tower, 0, 0, width, height);
}
else
{
tower->n_levels = 0;
}
}
/**
* mutter_texture_tower_update_area:
* @tower: a MutterTextureTower
* @x: X coordinate of upper left of rectangle that changed
* @y: Y coordinate of upper left of rectangle that changed
* @width: width of rectangle that changed
* @height: height rectangle that changed
*
* Mark a region of the base texture as having changed; the next
* time a scaled down version of the base texture is retrieved,
* the appropriate area of the scaled down texture will be updated.
*/
void
mutter_texture_tower_update_area (MutterTextureTower *tower,
int x,
int y,
int width,
int height)
{
int texture_width, texture_height;
Box invalid;
int i;
g_return_if_fail (tower != NULL);
texture_width = cogl_texture_get_width (tower->textures[0]);
texture_height = cogl_texture_get_height (tower->textures[0]);
invalid.x1 = x;
invalid.y1 = y;
invalid.x2 = x + width;
invalid.y2 = y + height;
for (i = 1; i < tower->n_levels; i++)
{
texture_width = MAX (1, texture_width / 2);
texture_height = MAX (1, texture_height / 2);
invalid.x1 = invalid.x1 / 2;
invalid.y1 = invalid.y1 / 2;
invalid.x2 = MIN (texture_width, (invalid.x2 + 1) / 2);
invalid.y2 = MIN (texture_height, (invalid.y2 + 1) / 2);
if (tower->invalid[i].x1 == tower->invalid[i].x2 ||
tower->invalid[i].y1 == tower->invalid[i].y2)
{
tower->invalid[i] = invalid;
}
else
{
tower->invalid[i].x1 = MIN (tower->invalid[i].x1, invalid.x1);
tower->invalid[i].y1 = MIN (tower->invalid[i].y1, invalid.y1);
tower->invalid[i].x2 = MAX (tower->invalid[i].x2, invalid.x2);
tower->invalid[i].y2 = MAX (tower->invalid[i].y2, invalid.y2);
}
}
}
/* It generally looks worse if we scale up a window texture by even a
* small amount than if we scale it down using bilinear filtering, so
* we always pick the *larger* adjacent level. */
#define LOD_BIAS (-0.49)
/* This determines the appropriate level of detail to use when drawing the
* texture, in a way that corresponds to what the GL specification does
* when mip-mapping. This is probably fancier and slower than what we need,
* but we do the computation only once each time we paint a window, and
* its easier to just use the equations from the specification than to
* come up with something simpler.
*
* If window is being painted at an angle from the viewer, then we have to
* pick a point in the texture; we use the middle of the texture (which is
* why the width/height are passed in.) This is not the normal case for
* Mutter.
*/
static int
get_paint_level (int width, int height)
{
CoglMatrix projection, modelview, pm;
float v[4];
double viewport_width, viewport_height;
double u0, v0;
double xc, yc, wc;
double dxdu_, dxdv_, dydu_, dydv_;
double det_, det_sq;
double rho_sq;
double lambda;
/* See
* http://www.opengl.org/registry/doc/glspec32.core.20090803.pdf
* Section 3.8.9, p. 1.6.2. Here we have
*
* u(x,y) = x_o;
* v(x,y) = y_o;
*
* Since we are mapping 1:1 from object coordinates into pixel
* texture coordinates, the clip coordinates are:
*
* (x_c) (x_o) (u)
* (y_c) = (M_projection)(M_modelview) (y_o) = (PM) (v)
* (z_c) (z_o) (0)
* (w_c) (w_o) (1)
*/
cogl_get_projection_matrix (&projection);
cogl_get_modelview_matrix (&modelview);
cogl_matrix_multiply (&pm, &projection, &modelview);
cogl_get_viewport (v);
viewport_width = v[2];
viewport_height = v[3];
u0 = width / 2.;
v0 = height / 2.;
xc = pm.xx * u0 + pm.xy * v0 + pm.xw;
yc = pm.yx * u0 + pm.yy * v0 + pm.yw;
wc = pm.wx * u0 + pm.wy * v0 + pm.ww;
/* We'll simplify the equations below for a bit of micro-optimization.
* The commented out code is the unsimplified version.
// Partial derivates of window coordinates:
//
// x_w = 0.5 * viewport_width * x_c / w_c + viewport_center_x
// y_w = 0.5 * viewport_height * y_c / w_c + viewport_center_y
//
// with respect to u, v, using
// d(a/b)/dx = da/dx * (1/b) - a * db/dx / (b^2)
dxdu = 0.5 * viewport_width * (pm.xx - pm.wx * (xc/wc)) / wc;
dxdv = 0.5 * viewport_width * (pm.xy - pm.wy * (xc/wc)) / wc;
dydu = 0.5 * viewport_height * (pm.yx - pm.wx * (yc/wc)) / wc;
dydv = 0.5 * viewport_height * (pm.yy - pm.wy * (yc/wc)) / wc;
// Compute the inverse partials as the matrix inverse
det = dxdu * dydv - dxdv * dydu;
dudx = dydv / det;
dudy = - dxdv / det;
dvdx = - dydu / det;
dvdy = dvdu / det;
// Scale factor; maximum of the distance in texels for a change of 1 pixel
// in the X direction or 1 pixel in the Y direction
rho = MAX (sqrt (dudx * dudx + dvdx * dvdx), sqrt(dudy * dudy + dvdy * dvdy));
// Level of detail
lambda = log2 (rho) + LOD_BIAS;
*/
/* dxdu * wc, etc */
dxdu_ = 0.5 * viewport_width * (pm.xx - pm.wx * (xc/wc));
dxdv_ = 0.5 * viewport_width * (pm.xy - pm.wy * (xc/wc));
dydu_ = 0.5 * viewport_height * (pm.yx - pm.wx * (yc/wc));
dydv_ = 0.5 * viewport_height * (pm.yy - pm.wy * (yc/wc));
/* det * wc^2 */
det_ = dxdu_ * dydv_ - dxdv_ * dydu_;
det_sq = det_ * det_;
if (det_sq == 0.0)
return -1;
/* (rho * det * wc)^2 */
rho_sq = MAX (dydv_ * dydv_ + dydu_ * dydu_, dxdv_ * dxdv_ + dxdu_ * dxdu_);
lambda = 0.5 * M_LOG2E * log (rho_sq * wc * wc / det_sq) + LOD_BIAS;
#if 0
g_print ("%g %g %g\n", 0.5 * viewport_width * pm.xx / pm.ww, 0.5 * viewport_height * pm.yy / pm.ww, lambda);
#endif
if (lambda <= 0.)
return 0;
else
return (int)(0.5 + lambda);
}
static gboolean
is_power_of_two (int x)
{
return (x & (x - 1)) == 0;
}
static void
texture_tower_create_texture (MutterTextureTower *tower,
int level,
int width,
int height)
{
if ((!is_power_of_two (width) || !is_power_of_two (height)) &&
texture_is_rectangle (tower->textures[level - 1]))
{
GLuint tex = 0;
glGenTextures (1, &tex);
glBindTexture (GL_TEXTURE_RECTANGLE_ARB, tex);
glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0,
GL_RGBA, width,height,
#if TEXTURE_FORMAT == COGL_PIXEL_FORMAT_BGRA_8888_PRE
0, GL_BGRA, GL_UNSIGNED_BYTE,
#else /* assume big endian */
0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV,
#endif
NULL);
tower->textures[level] = cogl_texture_new_from_foreign (tex, GL_TEXTURE_RECTANGLE_ARB,
width, height,
0, 0,
TEXTURE_FORMAT);
}
else
{
tower->textures[level] = cogl_texture_new_with_size (width, height,
COGL_TEXTURE_NO_AUTO_MIPMAP,
TEXTURE_FORMAT);
}
tower->invalid[level].x1 = 0;
tower->invalid[level].y1 = 0;
tower->invalid[level].x2 = width;
tower->invalid[level].y2 = height;
}
static gboolean
texture_tower_revalidate_fbo (MutterTextureTower *tower,
int level)
{
CoglHandle source_texture = tower->textures[level - 1];
int source_texture_width = cogl_texture_get_width (source_texture);
int source_texture_height = cogl_texture_get_height (source_texture);
CoglHandle dest_texture = tower->textures[level];
int dest_texture_width = cogl_texture_get_width (dest_texture);
int dest_texture_height = cogl_texture_get_height (dest_texture);
Box *invalid = &tower->invalid[level];
CoglMatrix modelview;
if (tower->fbos[level] == COGL_INVALID_HANDLE)
tower->fbos[level] = cogl_offscreen_new_to_texture (dest_texture);
if (tower->fbos[level] == COGL_INVALID_HANDLE)
return FALSE;
cogl_push_framebuffer (tower->fbos[level]);
cogl_ortho (0, dest_texture_width, dest_texture_height, 0, -1., 1.);
cogl_matrix_init_identity (&modelview);
cogl_set_modelview_matrix (&modelview);
cogl_set_source_texture (tower->textures[level - 1]);
cogl_rectangle_with_texture_coords (invalid->x1, invalid->y1,
invalid->x2, invalid->y2,
(2. * invalid->x1) / source_texture_width,
(2. * invalid->y1) / source_texture_height,
(2. * invalid->x2) / source_texture_width,
(2. * invalid->y2) / source_texture_height);
cogl_pop_framebuffer ();
return TRUE;
}
static void
fill_copy (guchar *buf,
const guchar *source,
int width)
{
memcpy (buf, source, width * 4);
}
static void
fill_scale_down (guchar *buf,
const guchar *source,
int width)
{
while (width > 1)
{
buf[0] = (source[0] + source[4]) / 2;
buf[1] = (source[1] + source[5]) / 2;
buf[2] = (source[2] + source[6]) / 2;
buf[3] = (source[3] + source[7]) / 2;
buf += 4;
source += 8;
width -= 2;
}
if (width > 0)
{
buf[0] = source[0] / 2;
buf[1] = source[1] / 2;
buf[2] = source[2] / 2;
buf[3] = source[3] / 2;
}
}
static void
texture_tower_revalidate_client (MutterTextureTower *tower,
int level)
{
CoglHandle source_texture = tower->textures[level - 1];
int source_texture_width = cogl_texture_get_width (source_texture);
int source_texture_height = cogl_texture_get_height (source_texture);
guint source_rowstride;
guchar *source_data;
CoglHandle dest_texture = tower->textures[level];
int dest_texture_width = cogl_texture_get_width (dest_texture);
int dest_texture_height = cogl_texture_get_height (dest_texture);
int dest_x = tower->invalid[level].x1;
int dest_y = tower->invalid[level].y1;
int dest_width = tower->invalid[level].x2 - tower->invalid[level].x1;
int dest_height = tower->invalid[level].y2 - tower->invalid[level].y1;
guchar *dest_data;
guchar *source_tmp1 = NULL, *source_tmp2 = NULL;
int i, j;
source_rowstride = source_texture_width * 4;
source_data = g_malloc (source_texture_height * source_rowstride);
cogl_texture_get_data (source_texture, TEXTURE_FORMAT, source_rowstride,
source_data);
dest_data = g_malloc (dest_height * dest_width * 4);
if (dest_texture_height < source_texture_height)
{
source_tmp1 = g_malloc (dest_width * 4);
source_tmp2 = g_malloc (dest_width * 4);
}
for (i = 0; i < dest_height; i++)
{
guchar *dest_row = dest_data + i * dest_width * 4;
if (dest_texture_height < source_texture_height)
{
guchar *source1, *source2;
guchar *dest;
if (dest_texture_width < source_texture_width)
{
fill_scale_down (source_tmp1,
source_data + ((i + dest_y) * 2) * source_rowstride + dest_x * 2 * 4,
dest_width * 2);
fill_scale_down (source_tmp2,
source_data + ((i + dest_y) * 2 + 1) * source_rowstride + dest_x * 2 * 4,
dest_width * 2);
}
else
{
fill_copy (source_tmp1,
source_data + ((i + dest_y) * 2) * source_rowstride + dest_x * 4,
dest_width);
fill_copy (source_tmp2,
source_data + ((i + dest_y) * 2 + 1) * source_rowstride + dest_x * 4,
dest_width);
}
source1 = source_tmp1;
source2 = source_tmp2;
dest = dest_row;
for (j = 0; j < dest_width * 4; j++)
*(dest++) = (*(source1++) + *(source2++)) / 2;
}
else
{
if (dest_texture_width < source_texture_width)
fill_scale_down (dest_row,
source_data + (i + dest_y) * source_rowstride + dest_x * 2 * 4,
dest_width * 2);
else
fill_copy (dest_row,
source_data + (i + dest_y) * source_rowstride,
dest_width);
}
}
cogl_texture_set_region (dest_texture,
0, 0,
dest_x, dest_y,
dest_width, dest_height,
dest_width, dest_height,
TEXTURE_FORMAT,
4 * dest_width,
dest_data);
if (dest_height < source_texture_height)
{
g_free (source_tmp1);
g_free (source_tmp2);
}
g_free (source_data);
g_free (dest_data);
}
static void
texture_tower_revalidate (MutterTextureTower *tower,
int level)
{
if (!texture_tower_revalidate_fbo (tower, level))
texture_tower_revalidate_client (tower, level);
}
/**
* mutter_texture_tower_get_paint_texture:
* @tower: a MutterTextureTower
*
* Gets the texture from the tower that best matches the current
* rendering scale. (On the assumption here the texture is going to
* be rendered with vertex coordinates that correspond to its
* size in pixels, so a 200x200 texture will be rendered on the
* rectangle (0, 0, 200, 200).
*
* Return value: the COGL texture handle to use for painting, or
* %COGL_INVALID_HANDLE if no base texture has yet been set.
*/
CoglHandle
mutter_texture_tower_get_paint_texture (MutterTextureTower *tower)
{
int texture_width, texture_height;
int level;
g_return_val_if_fail (tower != NULL, COGL_INVALID_HANDLE);
if (tower->textures[0] == COGL_INVALID_HANDLE)
return COGL_INVALID_HANDLE;
texture_width = cogl_texture_get_width (tower->textures[0]);
texture_height = cogl_texture_get_height (tower->textures[0]);
level = get_paint_level(texture_width, texture_height);
if (level < 0) /* singular paint matrix, scaled to nothing */
return COGL_INVALID_HANDLE;
level = MIN (level, tower->n_levels - 1);
if (tower->textures[level] == COGL_INVALID_HANDLE ||
(tower->invalid[level].x2 != tower->invalid[level].x1 &&
tower->invalid[level].y2 != tower->invalid[level].y1))
{
int i;
for (i = 1; i <= level; i++)
{
/* Use "floor" convention here to be consistent with the NPOT texture extension */
texture_width = MAX (1, texture_width / 2);
texture_height = MAX (1, texture_height / 2);
if (tower->textures[i] == COGL_INVALID_HANDLE)
texture_tower_create_texture (tower, i, texture_width, texture_height);
}
for (i = 1; i <= level; i++)
{
if (tower->invalid[level].x2 != tower->invalid[level].x1 &&
tower->invalid[level].y2 != tower->invalid[level].y1)
texture_tower_revalidate (tower, i);
}
}
return tower->textures[level];
}

View File

@@ -0,0 +1,69 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
/*
* MutterTextureTower
*
* Mipmap emulation by creation of scaled down images
*
* Copyright (C) 2009 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 __MUTTER_TEXTURE_TOWER_H__
#define __MUTTER_TEXTURE_TOWER_H__
#include <clutter/clutter.h>
G_BEGIN_DECLS
/**
* SECTION:MutterTextureTower
* @short_description: mipmap emulation by creation of scaled down images
*
* A #MutterTextureTower is used to get good looking scaled down images when
* we can't use the GL drivers mipmap support. There are two separate reasons
*
* - Some cards (including radeon cards <= r5xx) only support
* TEXTURE_RECTANGLE_ARB and not NPOT textures. Rectangular textures
* are defined not to support mipmapping.
* - Even when NPOT textures are available, the combination of NPOT
* textures, texture_from_pixmap, and mipmapping doesn't typically
* work, since the X server doesn't allocate pixmaps in the right
* layout for mipmapping.
*
* So, what we do is create the "mipmap" levels ourselves by successive
* power-of-two scaledowns, and when rendering pick the single texture
* that best matches the scale we are rendering at. (Since we aren't
* typically using perspective transforms, we'll frequently have a single
* scale for the entire texture.)
*/
typedef struct _MutterTextureTower MutterTextureTower;
MutterTextureTower *mutter_texture_tower_new (void);
void mutter_texture_tower_free (MutterTextureTower *tower);
void mutter_texture_tower_set_base_texture (MutterTextureTower *tower,
CoglHandle texture);
void mutter_texture_tower_update_area (MutterTextureTower *tower,
int x,
int y,
int width,
int height);
CoglHandle mutter_texture_tower_get_paint_texture (MutterTextureTower *tower);
G_BEGIN_DECLS
#endif /* __MUTTER_TEXTURE_TOWER_H__ */

View File

@@ -0,0 +1,194 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
#define _ISOC99_SOURCE /* for roundf */
#include <math.h>
#include "mutter-window-private.h"
#include "mutter-window-group.h"
struct _MutterWindowGroupClass
{
ClutterGroupClass parent_class;
};
struct _MutterWindowGroup
{
ClutterGroup parent;
MetaScreen *screen;
};
G_DEFINE_TYPE (MutterWindowGroup, mutter_window_group, CLUTTER_TYPE_GROUP);
/* We want to find out if the window is "close enough" to
* 1:1 transform. We do that by converting the transformed coordinates
* to 24.8 fixed-point before checking if they look right.
*/
static inline int
round_to_fixed (float x)
{
return roundf (x * 256);
}
/* We can only (easily) apply our logic for figuring out what a window
* obscures if is not transformed. This function does that check and
* as a side effect gets the position of the upper-left corner of the
* actors.
*
* (We actually could handle scaled and non-integrally positioned actors
* too as long as they weren't shaped - no filtering is done at the
* edges so a rectangle stays a rectangle. But the gain from that is
* small, especally since most of our windows are shaped. The simple
* case we handle here is the case that matters when the user is just
* using the desktop normally.)
*
* If we assume that the window group is untransformed (it better not
* be!) then we could also make this determination by checking directly
* if the actor itself is rotated, scaled, or at a non-integral position.
* However, the criterion for "close enough" in that case get trickier,
* since, for example, the allowed rotation depends on the size of
* actor. The approach we take here is to just require everything
* to be within 1/256th of a pixel.
*/
static gboolean
actor_is_untransformed (ClutterActor *actor,
int *x_origin,
int *y_origin)
{
gfloat widthf, heightf;
int width, height;
ClutterVertex verts[4];
int v0x, v0y, v1x, v1y, v2x, v2y, v3x, v3y;
int x, y;
clutter_actor_get_size (actor, &widthf, &heightf);
width = round_to_fixed (widthf); height = round_to_fixed (heightf);
clutter_actor_get_abs_allocation_vertices (actor, verts);
v0x = round_to_fixed (verts[0].x); v0y = round_to_fixed (verts[0].y);
v1x = round_to_fixed (verts[1].x); v1y = round_to_fixed (verts[1].y);
v2x = round_to_fixed (verts[2].x); v2y = round_to_fixed (verts[2].y);
v3x = round_to_fixed (verts[3].x); v3y = round_to_fixed (verts[3].y);
/* Using shifting for converting fixed => int, gets things right for
* negative values. / 256. wouldn't do the same
*/
x = v0x >> 8;
y = v0y >> 8;
/* At integral coordinates? */
if (x * 256 != v0x || y * 256 != v0y)
return FALSE;
/* Not scaled? */
if (v1x - v0x != width || v2y - v0y != height)
return FALSE;
/* Not rotated/skewed? */
if (v0x != v2x || v0y != v1y ||
v3x != v1x || v3y != v2y)
return FALSE;
*x_origin = x;
*y_origin = y;
return TRUE;
}
static void
mutter_window_group_paint (ClutterActor *actor)
{
MutterWindowGroup *window_group = MUTTER_WINDOW_GROUP (actor);
GdkRegion *visible_region;
GdkRectangle screen_rect = { 0 };
GList *children, *l;
/* We walk the list from top to bottom (opposite of painting order),
* and subtract the opaque area of each window out of the visible
* region that we pass to the windows below.
*/
children = clutter_container_get_children (CLUTTER_CONTAINER (actor));
children = g_list_reverse (children);
/* Start off with the full screen area (for a multihead setup, we
* might want to use a more accurate union of the monitors to avoid
* painting in holes from mismatched monitor sizes. That's just an
* optimization, however.)
*/
meta_screen_get_size (window_group->screen, &screen_rect.width, &screen_rect.height);
visible_region = gdk_region_rectangle (&screen_rect);
for (l = children; l; l = l->next)
{
MutterWindow *cw;
gboolean x, y;
if (!MUTTER_IS_WINDOW (l->data) || !CLUTTER_ACTOR_IS_VISIBLE (l->data))
continue;
cw = l->data;
if (!actor_is_untransformed (CLUTTER_ACTOR (cw), &x, &y))
continue;
/* Temporarily move to the coordinate system of the actor */
gdk_region_offset (visible_region, - x, - y);
mutter_window_set_visible_region (cw, visible_region);
if (clutter_actor_get_paint_opacity (CLUTTER_ACTOR (cw)) == 0xff)
{
GdkRegion *obscured_region = mutter_window_get_obscured_region (cw);
if (obscured_region)
gdk_region_subtract (visible_region, obscured_region);
}
mutter_window_set_visible_region_beneath (cw, visible_region);
gdk_region_offset (visible_region, x, y);
}
gdk_region_destroy (visible_region);
CLUTTER_ACTOR_CLASS (mutter_window_group_parent_class)->paint (actor);
/* Now that we are done painting, unset the visible regions (they will
* mess up painting clones of our actors)
*/
for (l = children; l; l = l->next)
{
MutterWindow *cw;
if (!MUTTER_IS_WINDOW (l->data))
continue;
cw = l->data;
mutter_window_reset_visible_regions (cw);
}
g_list_free (children);
}
static void
mutter_window_group_class_init (MutterWindowGroupClass *klass)
{
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
actor_class->paint = mutter_window_group_paint;
}
static void
mutter_window_group_init (MutterWindowGroup *window_group)
{
}
ClutterActor *
mutter_window_group_new (MetaScreen *screen)
{
MutterWindowGroup *window_group;
window_group = g_object_new (MUTTER_TYPE_WINDOW_GROUP, NULL);
window_group->screen = screen;
return CLUTTER_ACTOR (window_group);
}

View File

@@ -0,0 +1,52 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
#ifndef MUTTER_WINDOW_GROUP_H
#define MUTTER_WINDOW_GROUP_H
#include <clutter/clutter.h>
#include "screen.h"
/**
* MutterWindowGroup:
*
* This class is a subclass of ClutterGroup with special handling for
* MutterWindow when painting the group. When we are painting a stack
* of 5-10 maximized windows, the standard bottom-to-top method of
* drawing every actor results in a tremendous amount of overdraw
* and can easily max out the available memory bandwidth on a low-end
* graphics chipset. It's even worse if window textures are being accessed
* over the AGP bus.
*
* The basic technique applied here is to do a pre-pass before painting
* where we walk window from top to bottom and compute the visible area
* at each step by subtracting out the windows above it. The visible
* area is passed to MutterWindow which uses it to clip the portion of
* the window which drawn and avoid redrawing the shadow if it is completely
* obscured.
*
* A caveat is that this is ineffective if applications are using ARGB
* visuals, since we have no way of knowing whether a window obscures
* the windows behind it or not. Alternate approaches using the depth
* or stencil buffer rather than client side regions might be able to
* handle alpha windows, but the combination of glAlphaFunc and stenciling
* tends not to be efficient except on newer cards. (And on newer cards
* we have lots of memory and bandwidth.)
*/
#define MUTTER_TYPE_WINDOW_GROUP (mutter_window_group_get_type ())
#define MUTTER_WINDOW_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MUTTER_TYPE_WINDOW_GROUP, MutterWindowGroup))
#define MUTTER_WINDOW_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MUTTER_TYPE_WINDOW_GROUP, MutterWindowGroupClass))
#define MUTTER_IS_WINDOW_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MUTTER_TYPE_WINDOW_GROUP))
#define MUTTER_IS_WINDOW_GROU_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MUTTER_TYPE_WINDOW_GROUP))
#define MUTTER_WINDOW_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MUTTER_TYPE_WINDOW_GROUP, MutterWindowGroupClass))
typedef struct _MutterWindowGroup MutterWindowGroup;
typedef struct _MutterWindowGroupClass MutterWindowGroupClass;
typedef struct _MutterWindowGroupPrivate MutterWindowGroupPrivate;
GType mutter_window_group_get_type (void);
ClutterActor *mutter_window_group_new (MetaScreen *screen);
#endif /* MUTTER_WINDOW_GROUP_H */

View File

@@ -0,0 +1,51 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
#ifndef MUTTER_WINDOW_PRIVATE_H
#define MUTTER_WINDOW_PRIVATE_H
#include <X11/extensions/Xdamage.h>
#include <gdk/gdk.h>
#include "compositor-mutter.h"
MutterWindow *mutter_window_new (MetaWindow *window);
void mutter_window_destroy (MutterWindow *cw);
void mutter_window_show (MutterWindow *cw,
MetaCompEffect effect);
void mutter_window_hide (MutterWindow *cw,
MetaCompEffect effect);
void mutter_window_maximize (MutterWindow *cw,
MetaRectangle *old_rect,
MetaRectangle *new_rect);
void mutter_window_unmaximize (MutterWindow *cw,
MetaRectangle *old_rect,
MetaRectangle *new_rect);
void mutter_window_process_damage (MutterWindow *cw,
XDamageNotifyEvent *event);
void mutter_window_pre_paint (MutterWindow *self);
gboolean mutter_window_effect_in_progress (MutterWindow *cw);
void mutter_window_sync_actor_position (MutterWindow *cw);
void mutter_window_sync_visibility (MutterWindow *cw);
void mutter_window_update_window_type (MutterWindow *cw);
void mutter_window_update_shape (MutterWindow *cw,
gboolean shaped);
void mutter_window_update_opacity (MutterWindow *cw);
void mutter_window_mapped (MutterWindow *cw);
void mutter_window_unmapped (MutterWindow *cw);
GdkRegion *mutter_window_get_obscured_region (MutterWindow *cw);
void mutter_window_set_visible_region (MutterWindow *cw,
GdkRegion *visible_region);
void mutter_window_set_visible_region_beneath (MutterWindow *cw,
GdkRegion *beneath_region);
void mutter_window_reset_visible_regions (MutterWindow *cw);
void mutter_window_effect_completed (MutterWindow *actor,
gulong event);
#endif /* MUTTER_WINDOW_PRIVATE_H */

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More