зеркало из https://github.com/mozilla/pjs.git
Bug 201308 [Webclient] support nsIWindowCreator::CreateChromeWindow
r=edburns
This commit is contained in:
Родитель
037d48c62a
Коммит
38f4fc5217
|
@ -0,0 +1,38 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is RaptorCanvas.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Kirk Baker and
|
||||
* Ian Wilkinson. Portions created by Kirk Baker and Ian Wilkinson are
|
||||
* Copyright (C) 1999 Kirk Baker and Ian Wilkinson. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s): Kyle Yuan <kyle.yuan@sun.com>
|
||||
*/
|
||||
|
||||
package org.mozilla.webclient;
|
||||
|
||||
public class NewWindowEvent extends WebclientEvent
|
||||
{
|
||||
|
||||
//
|
||||
// Constructors
|
||||
//
|
||||
|
||||
public NewWindowEvent(Object source, long newType,
|
||||
Object newEventData)
|
||||
{
|
||||
super(source, newType, newEventData);
|
||||
}
|
||||
|
||||
} // end of class NewWindowEvent
|
|
@ -0,0 +1,71 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is RaptorCanvas.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Kirk Baker and
|
||||
* Ian Wilkinson. Portions created by Kirk Baker and Ian Wilkinson are
|
||||
* Copyright (C) 1999 Kirk Baker and Ian Wilkinson. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s): Kyle Yuan <kyle.yuan@sun.com>
|
||||
*/
|
||||
|
||||
package org.mozilla.webclient;
|
||||
|
||||
public interface NewWindowListener extends WebclientEventListener {
|
||||
|
||||
public static final long CHROME_DEFAULT = 1;
|
||||
|
||||
public static final long CHROME_WINDOW_BORDERS = 1 << 1;
|
||||
|
||||
/* Specifies whether the window can be closed. */
|
||||
public static final long CHROME_WINDOW_CLOSE = 1 << 2;
|
||||
|
||||
/* Specifies whether the window is resizable. */
|
||||
public static final long CHROME_WINDOW_RESIZE = 1 << 3;
|
||||
|
||||
/* Specifies whether to display the menu bar. */
|
||||
public static final long CHROME_MENUBAR = 1 << 4;
|
||||
|
||||
/* Specifies whether to display the browser toolbar, making buttons such as Back, Forward, and Stop available. */
|
||||
public static final long CHROME_TOOLBAR = 1 << 5;
|
||||
|
||||
/* Specifies whether to display the input field for entering URLs directly into the browser. */
|
||||
public static final long CHROME_LOCATIONBAR = 1 << 6;
|
||||
|
||||
/* Specifies whether to add a status bar at the bottom of the window. */
|
||||
public static final long CHROME_STATUSBAR = 1 << 7;
|
||||
|
||||
/* Specifies whether to display the personal bar. (Mozilla only) */
|
||||
public static final long CHROME_PERSONAL_TOOLBAR = 1 << 8;
|
||||
|
||||
/* Specifies whether to display horizontal and vertical scroll bars. */
|
||||
public static final long CHROME_SCROLLBARS = 1 << 9;
|
||||
|
||||
/* Specifies whether to display a title bar for the window. */
|
||||
public static final long CHROME_TITLEBAR = 1 << 10;
|
||||
|
||||
public static final long CHROME_EXTRA = 1 << 11;
|
||||
|
||||
public static final long CHROME_WITH_SIZE = 1 << 12;
|
||||
|
||||
public static final long CHROME_WITH_POSITION = 1 << 13;
|
||||
|
||||
/* Specifies whether the window is minimizable. */
|
||||
public static final long CHROME_WINDOW_MIN = 1 << 14;
|
||||
|
||||
public static final long CHROME_WINDOW_POPUP = 1 << 15;
|
||||
|
||||
public static final long CHROME_ALL = 4094;
|
||||
|
||||
}
|
|
@ -59,13 +59,13 @@ import java.io.FileInputStream;
|
|||
* This is a test application for using the BrowserControl.
|
||||
|
||||
*
|
||||
* @version $Id: EMWindow.java,v 1.39 2003-04-18 01:07:51 kyle.yuan%sun.com Exp $
|
||||
* @version $Id: EMWindow.java,v 1.40 2003-04-24 05:55:07 kyle.yuan%sun.com Exp $
|
||||
*
|
||||
* @see org.mozilla.webclient.BrowserControlFactory
|
||||
|
||||
*/
|
||||
|
||||
public class EMWindow extends Frame implements DialogClient, ActionListener, DocumentLoadListener, MouseListener, Prompt, PrefChangedCallback {
|
||||
public class EMWindow extends Frame implements DialogClient, ActionListener, DocumentLoadListener, MouseListener, NewWindowListener, Prompt, PrefChangedCallback {
|
||||
static final int defaultWidth = 640;
|
||||
static final int defaultHeight = 480;
|
||||
|
||||
|
@ -91,6 +91,7 @@ public class EMWindow extends Frame implements DialogClient, ActionListener, Doc
|
|||
private UniversalDialog uniDialog = null;
|
||||
private MenuBar menuBar;
|
||||
private Menu historyMenu;
|
||||
private MenuItem newItem;
|
||||
private MenuItem backMenuItem;
|
||||
private MenuItem forwardMenuItem;
|
||||
private HistoryActionListener historyActionListener = null;
|
||||
|
@ -115,173 +116,177 @@ public class EMWindow extends Frame implements DialogClient, ActionListener, Doc
|
|||
private String myBinDir;
|
||||
|
||||
private boolean mInPrintPreview;
|
||||
private long chromeFlag;
|
||||
|
||||
public static void main(String [] arg)
|
||||
{
|
||||
}
|
||||
public static void main(String [] arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
public EMWindow (String title, String binDir, String url, int winnum, EmbeddedMozilla Creator)
|
||||
{
|
||||
super(title);
|
||||
popup = new PopupMenu();
|
||||
creator = Creator;
|
||||
currentURL = url;
|
||||
winNum = winnum;
|
||||
myBinDir = binDir;
|
||||
mInPrintPreview = false;
|
||||
System.out.println("constructed with binDir: " + binDir + " url: " + url);
|
||||
setSize(defaultWidth, defaultHeight);
|
||||
|
||||
public EMWindow (String title, String binDir, String url, int winnum, EmbeddedMozilla Creator, long chromeFlags)
|
||||
{
|
||||
super(title);
|
||||
popup = new PopupMenu();
|
||||
creator = Creator;
|
||||
currentURL = url;
|
||||
winNum = winnum;
|
||||
myBinDir = binDir;
|
||||
mInPrintPreview = false;
|
||||
System.out.println("constructed with binDir: " + binDir + " url: " + url);
|
||||
setSize(defaultWidth, defaultHeight);
|
||||
|
||||
if (0 != (chromeFlags & NewWindowListener.CHROME_MENUBAR))
|
||||
createMenubar();
|
||||
if (0 != (chromeFlags & NewWindowListener.CHROME_TOOLBAR))
|
||||
createToolbar(url);
|
||||
|
||||
// Create the browser
|
||||
try {
|
||||
BrowserControlFactory.setAppData(binDir);
|
||||
browserControl = BrowserControlFactory.newBrowserControl();
|
||||
browserCanvas =
|
||||
(BrowserControlCanvas)
|
||||
browserControl.queryInterface(BrowserControl.BROWSER_CONTROL_CANVAS_NAME);
|
||||
// Create the browser
|
||||
try {
|
||||
BrowserControlFactory.setAppData(binDir);
|
||||
browserControl = BrowserControlFactory.newBrowserControl();
|
||||
browserCanvas =
|
||||
(BrowserControlCanvas)
|
||||
browserControl.queryInterface(BrowserControl.BROWSER_CONTROL_CANVAS_NAME);
|
||||
}
|
||||
catch(Exception e) {
|
||||
System.out.println("Can't create BrowserControl: " +
|
||||
e.getMessage());
|
||||
}
|
||||
Assert.assert_it(null != browserCanvas);
|
||||
browserCanvas.setSize(defaultWidth, defaultHeight);
|
||||
|
||||
}
|
||||
catch(Exception e) {
|
||||
System.out.println("Can't create BrowserControl: " +
|
||||
e.getMessage());
|
||||
}
|
||||
Assert.assert_it(null != browserCanvas);
|
||||
browserCanvas.setSize(defaultWidth, defaultHeight);
|
||||
// Add the control panel and the browserCanvas
|
||||
add(browserCanvas, BorderLayout.CENTER);
|
||||
|
||||
// Add the control panel and the browserCanvas
|
||||
add(browserCanvas, BorderLayout.CENTER);
|
||||
|
||||
// Create the status panel
|
||||
// Create the status panel
|
||||
if (0 != (chromeFlags & NewWindowListener.CHROME_STATUSBAR))
|
||||
createStatusbar();
|
||||
|
||||
addWindowListener(new WindowAdapter() {
|
||||
public void windowClosing(WindowEvent e) {
|
||||
System.out.println("Got windowClosing");
|
||||
System.out.println("destroying the BrowserControl");
|
||||
EMWindow.this.delete();
|
||||
// should close the BrowserControlCanvas
|
||||
creator.DestroyEMWindow(winNum);
|
||||
}
|
||||
addWindowListener(new WindowAdapter() {
|
||||
public void windowClosing(WindowEvent e) {
|
||||
System.out.println("Got windowClosing");
|
||||
System.out.println("destroying the BrowserControl");
|
||||
EMWindow.this.delete();
|
||||
// should close the BrowserControlCanvas
|
||||
creator.DestroyEMWindow(winNum);
|
||||
}
|
||||
|
||||
public void windowClosed(WindowEvent e) {
|
||||
System.out.println("Got windowClosed");
|
||||
}
|
||||
});
|
||||
public void windowClosed(WindowEvent e) {
|
||||
System.out.println("Got windowClosed");
|
||||
}
|
||||
});
|
||||
|
||||
// Create the Context Menus
|
||||
add(popup);
|
||||
// Create the Context Menus
|
||||
add(popup);
|
||||
|
||||
popup.add(popup_ViewSource = new MenuItem("View Source as ByteArray"));
|
||||
popup.add(popup_SelectAll = new MenuItem("Select All"));
|
||||
popup.add(popup_ViewSource = new MenuItem("View Source as ByteArray"));
|
||||
popup.add(popup_SelectAll = new MenuItem("Select All"));
|
||||
popup.add(popup_ViewSelection = new MenuItem("View Selection"));
|
||||
|
||||
contextListener = new PopupActionListener();
|
||||
contextListener = new PopupActionListener();
|
||||
|
||||
popup_ViewSource.addActionListener (contextListener);
|
||||
popup_SelectAll.addActionListener (contextListener);
|
||||
popup_ViewSource.addActionListener (contextListener);
|
||||
popup_SelectAll.addActionListener (contextListener);
|
||||
popup_ViewSelection.addActionListener (contextListener);
|
||||
|
||||
show();
|
||||
toFront();
|
||||
show();
|
||||
toFront();
|
||||
|
||||
try {
|
||||
navigation = (Navigation2)
|
||||
browserControl.queryInterface(BrowserControl.NAVIGATION_NAME);
|
||||
navigation.setPrompt(this);
|
||||
currentPage = (CurrentPage2)
|
||||
browserControl.queryInterface(BrowserControl.CURRENT_PAGE_NAME);
|
||||
history = (History)
|
||||
browserControl.queryInterface(BrowserControl.HISTORY_NAME);
|
||||
prefs = (Preferences)
|
||||
browserControl.queryInterface(BrowserControl.PREFERENCES_NAME);
|
||||
prefs.registerPrefChangedCallback(this,
|
||||
"network.cookie.warnAboutCookies",
|
||||
"This IS the Closure!");
|
||||
prefs.setPref("network.cookie.warnAboutCookies", "true");
|
||||
prefs.setPref("browser.cache.disk_cache_size", "0");
|
||||
try {
|
||||
navigation = (Navigation2)
|
||||
browserControl.queryInterface(BrowserControl.NAVIGATION_NAME);
|
||||
navigation.setPrompt(this);
|
||||
currentPage = (CurrentPage2)
|
||||
browserControl.queryInterface(BrowserControl.CURRENT_PAGE_NAME);
|
||||
history = (History)
|
||||
browserControl.queryInterface(BrowserControl.HISTORY_NAME);
|
||||
prefs = (Preferences)
|
||||
browserControl.queryInterface(BrowserControl.PREFERENCES_NAME);
|
||||
prefs.registerPrefChangedCallback(this,
|
||||
"network.cookie.warnAboutCookies",
|
||||
"This IS the Closure!");
|
||||
prefs.setPref("network.cookie.warnAboutCookies", "true");
|
||||
prefs.setPref("browser.cache.disk_cache_size", "0");
|
||||
|
||||
// pull out the proxies, and make java aware of them
|
||||
Properties prefsProps = prefs.getPrefs();
|
||||
String proxyHost = (String) prefsProps.get("network.proxy.http");
|
||||
String proxyPort = (String) prefsProps.get("network.proxy.http_port");
|
||||
if (null != proxyHost && null != proxyPort) {
|
||||
System.setProperty("http.proxyHost", proxyHost);
|
||||
System.setProperty("http.proxyPort", proxyPort);
|
||||
}
|
||||
|
||||
//prefsProps = prefs.getPrefs();
|
||||
//prefsProps.list(System.out); // This works, try it!
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println(e.toString());
|
||||
// pull out the proxies, and make java aware of them
|
||||
Properties prefsProps = prefs.getPrefs();
|
||||
String proxyHost = (String) prefsProps.get("network.proxy.http");
|
||||
String proxyPort = (String) prefsProps.get("network.proxy.http_port");
|
||||
if (null != proxyHost && null != proxyPort) {
|
||||
System.setProperty("http.proxyHost", proxyHost);
|
||||
System.setProperty("http.proxyPort", proxyPort);
|
||||
}
|
||||
|
||||
try {
|
||||
EventRegistration eventRegistration =
|
||||
(EventRegistration)
|
||||
browserControl.queryInterface(BrowserControl.EVENT_REGISTRATION_NAME);
|
||||
eventRegistration.addDocumentLoadListener(this);
|
||||
eventRegistration.addMouseListener(this);
|
||||
//prefsProps = prefs.getPrefs();
|
||||
//prefsProps.list(System.out); // This works, try it!
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println(e.toString());
|
||||
}
|
||||
|
||||
// PENDING(edburns): test code, replace with production code
|
||||
bookmarks =
|
||||
(Bookmarks)
|
||||
browserControl.queryInterface(BrowserControl.BOOKMARKS_NAME);
|
||||
System.out.println("debug: edburns: got Bookmarks instance");
|
||||
try {
|
||||
EventRegistration2 eventRegistration =
|
||||
(EventRegistration2)
|
||||
browserControl.queryInterface(BrowserControl.EVENT_REGISTRATION_NAME);
|
||||
eventRegistration.addDocumentLoadListener(this);
|
||||
eventRegistration.addMouseListener(this);
|
||||
eventRegistration.addNewWindowListener(this);
|
||||
|
||||
bookmarksTree = bookmarks.getBookmarks();
|
||||
// PENDING(edburns): test code, replace with production code
|
||||
bookmarks =
|
||||
(Bookmarks)
|
||||
browserControl.queryInterface(BrowserControl.BOOKMARKS_NAME);
|
||||
System.out.println("debug: edburns: got Bookmarks instance");
|
||||
|
||||
/*********
|
||||
bookmarksTree = bookmarks.getBookmarks();
|
||||
|
||||
TreeNode bookmarksRoot = (TreeNode) bookmarksTree.getRoot();
|
||||
/*********
|
||||
|
||||
System.out.println("debug: edburns: testing the Enumeration");
|
||||
int childCount = bookmarksRoot.getChildCount();
|
||||
System.out.println("debug: edburns: root has " + childCount +
|
||||
" children.");
|
||||
TreeNode bookmarksRoot = (TreeNode) bookmarksTree.getRoot();
|
||||
|
||||
Enumeration rootChildren = bookmarksRoot.children();
|
||||
TreeNode currentChild;
|
||||
System.out.println("debug: edburns: testing the Enumeration");
|
||||
int childCount = bookmarksRoot.getChildCount();
|
||||
System.out.println("debug: edburns: root has " + childCount +
|
||||
" children.");
|
||||
|
||||
int i = 0, childIndex;
|
||||
while (rootChildren.hasMoreElements()) {
|
||||
currentChild = (TreeNode) rootChildren.nextElement();
|
||||
System.out.println("debug: edburns: bookmarks root has children! child: " + i + " name: " + currentChild.toString());
|
||||
i++;
|
||||
}
|
||||
Enumeration rootChildren = bookmarksRoot.children();
|
||||
TreeNode currentChild;
|
||||
|
||||
System.out.println("debug: edburns: testing getChildAt(" + --i + "): ");
|
||||
currentChild = bookmarksRoot.getChildAt(i);
|
||||
System.out.println("debug: edburns: testing getIndex(Child " +
|
||||
i + "): index should be " + i + ".");
|
||||
childIndex = bookmarksRoot.getIndex(currentChild);
|
||||
System.out.println("debug: edburns: index is: " + childIndex);
|
||||
*****/
|
||||
|
||||
/**********
|
||||
|
||||
|
||||
System.out.println("debug: edburns: got new entry");
|
||||
|
||||
Properties entryProps = entry.getProperties();
|
||||
|
||||
System.out.println("debug: edburns: entry url: " +
|
||||
entryProps.getProperty(BookmarkEntry.URL));
|
||||
bookmarks.addBookmark(folder, entry);
|
||||
**********/
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println(e.toString());
|
||||
int i = 0, childIndex;
|
||||
while (rootChildren.hasMoreElements()) {
|
||||
currentChild = (TreeNode) rootChildren.nextElement();
|
||||
System.out.println("debug: edburns: bookmarks root has children! child: " + i + " name: " + currentChild.toString());
|
||||
i++;
|
||||
}
|
||||
|
||||
if (null != navigation) {
|
||||
navigation.loadURL(url);
|
||||
}
|
||||
} // EMWindow() ctor
|
||||
System.out.println("debug: edburns: testing getChildAt(" + --i + "): ");
|
||||
currentChild = bookmarksRoot.getChildAt(i);
|
||||
System.out.println("debug: edburns: testing getIndex(Child " +
|
||||
i + "): index should be " + i + ".");
|
||||
childIndex = bookmarksRoot.getIndex(currentChild);
|
||||
System.out.println("debug: edburns: index is: " + childIndex);
|
||||
*****/
|
||||
|
||||
/**********
|
||||
|
||||
|
||||
System.out.println("debug: edburns: got new entry");
|
||||
|
||||
Properties entryProps = entry.getProperties();
|
||||
|
||||
System.out.println("debug: edburns: entry url: " +
|
||||
entryProps.getProperty(BookmarkEntry.URL));
|
||||
bookmarks.addBookmark(folder, entry);
|
||||
**********/
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println(e.toString());
|
||||
}
|
||||
|
||||
if (null != navigation && url.length() > 0) {
|
||||
navigation.loadURL(url);
|
||||
}
|
||||
} // EMWindow() ctor
|
||||
|
||||
private void createMenubar()
|
||||
{
|
||||
|
@ -289,7 +294,7 @@ private void createMenubar()
|
|||
this.setMenuBar(menuBar);
|
||||
|
||||
Menu fileMenu = new Menu("File");
|
||||
MenuItem newItem = new MenuItem("New Window");
|
||||
newItem = new MenuItem("New Window");
|
||||
fileMenu.add(newItem);
|
||||
newItem.addActionListener(this);
|
||||
MenuItem printItem = new MenuItem("Print");
|
||||
|
@ -424,14 +429,14 @@ public void delete()
|
|||
{
|
||||
browserCanvas.setVisible(false);
|
||||
if (null != bookmarksFrame) {
|
||||
bookmarksFrame.setVisible(false);
|
||||
bookmarksFrame.dispose();
|
||||
bookmarksFrame = null;
|
||||
bookmarksFrame.setVisible(false);
|
||||
bookmarksFrame.dispose();
|
||||
bookmarksFrame = null;
|
||||
}
|
||||
if (null != domViewer) {
|
||||
domViewer.setVisible(false);
|
||||
domViewer.dispose();
|
||||
domViewer = null;
|
||||
domViewer.setVisible(false);
|
||||
domViewer.dispose();
|
||||
domViewer = null;
|
||||
}
|
||||
BrowserControlFactory.deleteBrowserControl(browserControl);
|
||||
browserControl = null;
|
||||
|
@ -455,7 +460,10 @@ public void actionPerformed (ActionEvent evt)
|
|||
try {
|
||||
|
||||
if (command.equals("New Window")) {
|
||||
creator.CreateEMWindow();
|
||||
creator.CreateEMWindow("", NewWindowListener.CHROME_ALL);
|
||||
}
|
||||
else if (command.equals("New Window2")) {
|
||||
creator.CreateEMWindow("", chromeFlag);
|
||||
}
|
||||
else if (command.equals("Close")) {
|
||||
System.out.println("Got windowClosing");
|
||||
|
@ -740,6 +748,15 @@ public void eventDispatched(WebclientEvent event)
|
|||
break;
|
||||
}
|
||||
}
|
||||
else if (event instanceof NewWindowEvent) {
|
||||
chromeFlag = (long) event.getType();
|
||||
// send a "new window" event to the window
|
||||
Toolkit.getDefaultToolkit().
|
||||
getSystemEventQueue().
|
||||
postEvent(new ActionEvent(newItem,
|
||||
ActionEvent.ACTION_PERFORMED,
|
||||
"New Window2"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
|
@ -38,16 +38,15 @@ import org.mozilla.util.Assert;
|
|||
* This is a test application for using the BrowserControl.
|
||||
|
||||
*
|
||||
* @version $Id: EmbeddedMozilla.java,v 1.6 2001-05-23 22:26:52 edburns%acm.org Exp $
|
||||
*
|
||||
* @version $Id: EmbeddedMozilla.java,v 1.7 2003-04-24 05:55:08 kyle.yuan%sun.com Exp $
|
||||
*
|
||||
* @see org.mozilla.webclient.BrowserControlFactory
|
||||
|
||||
*/
|
||||
|
||||
public interface EmbeddedMozilla
|
||||
public interface EmbeddedMozilla
|
||||
{
|
||||
|
||||
public void CreateEMWindow();
|
||||
public void CreateEMWindow(String newurl, long chromeFlags);
|
||||
public void DestroyEMWindow(int winNumber);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
|
@ -38,9 +38,9 @@ import org.mozilla.util.Assert;
|
|||
* This is a test application for using the BrowserControl.
|
||||
|
||||
*
|
||||
* @version $Id: EmbeddedMozillaImpl.java,v 1.2 2001-12-23 23:22:21 timeless%mac.com Exp $
|
||||
*
|
||||
* @see org.mozilla.webclient.BrowserControlFactory
|
||||
* @version $Id: EmbeddedMozillaImpl.java,v 1.3 2003-04-24 05:55:09 kyle.yuan%sun.com Exp $
|
||||
*
|
||||
* @see org.mozilla.webclient.BrowserControlFactory
|
||||
|
||||
*/
|
||||
|
||||
|
@ -58,33 +58,34 @@ public static void printUsage()
|
|||
System.out.println(" <path> is the absolute path to the native browser bin directory, ");
|
||||
System.out.println(" including the bin.");
|
||||
}
|
||||
|
||||
public EmbeddedMozillaImpl()
|
||||
|
||||
public EmbeddedMozillaImpl()
|
||||
{
|
||||
CreateEMWindow();
|
||||
}
|
||||
|
||||
public void CreateEMWindow()
|
||||
{
|
||||
System.out.println("Creating new EmbeddedMozillaImpl window");
|
||||
EMWindow aEMWindow ;
|
||||
aEMWindow = new EMWindow("EmbeddedMozilla#" + (int)(count+1),
|
||||
binDir, url, count, this);
|
||||
count++;
|
||||
CreateEMWindow(url, NewWindowListener.CHROME_ALL);
|
||||
}
|
||||
|
||||
public void DestroyEMWindow(int winNumber) {
|
||||
count--;
|
||||
if (count == 0) {
|
||||
System.out.println("closing application");
|
||||
try {
|
||||
BrowserControlFactory.appTerminate();
|
||||
public void CreateEMWindow(String newurl, long chromeFlags)
|
||||
{
|
||||
System.out.println("Creating new EmbeddedMozillaImpl window");
|
||||
EMWindow aEMWindow ;
|
||||
aEMWindow = new EMWindow("EmbeddedMozilla#" + (int)(count+1),
|
||||
binDir, newurl, count, this, chromeFlags);
|
||||
count++;
|
||||
}
|
||||
|
||||
public void DestroyEMWindow(int winNumber)
|
||||
{
|
||||
count--;
|
||||
if (count == 0) {
|
||||
System.out.println("closing application");
|
||||
try {
|
||||
BrowserControlFactory.appTerminate();
|
||||
}
|
||||
catch(Exception e) {
|
||||
System.out.println("got Exception on exit: " + e.getMessage());
|
||||
}
|
||||
System.exit(0);
|
||||
}
|
||||
catch(Exception e) {
|
||||
System.out.println("got Exception on exit: " + e.getMessage());
|
||||
}
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String [] arg)
|
||||
|
@ -95,7 +96,7 @@ public static void main(String [] arg)
|
|||
}
|
||||
String urlArg =(2 == arg.length) ? arg[1] : "http://www.mozilla.org/projects/blackwood/webclient/";
|
||||
|
||||
// set class vars used in EmbeddedMozillaImpl ctor
|
||||
// set class vars used in EmbeddedMozillaImpl ctor
|
||||
binDir = arg[0];
|
||||
url = urlArg;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
|
@ -28,17 +28,19 @@ import org.mozilla.util.Log;
|
|||
import org.mozilla.util.ParameterCheck;
|
||||
|
||||
import org.mozilla.webclient.BrowserControl;
|
||||
import org.mozilla.webclient.EventRegistration;
|
||||
import org.mozilla.webclient.EventRegistration2;
|
||||
import org.mozilla.webclient.WindowControl;
|
||||
import org.mozilla.webclient.WrapperFactory;
|
||||
import org.mozilla.webclient.DocumentLoadEvent;
|
||||
import org.mozilla.webclient.DocumentLoadListener;
|
||||
import org.mozilla.webclient.NewWindowEvent;
|
||||
import org.mozilla.webclient.NewWindowListener;
|
||||
import java.awt.event.MouseListener;
|
||||
import org.mozilla.webclient.WebclientEvent;
|
||||
import org.mozilla.webclient.WebclientEventListener;
|
||||
import org.mozilla.webclient.UnimplementedException;
|
||||
import org.mozilla.webclient.UnimplementedException;
|
||||
|
||||
public class EventRegistrationImpl extends ImplObjectNative implements EventRegistration
|
||||
public class EventRegistrationImpl extends ImplObjectNative implements EventRegistration2
|
||||
{
|
||||
//
|
||||
// Constants
|
||||
|
@ -65,11 +67,11 @@ public class EventRegistrationImpl extends ImplObjectNative implements EventRegi
|
|||
private NativeEventThread nativeEventThread = null;
|
||||
|
||||
//
|
||||
// Constructors and Initializers
|
||||
// Constructors and Initializers
|
||||
//
|
||||
|
||||
public EventRegistrationImpl(WrapperFactory yourFactory,
|
||||
BrowserControl yourBrowserControl)
|
||||
public EventRegistrationImpl(WrapperFactory yourFactory,
|
||||
BrowserControl yourBrowserControl)
|
||||
{
|
||||
super(yourFactory, yourBrowserControl);
|
||||
|
||||
|
@ -77,9 +79,9 @@ public EventRegistrationImpl(WrapperFactory yourFactory,
|
|||
try {
|
||||
WindowControl windowControl = (WindowControl)
|
||||
myBrowserControl.queryInterface(BrowserControl.WINDOW_CONTROL_NAME);
|
||||
|
||||
|
||||
if (windowControl instanceof WindowControlImpl) {
|
||||
nativeEventThread =
|
||||
nativeEventThread =
|
||||
((WindowControlImpl)windowControl).getNativeEventThread();
|
||||
}
|
||||
}
|
||||
|
@ -91,7 +93,7 @@ public EventRegistrationImpl(WrapperFactory yourFactory,
|
|||
public void delete()
|
||||
{
|
||||
nativeEventThread = null;
|
||||
|
||||
|
||||
super.delete();
|
||||
}
|
||||
|
||||
|
@ -104,7 +106,7 @@ public void delete()
|
|||
//
|
||||
|
||||
//
|
||||
// Methods from EventRegistration
|
||||
// Methods from EventRegistration
|
||||
//
|
||||
|
||||
/**
|
||||
|
@ -123,13 +125,13 @@ public void addDocumentLoadListener(DocumentLoadListener listener)
|
|||
Assert.assert_it(null != nativeEventThread);
|
||||
ParameterCheck.nonNull(listener);
|
||||
|
||||
WCEventListenerWrapper listenerWrapper =
|
||||
WCEventListenerWrapper listenerWrapper =
|
||||
new WCEventListenerWrapper(listener,
|
||||
DocumentLoadListener.class.getName());
|
||||
if (null == listenerWrapper) {
|
||||
throw new NullPointerException("Can't instantiate WCEventListenerWrapper, out of memory.");
|
||||
}
|
||||
|
||||
|
||||
synchronized(myBrowserControl) {
|
||||
nativeEventThread.addListener(listenerWrapper);
|
||||
}
|
||||
|
@ -142,14 +144,14 @@ public void removeDocumentLoadListener(DocumentLoadListener listener)
|
|||
Assert.assert_it(-1 != nativeWebShell);
|
||||
Assert.assert_it(null != nativeEventThread);
|
||||
ParameterCheck.nonNull(listener);
|
||||
|
||||
WCEventListenerWrapper listenerWrapper =
|
||||
|
||||
WCEventListenerWrapper listenerWrapper =
|
||||
new WCEventListenerWrapper(listener,
|
||||
DocumentLoadListener.class.getName());
|
||||
if (null == listenerWrapper) {
|
||||
throw new NullPointerException("Can't instantiate WCEventListenerWrapper, out of memory.");
|
||||
}
|
||||
|
||||
|
||||
synchronized(myBrowserControl) {
|
||||
nativeEventThread.removeListener(listenerWrapper);
|
||||
}
|
||||
|
@ -168,21 +170,21 @@ public void addMouseListener(MouseListener listener)
|
|||
// implements java.awt.event.MouseListener. See WCMouseListener for
|
||||
// more information.
|
||||
|
||||
WCMouseListenerImpl mouseListenerWrapper =
|
||||
WCMouseListenerImpl mouseListenerWrapper =
|
||||
new WCMouseListenerImpl(listener);
|
||||
|
||||
|
||||
if (null == mouseListenerWrapper) {
|
||||
throw new NullPointerException("Can't instantiate WCMouseListenerImpl, out of memory.");
|
||||
}
|
||||
|
||||
WCEventListenerWrapper listenerWrapper =
|
||||
|
||||
WCEventListenerWrapper listenerWrapper =
|
||||
new WCEventListenerWrapper(mouseListenerWrapper,
|
||||
MouseListener.class.getName());
|
||||
|
||||
|
||||
if (null == listenerWrapper) {
|
||||
throw new NullPointerException("Can't instantiate WCEventListenerWrapper, out of memory.");
|
||||
}
|
||||
|
||||
|
||||
synchronized(myBrowserControl) {
|
||||
nativeEventThread.addListener(listenerWrapper);
|
||||
}
|
||||
|
@ -196,26 +198,67 @@ public void removeMouseListener(MouseListener listener)
|
|||
Assert.assert_it(null != nativeEventThread);
|
||||
ParameterCheck.nonNull(listener);
|
||||
|
||||
WCMouseListenerImpl mouseListenerWrapper =
|
||||
WCMouseListenerImpl mouseListenerWrapper =
|
||||
new WCMouseListenerImpl(listener);
|
||||
|
||||
|
||||
if (null == mouseListenerWrapper) {
|
||||
throw new NullPointerException("Can't instantiate WCMouseListenerImpl, out of memory.");
|
||||
}
|
||||
|
||||
WCEventListenerWrapper listenerWrapper =
|
||||
|
||||
WCEventListenerWrapper listenerWrapper =
|
||||
new WCEventListenerWrapper(mouseListenerWrapper,
|
||||
MouseListener.class.getName());
|
||||
|
||||
|
||||
if (null == listenerWrapper) {
|
||||
throw new NullPointerException("Can't instantiate WCEventListenerWrapper, out of memory.");
|
||||
}
|
||||
|
||||
|
||||
synchronized(myBrowserControl) {
|
||||
nativeEventThread.removeListener(listenerWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
public void addNewWindowListener(NewWindowListener listener)
|
||||
{
|
||||
ParameterCheck.nonNull(listener);
|
||||
myFactory.throwExceptionIfNotInitialized();
|
||||
Assert.assert_it(-1 != nativeWebShell);
|
||||
Assert.assert_it(null != nativeEventThread);
|
||||
ParameterCheck.nonNull(listener);
|
||||
|
||||
WCEventListenerWrapper listenerWrapper =
|
||||
new WCEventListenerWrapper(listener,
|
||||
NewWindowListener.class.getName());
|
||||
if (null == listenerWrapper) {
|
||||
throw new NullPointerException("Can't instantiate WCEventListenerWrapper, out of memory.");
|
||||
}
|
||||
|
||||
synchronized(myBrowserControl) {
|
||||
nativeEventThread.addListener(listenerWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeNewWindowListener(NewWindowListener listener)
|
||||
{
|
||||
ParameterCheck.nonNull(listener);
|
||||
myFactory.throwExceptionIfNotInitialized();
|
||||
Assert.assert_it(-1 != nativeWebShell);
|
||||
Assert.assert_it(null != nativeEventThread);
|
||||
ParameterCheck.nonNull(listener);
|
||||
|
||||
WCEventListenerWrapper listenerWrapper =
|
||||
new WCEventListenerWrapper(listener,
|
||||
NewWindowListener.class.getName());
|
||||
if (null == listenerWrapper) {
|
||||
throw new NullPointerException("Can't instantiate WCEventListenerWrapper, out of memory.");
|
||||
}
|
||||
|
||||
synchronized(myBrowserControl) {
|
||||
nativeEventThread.removeListener(listenerWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ----VERTIGO_TEST_START
|
||||
|
||||
//
|
||||
|
@ -228,20 +271,20 @@ public static void main(String [] args)
|
|||
|
||||
Log.setApplicationName("EventRegistrationImpl");
|
||||
Log.setApplicationVersion("0.0");
|
||||
Log.setApplicationVersionDate("$Id: EventRegistrationImpl.java,v 1.10 2001-05-29 18:36:07 ashuk%eng.sun.com Exp $");
|
||||
Log.setApplicationVersionDate("$Id: EventRegistrationImpl.java,v 1.11 2003-04-24 05:55:12 kyle.yuan%sun.com Exp $");
|
||||
|
||||
try {
|
||||
org.mozilla.webclient.BrowserControlFactory.setAppData(args[0]);
|
||||
org.mozilla.webclient.BrowserControl control =
|
||||
org.mozilla.webclient.BrowserControlFactory.newBrowserControl();
|
||||
org.mozilla.webclient.BrowserControl control =
|
||||
org.mozilla.webclient.BrowserControlFactory.newBrowserControl();
|
||||
Assert.assert_it(control != null);
|
||||
|
||||
EventRegistration wc = (EventRegistration)
|
||||
control.queryInterface(org.mozilla.webclient.BrowserControl.WINDOW_CONTROL_NAME);
|
||||
Assert.assert_it(wc != null);
|
||||
|
||||
EventRegistration2 wc = (EventRegistration2)
|
||||
control.queryInterface(org.mozilla.webclient.BrowserControl.WINDOW_CONTROL_NAME);
|
||||
Assert.assert_it(wc != null);
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("got exception: " + e.getMessage());
|
||||
System.out.println("got exception: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,488 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is RaptorCanvas.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Kirk Baker and
|
||||
* Ian Wilkinson. Portions created by Kirk Baker and Ian Wilkinson are
|
||||
* Copyright (C) 1999 Kirk Baker and Ian Wilkinson. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s): Ed Burns <edburns@acm.org>
|
||||
* Ashutosh Kulkarni <ashuk@eng.sun.com>
|
||||
* Jason Mawdsley <jason@macadamian.com>
|
||||
* Louis-Philippe Gagnon <louisphilippe@macadamian.com>
|
||||
*/
|
||||
|
||||
package org.mozilla.webclient.wrapper_native;
|
||||
|
||||
import org.mozilla.util.Assert;
|
||||
import org.mozilla.util.Log;
|
||||
import org.mozilla.util.ParameterCheck;
|
||||
|
||||
import java.util.Vector;
|
||||
import java.util.Enumeration;
|
||||
|
||||
import org.mozilla.webclient.BrowserControl;
|
||||
import org.mozilla.webclient.BrowserControlCanvas;
|
||||
import org.mozilla.webclient.WindowControl;
|
||||
import org.mozilla.webclient.DocumentLoadEvent;
|
||||
import org.mozilla.webclient.DocumentLoadListener;
|
||||
import java.awt.event.MouseListener;
|
||||
import org.mozilla.webclient.WebclientEvent;
|
||||
import org.mozilla.webclient.WebclientEventListener;
|
||||
import org.mozilla.webclient.UnimplementedException;
|
||||
|
||||
public class NativeEventThread extends Thread
|
||||
{
|
||||
|
||||
//
|
||||
// Class variables
|
||||
//
|
||||
|
||||
private static Object firstThread = null;
|
||||
|
||||
|
||||
//
|
||||
// Attribute ivars
|
||||
//
|
||||
|
||||
//
|
||||
// Relationship ivars
|
||||
//
|
||||
|
||||
/**
|
||||
|
||||
* Vector of listener objects to add.
|
||||
|
||||
*/
|
||||
|
||||
private Vector listenersToAdd;
|
||||
|
||||
/**
|
||||
|
||||
* Vector of listener objects to remove.
|
||||
|
||||
*/
|
||||
|
||||
private Vector listenersToRemove;
|
||||
|
||||
/**
|
||||
|
||||
* a handle to the actual mozilla webShell, obtained in constructor
|
||||
|
||||
*/
|
||||
|
||||
private int nativeWebShell = -1;
|
||||
|
||||
/**
|
||||
|
||||
* a reference to the WindowControl that created us.
|
||||
|
||||
*/
|
||||
|
||||
private WindowControl windowControl;
|
||||
|
||||
private BrowserControl browserControl;
|
||||
|
||||
private BrowserControlCanvas browserControlCanvas;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
* Used in run()
|
||||
|
||||
*/
|
||||
|
||||
private Enumeration tempEnum;
|
||||
|
||||
//
|
||||
// Attribute ivars
|
||||
//
|
||||
|
||||
//
|
||||
// Constructors
|
||||
//
|
||||
|
||||
public NativeEventThread(String threadName, BrowserControl yourBrowserControl)
|
||||
{
|
||||
super(threadName);
|
||||
ParameterCheck.nonNull(yourBrowserControl);
|
||||
|
||||
if (null == firstThread) {
|
||||
firstThread = this;
|
||||
}
|
||||
|
||||
browserControl = yourBrowserControl;
|
||||
|
||||
try {
|
||||
windowControl = (WindowControl)
|
||||
browserControl.queryInterface(BrowserControl.WINDOW_CONTROL_NAME);
|
||||
nativeWebShell = windowControl.getNativeWebShell();
|
||||
|
||||
browserControlCanvas = (BrowserControlCanvas)
|
||||
browserControl.queryInterface(BrowserControl.BROWSER_CONTROL_CANVAS_NAME);
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("NativeEventThread constructor: Exception: " + e +
|
||||
" " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
* 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.
|
||||
|
||||
*/
|
||||
|
||||
public void delete()
|
||||
{
|
||||
// setting this to null causes the run thread to exit
|
||||
synchronized(this) {
|
||||
// this has to be inside the synchronized block!
|
||||
browserControlCanvas = null;
|
||||
synchronized (this) {
|
||||
try {
|
||||
wait();
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("NativeEventThread.delete: interrupted while waiting\n\t for NativeEventThread to notify() after destruction of initContext: " + e +
|
||||
" " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
// PENDING(ashuk): do any necessary cleanup.
|
||||
listenersToAdd = null;
|
||||
doRemoveListeners();
|
||||
listenersToRemove = null;
|
||||
nativeWebShell = -1;
|
||||
windowControl = null;
|
||||
browserControl = null;
|
||||
tempEnum = null;
|
||||
}
|
||||
|
||||
//
|
||||
// Methods from Thread
|
||||
//
|
||||
|
||||
/**
|
||||
|
||||
* This method is the heart of webclient. It should only be called when
|
||||
* WindowControlImpl.createWindow() is called. It calls
|
||||
* nativeInitialize, which does the per-window initialization, including
|
||||
* creating the native event queue which corresponds to this instance,
|
||||
* then enters into an infinite loop where processes native events, then
|
||||
* checks to see if there are any listeners to add, and adds them if
|
||||
* necessary.
|
||||
|
||||
* @see nativeInitialize
|
||||
|
||||
* @see nativeProcessEvents
|
||||
|
||||
* @see nativeAddListener
|
||||
|
||||
*/
|
||||
|
||||
public void run()
|
||||
{
|
||||
// this.setPriority(Thread.MIN_PRIORITY);
|
||||
Assert.assert_it(-1 != nativeWebShell);
|
||||
Assert.assert_it(null != windowControl);
|
||||
|
||||
nativeInitialize(nativeWebShell);
|
||||
|
||||
// IMPORTANT: tell the windowControl, who is waiting for this
|
||||
// message, that we have initialized successfully.
|
||||
synchronized(windowControl) {
|
||||
try {
|
||||
windowControl.notify();
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("NativeEventThread.run: Exception: trying to send notify() to windowControl: " + e + " " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
Thread.sleep(1);
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("NativeEventThread.run(): Exception: " + e +
|
||||
" while sleeping: " + e.getMessage());
|
||||
}
|
||||
synchronized (this) {
|
||||
|
||||
// this has to be inside the synchronized block!
|
||||
if (null == this.browserControlCanvas) {
|
||||
// if we get here, this Thread is terminating, destroy
|
||||
// the initContext and notify the WindowControl
|
||||
((WindowControlImpl)windowControl).nativeDestroyInitContext(nativeWebShell);
|
||||
try {
|
||||
notify();
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("NativeEventThread.run: Exception: trying to send notify() to this during delete: " + e + " " + e.getMessage());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (this == firstThread) {
|
||||
nativeProcessEvents(nativeWebShell);
|
||||
}
|
||||
|
||||
if (null != listenersToAdd && !listenersToAdd.isEmpty()) {
|
||||
tempEnum = listenersToAdd.elements();
|
||||
|
||||
while (tempEnum.hasMoreElements()) {
|
||||
WCEventListenerWrapper tempListener =
|
||||
(WCEventListenerWrapper) tempEnum.nextElement();
|
||||
nativeAddListener(nativeWebShell,tempListener.listener,
|
||||
tempListener.listenerClassName);
|
||||
}
|
||||
// use removeAllElements instead of clear for jdk1.1.x
|
||||
// compatibility.
|
||||
listenersToAdd.removeAllElements();
|
||||
}
|
||||
doRemoveListeners();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// private methods
|
||||
//
|
||||
|
||||
/**
|
||||
|
||||
* this was broken out into a separate method due to the complexity of
|
||||
* handling the case where we are to remove all listeners.
|
||||
|
||||
*/
|
||||
|
||||
private void doRemoveListeners()
|
||||
{
|
||||
if (null != listenersToRemove && !listenersToRemove.isEmpty()) {
|
||||
tempEnum = listenersToRemove.elements();
|
||||
while (tempEnum.hasMoreElements()) {
|
||||
Object listenerObj = tempEnum.nextElement();
|
||||
String listenerString;
|
||||
if (listenerObj instanceof String) {
|
||||
listenerString = (String) listenerObj;
|
||||
if (listenerString.equals("all")) {
|
||||
nativeRemoveAllListeners(nativeWebShell);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
throw new UnimplementedException("Webclient doesn't understand how to remove " + ((String)listenerObj) + ".");
|
||||
}
|
||||
}
|
||||
else {
|
||||
WCEventListenerWrapper tempListener =
|
||||
(WCEventListenerWrapper) listenerObj;
|
||||
nativeRemoveListener(nativeWebShell,
|
||||
tempListener.listener,
|
||||
tempListener.listenerClassName);
|
||||
|
||||
}
|
||||
}
|
||||
// use removeAllElements instead of clear for jdk1.1.x
|
||||
// compatibility.
|
||||
listenersToRemove.removeAllElements();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Package methods
|
||||
//
|
||||
|
||||
/**
|
||||
|
||||
* Takes the abstract WebclientEventListener instance and adds it to a
|
||||
* Vector of listeners to be added. This vector is scanned each time
|
||||
* around the event loop in run(). <P>
|
||||
|
||||
* The vector is a vector of WCEventListenerWrapper instances. In run()
|
||||
* these are unpacked and sent to nativeAddListener like this:
|
||||
* nativeAddListener(nativeWebShell,tempListener.listener,
|
||||
* tempListener.listenerClassName); <P>
|
||||
|
||||
* @see run
|
||||
|
||||
*/
|
||||
|
||||
void addListener(WCEventListenerWrapper newListener)
|
||||
{
|
||||
Assert.assert_it(-1 != nativeWebShell);
|
||||
Assert.assert_it(null != windowControl);
|
||||
|
||||
synchronized (this) {
|
||||
if (null == listenersToAdd) {
|
||||
listenersToAdd = new Vector();
|
||||
}
|
||||
// use addElement instead of add for jdk1.1.x
|
||||
// compatibility.
|
||||
listenersToAdd.addElement(newListener);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
* remove a listener
|
||||
|
||||
* @param newListener if null, removes all listeners
|
||||
|
||||
*/
|
||||
|
||||
void removeListener(WCEventListenerWrapper newListener)
|
||||
{
|
||||
Assert.assert_it(-1 != nativeWebShell);
|
||||
Assert.assert_it(null != windowControl);
|
||||
|
||||
synchronized (this) {
|
||||
if (null == listenersToRemove) {
|
||||
listenersToRemove = new Vector();
|
||||
}
|
||||
if (null == newListener) {
|
||||
String all = "all";
|
||||
// use addElement instead of add for jdk1.1.x
|
||||
// compatibility.
|
||||
listenersToRemove.addElement(all);
|
||||
}
|
||||
else {
|
||||
// use addElement instead of add for jdk1.1.x
|
||||
// compatibility.
|
||||
listenersToRemove.addElement(newListener);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
* This method is called from native code when an event occurrs. This
|
||||
* method relies on the fact that all events types that the client can
|
||||
* observe descend from WebclientEventListener. I use instanceOf to
|
||||
* determine what kind of WebclientEvent subclass to create.
|
||||
|
||||
*/
|
||||
|
||||
void nativeEventOccurred(WebclientEventListener target,
|
||||
String targetClassName, long eventType,
|
||||
Object eventData)
|
||||
{
|
||||
ParameterCheck.nonNull(target);
|
||||
ParameterCheck.nonNull(targetClassName);
|
||||
|
||||
Assert.assert_it(-1 != nativeWebShell);
|
||||
Assert.assert_it(null != windowControl);
|
||||
|
||||
WebclientEvent event = null;
|
||||
|
||||
if (DocumentLoadListener.class.getName().equals(targetClassName)) {
|
||||
event = new DocumentLoadEvent(this, eventType, eventData);
|
||||
}
|
||||
else if (MouseListener.class.getName().equals(targetClassName)) {
|
||||
Assert.assert_it(target instanceof WCMouseListenerImpl);
|
||||
|
||||
// We create a plain vanilla WebclientEvent, which the
|
||||
// WCMouseListenerImpl target knows how to deal with.
|
||||
|
||||
// Also, the source happens to be the browserControlCanvas
|
||||
// to satisfy the java.awt.event.MouseEvent's requirement
|
||||
// that the source be a java.awt.Component subclass.
|
||||
|
||||
event = new WebclientEvent(browserControlCanvas, eventType, eventData);
|
||||
}
|
||||
// else...
|
||||
|
||||
// PENDING(edburns): maybe we need to put this in some sort of
|
||||
// event queue?
|
||||
target.eventDispatched(event);
|
||||
}
|
||||
|
||||
//
|
||||
// local methods
|
||||
//
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
// Native methods
|
||||
//
|
||||
|
||||
/**
|
||||
|
||||
* Takes the int from WindowControlImpl.nativeCreateInitContext, the
|
||||
* meaning of which is left up to the implementation, and does any
|
||||
* per-window creation and initialization tasks. <P>
|
||||
|
||||
* For mozilla, this means creating the nsIWebShell instance, attaching
|
||||
* to the native event queue, creating the nsISessionHistory instance, etc.
|
||||
|
||||
*/
|
||||
|
||||
public native void nativeInitialize(int webShellPtr);
|
||||
|
||||
/**
|
||||
|
||||
* Called from java to allow the native code to process any pending
|
||||
* events, such as: painting the UI, processing mouse and key events,
|
||||
* etc.
|
||||
|
||||
*/
|
||||
|
||||
public native void nativeProcessEvents(int webShellPtr);
|
||||
|
||||
/**
|
||||
|
||||
* Called from Java to allow the native code to add a "listener" to the
|
||||
* underlying browser implementation. The native code should do what's
|
||||
* necessary to add the appropriate listener type. When a listener
|
||||
* event occurrs, the native code should call the nativeEventOccurred
|
||||
* method of this instance, passing the typedListener argument received
|
||||
* from nativeAddListener. See the comments in the native
|
||||
* implementation.
|
||||
|
||||
* @see nativeEventOccurred
|
||||
|
||||
*/
|
||||
|
||||
public native void nativeAddListener(int webShellPtr,
|
||||
WebclientEventListener typedListener,
|
||||
String listenerName);
|
||||
|
||||
/**
|
||||
|
||||
* Called from Java to allow the native code to remove a listener.
|
||||
|
||||
*/
|
||||
|
||||
public native void nativeRemoveListener(int webShellPtr,
|
||||
WebclientEventListener typedListener,
|
||||
String listenerName);
|
||||
|
||||
/**
|
||||
|
||||
* Called from Java to allow the native code to remove all listeners.
|
||||
|
||||
*/
|
||||
|
||||
public native void nativeRemoveAllListeners(int webShellPrt);
|
||||
|
||||
} // end of class NativeEventThread
|
|
@ -94,18 +94,18 @@ NS_IMPL_RELEASE(CBrowserContainer)
|
|||
|
||||
NS_INTERFACE_MAP_BEGIN(CBrowserContainer)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIWebBrowserChrome)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIURIContentListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDocShellTreeOwner)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIBaseWindow)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIWebShellContainer)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIURIContentListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDocShellTreeOwner)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIBaseWindow)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIWebShellContainer)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIAuthPrompt)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIPrompt)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMEventListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMMouseListener)
|
||||
NS_INTERFACE_MAP_ENTRY(wcIBrowserContainer)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIPrompt)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMEventListener)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMMouseListener)
|
||||
NS_INTERFACE_MAP_ENTRY(wcIBrowserContainer)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
|
@ -115,6 +115,13 @@ NS_INTERFACE_MAP_END
|
|||
|
||||
NS_IMETHODIMP CBrowserContainer::GetInterface(const nsIID & uuid, void * *result)
|
||||
{
|
||||
if (uuid.Equals(NS_GET_IID(nsIDOMWindow)))
|
||||
{
|
||||
if (m_pOwner)
|
||||
return m_pOwner->GetContentDOMWindow((nsIDOMWindow **) result);
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
}
|
||||
|
||||
return QueryInterface(uuid, result);
|
||||
}
|
||||
|
||||
|
|
|
@ -18,9 +18,9 @@
|
|||
# Contributor(s):
|
||||
|
||||
DEPTH = ../../..
|
||||
topsrcdir = $(DEPTH)
|
||||
srcdir = $(topsrcdir)/java/webclient/src_moz
|
||||
VPATH = $(topsrcdir)/java/webclient/src_moz
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
|
||||
# IMPORTANT: on Linux, if building webclient with a non-debug mozilla
|
||||
|
@ -113,6 +113,7 @@ CPPSRCS = \
|
|||
PreferencesImpl.cpp \
|
||||
PreferencesActionEvents.cpp \
|
||||
WrapperFactoryImpl.cpp \
|
||||
WindowCreator.cpp \
|
||||
$(NULL)
|
||||
|
||||
ifeq ($(OS_ARCH),Linux)
|
||||
|
@ -191,20 +192,5 @@ endif
|
|||
endif
|
||||
|
||||
|
||||
buildRunems:
|
||||
ifeq ($(BAL_INTERFACE),)
|
||||
ifeq ($(PACKAGE_BUILD),)
|
||||
@echo +++ Creating runem. Use this to run the test browser.
|
||||
rm -f runem
|
||||
@echo #!/bin/sh > runem
|
||||
@echo $(PERL) ../src_share/runem.pl org.mozilla.webclient.test.EmbeddedMozillaImpl $(DEPTH) "$$"1 "$$"2 "$$"3 "$$"4 "$$"4 "$$"6 >> runem
|
||||
chmod 755 runem
|
||||
else
|
||||
endif # PACKAGE_BUILD
|
||||
endif # BAL_INTERFACE
|
||||
|
||||
install:: buildRunems
|
||||
|
||||
|
||||
clobber_all:: clobber
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
* Ed Burns <edburns@acm.org>
|
||||
* Ashutosh Kulkarni <ashuk@eng.sun.com>
|
||||
* Ann Sunhachawee
|
||||
* Kyle Yuan <kyle.yuan@sun.com>
|
||||
*/
|
||||
|
||||
#include "NativeEventThread.h"
|
||||
|
@ -58,11 +59,12 @@
|
|||
#include "nsIDocShell.h"
|
||||
#include "nsIBaseWindow.h"
|
||||
#include "nsIDocShellTreeItem.h"
|
||||
#include "nsCWebBrowser.h"
|
||||
#include "nsIEventQueueService.h"
|
||||
#include "nsIThread.h"
|
||||
//nsIWebShell is included in ns_util.h
|
||||
#include "NativeEventThreadActionEvents.h"
|
||||
#include "nsIWindowWatcher.h"
|
||||
#include "nsIComponentRegistrar.h"
|
||||
#include "WindowCreator.h"
|
||||
|
||||
#include "prlog.h" // for PR_ASSERT
|
||||
|
||||
|
@ -170,6 +172,7 @@ static PRBool gFirstTime = PR_TRUE;
|
|||
PLEventQueue * gActionQueue = nsnull;
|
||||
PRThread * gEmbeddedThread = nsnull;
|
||||
nsISHistory *gHistory = nsnull;
|
||||
WindowCreator * gCreatorCallback = nsnull;
|
||||
|
||||
char * errorMessages[] = {
|
||||
"No Error",
|
||||
|
@ -313,6 +316,10 @@ JNIEXPORT void JNICALL Java_org_mozilla_webclient_wrapper_1native_NativeEventThr
|
|||
case MOUSE_LISTENER:
|
||||
initContext->browserContainer->AddMouseListener(globalRef);
|
||||
break;
|
||||
case NEW_WINDOW_LISTENER:
|
||||
if (gCreatorCallback)
|
||||
gCreatorCallback->AddNewWindowListener(globalRef);
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
|
@ -463,6 +470,29 @@ static void event_processor_callback(gpointer data,
|
|||
//
|
||||
|
||||
|
||||
/* InitializeWindowCreator creates and hands off an object with a callback
|
||||
to a window creation function. This is how all new windows are opened,
|
||||
except any created directly by the embedding app. */
|
||||
nsresult InitializeWindowCreator(WebShellInitContext * initContext)
|
||||
{
|
||||
// create an nsWindowCreator and give it to the WindowWatcher service
|
||||
gCreatorCallback = new WindowCreator(initContext);
|
||||
if (gCreatorCallback)
|
||||
{
|
||||
nsCOMPtr<nsIWindowCreator> windowCreator(dont_QueryInterface(NS_STATIC_CAST(nsIWindowCreator *, gCreatorCallback)));
|
||||
if (windowCreator)
|
||||
{
|
||||
nsCOMPtr<nsIWindowWatcher> wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID));
|
||||
if (wwatch)
|
||||
{
|
||||
wwatch->SetWindowCreator(windowCreator);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
void DoMozInitialization(WebShellInitContext * initContext)
|
||||
{
|
||||
if (gFirstTime) {
|
||||
|
@ -495,6 +525,8 @@ void DoMozInitialization(WebShellInitContext * initContext)
|
|||
// If this fails, it just goes to stdout/stderr
|
||||
}
|
||||
|
||||
InitializeWindowCreator(initContext);
|
||||
|
||||
// handle the profile manager nonsense
|
||||
nsCOMPtr<nsICmdLineService> cmdLine =do_GetService(kCmdLineServiceCID);
|
||||
nsCOMPtr<nsIProfile> profile = do_GetService(NS_PROFILE_CONTRACTID);
|
||||
|
@ -630,6 +662,14 @@ nsresult InitMozillaStuff (WebShellInitContext * initContext)
|
|||
initContext->initFailCode = kCreateWebShellError;
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
|
||||
#ifdef XP_UNIX
|
||||
|
||||
// The gdk_x_error function exits in some cases, we don't
|
||||
// want that.
|
||||
XSetErrorHandler(wc_x_error);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
if (gFirstTime) {
|
||||
|
@ -738,15 +778,11 @@ nsresult InitMozillaStuff (WebShellInitContext * initContext)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef XP_UNIX
|
||||
|
||||
// The gdk_x_error function exits in some cases, we don't
|
||||
// want that.
|
||||
XSetErrorHandler(wc_x_error);
|
||||
#endif
|
||||
|
||||
// Just need to loop once to clear out events before returning
|
||||
processEventLoop(initContext);
|
||||
// PENDING(kyle): not sure if we need to check this, but it does prevent some crash from happening
|
||||
void* threadId = PR_GetCurrentThread();
|
||||
if (threadId == (void *) gEmbeddedThread)
|
||||
// Just need to loop once to clear out events before returning
|
||||
processEventLoop(initContext);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ static NS_DEFINE_IID(kIWebShellIID, NS_IWEB_SHELL_IID);
|
|||
static NS_DEFINE_IID(kISHistoryIID, NS_ISHISTORY_IID);
|
||||
static NS_DEFINE_CID(kSHistoryCID, NS_SHISTORY_CID);
|
||||
|
||||
extern WebShellInitContext* gNewWindowInitContext;
|
||||
|
||||
/*
|
||||
* wsRealizeBrowserEvent
|
||||
|
@ -151,6 +152,8 @@ wsRealizeBrowserEvent::handleEvent ()
|
|||
|
||||
mInitContext->initComplete = TRUE;
|
||||
|
||||
// we will check this value in WindowCreator::CreateChromeWindow
|
||||
gNewWindowInitContext = mInitContext;
|
||||
return (void *) nsnull;
|
||||
|
||||
} // handleEvent()
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is RaptorCanvas.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Kirk Baker and
|
||||
* Ian Wilkinson. Portions created by Kirk Baker and Ian Wilkinson are
|
||||
* Copyright (C) 1999 Kirk Baker and Ian Wilkinson. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s): Kyle Yuan <kyle.yuan@sun.com>
|
||||
*/
|
||||
|
||||
#include "nsIWebBrowserChrome.h"
|
||||
#include "WindowCreator.h"
|
||||
|
||||
int processEventLoop(WebShellInitContext * initContext);
|
||||
|
||||
WebShellInitContext* gNewWindowInitContext;
|
||||
|
||||
WindowCreator::WindowCreator(WebShellInitContext *yourInitContext)
|
||||
{
|
||||
mInitContext = yourInitContext;
|
||||
mTarget = 0;
|
||||
}
|
||||
|
||||
WindowCreator::~WindowCreator()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS1(WindowCreator, nsIWindowCreator)
|
||||
|
||||
NS_IMETHODIMP WindowCreator::AddNewWindowListener(jobject target)
|
||||
{
|
||||
if (! mTarget)
|
||||
mTarget = target;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
WindowCreator::CreateChromeWindow(nsIWebBrowserChrome *parent,
|
||||
PRUint32 chromeFlags,
|
||||
nsIWebBrowserChrome **_retval)
|
||||
{
|
||||
if (!mTarget)
|
||||
return NS_OK;
|
||||
|
||||
gNewWindowInitContext = nsnull;
|
||||
|
||||
util_SendEventToJava(mInitContext->env,
|
||||
mInitContext->nativeEventThread,
|
||||
mTarget,
|
||||
NEW_WINDOW_LISTENER_CLASSNAME,
|
||||
chromeFlags,
|
||||
0);
|
||||
|
||||
// check gNewWindowInitContext to see if the initialization had completed
|
||||
void* threadId = PR_GetCurrentThread();
|
||||
while (!gNewWindowInitContext) {
|
||||
if (threadId == (void *) gEmbeddedThread) {
|
||||
processEventLoop(mInitContext);
|
||||
}
|
||||
::PR_Sleep(PR_INTERVAL_NO_WAIT);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIWebBrowserChrome> webChrome(do_QueryInterface(gNewWindowInitContext->browserContainer));
|
||||
*_retval = webChrome;
|
||||
NS_IF_ADDREF(*_retval);
|
||||
printf ("RET=%x\n", *_retval);
|
||||
return NS_OK;
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is RaptorCanvas.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Kirk Baker and
|
||||
* Ian Wilkinson. Portions created by Kirk Baker and Ian Wilkinson are
|
||||
* Copyright (C) 1999 Kirk Baker and Ian Wilkinson. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s): Kyle Yuan <kyle.yuan@sun.com>
|
||||
*/
|
||||
|
||||
#ifndef __WindowCreator_h_
|
||||
#define __WindowCreator_h_
|
||||
|
||||
#include "nsIWindowCreator.h"
|
||||
#include "ns_util.h"
|
||||
|
||||
class WindowCreator : public nsIWindowCreator
|
||||
{
|
||||
private:
|
||||
WebShellInitContext *mInitContext;
|
||||
jobject mTarget;
|
||||
|
||||
public:
|
||||
WindowCreator(WebShellInitContext *yourInitContext);
|
||||
virtual ~WindowCreator();
|
||||
|
||||
NS_IMETHOD AddNewWindowListener(jobject target);
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIWINDOWCREATOR
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -51,6 +51,7 @@ static NS_DEFINE_CID(kStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID);
|
|||
const char *gSupportedListenerInterfaces[] = {
|
||||
DOCUMENT_LOAD_LISTENER_CLASSNAME_VALUE,
|
||||
MOUSE_LISTENER_CLASSNAME_VALUE,
|
||||
NEW_WINDOW_LISTENER_CLASSNAME_VALUE,
|
||||
nsnull
|
||||
};
|
||||
|
||||
|
|
|
@ -82,6 +82,7 @@ jobject BM_IS_FOLDER_VALUE;
|
|||
|
||||
jstring DOCUMENT_LOAD_LISTENER_CLASSNAME;
|
||||
jstring MOUSE_LISTENER_CLASSNAME;
|
||||
jstring NEW_WINDOW_LISTENER_CLASSNAME;
|
||||
|
||||
jlong DocumentLoader_maskValues[] = { -1L };
|
||||
char * DocumentLoader_maskNames[] = {
|
||||
|
@ -284,6 +285,12 @@ jboolean util_InitStringConstants()
|
|||
MOUSE_LISTENER_CLASSNAME_VALUE)))) {
|
||||
return JNI_FALSE;
|
||||
}
|
||||
if (nsnull == (NEW_WINDOW_LISTENER_CLASSNAME = (jstring)
|
||||
::util_NewGlobalRef(env, (jobject)
|
||||
::util_NewStringUTF(env,
|
||||
NEW_WINDOW_LISTENER_CLASSNAME_VALUE)))) {
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
return STRING_CONSTANTS_INITED = JNI_TRUE;
|
||||
}
|
||||
|
|
|
@ -124,6 +124,7 @@ extern jobject BM_IS_FOLDER_VALUE;
|
|||
*/
|
||||
extern jstring DOCUMENT_LOAD_LISTENER_CLASSNAME;
|
||||
extern jstring MOUSE_LISTENER_CLASSNAME;
|
||||
extern jstring NEW_WINDOW_LISTENER_CLASSNAME;
|
||||
|
||||
|
||||
//
|
||||
|
@ -135,6 +136,7 @@ extern jstring MOUSE_LISTENER_CLASSNAME;
|
|||
typedef enum {
|
||||
DOCUMENT_LOAD_LISTENER = 0,
|
||||
MOUSE_LISTENER,
|
||||
NEW_WINDOW_LISTENER,
|
||||
LISTENER_NOT_FOUND
|
||||
} LISTENER_CLASSES;
|
||||
|
||||
|
@ -142,6 +144,7 @@ typedef enum {
|
|||
|
||||
#define DOCUMENT_LOAD_LISTENER_CLASSNAME_VALUE "org.mozilla.webclient.DocumentLoadListener"
|
||||
#define MOUSE_LISTENER_CLASSNAME_VALUE "java.awt.event.MouseListener"
|
||||
#define NEW_WINDOW_LISTENER_CLASSNAME_VALUE "org.mozilla.webclient.NewWindowListener"
|
||||
|
||||
|
||||
#define START_DOCUMENT_LOAD_EVENT_MASK_VALUE "START_DOCUMENT_LOAD_EVENT_MASK"
|
||||
|
|
Загрузка…
Ссылка в новой задаче