| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 
 | /*
    SPDX-FileCopyrightText: 2009 Chani Armitage <chani@kde.org>
    SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "paste.h"
#include "containmentactions_paste_debug.h"
#include <QClipboard>
#include <QGuiApplication>
#include <QMimeData>
#include <Plasma/Containment>
#include <QAction>
#include <QDebug>
Paste::Paste(QObject *parent, const QVariantList &args)
    : Plasma::ContainmentActions(parent, args)
    , m_action(new QAction(this))
{
    QObject::connect(m_action, &QAction::triggered, this, &Paste::doPaste);
}
QList<QAction *> Paste::contextualActions()
{
    const QList<QAction *> actions{m_action};
    return actions;
}
void Paste::doPaste()
{
    qCWarning(CONTAINMENTACTIONS_PASTE_DEBUG) << "Paste at" << m_action->data();
    if (!m_action->data().canConvert<QPoint>()) {
        return;
    }
    QPoint pos = m_action->data().value<QPoint>();
    Plasma::Containment *c = containment();
    Q_ASSERT(c);
    // get the actual graphic object of the containment
    QObject *graphicObject = c->property("_plasma_graphicObject").value<QObject *>();
    if (!graphicObject) {
        return;
    }
    QClipboard *clipboard = QGuiApplication::clipboard();
    // FIXME: can be the const_cast avoided?
    QMimeData *mimeData = const_cast<QMimeData *>(clipboard->mimeData(QClipboard::Selection));
    // TODO if that's not supported (ie non-linux) should we try clipboard instead of selection?
    graphicObject->metaObject()
        ->invokeMethod(graphicObject, "processMimeData", Qt::DirectConnection, Q_ARG(QMimeData *, mimeData), Q_ARG(int, pos.x()), Q_ARG(int, pos.y()));
}
K_PLUGIN_CLASS_WITH_JSON(Paste, "plasma-containmentactions-paste.json")
#include "paste.moc"
 |