Changeset 456

Show
Ignore:
Timestamp:
03/27/08 10:13:15 PM (8 months ago)
Author:
nicholas
Message:

Support WebKit? past r31014; patch PDFView in some places (not WebKit? yet).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ICeCoffEE/ICeCoffEE/APEMain.m

    r443 r456  
    156156        } else if (ICCF_CFBundleIDMatches(bundleID, CFSTR("org.mozilla.camino"))) { 
    157157            ICCF_PatchMethod("ChildView", "ICeCoffEEMenuOnly", "ICeCoffEEMenuSuper", "menuForEvent:"); 
    158             ICapeprintf("ICeCoffEE APE: loaded in ChildView for Camino\n"); 
     158           ICapeprintf("ICeCoffEE APE: loaded in ChildView for Camino\n"); 
    159159        } 
    160160    } 
    161161 
    162     objc_getClass("WebCoreFrameBridge") != NULL /* require Safari 3 */ && 
    163         ICCF_PatchMethod("WebHTMLView", "ICeCoffEEWebKit", "ICeCoffEEWebKitSuper", "mouseUp:") && 
    164         ICCF_PatchMethod("WebHTMLView", "ICeCoffEEWebKit", "ICeCoffEEWebKitSuper", "mouseDown:") && 
    165         ICCF_PatchMethod("WebHTMLView", "ICeCoffEEWebKit", "ICeCoffEEWebKitSuper", "menuForEvent:"); 
    166         ICapeprintf("ICeCoffEE APE: loaded in WebHTMLView for WebKit/Safari 3\n"); 
     162    ICCF_PatchMethod("WebHTMLView", "ICeCoffEEWebKit", "ICeCoffEEWebKitSuper", "mouseUp:") && 
     163        ICCF_PatchMethod("WebHTMLView", "ICeCoffEEWebKit", "ICeCoffEEWebKitSuper", "mouseDown:") && 
     164        ICCF_PatchMethod("WebHTMLView", "ICeCoffEEWebKit", "ICeCoffEEWebKitSuper", "menuForEvent:"); 
     165    ICapeprintf("ICeCoffEE APE: loaded in WebHTMLView for WebKit/Safari 3\n"); 
    167166     
    168167    if (shouldLoadInNSTextView) { 
     
    172171        ICapeprintf("ICeCoffEE APE: loaded generic NSTextView support\n"); 
    173172    } 
     173     
     174    ICCF_PatchMethod("PDFView", "ICeCoffEEMenuOnly", "ICeCoffEEMenuSuper", "menuForEvent:"); 
     175    ICapeprintf("ICeCoffEE APE: loaded in PDFView for PDFKit\n"); 
    174176 
    175177    ICCF_ReloadPrefs(); 
  • trunk/ICeCoffEE/ICeCoffEE/ICeCoffEEWebKit.m

    r455 r456  
    2121@end 
    2222 
     23// r31014 and later; likely to move again 
     24@interface WebFrame (WebFrameInternal) 
     25- (DOMRange *)_convertNSRangeToDOMRange:(NSRange)range; 
     26- (NSString *)_stringForRange:(DOMRange *)range; 
     27@end 
     28 
    2329// XXX WebHTMLView is going away 
    2430@interface WebHTMLView : NSObject 
     
    2834 
    2935- (WebView *)_webView; 
    30 - (WebCoreFrameBridge *)_bridge; 
     36- (WebCoreFrameBridge *)_bridge; // moved from WebNSViewExtras in r14032; removed in r31014 
     37- (WebFrame *)_frame; // moved from WebNSViewExtras in r14032 
    3138 
    3239@end 
     
    142149            ICLog(@"got a link"); 
    143150            if (!elementIsEditable) { 
    144                 ICCF_StopIC(); 
    145151                return; 
    146152            } 
     
    156162            NSAssert(range.location != NSNotFound, ICCF_LocalizedString(@"Sorry, ICeCoffEE was unable to find anything to select")); 
    157163 
    158             WebCoreFrameBridge *bridge = [(WebHTMLView *)self _bridge]; 
     164            WebFrame *frame = [(WebHTMLView *)self _frame]; 
     165            WebCoreFrameBridge *bridge = nil; 
     166            if ([self respondsToSelector: @selector(_bridge)]) 
     167                bridge = [(WebHTMLView *)self _bridge]; 
    159168 
    160169            // XXX limit to a reasonable size 
     
    162171            if (elementIsEditable) // for form fields, range will be field-relative rather than document-relative 
    163172                s = [[(NSView<NSTextInput> *)self attributedSubstringFromRange: NSMakeRange(0, UINT_MAX)] string]; 
    164             else // sometimes attributedSubstringFromRange: returns nil 
    165                 s = [bridge stringForRange: [(WebHTMLView *)self _documentRange]]; 
    166              
     173            else { // sometimes attributedSubstringFromRange: returns nil 
     174                domRange = [(WebHTMLView *)self _documentRange]; 
     175                if (bridge != nil) 
     176                    s = [bridge stringForRange: domRange]; 
     177                else if (![frame respondsToSelector: @selector(_stringForRange:)]) 
     178                    return; // WebKit too new? 
     179                else 
     180                    s = [frame _stringForRange: domRange]; 
     181            } 
     182             
     183            if (bridge == nil && ![frame respondsToSelector: @selector(_convertNSRangeToDOMRange:)]) { 
     184                return; // WebKit too new? 
     185            } 
     186                 
    167187            if (range.length == 0) { 
    168188                range.length = 1; 
    169189                range = ICCF_URLEnclosingRange(s, range); 
    170                 domRange = [bridge convertNSRangeToDOMRange: range]; 
     190                domRange = bridge ? [bridge convertNSRangeToDOMRange: range] : 
     191                                    [frame _convertNSRangeToDOMRange: range]; 
    171192                [webView setSelectedDOMRange: domRange affinity: NSSelectionAffinityDownstream]; 
    172193            } else { 
    173                 domRange = [bridge convertNSRangeToDOMRange: range]; 
     194                domRange = bridge ? [bridge convertNSRangeToDOMRange: range] : 
     195                                    [frame _convertNSRangeToDOMRange: range]; 
    174196            } 
    175197             
     
    202224                [webView setGrammarCheckingEnabled: YES]; 
    203225        } 
     226        ICCF_StopIC(); 
    204227    } 
    205  
    206     ICCF_StopIC(); 
    207228} 
    208229