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
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
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
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
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
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
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
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
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).
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.
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
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
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.
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()
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.
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
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.
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
* 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-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
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
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
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.
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.
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.
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.
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)
* src/core/main.c: (main): added call to g_thread_init(), as ORBit2
stopped doing it and Metacity is using gconf; closes#565517.
svn path=/trunk/; revision=4063
* src/metacity.schemas.in.in: add screenshot commands which had
mistakenly been removed; closes#564343, Launchpad bug 298463,
Red Hat bug 474635, and probably others.
svn path=/trunk/; revision=4062
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.
* src/core/window.c: windows which attempt to present themselves
but are offscreen end up demanding attention, unless they
are transient, when they move to the current workspace
as before. Closes#482354.
svn path=/trunk/; revision=4060