⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 286812 in webkit


Ignore:
Timestamp:
Dec 9, 2021, 3:25:50 PM (5 years ago)
Author:
Megan Gardner
Message:

Markup Pane not displaying.
https://bugs.webkit.org/show_bug.cgi?id=234089

Reviewed by Tim Horton.

Source/WebCore:

Vend the image location so that the Markup Pane knows where to
present from.

  • dom/mac/ImageControlsMac.cpp:

(WebCore::ImageControlsMac::handleEvent):

  • page/ChromeClient.h:

(WebCore::ChromeClient::handleImageServiceClick):

Source/WebKit:

An optional method on NSSharingServiceDelegate was not implemented, meaning
that the markup pane did not know where to present, and would assert and fail to
show up. Make sure this is implemented for the image controls menu and also
give it the correct location to present form.

  • Shared/ContextMenuContextData.cpp:

(WebKit::ContextMenuContextData::ContextMenuContextData):
(WebKit::ContextMenuContextData::encode const):
(WebKit::ContextMenuContextData::decode):

  • Shared/ContextMenuContextData.h:

(WebKit::ContextMenuContextData::controlledImageFrame const):

  • UIProcess/API/Cocoa/WKWebViewConfiguration.mm:

(-[WKWebViewConfiguration init]):

  • UIProcess/mac/WKSharingServicePickerDelegate.h:
  • UIProcess/mac/WKSharingServicePickerDelegate.mm:

(-[WKSharingServicePickerDelegate setSourceFrame:]):
(-[WKSharingServicePickerDelegate sharingService:sourceFrameOnScreenForShareItem:]):

  • UIProcess/mac/WebContextMenuProxyMac.mm:

(WebKit::WebContextMenuProxyMac::setupServicesMenu):

  • WebProcess/WebCoreSupport/WebChromeClient.cpp:

(WebKit::WebChromeClient::handleImageServiceClick):

  • WebProcess/WebCoreSupport/WebChromeClient.h:
  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/mac/WebPageMac.mm:

(WebKit::WebPage::handleImageServiceClick):

Location:
trunk/Source
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r286811 r286812  
     12021-12-09  Megan Gardner  <megan_gardner@apple.com>
     2
     3        Markup Pane not displaying.
     4        https://bugs.webkit.org/show_bug.cgi?id=234089
     5
     6        Reviewed by Tim Horton.
     7
     8        Vend the image location so that the Markup Pane knows where to
     9        present from.
     10
     11        * dom/mac/ImageControlsMac.cpp:
     12        (WebCore::ImageControlsMac::handleEvent):
     13        * page/ChromeClient.h:
     14        (WebCore::ChromeClient::handleImageServiceClick):
     15
    1162021-12-09  Tyler Wilcock  <tyler_w@apple.com>
    217
  • trunk/Source/WebCore/dom/mac/ImageControlsMac.cpp

    r286762 r286812  
    131131            return false;
    132132        if (auto* image = imageFromImageElementNode(*imageElement)) {
    133             page->chrome().client().handleImageServiceClick(roundedIntPoint(mouseEvent.absoluteLocation()), *image, imageElement->isContentEditable());
     133            page->chrome().client().handleImageServiceClick(roundedIntPoint(mouseEvent.absoluteLocation()), *image, imageElement->isContentEditable(), imageElement->renderBox()->absoluteContentQuad().enclosingBoundingBox());
    134134            event.setDefaultHandled();
    135135            return true;
  • trunk/Source/WebCore/page/ChromeClient.h

    r286762 r286812  
    533533    virtual void handleSelectionServiceClick(FrameSelection&, const Vector<String>&, const IntPoint&) { }
    534534    virtual bool hasRelevantSelectionServices(bool /*isTextOnly*/) const { return false; }
    535     virtual void handleImageServiceClick(const IntPoint&, Image&, bool /*isEditable*/) { }
     535    virtual void handleImageServiceClick(const IntPoint&, Image&, bool /*isEditable*/, const IntRect&) { }
    536536#endif
    537537
  • trunk/Source/WebKit/ChangeLog

    r286805 r286812  
     12021-12-09  Megan Gardner  <megan_gardner@apple.com>
     2
     3        Markup Pane not displaying.
     4        https://bugs.webkit.org/show_bug.cgi?id=234089
     5
     6        Reviewed by Tim Horton.
     7
     8        An optional method on NSSharingServiceDelegate was not implemented, meaning
     9        that the markup pane did not know where to present, and would assert and fail to
     10        show up. Make sure this is implemented for the image controls menu and also
     11        give it the correct location to present form.
     12
     13        * Shared/ContextMenuContextData.cpp:
     14        (WebKit::ContextMenuContextData::ContextMenuContextData):
     15        (WebKit::ContextMenuContextData::encode const):
     16        (WebKit::ContextMenuContextData::decode):
     17        * Shared/ContextMenuContextData.h:
     18        (WebKit::ContextMenuContextData::controlledImageFrame const):
     19        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
     20        (-[WKWebViewConfiguration init]):
     21        * UIProcess/mac/WKSharingServicePickerDelegate.h:
     22        * UIProcess/mac/WKSharingServicePickerDelegate.mm:
     23        (-[WKSharingServicePickerDelegate setSourceFrame:]):
     24        (-[WKSharingServicePickerDelegate sharingService:sourceFrameOnScreenForShareItem:]):
     25        * UIProcess/mac/WebContextMenuProxyMac.mm:
     26        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
     27        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
     28        (WebKit::WebChromeClient::handleImageServiceClick):
     29        * WebProcess/WebCoreSupport/WebChromeClient.h:
     30        * WebProcess/WebPage/WebPage.h:
     31        * WebProcess/WebPage/mac/WebPageMac.mm:
     32        (WebKit::WebPage::handleImageServiceClick):
     33
    1342021-12-09  Tim Horton  <timothy_horton@apple.com>
    235
  • trunk/Source/WebKit/Shared/ContextMenuContextData.cpp

    r286762 r286812  
    6868
    6969#if ENABLE(SERVICE_CONTROLS)
    70 ContextMenuContextData::ContextMenuContextData(const WebCore::IntPoint& menuLocation, WebCore::Image& image, bool isEditable)
     70ContextMenuContextData::ContextMenuContextData(const WebCore::IntPoint& menuLocation, WebCore::Image& image, bool isEditable, const WebCore::IntRect& imageRect)
    7171    : m_type(Type::ServicesMenu)
    7272    , m_menuLocation(menuLocation)
    7373    , m_selectionIsEditable(isEditable)
     74    , m_controlledImageBounds(imageRect)
    7475{
    7576    setImage(&image);
     
    103104    encoder << m_selectedTelephoneNumbers;
    104105    encoder << m_selectionIsEditable;
     106    encoder << m_controlledImageBounds;
    105107#endif
    106108}
     
    137139    if (!decoder.decode(result.m_selectionIsEditable))
    138140        return false;
     141    if (!decoder.decode(result.m_controlledImageBounds))
     142        return false;
    139143#endif
    140144
  • trunk/Source/WebKit/Shared/ContextMenuContextData.h

    r286762 r286812  
    6565    }
    6666   
    67     ContextMenuContextData(const WebCore::IntPoint& menuLocation, WebCore::Image&, bool isEditable);
     67    ContextMenuContextData(const WebCore::IntPoint& menuLocation, WebCore::Image&, bool isEditable, const WebCore::IntRect& imageRect);
    6868
    6969    ShareableBitmap* controlledImage() const { return m_controlledImage.get(); }
     
    7373    bool isServicesMenu() const { return m_type == ContextMenuContextData::Type::ServicesMenu; }
    7474    bool controlledDataIsEditable() const;
     75    WebCore::IntRect controlledImageBounds() const { return m_controlledImageBounds; };
    7576#endif
    7677
     
    9495    Vector<String> m_selectedTelephoneNumbers;
    9596    bool m_selectionIsEditable;
     97    WebCore::IntRect m_controlledImageBounds;
    9698#endif
    9799};
  • trunk/Source/WebKit/UIProcess/mac/WKSharingServicePickerDelegate.h

    r260366 r286812  
    3939    BOOL _filterEditingServices;
    4040    BOOL _handleEditingReplacement;
     41    NSRect _sourceFrame;
    4142}
    4243
     
    4748- (void)setFiltersEditingServices:(BOOL)filtersEditingServices;
    4849- (void)setHandlesEditingReplacement:(BOOL)handlesEditingReplacement;
     50- (void)setSourceFrame:(NSRect)sourceFrame;
     51
    4952@end
    5053
  • trunk/Source/WebKit/UIProcess/mac/WKSharingServicePickerDelegate.mm

    r266607 r286812  
    7171}
    7272
     73- (void)setSourceFrame:(NSRect)sourceFrame
     74{
     75    _sourceFrame = sourceFrame;
     76}
     77
    7378- (NSArray *)sharingServicePicker:(NSSharingServicePicker *)sharingServicePicker sharingServicesForItems:(NSArray *)items mask:(NSSharingServiceMask)mask proposedSharingServices:(NSArray *)proposedServices
    7479{
     
    8994{
    9095    return self;
     96}
     97
     98- (NSRect)sharingService:(NSSharingService *)sharingService sourceFrameOnScreenForShareItem:(id <NSPasteboardWriting>)item
     99{
     100    return _sourceFrame;
    91101}
    92102
  • trunk/Source/WebKit/UIProcess/mac/WebContextMenuProxyMac.mm

    r286762 r286812  
    239239    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setFiltersEditingServices:!includeEditorServices];
    240240    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setHandlesEditingReplacement:includeEditorServices];
     241   
     242    NSRect imageRect = m_context.controlledImageBounds();
     243    imageRect = [m_webView convertRect:imageRect toView:nil];
     244    imageRect = [[m_webView window] convertRectToScreen:imageRect];
     245    [[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate] setSourceFrame:imageRect];
    241246
    242247    m_menu = adoptNS([[picker menu] copy]);
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp

    r286762 r286812  
    13481348}
    13491349
    1350 void WebChromeClient::handleImageServiceClick(const IntPoint& point, Image& image, bool isEditable)
    1351 {
    1352     m_page.handleImageServiceClick(point, image, isEditable);
     1350void WebChromeClient::handleImageServiceClick(const IntPoint& point, Image& image, bool isEditable, const IntRect& imageRect)
     1351{
     1352    m_page.handleImageServiceClick(point, image, isEditable, imageRect);
    13531353}
    13541354
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h

    r286762 r286812  
    382382    void handleSelectionServiceClick(WebCore::FrameSelection&, const Vector<String>& telephoneNumbers, const WebCore::IntPoint&) final;
    383383    bool hasRelevantSelectionServices(bool isTextOnly) const final;
    384     void handleImageServiceClick(const WebCore::IntPoint&, WebCore::Image&, bool isEditable) final;
     384    void handleImageServiceClick(const WebCore::IntPoint&, WebCore::Image&, bool isEditable, const WebCore::IntRect&) final;
    385385#endif
    386386
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r286767 r286812  
    12041204    void handleTelephoneNumberClick(const String& number, const WebCore::IntPoint&);
    12051205    void handleSelectionServiceClick(WebCore::FrameSelection&, const Vector<String>& telephoneNumbers, const WebCore::IntPoint&);
    1206     void handleImageServiceClick(const WebCore::IntPoint&, WebCore::Image&, bool isEditable);
     1206    void handleImageServiceClick(const WebCore::IntPoint&, WebCore::Image&, bool isEditable, const WebCore::IntRect&);
    12071207#endif
    12081208
  • trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm

    r286762 r286812  
    829829}
    830830
    831 void WebPage::handleImageServiceClick(const IntPoint& point, Image& image, bool isEditable)
    832 {
    833     send(Messages::WebPageProxy::ShowContextMenu(ContextMenuContextData(point, image, isEditable), UserData()));
     831void WebPage::handleImageServiceClick(const IntPoint& point, Image& image, bool isEditable, const IntRect& imageRect)
     832{
     833    send(Messages::WebPageProxy::ShowContextMenu(ContextMenuContextData(point, image, isEditable, imageRect), UserData()));
    834834}
    835835
Note: See TracChangeset for help on using the changeset viewer.