Changeset 41793 in webkit


Ignore:
Timestamp:
Mar 17, 2009, 5:06:25 PM (16 years ago)
Author:
Darin Adler
Message:

2009-03-17 Darin Adler <Darin Adler>

Reviewed by Adele Peterson.

Bug 24477: REGRESSION (r41467): Page Down key scrolls two pages
https://bugs.webkit.org/show_bug.cgi?id=24477
rdar://problem/6674184

  • WebView/WebHTMLView.mm: (responderChainRespondsToSelector): Added. (-[WebHTMLView doCommandBySelector:]): Set eventWasHandled based on whether we can find a responder that responds to this selector rather than always assuming the selector will not be handled.
Location:
trunk/WebKit/mac
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit/mac/ChangeLog

    r41787 r41793  
     12009-03-17  Darin Adler  <darin@apple.com>
     2
     3        Reviewed by Adele Peterson.
     4
     5        Bug 24477: REGRESSION (r41467): Page Down key scrolls two pages
     6        https://bugs.webkit.org/show_bug.cgi?id=24477
     7        rdar://problem/6674184
     8
     9        * WebView/WebHTMLView.mm:
     10        (responderChainRespondsToSelector): Added.
     11        (-[WebHTMLView doCommandBySelector:]): Set eventWasHandled based on whether we
     12        can find a responder that responds to this selector rather than always assuming
     13        the selector will not be handled.
     14
    1152009-03-17  Mark Rowe  <mrowe@apple.com>
    216
  • trunk/WebKit/mac/WebView/WebHTMLView.mm

    r41712 r41793  
    53705370}
    53715371
     5372static bool responderChainRespondsToSelector(NSResponder *firstResponder, SEL selector)
     5373{
     5374    for (NSResponder *responder = firstResponder; responder; responder = [responder nextResponder]) {
     5375        if ([responder respondsToSelector:selector])
     5376            return true;
     5377    }
     5378    return false;
     5379}
     5380
    53725381- (void)doCommandBySelector:(SEL)selector
    53735382{
     
    54035412                eventWasHandled = command.execute(event);
    54045413            else {
     5414                // If WebKit does not support this command, we need to pass the selector to super.
    54055415                _private->selectorForDoCommandBySelector = selector;
    5406                 // If WebKit does not support this command, we need to pass the selector to super.
     5416                // We'll get the wrong value for eventWasHandled if respondsToSelector: doesn't
     5417                // exactly reflect what doCommandBySelector: does, for example an unusual class might
     5418                // not even pass the selector along to the next responder, or might handle a selector
     5419                // even though respondsToSelector: return NO. When that happens, there's a risk the
     5420                // event might end up handled twice. We know of no real-world examples of this.
     5421                eventWasHandled = responderChainRespondsToSelector(self, selector);
    54075422                [super doCommandBySelector:selector];
    54085423                _private->selectorForDoCommandBySelector = 0;
    5409                 // In theory, [super doCommandBySelector:] can do some action that would cause WebKit
    5410                 // to need to consider the event handled.  But in practice, I've found no
    5411                 // example of that happening and causing broken behavior.
    5412                 eventWasHandled = false;
    54135424            }
    54145425        }
Note: See TracChangeset for help on using the changeset viewer.