File indexing completed on 2024-12-29 05:00:16
0001 /* 0002 * SPDX-FileCopyrightText: 2015 Kai Uwe Broulik <kde@privat.broulik.de> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "grabwidget.h" 0008 0009 #include <QApplication> 0010 #include <QClipboard> 0011 #include <QDBusConnection> 0012 #include <QDBusMessage> 0013 #include <QDBusMetaType> 0014 #include <QDBusPendingCall> 0015 #include <QDBusPendingCallWatcher> 0016 #include <QDBusPendingReply> 0017 0018 Q_DECLARE_METATYPE(QColor) 0019 0020 QDBusArgument &operator<<(QDBusArgument &argument, const QColor &color) 0021 { 0022 argument.beginStructure(); 0023 argument << color.rgba(); 0024 argument.endStructure(); 0025 return argument; 0026 } 0027 0028 const QDBusArgument &operator>>(const QDBusArgument &argument, QColor &color) 0029 { 0030 argument.beginStructure(); 0031 QRgb rgba; 0032 argument >> rgba; 0033 argument.endStructure(); 0034 color = QColor::fromRgba(rgba); 0035 return argument; 0036 } 0037 0038 GrabWidget::GrabWidget(QObject *parent) 0039 : QObject(parent) 0040 { 0041 qDBusRegisterMetaType<QColor>(); 0042 } 0043 0044 QColor GrabWidget::currentColor() const 0045 { 0046 return m_currentColor; 0047 } 0048 0049 void GrabWidget::setCurrentColor(const QColor &color) 0050 { 0051 if (m_currentColor == color) { 0052 return; 0053 } 0054 m_currentColor = color; 0055 0056 Q_EMIT currentColorChanged(); 0057 } 0058 0059 void GrabWidget::pick() 0060 { 0061 QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.KWin"), 0062 QStringLiteral("/ColorPicker"), 0063 QStringLiteral("org.kde.kwin.ColorPicker"), 0064 QStringLiteral("pick")); 0065 auto call = QDBusConnection::sessionBus().asyncCall(msg); 0066 QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); 0067 connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) { 0068 watcher->deleteLater(); 0069 QDBusPendingReply<QColor> reply = *watcher; 0070 if (!reply.isError()) { 0071 setCurrentColor(reply.value()); 0072 } 0073 }); 0074 } 0075 0076 void GrabWidget::copyToClipboard(const QString &text) 0077 { 0078 QApplication::clipboard()->setText(text); 0079 }