Extensions interacting with windows



I was working on my extensions some more today and decided I would
venture out into a some new territory.  The simple goal was to create a
lightbox extension.  The new territories was that we currently don't
have any scripted actors that actually interact with the desktop
windows, in particular the window stack.  I found quite quickly that
there is no sane way to currently do this.

The windows are easily accessible by code under global.window_group.  We
can add actors to that group and they show up behind windows as they
should, temporarily.  Within the compositor there is code that syncs the
stack of actors with the stack of windows.  It is never taken into
account that there may be non-window actors within the group, which in
turn ends up with all window actors always stacked below non-window
actors.

My temporary hack to get things "mostly" working is to continue to stack
all actors to the bottom except the "top" window.  This creates a stack
like.

top-window (focused?  not all the time)
non-window clutter actors (should they be in their own group?)
rest-of windows

This model mostly works because in general our window manager has a
single focused window that is what we need to interact with.  There are
lots of nice corner cases like terminals that need 2 top windows because
we draw the size box.  These also tend to screw up the window stacking
and re-draw.  We also need to take into account windows pinned to
"always on top", and where they fall into the equation.

Before I get too deep into the waters I figured I would see if this is
something that we even want to entertain supporting in mutter.

Here is a quick video of the Lightbox extension, mostly working.

http://www.youtube.com/watch?v=20mIDAURzO4

-Jon



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]