feat: handle paste event and insert images on the clipboard
Signed-off-by: NanoSector <rick@nanosector.nl>
This commit is contained in:
parent
28267fe6d8
commit
dbd72b3523
|
@ -1449,3 +1449,32 @@ extension ComposeViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension ComposeViewController {
|
||||||
|
public override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
|
||||||
|
|
||||||
|
// Enable pasting images
|
||||||
|
if (action == #selector(UIResponderStandardEditActions.paste(_:))) {
|
||||||
|
return UIPasteboard.general.hasStrings || UIPasteboard.general.hasImages;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.canPerformAction(action, withSender: sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
override func paste(_ sender: Any?) {
|
||||||
|
logger.debug("Paste event received")
|
||||||
|
|
||||||
|
// Look for images on the clipboard
|
||||||
|
if (UIPasteboard.general.hasImages) {
|
||||||
|
if let images = UIPasteboard.general.images {
|
||||||
|
viewModel.attachmentServices = viewModel.attachmentServices + images.map({ image in
|
||||||
|
MastodonAttachmentService(
|
||||||
|
context: context,
|
||||||
|
image: image,
|
||||||
|
initialAuthenticationBox: viewModel.authenticationBox
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
//
|
||||||
|
// MetaTextView+PasteExtensions.swift
|
||||||
|
// Mastodon
|
||||||
|
//
|
||||||
|
// Created by Rick Kerkhof on 30/10/2022.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import MetaTextKit
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension MetaTextView {
|
||||||
|
public override func paste(_ sender: Any?) {
|
||||||
|
super.paste(sender)
|
||||||
|
|
||||||
|
var nextResponder = self.next;
|
||||||
|
|
||||||
|
// Force the event to bubble through ALL responders
|
||||||
|
// This is a workaround as somewhere down the chain the paste event gets eaten
|
||||||
|
while (nextResponder != nil) {
|
||||||
|
if let nextResponder = nextResponder {
|
||||||
|
if (nextResponder.responds(to: #selector(UIResponderStandardEditActions.paste(_:)))) {
|
||||||
|
nextResponder.perform(#selector(UIResponderStandardEditActions.paste(_:)), with: sender)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
nextResponder = nextResponder?.next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue