~compiz-team/compiz-core/compiz-core.fix_860304

Viewing all changes in revision 2834.

  • Committer: Sam Spilsbury
  • Date: 2011-09-25 03:36:05 UTC
  • Revision ID: sam.spilsbury@canonical.com-20110925033605-m395o7nyhrupjn6h
Track ConfigureWindow requests and match them to ConfigureNotify events.

By doing this we are able to see what the pending requests are on a window
at any given time, and can transform new requests to suit these pending
ones. Currently, this only works for windows that we reparent and are
not override redirect since those are the only windows where we can guaruntee
that all ConfigureNotify events will be generated by us.

This isn't exposed to plugins at the moment, but it may be useful later on.

Incidentally, this allows us to fix a stacking corner case which was the
following situation:

Windows A, B and C map (placed on top), and must stack relative to each other

Window A gets stacked beneath D (which is a panel),
Window B should be stacked above A,
Window C should be stacked above B,

What happened was that updateAttributes would be called and
request to put window B above A, which it was already above in
CompScreen::windows, so that stacking request becomes a no-op. In this case
we check if the window is pending a restack and then request to put it
above the same window it was already a sibling to if findSiblingBelow found
that to be the case.

This fixes problems with, eg GIMP and Libreoffice, which make heavy use
of transient windows when mapping their windows and may also restack
their own windows when there is no window manager running

expand all expand all

Show diffs side-by-side

added added

removed removed

Lines of Context: