]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlctrl/webkit/webkit.mm
Close tree edit even if the change is vetoed to be consistent with MSW [patch 1110252]
[wxWidgets.git] / src / html / htmlctrl / webkit / webkit.mm
index 1b6155d1732655e5a8d2521c1d18f131ccb4f596..588e18696da22aee84310b781cfd39e3dcce0e26 100755 (executable)
@@ -200,17 +200,17 @@ bool wxWebKitCtrl::CanGoForward(){
 bool wxWebKitCtrl::GoBack(){
     if ( !m_webView )
         return false;
 bool wxWebKitCtrl::GoBack(){
     if ( !m_webView )
         return false;
-        
-    [m_webView goBack];
-    return true;
+    
+    bool result = [(WebView*)m_webView goBack];
+    return result;
 }
 
 bool wxWebKitCtrl::GoForward(){ 
     if ( !m_webView )
         return false;
         
 }
 
 bool wxWebKitCtrl::GoForward(){ 
     if ( !m_webView )
         return false;
         
-    [m_webView goForward];
-    return true;
+    bool result = [(WebView*)m_webView goForward];
+    return result;
 }
 
 void wxWebKitCtrl::Reload(){ 
 }
 
 void wxWebKitCtrl::Reload(){ 
@@ -236,14 +236,13 @@ bool wxWebKitCtrl::CanGetPageSource(){
 }
 
 wxString wxWebKitCtrl::GetPageSource(){
 }
 
 wxString wxWebKitCtrl::GetPageSource(){
-    if ( !m_webView )
-        return wxT("");
     
     if (CanGetPageSource()){
         WebDataSource* dataSource = [[m_webView mainFrame] dataSource];
         return wxStringWithNSString( [[dataSource representation] documentSource] );
     }
     
     
     if (CanGetPageSource()){
         WebDataSource* dataSource = [[m_webView mainFrame] dataSource];
         return wxStringWithNSString( [[dataSource representation] documentSource] );
     }
     
+    return wxT("");
 }
 
 void wxWebKitCtrl::SetPageSource(wxString& source, const wxString& baseUrl){
 }
 
 void wxWebKitCtrl::SetPageSource(wxString& source, const wxString& baseUrl){
@@ -257,44 +256,65 @@ void wxWebKitCtrl::SetPageSource(wxString& source, const wxString& baseUrl){
 }
 
 void wxWebKitCtrl::OnSize(wxSizeEvent &event){
 }
 
 void wxWebKitCtrl::OnSize(wxSizeEvent &event){
-    // This is a nasty hack because WebKit does not seem to recognize a Tabs control as its parent. 
-    // Therefore, coordinates must be relative to the left-hand side of the screen, rather than
-    // relative to the Tabs control.
+    // 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.
+        
     wxWindow* parent = GetParent();
     wxWindow* parent = GetParent();
-    bool inNotebook = false;
-    int x = 0;
-    int y = 18; 
+    bool isParentTopLevel = true;
+    if (!parent->IsTopLevel())
+        isParentTopLevel = false;
+        
+    int x = GetPosition().x;
+    // we must take into account the title bar size as well, which is 26 pixels
+    int y = GetPosition().y + 26;
+        
+    NSRect bounds = [m_webView frame];
+    wxWindow* tlw = NULL;
+    
     while(parent != NULL)
     {
     while(parent != NULL)
     {
-        // keep adding the position until we hit the notebook
-        if (!inNotebook){
-            x += parent->GetPosition().x;
-            y += parent->GetPosition().y;
-        }
+        if (parent->IsTopLevel())
+            tlw = parent;
+
+        x += parent->GetPosition().x;
+        y += parent->GetPosition().y;
         
         
-        if ( parent->GetClassInfo()->GetClassName() == wxT("wxSplitterWindow") ){
-            x += 3;
+        if ( parent->IsKindOf( CLASSINFO( wxNotebook ) )  ){
+            //manually account for the size the tabs take up
+            y += 14;
         }
         
         }
         
-        if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) ){
-            inNotebook = true;
-            }
+        //if ( parent->GetClassInfo()->GetClassName() == wxT("wxSplitterWindow") ){
+        //    x += 3;
+        //}
+        
         parent = parent->GetParent();
     }
     
         parent = parent->GetParent();
     }
     
-    if (inNotebook){
+    if (!isParentTopLevel){
+        if (tlw){
+            //x = tlw->GetSize().x - (GetSize().x + x);
+            y = tlw->GetSize().y - (GetSize().y + y);
+        }
         NSRect bounds = [m_webView frame];
         bounds.origin.x += x;
         bounds.origin.y += y;
         NSRect bounds = [m_webView frame];
         bounds.origin.x += x;
         bounds.origin.y += y;
+        //leaving debug checks in until I know it works everywhere ;-)
+        //printf("Added to bounds x=%d, y=%d\n", x, y);
         [m_webView setFrame:bounds];
     }
     
         [m_webView setFrame:bounds];
     }
     
-    [m_webView display];
+    //printf("Carbon position x=%d, y=%d\n", GetPosition().x, GetPosition().y);
+    if (IsShown())
+        [m_webView display];
     event.Skip();
 }
 
 void wxWebKitCtrl::MacVisibilityChanged(){
     bool isHidden = !IsControlVisible( m_peer->GetControlRef());
     event.Skip();
 }
 
 void wxWebKitCtrl::MacVisibilityChanged(){
     bool isHidden = !IsControlVisible( m_peer->GetControlRef());
+    if (!isHidden)
+        [m_webView display];
+    
     [m_webView setHidden:isHidden];
 }
 
     [m_webView setHidden:isHidden];
 }