@@ -372,8 +372,10 @@ bool Editor::canEditRichly() const
372372
373373enum class ClipboardEventKind {
374374 Copy,
375+ CopyFont,
375376 Cut,
376377 Paste,
378+ PasteFont,
377379 PasteAsPlainText,
378380 PasteAsQuotation,
379381 BeforeCopy,
@@ -385,12 +387,14 @@ static AtomString eventNameForClipboardEvent(ClipboardEventKind kind)
385387{
386388 switch (kind) {
387389 case ClipboardEventKind::Copy:
390+ case ClipboardEventKind::CopyFont:
388391 return eventNames ().copyEvent ;
389392 case ClipboardEventKind::Cut:
390393 return eventNames ().cutEvent ;
391394 case ClipboardEventKind::Paste:
392395 case ClipboardEventKind::PasteAsPlainText:
393396 case ClipboardEventKind::PasteAsQuotation:
397+ case ClipboardEventKind::PasteFont:
394398 return eventNames ().pasteEvent ;
395399 case ClipboardEventKind::BeforeCopy:
396400 return eventNames ().beforecopyEvent ;
@@ -407,6 +411,7 @@ static Ref<DataTransfer> createDataTransferForClipboardEvent(Document& document,
407411{
408412 switch (kind) {
409413 case ClipboardEventKind::Copy:
414+ case ClipboardEventKind::CopyFont:
410415 case ClipboardEventKind::Cut:
411416 return DataTransfer::createForCopyAndPaste (document, DataTransfer::StoreMode::ReadWrite, makeUnique<StaticPasteboard>());
412417 case ClipboardEventKind::PasteAsPlainText:
@@ -420,6 +425,7 @@ static Ref<DataTransfer> createDataTransferForClipboardEvent(Document& document,
420425 FALLTHROUGH;
421426 case ClipboardEventKind::Paste:
422427 case ClipboardEventKind::PasteAsQuotation:
428+ case ClipboardEventKind::PasteFont:
423429 return DataTransfer::createForCopyAndPaste (document, DataTransfer::StoreMode::Readonly, Pasteboard::createForCopyAndPaste (PagePasteboardContext::create (document.pageID ())));
424430 case ClipboardEventKind::BeforeCopy:
425431 case ClipboardEventKind::BeforeCut:
@@ -1404,6 +1410,21 @@ void Editor::copy(FromMenuOrKeyBinding fromMenuOrKeyBinding)
14041410 performCutOrCopy (CopyAction);
14051411}
14061412
1413+ void Editor::copyFont (FromMenuOrKeyBinding fromMenuOrKeyBinding)
1414+ {
1415+ SetForScope<bool > copyScope { m_copyingFromMenuOrKeyBinding, fromMenuOrKeyBinding == FromMenuOrKeyBinding::Yes };
1416+ if (tryDHTMLCopy ())
1417+ return ; // DHTML did the whole operation
1418+ if (!canCopy ()) {
1419+ SystemSoundManager::singleton ().systemBeep ();
1420+ return ;
1421+ }
1422+
1423+ willWriteSelectionToPasteboard (selectedRange ());
1424+ platformCopyFont ();
1425+ didWriteSelectionToPasteboard ();
1426+ }
1427+
14071428void Editor::postTextStateChangeNotificationForCut (const String& text, const VisibleSelection& selection)
14081429{
14091430 if (!AXObjectCache::accessibilityEnabled ())
@@ -1512,6 +1533,19 @@ void Editor::pasteAsQuotation(FromMenuOrKeyBinding fromMenuOrKeyBinding)
15121533 pasteAsPlainTextWithPasteboard (*pasteboard);
15131534}
15141535
1536+ void Editor::pasteFont (FromMenuOrKeyBinding fromMenuOrKeyBinding)
1537+ {
1538+ SetForScope<bool > pasteScope { m_pastingFromMenuOrKeyBinding, fromMenuOrKeyBinding == FromMenuOrKeyBinding::Yes };
1539+
1540+ if (!dispatchClipboardEvent (findEventTargetFromSelection (), ClipboardEventKind::PasteFont))
1541+ return ;
1542+ if (!canPaste ())
1543+ return ;
1544+ updateMarkersForWordsAffectedByEditing (false );
1545+ ResourceCacheValidationSuppressor validationSuppressor (document ().cachedResourceLoader ());
1546+ platformPasteFont ();
1547+ }
1548+
15151549void Editor::quoteFragmentForPasting (DocumentFragment& fragment)
15161550{
15171551 auto blockQuote = HTMLQuoteElement::create (blockquoteTag, document ());
0 commit comments