=== modified file 'src/com/goldencode/p2j/ui/client/gui/driver/web/res/p2j.screen.js' --- src/com/goldencode/p2j/ui/client/gui/driver/web/res/p2j.screen.js 2015-12-09 06:42:45 +0000 +++ src/com/goldencode/p2j/ui/client/gui/driver/web/res/p2j.screen.js 2015-12-09 19:44:53 +0000 @@ -32,6 +32,8 @@ ** SBI 20151201 Fixed two times clicks for menus. ** 009 SBI 20151208 Added new parameters, scroll amount and scroll unit for wheel events and ** a mouse modifiers mask for all mouse events. +** SBI 20151209 Changed to create task icons only for main windows (the child windows includes +** all modal windows), to cleanup all mouse handlers for destroyed windows. */ "use strict"; @@ -738,6 +740,52 @@ }; /** + * Deregister all mouse widgets for this window. + */ + Window.prototype.deregisterAllMouseWidget = function() + { + for (var opName in mouseOps) + { + if (mouseOps.hasOwnProperty(opName)) + { + var mactions = this.mouseAwareWidgets[opName]; + for (var wid in mactions) + { + if (mactions.hasOwnProperty(wid)) + { + delete mactions[wid]; + } + } + } + } + + for (var opName in osOps) + { + if (osOps.hasOwnProperty(opName)) + { + var mactions = this.osAwareWidgets[opName]; + for (var wid in mactions) + { + if (mactions.hasOwnProperty(wid)) + { + var opHandler = mactions[wid]; + opHandler.deregisterListeners(); + delete mactions[wid]; + } + } + } + } + + for (var wid in this.anyMouseAwareWidgets) + { + if (this.anyMouseAwareWidgets.hasOwnProperty(wid)) + { + delete this.anyMouseAwareWidgets[wid]; + } + } + }; + + /** * Register the specified widget for any mouse events. * * @param {Number} wid @@ -767,6 +815,7 @@ */ Window.prototype.cleanup = function() { + this.deregisterAllMouseWidget(); // remove the child linkage from the owner if it exists if (isExistingWindowId(this.owner)) { @@ -1875,6 +1924,22 @@ */ me.createWindow = function(wid) { + return createWindowInternal(wid, true); + } + + /** + * Create a new top-level window (and the canvas that backs it). + * + * @param wid + * The window id by which this window can be uniquely identified. + * @param canBeMinimized + * The boolean flag indicates that this window must be represented by a task icon on + * the tools bar. + * + * @return The created window instance or null on any error. + */ + function createWindowInternal(wid, canBeMinimized) + { if (!isValidWindowId(wid)) { me.error("Window ids must be non-positive integers."); @@ -1895,9 +1960,12 @@ // add to the z-order list addZOrderEntry(wid, newwin); - // creates new task icon widget for new window - taskBar.addTaskIcon(newwin.id); - + if (canBeMinimized) + { + // creates new task icon widget for new window + taskBar.addTaskIcon(newwin.id); + } + return newwin; }; @@ -1927,18 +1995,14 @@ return null; } - var newwin = me.createWindow(wid); + var newwin = createWindowInternal(wid, false); if (newwin === null) return null; newwin.owner = owner; newwin.title = title || ""; - - // creates new task icon widget for new window - var taskIcon = taskBar.addTaskIcon(newwin.id); - taskIcon.title = newwin.title; - + var parent = getWindow(owner); // add to the owned window list