X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9b11752c4f9e1fd4b11ba3d184246267facb3ad3..04fa04d8067d235ab45b5bc05b65f0679634b541:/src/html/htmlctrl/webkit/webkit.mm diff --git a/src/html/htmlctrl/webkit/webkit.mm b/src/html/htmlctrl/webkit/webkit.mm index 86ae740561..1152845843 100644 --- a/src/html/htmlctrl/webkit/webkit.mm +++ b/src/html/htmlctrl/webkit/webkit.mm @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: webkit.mm +// Name: src/html/htmlctrl/webkit/webkit.mm // Purpose: wxWebKitCtrl - embeddable web kit control // Author: Jethro Grassie / Kevin Ollivier // Modified by: @@ -9,10 +9,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "webkit.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #include "wx/splitter.h" @@ -26,8 +22,8 @@ #ifdef __WXCOCOA__ #include "wx/cocoa/autorelease.h" #else -#include "wx/osx/uma.h" -#include +#include "wx/osx/private.h" + #include #include #include @@ -37,6 +33,8 @@ #define DEBUG_WEBKIT_SIZING 0 +extern WXDLLEXPORT_DATA(const char) wxWebKitCtrlNameStr[] = "webkitctrl"; + // ---------------------------------------------------------------------------- // macros // ---------------------------------------------------------------------------- @@ -44,14 +42,18 @@ IMPLEMENT_DYNAMIC_CLASS(wxWebKitCtrl, wxControl) BEGIN_EVENT_TABLE(wxWebKitCtrl, wxControl) +#if defined(__WXMAC__) && wxOSX_USE_CARBON EVT_SIZE(wxWebKitCtrl::OnSize) +#endif END_EVENT_TABLE() +#if defined(__WXOSX__) && wxOSX_USE_CARBON + // ---------------------------------------------------------------------------- // Carbon Events handlers // ---------------------------------------------------------------------------- -// prototype for function in src/mac/carbon/toplevel.cpp +// prototype for function in src/osx/carbon/nonownedwnd.cpp void SetupMouseEvent( wxMouseEvent &wxevent , wxMacCarbonEvent &cEvent ); static const EventTypeSpec eventList[] = @@ -281,6 +283,7 @@ static pascal OSStatus wxWebKitCtrlEventHandler( EventHandlerCallRef handler , E DEFINE_ONE_SHOT_HANDLER_GETTER( wxWebKitCtrlEventHandler ) +#endif // ---------------------------------------------------------------------------- // wxWebKit Events @@ -403,7 +406,6 @@ bool wxWebKitCtrl::Create(wxWindow *parent, const wxValidator& validator, const wxString& name) { - m_currentURL = strURL; //m_pageTitle = _("Untitled Page"); @@ -424,6 +426,7 @@ bool wxWebKitCtrl::Create(wxWindow *parent, } */ // now create and attach WebKit view... + DontCreatePeer(); #ifdef __WXCOCOA__ wxControl::Create(parent, m_windowID, pos, sizeInstance, style , validator , name); SetSize(pos.x, pos.y, sizeInstance.x, sizeInstance.y); @@ -442,24 +445,35 @@ bool wxWebKitCtrl::Create(wxWindow *parent, if(m_parent) m_parent->CocoaAddChild(this); SetInitialFrameRect(pos,sizeInstance); #else - m_macIsUserPane = false; + DontCreatePeer(); wxControl::Create(parent, winID, pos, size, style , validator , name); - m_peer = new wxMacControl(this); +#if wxOSX_USE_CARBON + wxMacControl* peer = new wxMacControl(this); WebInitForCarbon(); - HIWebViewCreate( m_peer->GetControlRefAddr() ); + HIWebViewCreate( peer->GetControlRefAddr() ); - m_webView = (WebView*) HIWebViewGetWebView( m_peer->GetControlRef() ); + m_webView = (WebView*) HIWebViewGetWebView( peer->GetControlRef() ); - MacPostControlCreate(pos, size); - HIViewSetVisible( m_peer->GetControlRef(), true ); - [m_webView setHidden:false]; #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 if ( UMAGetSystemVersion() >= 0x1030 ) - HIViewChangeFeatures( m_peer->GetControlRef() , kHIViewIsOpaque , 0 ) ; + HIViewChangeFeatures( peer->GetControlRef() , kHIViewIsOpaque , 0 ) ; #endif - InstallControlEventHandler( m_peer->GetControlRef() , GetwxWebKitCtrlEventHandlerUPP(), + InstallControlEventHandler( peer->GetControlRef() , GetwxWebKitCtrlEventHandlerUPP(), GetEventTypeCount(eventList), eventList, this, (EventHandlerRef *)&m_webKitCtrlEventHandler); + + SetPeer(peer); +#else + NSRect r = wxOSXGetFrameForControl( this, pos , size ) ; + m_webView = [[WebView alloc] initWithFrame:r frameName:@"webkitFrame" groupName:@"webkitGroup"]; + + SetPeer(new wxWidgetCocoaImpl( this, m_webView )); +#endif + MacPostControlCreate(pos, size); +#if wxOSX_USE_CARBON + HIViewSetVisible( GetPeer()->GetControlRef(), true ); +#endif + [m_webView setHidden:false]; #endif @@ -668,7 +682,6 @@ wxString wxWebKitCtrl::RunScript(const wxString& javascript){ id result = [[m_webView windowScriptObject] evaluateWebScript:(NSString*)wxNSStringWithWxString( javascript )]; NSString* resultAsString; - wxString resultAsWxString = wxEmptyString; NSString* className = NSStringFromClass([result class]); if ([className isEqualToString:@"NSCFNumber"]) resultAsString = [NSString stringWithFormat:@"%@", result]; @@ -683,13 +696,13 @@ wxString wxWebKitCtrl::RunScript(const wxString& javascript){ else if ([className isEqualToString:@"WebScriptObject"]) resultAsString = [result stringRepresentation]; else - fprintf(stderr, "wxWebKitCtrl::RunScript - Unexpected return type: %s!\n", [className UTF8String]); + return wxString(); // This can happen, see e.g. #12361. - resultAsWxString = wxStringWithNSString( resultAsString ); - return resultAsWxString; + return wxStringWithNSString( resultAsString ); } void wxWebKitCtrl::OnSize(wxSizeEvent &event){ +#if defined(__WXMAC_) && wxOSX_USE_CARBON // This is a nasty hack because WebKit seems to lose its position when it is embedded // in a control that is not itself the content view for a TLW. // I put it in OnSize because these calcs are not perfect, and in fact are basically @@ -731,7 +744,7 @@ void wxWebKitCtrl::OnSize(wxSizeEvent &event){ // and this tripped me up at first. But in fact, what we want is the root view, because we need to // make the y origin relative to the very top of the window, not its contents, since we later flip // the y coordinate for Cocoa. - HIViewConvertRect (&rect, m_peer->GetControlRef(), + HIViewConvertRect (&rect, GetPeer()->GetControlRef(), HIViewGetRoot( (WindowRef) MacGetTopLevelWindowRef() ) ); x = (int)rect.origin.x; @@ -756,15 +769,18 @@ void wxWebKitCtrl::OnSize(wxSizeEvent &event){ if (IsShown()) [(WebView*)m_webView display]; +#endif event.Skip(); } void wxWebKitCtrl::MacVisibilityChanged(){ - bool isHidden = !IsControlVisible( m_peer->GetControlRef()); +#if defined(__WXMAC__) && wxOSX_USE_CARBON + bool isHidden = !IsControlVisible( GetPeer()->GetControlRef()); if (!isHidden) [(WebView*)m_webView display]; [m_webView setHidden:isHidden]; +#endif } //------------------------------------------------------------ @@ -892,6 +908,8 @@ void wxWebKitCtrl::MacVisibilityChanged(){ - (void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id < WebPolicyDecisionListener >)listener { + wxUnusedVar(sender); + wxUnusedVar(actionInformation); wxWebKitNewWindowEvent thisEvent(webKitWindow); NSString *url = [[request URL] absoluteString];