Purpose

clipboardplugin.cpp
1/*
2 SPDX-FileCopyrightText: 2024 Aleix Pol Gonzalez <aleixpol@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.1-or-later
5*/
6
7#include <KLocalizedString>
8#include <KPluginFactory>
9
10#include <QClipboard>
11#include <QFile>
12#include <QGuiApplication>
13#include <QImage>
14#include <QJsonArray>
15#include <QTimer>
16#include <purpose/pluginbase.h>
17
18class ClipboardJob : public Purpose::Job
19{
21public:
22 ClipboardJob(QObject *parent)
23 : Purpose::Job(parent)
24 {
25 }
26
27 void start() override
28 {
29 QTimer::singleShot(0, this, [this] {
30 QMimeData *mimeData = new QMimeData;
31
32 QString text;
33 QList<QUrl> urls;
34 for (const QJsonValue &jsonUrl : data().value(QLatin1String("urls")).toArray()) {
35 const QString jsonUrlString = jsonUrl.toString();
36
37 const QUrl url{jsonUrlString};
38 // Keep TolerantMode for QUrl but filter out obvious garbage.
39 if (!url.scheme().isEmpty()) {
40 urls.append(url);
41 }
42 if (!text.isEmpty()) {
43 text.append(QLatin1Char('\n'));
44 }
45 text.append(jsonUrlString);
46 }
47
48 mimeData->setText(text);
49 mimeData->setUrls(urls);
50 qGuiApp->clipboard()->setMimeData(mimeData);
51 emitResult();
52 });
53 }
54};
55
56class ClipboardPlugin : public Purpose::PluginBase
57{
59public:
60 using PluginBase::PluginBase;
61 Purpose::Job *createJob() const override
62 {
63 return new ClipboardJob(nullptr);
64 }
65};
66
67K_PLUGIN_FACTORY_WITH_JSON(Clipboard, "clipboardplugin.json", registerPlugin<ClipboardPlugin>();)
68
69#include "clipboardplugin.moc"
void emitResult()
#define K_PLUGIN_FACTORY_WITH_JSON(name, jsonFile, pluginRegistrations)
Job that will actually perform the sharing.
Definition job.h:34
QJsonObject data
Represents the data the job will have available to perform its task.
Definition job.h:39
Base class to implement by plugins.
Definition pluginbase.h:29
void append(QList< T > &&value)
void setText(const QString &text)
void setUrls(const QList< QUrl > &urls)
QObject(QObject *parent)
Q_OBJECTQ_OBJECT
QObject * parent() const const
QString & append(QChar ch)
bool isEmpty() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 11 2025 11:57:02 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.