image picker with clipboard and drag-n-drop capability for linux.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

53 lines
1.2 KiB

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <qqmlcontext.h>
#include <QClipboard>
#include "sys/stat.h"
#include "clipboard.hpp"
int selection(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/src/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
engine.rootContext()->setContextProperty("clipboard", new Clipboard(&app, argv[0]));
return app.exec();
}
int clipboard(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QClipboard *clip = QGuiApplication::clipboard();
struct stat buf;
if (stat(argv[2], &buf) == -1) {
perror("stat");
exit(1);
}
QString path(argv[2]);
QImage image(path);
clip->setImage(image);
clip->connect(clip, &QClipboard::dataChanged, [&]() {
app.quit();
});
return app.exec();
}
int main(int argc, char *argv[]) {
if (argc >= 3 && strcmp(argv[1], "clipboard") == 0) {
return clipboard(argc, argv);
} else {
return selection(argc, argv);
}
}