Title: [168378] trunk/Source
Revision
168378
Author
beid...@apple.com
Date
2014-05-06 14:08:14 -0700 (Tue, 06 May 2014)

Log Message

Don't select an image that is about to have its menu shown.
<rdar://problem/16807845> and https://bugs.webkit.org/show_bug.cgi?id=132579

Reviewed by Tim Horton.

Source/WebCore:
* WebCore.exp.in:

* editing/Editor.h:
* editing/mac/EditorMac.mm:
(WebCore::Editor::replaceNodeFromPasteboard): New method that first selects
  the Node and then immediately pastes over it. Since it’s synchronous the
  selection never has a chance to paint.

* html/shadow/mac/ImageControlsButtonElementMac.cpp:
(WebCore::ImageControlsButtonElementMac::defaultEventHandler): Don’t select the image.

Source/WebKit/mac:
* Misc/WebSharingServicePickerController.mm:
(-[WebSharingServicePickerController didShareImageData:confirmDataIsValidTIFFData:]):
  Call the new replaceNodeFromPasteboard API instead of readSelectionFromPasteboard.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (168377 => 168378)


--- trunk/Source/WebCore/ChangeLog	2014-05-06 20:19:31 UTC (rev 168377)
+++ trunk/Source/WebCore/ChangeLog	2014-05-06 21:08:14 UTC (rev 168378)
@@ -1,3 +1,21 @@
+2014-05-06  Brady Eidson  <beid...@apple.com>
+
+        Don't select an image that is about to have its menu shown.
+        <rdar://problem/16807845> and https://bugs.webkit.org/show_bug.cgi?id=132579
+
+        Reviewed by Tim Horton.
+
+        * WebCore.exp.in:
+
+        * editing/Editor.h:
+        * editing/mac/EditorMac.mm:
+        (WebCore::Editor::replaceNodeFromPasteboard): New method that first selects
+          the Node and then immediately pastes over it. Since it’s synchronous the 
+          selection never has a chance to paint.
+
+        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
+        (WebCore::ImageControlsButtonElementMac::defaultEventHandler): Don’t select the image.
+
 2014-05-06  Eric Carlson  <eric.carl...@apple.com>
 
         [Mac] make metadata cue attributes consistent

Modified: trunk/Source/WebCore/WebCore.exp.in (168377 => 168378)


--- trunk/Source/WebCore/WebCore.exp.in	2014-05-06 20:19:31 UTC (rev 168377)
+++ trunk/Source/WebCore/WebCore.exp.in	2014-05-06 21:08:14 UTC (rev 168378)
@@ -1160,6 +1160,7 @@
 __ZN7WebCore6Editor24computeAndSetTypingStyleEPNS_15StylePropertiesENS_10EditActionE
 __ZN7WebCore6Editor24isSelectionUngrammaticalEv
 __ZN7WebCore6Editor24replaceSelectionWithTextERKN3WTF6StringEbb
+__ZN7WebCore6Editor25replaceNodeFromPasteboardEPNS_4NodeERKN3WTF6StringE
 __ZN7WebCore6Editor26decreaseSelectionListLevelEv
 __ZN7WebCore6Editor26increaseSelectionListLevelEv
 __ZN7WebCore6Editor26toggleOverwriteModeEnabledEv

Modified: trunk/Source/WebCore/editing/Editor.h (168377 => 168378)


--- trunk/Source/WebCore/editing/Editor.h	2014-05-06 20:19:31 UTC (rev 168377)
+++ trunk/Source/WebCore/editing/Editor.h	2014-05-06 21:08:14 UTC (rev 168378)
@@ -432,6 +432,7 @@
     bool canCopyExcludingStandaloneImages();
     void takeFindStringFromSelection();
     void readSelectionFromPasteboard(const String& pasteboardName);
+    void replaceNodeFromPasteboard(Node*, const String& pasteboardName);
     PassRefPtr<SharedBuffer> dataSelectionForPasteboard(const String& pasteboardName);
 #endif // !PLATFORM(IOS)
 #endif

Modified: trunk/Source/WebCore/editing/mac/EditorMac.mm (168377 => 168378)


--- trunk/Source/WebCore/editing/mac/EditorMac.mm	2014-05-06 20:19:31 UTC (rev 168377)
+++ trunk/Source/WebCore/editing/mac/EditorMac.mm	2014-05-06 21:08:14 UTC (rev 168378)
@@ -265,6 +265,19 @@
         pasteAsPlainTextWithPasteboard(pasteboard);
 }
 
+void Editor::replaceNodeFromPasteboard(Node* node, const String& pasteboardName)
+{
+    ASSERT(node);
+
+    if (&node->document() != m_frame.document())
+        return;
+
+    RefPtr<Range> range = Range::create(node->document(), Position(node, Position::PositionIsBeforeAnchor), Position(node, Position::PositionIsAfterAnchor));
+    m_frame.selection().setSelection(VisibleSelection(range.get()), FrameSelection::DoNotSetFocus);
+
+    readSelectionFromPasteboard(pasteboardName);
+}
+
 // FIXME: Makes no sense that selectedTextForDataTransfer always includes alt text, but stringSelectionForPasteboard does not.
 // This was left in a bad state when selectedTextForDataTransfer was added. Need to look over clients and fix this.
 String Editor::stringSelectionForPasteboard()

Modified: trunk/Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp (168377 => 168378)


--- trunk/Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp	2014-05-06 20:19:31 UTC (rev 168377)
+++ trunk/Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp	2014-05-06 21:08:14 UTC (rev 168378)
@@ -111,23 +111,6 @@
         if (!page)
             return;
 
-        ContainerNode* parent = parentNode();
-        Element* hostElement = nullptr;
-        while (parent) {
-            if (parent->isShadowRoot()) {
-                hostElement = static_cast<ShadowRoot*>(parent)->hostElement();
-                break;
-            }
-            parent = parent->parentNode();
-        }
-
-        if (!hostElement)
-            return;
-        ASSERT(isHTMLImageElement(hostElement));
-
-        RefPtr<Range> range = Range::create(document(), Position(hostElement, Position::PositionIsBeforeAnchor), Position(hostElement, Position::PositionIsAfterAnchor));
-        frame->selection().setSelection(VisibleSelection(range.get()));
-
         page->contextMenuController().showImageControlsMenu(event);
         event->setDefaultHandled();
         return;

Modified: trunk/Source/WebKit/mac/ChangeLog (168377 => 168378)


--- trunk/Source/WebKit/mac/ChangeLog	2014-05-06 20:19:31 UTC (rev 168377)
+++ trunk/Source/WebKit/mac/ChangeLog	2014-05-06 21:08:14 UTC (rev 168378)
@@ -1,3 +1,14 @@
+2014-05-06  Brady Eidson  <beid...@apple.com>
+
+        Don't select an image that is about to have its menu shown.
+        <rdar://problem/16807845> and https://bugs.webkit.org/show_bug.cgi?id=132579
+
+        Reviewed by Tim Horton.
+
+        * Misc/WebSharingServicePickerController.mm:
+        (-[WebSharingServicePickerController didShareImageData:confirmDataIsValidTIFFData:]):
+          Call the new replaceNodeFromPasteboard API instead of readSelectionFromPasteboard.
+
 2014-05-06  Anders Carlsson  <ander...@apple.com>
 
         Move the WebKitLegacy header check to the right file

Modified: trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.mm (168377 => 168378)


--- trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.mm	2014-05-06 20:19:31 UTC (rev 168377)
+++ trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.mm	2014-05-06 21:08:14 UTC (rev 168378)
@@ -31,6 +31,7 @@
 #import "WebViewInternal.h"
 #import <AppKit/NSSharingService.h>
 #import <WebCore/BitmapImage.h>
+#import <WebCore/Document.h>
 #import <WebCore/Editor.h>
 #import <WebCore/FocusController.h>
 #import <WebCore/Frame.h>
@@ -120,9 +121,10 @@
     [pasteboard declareTypes:@[ NSPasteboardTypeTIFF ] owner:nil];
     [pasteboard setData:data forType:NSPasteboardTypeTIFF];
 
-    Frame& frame = page->focusController().focusedOrMainFrame();
-    if (!frame.selection().isNone())
-        frame.editor().readSelectionFromPasteboard(serviceControlsPasteboardName);
+    if (Node* node = page->contextMenuController().context().hitTestResult().innerNode()) {
+        if (Frame* frame = node->document().frame())
+            frame->editor().replaceNodeFromPasteboard(node, serviceControlsPasteboardName);
+    }
 
     [self clear];
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to