v2.1.1: * BUGFIX: if you start XPenguins on the desktop and onAllWorkspaces == false, stop it and then start it again on a *different* workspace, the toons will ignore the windows. v2.1: * when you open the about dialog for a theme, another XPenguins process will run in that dialog to give you a preview of that theme. v2.0: * many changes allowing XPenguins to run in a window * probably more, but I didn't document them :( v1.1: * use windowListener class from the window-HUD repository * removed ignoreHalfMaximised. It doesn't make sense. For example, what if a window is under one half-maximised window but over another? We'd have to restrict to just the visible region, but that involves a lot of fancy footwork with the Region (i.e. the ability to remove part of the region that is not one of the constituent rectangles). I don't want to undertake this footwork! * efficiency: the XPenguins window bounds (get_box()) is now only calculated once per loop for all toons (instead of once per toon per function call per loop). This means storing it in this._toonGlobals.box and refreshing that every frame. * removed Toon.setAssociation and replaced with a simple 'this.association ='. * At the moment we don't properly pause when the XPenguins window becomes obscured, but we just hide the toons until they can spawn without dying instantly (in the background they are still respawning every frame though). What we'd prefer is to know when the XPenguin window has become totally obscured, and then pause until some part of it is exposed again.