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];
}