annotate dwt/browser/MozillaDelegate.d @ 124:540fa4e9974a

Ported dwt.internal.theme
author Jacob Carlborg <doob@me.com>
date Fri, 16 Jan 2009 12:19:08 +0100
parents d8635bb48c7c
children 5583f8eeee6c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 36
diff changeset
1 /*******************************************************************************
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 36
diff changeset
2 * Copyright (c) 2003, 2008 IBM Corporation and others.
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
7 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
8 * Contributors:
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
10 *
13
f565d3a95c0a Ported dwt.internal
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
11 * Port to the D programming language:
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 36
diff changeset
12 * Jacob Carlborg <doob@me.com>
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
13 *******************************************************************************/
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
14 module dwt.browser.MozillaDelegate;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
15
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
16 import dwt.dwthelper.utils;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
17
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
18 import dwt.DWT;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
19 import dwt.widgets.Display;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
20 import dwt.widgets.Event;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
21 import dwt.widgets.Listener;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
22
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
23 import dwt.browser.Browser;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
24 import objc = dwt.internal.objc.runtime;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
25
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
26 class MozillaDelegate {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
27 Browser browser;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
28 Listener listener;
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
29 boolean hasFocus;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
30
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
31 this (Browser browser) {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
32 super ();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
33 this.browser = browser;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
34 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
35
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
36 static Browser findBrowser (objc.id handle) {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
37 Display display = Display.getCurrent ();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
38 return cast(Browser)display.findWidget (handle);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
39 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
40
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
41 static char[] mbcsToWcs (String codePage, byte [] buffer) {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
42 // int encoding = OS.CFStringGetSystemEncoding ();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
43 // int cfstring = OS.CFStringCreateWithBytes (OS.kCFAllocatorDefault, buffer, buffer.length, encoding, false);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
44 // char[] chars = null;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
45 // if (cfstring != 0) {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
46 // int length = OS.CFStringGetLength (cfstring);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
47 // chars = new char [length];
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
48 // if (length != 0) {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
49 // CFRange range = new CFRange ();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
50 // range.length = length;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
51 // OS.CFStringGetCharacters (cfstring, range, chars);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
52 // }
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
53 // OS.CFRelease (cfstring);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
54 // }
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
55 // return chars;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 36
diff changeset
56 // TODO implement mbcsToWcs
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
57 return new String(buffer).toCharArray();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
58 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
59
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
60 static byte[] wcsToMbcs (String codePage, String string, boolean terminate) {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
61 // char[] chars = new char [string.length()];
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
62 // string.getChars (0, chars.length, chars, 0);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
63 // int cfstring = OS.CFStringCreateWithCharacters (OS.kCFAllocatorDefault, chars, chars.length);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
64 // byte[] buffer = null;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
65 // if (cfstring != 0) {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
66 // CFRange range = new CFRange ();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
67 // range.length = chars.length;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
68 // int encoding = OS.CFStringGetSystemEncoding ();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
69 // int[] size = new int[1];
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
70 // int numChars = OS.CFStringGetBytes (cfstring, range, encoding, (byte)'?', true, null, 0, size);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
71 // buffer = new byte [size[0] + (terminate ? 1 : 0)];
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
72 // if (numChars != 0) {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
73 // numChars = OS.CFStringGetBytes (cfstring, range, encoding, (byte)'?', true, buffer, size[0], size);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
74 // }
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
75 // OS.CFRelease (cfstring);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
76 // }
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
77 // return buffer;
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 36
diff changeset
78 // TODO implement wcsToMbcs
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
79 if (terminate) string += "\0";
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
80 return string.getBytes();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
81 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
82
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 36
diff changeset
83 int /*long*/ getHandle () {
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
84 return browser.view.id;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
85 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
86
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
87 String getLibraryName () {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
88 return "libxpcom.dylib"; //$NON-NLS-1$
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
89 }
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
90
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
91 String getSWTInitLibraryName () {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
92 return "swt-xulrunner"; //$NON-NLS-1$
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
93 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
94
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
95 void handleFocus () {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
96 if (hasFocus) return;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
97 hasFocus = true;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
98 ((Mozilla)browser.webBrowser).Activate ();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
99 browser.setFocus ();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
100 listener = new Listener () {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
101 public void handleEvent (Event event) {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
102 if (event.widget == browser) return;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
103 ((Mozilla)browser.webBrowser).Deactivate ();
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
104 hasFocus = false;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
105 browser.getDisplay ().removeFilter (SWT.FocusIn, this);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
106 browser.getShell ().removeListener (SWT.Deactivate, this);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
107 listener = null;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
108 }
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
109
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
110 };
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
111 browser.getDisplay ().addFilter (SWT.FocusIn, listener);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
112 browser.getShell ().addListener (SWT.Deactivate, listener);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
113 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
114
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
115 void handleMouseDown () {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
116 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
117
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
118 boolean hookEnterExit () {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
119 return true;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
120 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
121
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
122 void init () {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
123 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
124
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
125 boolean needsSpinup () {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
126 return false;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
127 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
128
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 36
diff changeset
129 void onDispose (int /*long*/ embedHandle) {
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
130 if (listener != null) {
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
131 browser.getDisplay ().removeFilter (SWT.FocusIn, listener);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
132 browser.getShell ().removeListener (SWT.Deactivate, listener);
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
133 listener = null;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
134 }
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
135 browser = null;
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
136 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
137
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents: 36
diff changeset
138 void setSize (int /*long*/ embedHandle, int width, int height) {
124
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
139 // TODO
540fa4e9974a Ported dwt.internal.theme
Jacob Carlborg <doob@me.com>
parents: 45
diff changeset
140 }
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
141
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
142 }