All pastes #476636 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-05-08 07:31 UTC
rendered paste body

const compzillaIControl = Components.interfaces.compzillaIControl;
const compzillaIWindowManager = Components.interfaces.compzillaIWindowManager;


function ShowListener (frame) { this.frame = frame; }
ShowListener.prototype.handleEvent = function (ev) { this.frame.show (ev); }

function HideListener (frame) { this.frame = frame; }
HideListener.prototype.handleEvent = function (ev) { this.frame.hide (ev); }

function DestroyListener (frame) { this.frame = frame; }
DestroyListener.prototype.handleEvent = function (ev) { this.frame.windowDestroy (ev); }

function MoveResizeListener (frame) { this.frame = frame; }
MoveResizeListener.prototype.handleEvent = function (ev) { this.frame.moveResize (ev); }

function PropertyChangeListener (frame) { this.frame = frame; }
PropertyChangeListener.prototype.handleEvent = function (ev) { this.frame.propertyChange (ev); }


function CompzillaWindowFrame (nativewin) {
	this._nativewin = nativewin;
	this._makeFrameNode ();

	this._commands = new CompzillaCommands (this);

	this._nativewin.addEventListener ("destroy", new DestroyListener (this), true);
	this._nativewin.addEventListener ("moveresize", new MoveResizeListener (this), true);
	this._nativewin.addEventListener ("show", new ShowListener (this), true);
	this._nativewin.addEventListener ("hide", new HideListener (this), true);
	this._nativewin.addEventListener ("propertychange", new PropertyChangeListener (this), true);
};
CompzillaWindowFrame.prototype = {
	_nativewin: null,
	_frame: null,
	_content: null,
	_commands: null,

	get frame () { return this._frame; },
	set frame (aFrame) { this._frame = aFrame; },

	get content () { return this._content; },
	set content (aContent) { this._content = aContent; },

	get commands () { return this._commands; },
	set commands (aCommands) { this._commands = aCommands; },

	_makeFrameNode: function () {
		this._frame = document.getElementById ("compzillaWindowFrame").cloneNode (true);
		this._content = 
			document.getElementById ("compzillaWindowContent").cloneNode (true);
		this._frame.appendChild (this._content);
		this._nativewin.AddContentNode (this._content);
        },

	windowDestroy: function (ev) {
		if (this._frame && this._frame.parentNode) {
			this._frame.parentNode.removeChild (this._frame);
		}
        },

	moveResize: function (ev) {
		if (this._content.offsetWidth != ev.width) {
			this._content.style.width = ev.width + "px";
		}
		if (this._content.offsetHeight != ev.height) {
			this._content.style.height = ev.height + "px";
		}
		if (this._frame.offsetLeft != ev.x) {
			this._frame.style.left = ev.x + "px";
		}
		if (this._frame.offsetTop != ev.y) {
			this._frame.style.top = ev.y + "px";
		}
	},

	show: function (ev) {
		this._frame.style.visibility = "visible";
		this._content.style.visibility = "visible";
	},

	hide: function (ev) {
		this._frame.style.visibility = "hidden";
		this._content.style.visibility = "hidden";
	},

	propertyChange: function (ev) {
	},
};


function compzillaLoad()
{
   var xulwin = document.getElementById ("desktopWindow");
   xulwin.width = screen.width;
   xulwin.height = screen.height;

   alert("Creating Control!");

   svccls = Components.classes['@beatniksoftware.com/compzillaService'];
   svc = svccls.getService(compzillaIControl);

   alert("Adding event listener!");

   svc.addEventListener (
	"windowcreate", 
	{
	    handleEvent: function (ev) {
		// NOTE: Be careful to not do anything which will create a new
		//       toplevel window, to avoid infinite an infinite loop.

		stack = document.getElementById ("compzillaWindowStack");

		frame = new CompzillaWindowFrame (ev.window);

		// ev is also a compzillaIWindowConfigureEvent
		frame.moveResize (ev);

		if (ev.mapped) {
			frame.show ();
		}

		stack = document.getElementById ("compzillaWindowStack");
    		stack.appendChild (frame.frame);
	    }
        },
	true);

   alert("Calling RegisterWindowManager!");

   // Register as the window manager and generate windowCreate events for
   // existing windows.
   svc.RegisterWindowManager (window);
}