also modifies EmbeddedMozilla so this code is exercised. I have changed EmbeddedMozilla to be a stub-like class that simply displays a Frame with a single Button, titled "New Window". Pressing this button causes an EMWindow to be created and displayed. EMWindow is basically the former EmbeddedMozilla renamed, with modifications to the WindowListener implementation to call the BrowserControl deallocation method. I've added a delete() method to ImplObect: * I know Java has automatic garbage collection and all, but explicitly * adding a delete method helps the gc algorithm out. <P> * Subclasses should override this and call super.delete() at the end of * their overridden delete() method. * @see org.mozilla.webclient.wrapper_native.ImplObjectNative#delete and ImplObjectNative: * Note how we call super.delete() at the end. THIS IS VERY IMPORTANT. <P> * Also, note how we don't de-allocate nativeWebShell, that is done in * the class that owns the nativeWebShell reference, WindowControlImpl. * ImplObjectNative subclasses that further override delete() are <P> <CODE><PRE> BookmarksImpl.java EventRegistrationImpl.java NativeEventThread.java WindowControlImpl.java </PRE><CODE> <P> * All other ImplObject subclasses don't have any local Ivars and thus * don't need to override delete(). I've added a delete() method to BrowserControlImpl: * Called from BrowserControlFactory.deleteBrowserControl() <P> * The order of deletion of objects is very important! <P> * We don't allow deletion if the Canvas is showing. <P> In BrowserControlImpl's delete(), the important delete()s is for WindowControlImpl: * First, we delete our eventThread, which causes the eventThread to * stop running. Then we call nativeDestroyInitContext(), which * deallocates native resources for this window. As stated above, NativeEventThread.delete() is called: * This is a very delicate method, and possibly subject to race * condition problems. To combat this, our first step is to set our * browserControlCanvas to null, within a synchronized block which * synchronizes on the same object used in the run() method's event * loop. By setting the browserControlCanvas ivar to null, we cause the * run method to return. After all of this deleting, we return from BrowserControlFactory.delete(). git-svn-id: svn://10.0.0.236/trunk@62772 18797224-902f-48f8-a5cc-f745e15eee43
Here lies the code that comprises the java enhancers to mozilla. Authors: see the README files for each individual subdirectory Requirements: * JDK1.1.7 or greater (may work with lower versions, haven't checked). * M8 or post M8 mozilla tree * Perl 5 perl.exe must be in your path How To Build: * make it so the directory in which this file resides is a child of your top level mozilla directory * Copy the files .\config\buildpkg.bat and .\config\outofdate.pl to mozilla\config. These file were modified after M8 and the modifications are required to build java. * make sure the environment var JDKHOME is set to your jdk installation directory, ie SET JDKHOME=C:\jdk1.1.8 * type "nmake /f makefile.win all" and hope for the best * this should compile the clasess into %MOZ_SRC%\dist\classes Problems: * clobber_all doesn't remove the .class files from dist\classes. You have to do this manually. * post to netscape.public.mozilla.java newsgroup General notes: * Please update the ChangeLog (changelo) files in the subdirectories when you make changes.