X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4267872212359599cbc60a12d10f9c6f6173b947..8e2c6c3f7d3846883f20754a84d03866057df427:/src/html/htmlctrl/webkit/webkit.mm?ds=sidebyside diff --git a/src/html/htmlctrl/webkit/webkit.mm b/src/html/htmlctrl/webkit/webkit.mm index 9a79c6ab08..0d65ecbe06 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" @@ -168,9 +164,9 @@ static pascal OSStatus wxWebKitKeyEventHandler( EventHandlerCallRef handler , Ev wxKeyEvent event(wxEVT_KEY_DOWN); event.m_shiftDown = modifiers & shiftKey; - event.m_controlDown = modifiers & controlKey; + event.m_rawControlDown = modifiers & controlKey; event.m_altDown = modifiers & optionKey; - event.m_metaDown = modifiers & cmdKey; + event.m_controlDown = modifiers & cmdKey; event.m_x = point.h; event.m_y = point.v; @@ -183,7 +179,7 @@ static pascal OSStatus wxWebKitKeyEventHandler( EventHandlerCallRef handler , Ev if ( /* focus && */ (modifiers ^ wxApp::s_lastModifiers ) & controlKey ) { - event.m_keyCode = WXK_CONTROL ; + event.m_keyCode = WXK_RAW_CONTROL ; event.SetEventType( ( modifiers & controlKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ; focus->GetEventHandler()->ProcessEvent( event ) ; } @@ -201,7 +197,7 @@ static pascal OSStatus wxWebKitKeyEventHandler( EventHandlerCallRef handler , Ev } if ( /* focus && */ (modifiers ^ wxApp::s_lastModifiers ) & cmdKey ) { - event.m_keyCode = WXK_COMMAND ; + event.m_keyCode = WXK_CONTROL ; event.SetEventType( ( modifiers & cmdKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ; focus->GetEventHandler()->ProcessEvent( event ) ; } @@ -410,7 +406,6 @@ bool wxWebKitCtrl::Create(wxWindow *parent, const wxValidator& validator, const wxString& name) { - m_currentURL = strURL; //m_pageTitle = _("Untitled Page"); @@ -431,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); @@ -449,31 +445,33 @@ 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); #if wxOSX_USE_CARBON - m_peer = new wxMacControl(this); + 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() ); #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"]; - m_peer = new wxWidgetCocoaImpl( this, m_webView ); + SetPeer(new wxWidgetCocoaImpl( this, m_webView )); #endif MacPostControlCreate(pos, size); #if wxOSX_USE_CARBON - HIViewSetVisible( m_peer->GetControlRef(), true ); + HIViewSetVisible( GetPeer()->GetControlRef(), true ); #endif [m_webView setHidden:false]; @@ -684,18 +682,20 @@ wxString wxWebKitCtrl::RunScript(const wxString& javascript){ id result = [[m_webView windowScriptObject] evaluateWebScript:(NSString*)wxNSStringWithWxString( javascript )]; NSString* resultAsString; - NSString* className = NSStringFromClass([result class]); - if ([className isEqualToString:@"NSCFNumber"]) - resultAsString = [NSString stringWithFormat:@"%@", result]; - else if ([className isEqualToString:@"NSCFString"]) - resultAsString = result; - else if ([className isEqualToString:@"NSCFBoolean"]){ - if ([result boolValue]) - resultAsString = @"true"; + if ([result isKindOfClass:[NSNumber class]]){ + // __NSCFBoolean is a subclass of NSNumber + if (strcmp([result objCType], @encode(BOOL)) == 0){ + if ([result boolValue]) + resultAsString = @"true"; + else + resultAsString = @"false"; + } else - resultAsString = @"false"; + resultAsString = [NSString stringWithFormat:@"%@", result]; } - else if ([className isEqualToString:@"WebScriptObject"]) + else if ([result isKindOfClass:[NSString class]]) + resultAsString = result; + else if ([result isKindOfClass:[WebScriptObject class]]) resultAsString = [result stringRepresentation]; else return wxString(); // This can happen, see e.g. #12361. @@ -704,7 +704,7 @@ wxString wxWebKitCtrl::RunScript(const wxString& javascript){ } void wxWebKitCtrl::OnSize(wxSizeEvent &event){ -#if defined(__WXMAC_) && wxOSX_USE_CARBON +#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 @@ -746,7 +746,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; @@ -771,13 +771,13 @@ void wxWebKitCtrl::OnSize(wxSizeEvent &event){ if (IsShown()) [(WebView*)m_webView display]; - event.Skip(); #endif + event.Skip(); } void wxWebKitCtrl::MacVisibilityChanged(){ #if defined(__WXMAC__) && wxOSX_USE_CARBON - bool isHidden = !IsControlVisible( m_peer->GetControlRef()); + bool isHidden = !IsControlVisible( GetPeer()->GetControlRef()); if (!isHidden) [(WebView*)m_webView display]; @@ -798,7 +798,7 @@ void wxWebKitCtrl::MacVisibilityChanged(){ - initWithWxWindow: (wxWebKitCtrl*)inWindow { - [super init]; + self = [super init]; webKitWindow = inWindow; // non retained return self; } @@ -879,7 +879,7 @@ void wxWebKitCtrl::MacVisibilityChanged(){ - initWithWxWindow: (wxWebKitCtrl*)inWindow { - [super init]; + self = [super init]; webKitWindow = inWindow; // non retained return self; }