|
Lines 41-46
Link Here
|
| 41 |
Point location; |
41 |
Point location; |
| 42 |
Point size; |
42 |
Point size; |
| 43 |
boolean statusBar = true, toolBar = true, ignoreDispose; |
43 |
boolean statusBar = true, toolBar = true, ignoreDispose; |
|
|
44 |
|
| 45 |
//Keep the state around so we can use it for reparenting fixup |
| 46 |
private Listener listener; |
| 47 |
private Control oldBrowserParent; |
| 48 |
private Shell oldBrowserShell; |
| 49 |
|
| 44 |
//TEMPORARY CODE |
50 |
//TEMPORARY CODE |
| 45 |
// boolean doit; |
51 |
// boolean doit; |
| 46 |
|
52 |
|
|
Lines 154-160
Link Here
|
| 154 |
|
160 |
|
| 155 |
final int notificationCenter = Cocoa.objc_msgSend(Cocoa.C_NSNotificationCenter, Cocoa.S_defaultCenter); |
161 |
final int notificationCenter = Cocoa.objc_msgSend(Cocoa.C_NSNotificationCenter, Cocoa.S_defaultCenter); |
| 156 |
|
162 |
|
| 157 |
Listener listener = new Listener() { |
163 |
listener = new Listener() { |
| 158 |
public void handleEvent(Event e) { |
164 |
public void handleEvent(Event e) { |
| 159 |
switch (e.type) { |
165 |
switch (e.type) { |
| 160 |
case SWT.Dispose: { |
166 |
case SWT.Dispose: { |
|
Lines 278-293
Link Here
|
| 278 |
}; |
284 |
}; |
| 279 |
browser.addListener(SWT.Dispose, listener); |
285 |
browser.addListener(SWT.Dispose, listener); |
| 280 |
browser.addListener(SWT.Resize, listener); |
286 |
browser.addListener(SWT.Resize, listener); |
|
|
287 |
browser.addListener(SWT.Show, listener); |
| 288 |
browser.addListener(SWT.Hide, listener); |
| 289 |
|
| 281 |
Shell shell = browser.getShell(); |
290 |
Shell shell = browser.getShell(); |
| 282 |
shell.addListener(SWT.Resize, listener); |
291 |
shell.addListener(SWT.Resize, listener); |
| 283 |
shell.addListener(SWT.Show, listener); |
292 |
shell.addListener(SWT.Show, listener); |
| 284 |
shell.addListener(SWT.Hide, listener); |
293 |
shell.addListener(SWT.Hide, listener); |
| 285 |
Control c = browser; |
294 |
|
| 286 |
do { |
295 |
addListenerToBrowserParents(); |
| 287 |
c.addListener(SWT.Show, listener); |
|
|
| 288 |
c.addListener(SWT.Hide, listener); |
| 289 |
c = c.getParent(); |
| 290 |
} while (c != shell); |
| 291 |
|
296 |
|
| 292 |
if (Callback3 == null) Callback3 = new Callback(this.getClass(), "eventProc3", 3); //$NON-NLS-1$ |
297 |
if (Callback3 == null) Callback3 = new Callback(this.getClass(), "eventProc3", 3); //$NON-NLS-1$ |
| 293 |
int callback3Address = Callback3.getAddress(); |
298 |
int callback3Address = Callback3.getAddress(); |
|
Lines 345-350
Link Here
|
| 345 |
return 0; |
350 |
return 0; |
| 346 |
} |
351 |
} |
| 347 |
|
352 |
|
|
|
353 |
private void addListenerToBrowserParents() |
| 354 |
{ |
| 355 |
Shell shell = browser.getShell(); |
| 356 |
Control c = browser.getParent(); |
| 357 |
|
| 358 |
oldBrowserShell = shell; |
| 359 |
oldBrowserParent = c; |
| 360 |
|
| 361 |
while(c != shell) { |
| 362 |
c.addListener(SWT.Show, listener); |
| 363 |
c.addListener(SWT.Hide, listener); |
| 364 |
c = c.getParent(); |
| 365 |
} |
| 366 |
} |
| 367 |
|
| 348 |
public boolean back() { |
368 |
public boolean back() { |
| 349 |
html = null; |
369 |
html = null; |
| 350 |
int webView = Cocoa.HIWebViewGetWebView(webViewHandle); |
370 |
int webView = Cocoa.HIWebViewGetWebView(webViewHandle); |
|
Lines 363-368
Link Here
|
| 363 |
return value != 0; |
383 |
return value != 0; |
| 364 |
} |
384 |
} |
| 365 |
|
385 |
|
|
|
386 |
//Since Safari is separately embedded, we need to reparent it separately |
| 387 |
void fixParent() { |
| 388 |
//At this point the browser has already been updated |
| 389 |
int window = OS.GetControlOwner(browser.handle); |
| 390 |
int[] contentView = new int[1]; |
| 391 |
OS.HIViewFindByID(OS.HIViewGetRoot(window), OS.kHIViewWindowContentID(), contentView); |
| 392 |
//Remove the view from its old parent |
| 393 |
OS.HIViewRemoveFromSuperview(webViewHandle); |
| 394 |
OS.HIViewAddSubview(contentView[0], webViewHandle); |
| 395 |
|
| 396 |
//Fix up the listeners |
| 397 |
removeListenerFromOldBrowserParents(); |
| 398 |
addListenerToBrowserParents(); |
| 399 |
} |
| 400 |
|
| 366 |
public boolean forward() { |
401 |
public boolean forward() { |
| 367 |
html = null; |
402 |
html = null; |
| 368 |
int webView = Cocoa.HIWebViewGetWebView(webViewHandle); |
403 |
int webView = Cocoa.HIWebViewGetWebView(webViewHandle); |
|
Lines 490-495
Link Here
|
| 490 |
Cocoa.objc_msgSend(webView, Cocoa.S_reload, 0); |
525 |
Cocoa.objc_msgSend(webView, Cocoa.S_reload, 0); |
| 491 |
} |
526 |
} |
| 492 |
|
527 |
|
|
|
528 |
private void removeListenerFromOldBrowserParents() |
| 529 |
{ |
| 530 |
Control c = oldBrowserParent; |
| 531 |
Shell shell = oldBrowserShell; |
| 532 |
|
| 533 |
oldBrowserParent = null; |
| 534 |
oldBrowserShell = null; |
| 535 |
|
| 536 |
if (c == null || shell == null) { |
| 537 |
return; |
| 538 |
} |
| 539 |
|
| 540 |
while(c != shell) { |
| 541 |
c.removeListener(SWT.Show, listener); |
| 542 |
c.removeListener(SWT.Hide, listener); |
| 543 |
c = c.getParent(); |
| 544 |
} |
| 545 |
} |
| 546 |
|
| 493 |
public boolean setText(String html) { |
547 |
public boolean setText(String html) { |
| 494 |
/* |
548 |
/* |
| 495 |
* Bug in Safari. The web view segment faults in some circunstances |
549 |
* Bug in Safari. The web view segment faults in some circunstances |