Support for KDE 3 & 4, background capture to stop icons being overwirtten.
authorJames Hogan <james@albanarts.com>
Tue, 12 Jan 2010 23:12:44 +0000 (23:12 +0000)
committerJames Hogan <james@albanarts.com>
Tue, 12 Jan 2010 23:12:44 +0000 (23:12 +0000)
commit2d3299f6f93420ec83f94a2b2ab1d8c08f9528ac
tree4e48074ac5858f9d2beb49eb2673a970f6091091
parentc347b51f3abc0288944638e96a1d702a98543b57
Support for KDE 3 & 4, background capture to stop icons being overwirtten.

The KDE 4 desktop is called plasma-desktop and it doesn't work well with
xpenguins. XClearArea on it doesn't have an effect so penguins leave trails
wherever they go.

As well as adding code to detect which window to draw to in KDE 3.5 and 4.3
(there are currently problems with 4.0), this change works around the above
problem and that of icons being overwritten with a new command line option
-g/--bgcapture. When enabled XPenguins captures the contents of the window it
draws to when it starts, and attempts to keep the capture up to date by
randomly exposing and recapturing rectangles of the desktop that penguins are
not overlapping. It then copies from the image to erase the penguins and
restore the background.

Not yet working / not yet tested:
* KDE 4.0 desktop can't be drawn to
* Not tested with multiple monitors or panned desktops

More detailed changes:
* added -bgcapture option
* updated man page with info about -bgcapture option
* only walk on windows on the current desktop
* new draw mode where the canvas of the root window is captured and redrawn
* capture updated by exposing and recapturing unused rectangles of the screen
* fix erasing of toon's to erase exact previous shape (taking into account
  that it may have changed form).
* improved root window searching
  essense of KDE desktop window finding reduced to an algorithm and a set of
  data structures for each variation to define the matching rules.
* matching rules for KDE 2.0 from the old function
* matching rules for KDE 3(.5) and KDE 4(.3)
src/main.c
src/toon.h
src/toon_core.c
src/toon_draw.c
src/toon_globals.c
src/toon_init.c
src/toon_root.c
src/toon_signal.c
xpenguins.1