Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrant Gayed2013-03-13 19:28:22 +0000
committerGrant Gayed2013-03-13 19:28:22 +0000
commit284dba2b918184a3896cea0bb907e8c6aa3bfe29 (patch)
tree7cfc3d4d252fc049f199fa3619c1ead859d2038b
parente1f72c7af97d691a86c2d43e04ca6f7eab70671e (diff)
downloadeclipse.platform.swt-284dba2b918184a3896cea0bb907e8c6aa3bfe29.tar.gz
eclipse.platform.swt-284dba2b918184a3896cea0bb907e8c6aa3bfe29.tar.xz
eclipse.platform.swt-284dba2b918184a3896cea0bb907e8c6aa3bfe29.zip
updates to event implementations
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEF.java97
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFDisplayHandler.java41
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFLoadHandler.java11
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/CEFFrame.java4
4 files changed, 89 insertions, 64 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEF.java b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEF.java
index c7484e19dd..edb5d701b6 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEF.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEF.java
@@ -176,37 +176,16 @@ static String ExtractCEFString(long /*int*/ stringPointer) {
if (stringPointer == 0) {
return "";
}
-
+
cef_string_t cefStringUrl = new cef_string_t();
CEF3.memmove(cefStringUrl, stringPointer, CEF3.cef_string_t_sizeof());
int length = (int)/*64*/cefStringUrl.length;
char[] chars = new char[length];
- OS.memmove(chars, (int)/*64*/cefStringUrl.str, length * 2);
+ OS.memmove(chars, cefStringUrl.str, length * 2);
return new String(chars);
}
-public static String getUrl(CEFFrame frame) {
- long /*int*/ url = frame.get_url();
- String javaStringUrl = ExtractCEFString(url);
-
- /*
- * If the URI indicates that the page is being rendered from memory
- * (via setText()) then set it to about:blank to be consistent with IE.
- */
- if (javaStringUrl.equals (URI_FILEROOT)) {
- javaStringUrl = ABOUT_BLANK;
- } else {
- int length = URI_FILEROOT.length ();
- if (javaStringUrl.startsWith (URI_FILEROOT) && javaStringUrl.charAt (length) == '#') {
- javaStringUrl = ABOUT_BLANK + javaStringUrl.substring (length);
- }
- }
- return javaStringUrl;
-}
-
-
-
static boolean IsInstalled() {
if (!LibraryLoaded) return false;
// TODO if CEF3 has API to get its version then verify that it is supported, for now assume that it is
@@ -335,8 +314,22 @@ public String getUrl() {
return null;
}
CEFFrame frame = new CEFFrame(result);
-
- return getUrl(frame);
+ long /*int*/ url = frame.get_url();
+ String javaStringUrl = ExtractCEFString(url);
+
+ /*
+ * If the URI indicates that the page is being rendered from memory
+ * (via setText()) then set it to about:blank to be consistent with IE.
+ */
+ if (javaStringUrl.equals (URI_FILEROOT)) {
+ javaStringUrl = ABOUT_BLANK;
+ } else {
+ int length = URI_FILEROOT.length ();
+ if (javaStringUrl.startsWith (URI_FILEROOT) && javaStringUrl.charAt (length) == '#') {
+ javaStringUrl = ABOUT_BLANK + javaStringUrl.substring (length);
+ }
+ }
+ return javaStringUrl;
}
public boolean isBackEnabled() {
@@ -365,8 +358,8 @@ void onResize() {
}
public void onLoadComplete() {
- ProgressEvent progress = new ProgressEvent (browser);
- progress.display = browser.getDisplay ();
+ ProgressEvent progress = new ProgressEvent(browser);
+ progress.display = browser.getDisplay();
progress.widget = browser;
progress.current = MAX_PROGRESS;
progress.total = MAX_PROGRESS;
@@ -376,23 +369,35 @@ public void onLoadComplete() {
}
public void onLocationChange(String location, boolean top) {
+ Display display = browser.getDisplay();
+ if (top) {
+ ProgressEvent progress = new ProgressEvent(browser);
+ progress.display = display;
+ progress.widget = browser;
+ progress.current = 1;
+ progress.total = MAX_PROGRESS;
+ for (int i = 0; i < progressListeners.length; i++) {
+ progressListeners[i].changed(progress);
+ }
+ if (browser.isDisposed()) return;
+
+ StatusTextEvent statusText = new StatusTextEvent(browser);
+ statusText.display = display;
+ statusText.widget = browser;
+ statusText.text = location;
+ for (int i = 0; i < statusTextListeners.length; i++) {
+ statusTextListeners[i].changed(statusText);
+ }
+ if (browser.isDisposed()) return;
+ }
+
LocationEvent event = new LocationEvent(browser);
- event.display = browser.getDisplay ();
+ event.display = display;
event.widget = browser;
event.location = location;
event.top = top;
- for (int i=0; i < locationListeners.length; i++) {
- locationListeners[i].changed (event);
- }
-}
-
-public void onTitleChange(String title) {
- TitleEvent event = new TitleEvent(browser);
- event.display = browser.getDisplay ();
- event.widget = browser;
- event.title = title;
- for (int i=0; i < titleListeners.length; i++) {
- titleListeners[i].changed (event);
+ for (int i = 0; i < locationListeners.length; i++) {
+ locationListeners[i].changed(event);
}
}
@@ -402,7 +407,17 @@ public void onStatusMessage(String status) {
event.widget = browser;
event.text = status;
for (int i = 0; i < statusTextListeners.length; i++) {
- statusTextListeners[i].changed (event);
+ statusTextListeners[i].changed(event);
+ }
+}
+
+public void onTitleChange(String title) {
+ TitleEvent event = new TitleEvent(browser);
+ event.display = browser.getDisplay();
+ event.widget = browser;
+ event.title = title;
+ for (int i = 0; i < titleListeners.length; i++) {
+ titleListeners[i].changed(event);
}
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFDisplayHandler.java b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFDisplayHandler.java
index 53e83d2b44..011d806af6 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFDisplayHandler.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFDisplayHandler.java
@@ -11,14 +11,13 @@
package org.eclipse.swt.browser;
import org.eclipse.swt.graphics.Device;
-import org.eclipse.swt.internal.cef3.CEF3Object;
-import org.eclipse.swt.internal.cef3.CEFFrame;
-import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.internal.cef3.*;
public class CEFDisplayHandler {
CEF3Object object;
CEF host;
int refCount = 1;
+ boolean initialNavigate = true;
public CEFDisplayHandler(CEF host) {
this.host = host;
@@ -70,13 +69,23 @@ long /*int*/ on_loading_state_change(long /*int*/ browser, int isLoading, int ca
long /*int*/ on_address_change(long /*int*/ browser, long /*int*/ frame, long /*int*/ url) {
if (Device.DEBUG) System.out.println("on_address_change (impl)");
-
+
+ /*
+ * CEF initially auto-navigates to about:blank, which is fine but should not be reported
+ * to the user in order to be consistent with the other Browser implementations.
+ */
+ if (initialNavigate) {
+ initialNavigate = false;
+ return 0;
+ }
+
+ final String location = CEF.ExtractCEFString(url);
CEFFrame cefFrame = new CEFFrame(frame);
- final String location = CEF.getUrl(cefFrame);
- final boolean top = cefFrame.is_main() == 1;
-
- Display.getDefault().asyncExec(new Runnable() {
+ final boolean top = cefFrame.is_main();
+
+ host.browser.getDisplay().asyncExec(new Runnable() {
public void run() {
+ if (host.browser.isDisposed()) return;
host.onLocationChange(location, top);
}
});
@@ -85,11 +94,12 @@ long /*int*/ on_address_change(long /*int*/ browser, long /*int*/ frame, long /*
long /*int*/ on_title_change(long /*int*/ browser, long /*int*/ title) {
if (Device.DEBUG) System.out.println("on_title_change (impl)");
-
+
final String titleString = CEF.ExtractCEFString(title);
-
- Display.getDefault().asyncExec(new Runnable() {
+
+ host.browser.getDisplay().asyncExec(new Runnable() {
public void run() {
+ if (host.browser.isDisposed()) return;
host.onTitleChange(titleString);
}
});
@@ -104,15 +114,16 @@ long /*int*/ on_tooltip(long /*int*/ browser, long /*int*/ text) {
long /*int*/ on_status_message(long /*int*/ browser, long /*int*/ value) {
if (Device.DEBUG) System.out.println("on_status_message (impl)");
-
+
final String statusString = CEF.ExtractCEFString(value);
-
- Display.getDefault().asyncExec(new Runnable() {
+
+ host.browser.getDisplay().asyncExec(new Runnable() {
public void run() {
+ if (host.browser.isDisposed()) return;
host.onStatusMessage(statusString);
}
});
-
+
return 0;
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFLoadHandler.java b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFLoadHandler.java
index c7c3e6f0ba..25ccc10c0b 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFLoadHandler.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/browser/CEFLoadHandler.java
@@ -11,9 +11,7 @@
package org.eclipse.swt.browser;
import org.eclipse.swt.graphics.Device;
-import org.eclipse.swt.internal.cef3.CEF3Object;
-import org.eclipse.swt.internal.cef3.CEFFrame;
-import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.internal.cef3.*;
public class CEFLoadHandler {
CEF3Object object;
@@ -69,11 +67,12 @@ long /*int*/ on_load_start(long /*int*/ browser, long /*int*/ frame) {
long /*int*/ on_load_end(long /*int*/ browser, long /*int*/ frame, int httpStatusCode) {
if (Device.DEBUG) System.out.println("on_load_end (impl)");
-
+
CEFFrame cefFrame = new CEFFrame(frame);
- if (cefFrame.is_main() == 1) {
- Display.getDefault().asyncExec(new Runnable() {
+ if (cefFrame.is_main()) {
+ host.browser.getDisplay().asyncExec(new Runnable() {
public void run() {
+ if (host.browser.isDisposed()) return;
host.onLoadComplete();
}
});
diff --git a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/CEFFrame.java b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/CEFFrame.java
index c936dde1fa..9f18511a3d 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/CEFFrame.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT CEF/win32/org/eclipse/swt/internal/cef3/CEFFrame.java
@@ -28,8 +28,8 @@ public long /*int*/ get_url() {
return CEF3.callFuncPtr(struct.get_url, address);
}
-public long /*int*/ is_main() {
- return CEF3.callFuncInt(struct.is_main, address);
+public boolean is_main() {
+ return CEF3.callFuncInt(struct.is_main, address) != 0;
}
}

Back to the top