diff options
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Mozilla')
6 files changed, 49 insertions, 1 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java index d09dfe4592..072bb137bd 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/carbon/org/eclipse/swt/browser/MozillaDelegate.java @@ -17,6 +17,7 @@ import org.eclipse.swt.browser.Browser; import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.carbon.*; import org.eclipse.swt.internal.cocoa.*; +import org.eclipse.swt.internal.mozilla.*; import org.eclipse.swt.widgets.*; class MozillaDelegate { @@ -107,6 +108,21 @@ static int eventProc3 (int nextHandler, int theEvent, int userData) { void addWindowSubclass () { } +int createBaseWindow (nsIBaseWindow baseWindow) { + /* + * Feature of Mozilla on OSX. Mozilla replaces the OSX application menu whenever + * a browser's base window is created. The workaround is to restore the previous + * menu after creating the base window. + */ + int application = Cocoa.objc_msgSend (Cocoa.C_NSApplication, Cocoa.S_sharedApplication); + int mainMenu = Cocoa.objc_msgSend (application, Cocoa.S_mainMenu); + Cocoa.objc_msgSend (mainMenu, Cocoa.S_retain); + int rc = baseWindow.Create (); + Cocoa.objc_msgSend (application, Cocoa.S_setMainMenu, mainMenu); + Cocoa.objc_msgSend (mainMenu, Cocoa.S_release); + return rc; +} + int getHandle () { int embedHandle = Cocoa.objc_msgSend (Cocoa.C_NSImageView, Cocoa.S_alloc); if (embedHandle == 0) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java index 034f64ecc7..748753d0fd 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/cocoa/org/eclipse/swt/browser/MozillaDelegate.java @@ -13,6 +13,8 @@ package org.eclipse.swt.browser; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; +import org.eclipse.swt.internal.cocoa.*; +import org.eclipse.swt.internal.mozilla.*; import org.eclipse.swt.widgets.*; class MozillaDelegate { @@ -75,6 +77,21 @@ static byte[] wcsToMbcs (String codePage, String string, boolean terminate) { void addWindowSubclass () { } +int createBaseWindow (nsIBaseWindow baseWindow) { + /* + * Feature of Mozilla on OSX. Mozilla replaces the OSX application menu whenever + * a browser's base window is created. The workaround is to restore the previous + * menu after creating the base window. + */ + NSApplication application = NSApplication.sharedApplication (); + NSMenu mainMenu = application.mainMenu (); + mainMenu.retain (); + int rc = baseWindow.Create (); + application.setMainMenu (mainMenu); + mainMenu.release (); + return rc; +} + int /*long*/ getHandle () { return browser.view.id; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java index a6b2f38935..e9418071e1 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/common/org/eclipse/swt/browser/Mozilla.java @@ -1314,7 +1314,7 @@ public void create (Composite parent, int style) { browser.dispose (); error (XPCOM.NS_ERROR_FAILURE); } - rc = baseWindow.Create (); + rc = delegate.createBaseWindow (baseWindow); if (rc != XPCOM.NS_OK) { browser.dispose (); error (XPCOM.NS_ERROR_FAILURE); diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java index 5f84c50620..e7479455c4 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/gtk/org/eclipse/swt/browser/MozillaDelegate.java @@ -14,6 +14,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.gtk.*; +import org.eclipse.swt.internal.mozilla.*; import org.eclipse.swt.widgets.*; class MozillaDelegate { @@ -73,6 +74,10 @@ static byte[] wcsToMbcs (String codePage, String string, boolean terminate) { void addWindowSubclass () { } +int createBaseWindow (nsIBaseWindow baseWindow) { + return baseWindow.Create (); +} + int /*long*/ getHandle () { /* * Bug in Mozilla Linux GTK. Embedding Mozilla into a GtkFixed diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java index aac50746da..377f61c2df 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/motif/org/eclipse/swt/browser/MozillaDelegate.java @@ -13,6 +13,7 @@ package org.eclipse.swt.browser; import org.eclipse.swt.SWT; import org.eclipse.swt.internal.*; import org.eclipse.swt.internal.gtk.GTK; +import org.eclipse.swt.internal.mozilla.*; import org.eclipse.swt.widgets.*; class MozillaDelegate { @@ -87,6 +88,10 @@ static byte[] wcsToMbcs (String codePage, String string, boolean terminate) { void addWindowSubclass () { } +int createBaseWindow (nsIBaseWindow baseWindow) { + return baseWindow.Create (); +} + int getHandle() { if (Mozilla.BrowserCount == 1) { GTK.gtk_init_check (new int[1], null); diff --git a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java index 96937a1096..3f44646d9d 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Mozilla/win32/org/eclipse/swt/browser/MozillaDelegate.java @@ -12,6 +12,7 @@ package org.eclipse.swt.browser; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.internal.Callback; +import org.eclipse.swt.internal.mozilla.*; import org.eclipse.swt.internal.win32.*; import org.eclipse.swt.widgets.*; @@ -77,6 +78,10 @@ void addWindowSubclass () { OS.SetWindowLongPtr (hwndChild, OS.GWL_WNDPROC, SubclassProc.getAddress ()); } +int createBaseWindow (nsIBaseWindow baseWindow) { + return baseWindow.Create (); +} + int /*long*/ getHandle () { return browser.handle; } |