[webkit-dev] DOMRange and khtml::Selection direction

Darin Adler darin at apple.com
Fri Aug 12 12:05:39 PDT 2005

On Aug 12, 2005, at 10:17 AM, Duncan Wilcox wrote:

>> Right, we'll need to either add an extra parameter or change the  
>> class of the existing parameters.
> Ok so the plan might be something like this:
> typedef enum {
>     WebViewSelectionNoDirection,
>     WebViewSelectionForward,
>     WebViewSelectionBackward
> } WebViewSelectionDirection;
> @interface WebViewRange : NSObject
> {
>     DOMRange *range;
>     NSAffinity affinity;
>     WebViewSelectionDirection direction;
> }
> - (DOMRange *)range;
> - (void)setRange:(DOMRange *)newRange;
> - (NSAffinity)affinity;
> - (void)setAffinity:(NSAffinity)newAffinity;
> - (WebViewSelectionDirection)direction;
> - (void)setDirection:(WebViewSelectionDirection)newDirection;
> @end

I don't think I'd use the word "View" in this name. And maybe not  
call it range either. Perhaps "selection" is a better name.

> The plan would also be to add new methods to WebView:
> - (void)setSelectedWebViewRange:(WebViewRange *)range;
> - (WebViewRange *)selectedWebViewRange;

Right. Modulo name changes.

> since WebView also has a standalone - (NSSelectionAffinity) 
> selectionAffinity perhaps a - (WebViewSelectionDirection) 
> selectionDirection is needed for symmetry?

Nah, no need. The affinity methods are the same as ones in  
NSTextView; I don't think we need the full set.

> Finally the WebViewEditingDelegate category would gain a new:
> - (BOOL)webView:(WebView *)webView shouldChangeSelectedWebViewRange: 
> (WebViewRange *)currentRange toWebViewRange:(WebViewRange *) 
> proposedRange stillSelecting:(BOOL)flag;
> while for compatibility the appropriate methods in WebHTMLView.m  
> should call the previous method if the new one isn't available:
> - (BOOL)webView:(WebView *)webView shouldChangeSelectedDOMRange: 
> (DOMRange *)currentRange toDOMRange:(DOMRange *)proposedRange  
> affinity:(NSSelectionAffinity)selectionAffinity stillSelecting: 
> (BOOL)flag;

Right, that's one great thing about how informal delegate work.

> WebViewEditingDelegate has a few other methods that use DOMRange,  
> however at a quick look it doesn't seem that it's strictly needed,  
> if not for symmetry again.

I'd like to look at all methods with DOMRange parameters and consider  

> If this sounds good perhaps you can give me some advice on names  
> and I can proceed with a bug+patch.

This is a nice basic approach.

Since this is the first time we've done a patch that introduces new  
public WebKit API there is at least one thing to consider. New API  
needs to be staged so it can go through the Apple API review process.  
This means that at first we'd put the new API into a "planned to be  
public API" place that's not in a public header, and then move it to  
the public header after the API review is complete. That's just  
because the Safari team might need to "submit" this to an OS X build,  
and we can't change public API there until it's approved.

I wonder if there's anything else that this selection object might  
need to include.

Another thought, maybe only single caret selections need the concept  
of affinity and only range selections need direction, so there may be  
something we can do to take advantage of that.

     -- Darin

More information about the webkit-dev mailing list