kdeconnect-kde/plugins/clipboard/clipboardlistener.h

58 lines
1.2 KiB
C
Raw Normal View History

/**
* SPDX-FileCopyrightText: 2016 Albert Vaca <albertvaka@gmail.com>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#pragma once
#include <QClipboard>
#include <QObject>
#ifdef Q_OS_MAC
#include <QTimer>
#endif
class KSystemClipboard;
/**
* Wrapper around QClipboard, which emits clipboardChanged only when it really changed
*/
class ClipboardListener : public QObject
{
Q_OBJECT
Add config for clipboard plugin on content types to share. ## Summary This MR adds a config dialog for the Clipboard plugin, where the user can toggle whether to share password and/or anything else with other devices. Implements !39 BUG: 458063 According to previous discussion at !39 (and the bug linked), some users want to skip sending passwords to other devices while others rely on the existing behavior. This MR addresses that by allowing users to control those two types separately and will replace !39 if merged. ![Screenshot with new config dialog](/uploads/3dfc6c6d69b86e6512e6a8948320a839/Screenshot_1661407807.png) Borrowing the idea from !39, the `x-kde-passwordManagerHint` MIME data hint is used to determine whether the content is considered secret. I've tested this method with KeepassXC which [sets this correctly](https://github.com/keepassxreboot/keepassxc/blob/a6d3f973fa8449f0f7dac864b3bd3928c29c649f/src/gui/Clipboard.cpp#L62). See test plan below. In theory, MIME also can be used to test for images and another checkbox can be easily added should we decided to support images later. For now though, the enum and the config supports only passwords or "anything else". Both defaults to true, thus keeping full backwards compatibility. I've been keeping both unchecked since I only share in one direction (Android to Linux), which wasn't possible until this MR. Others may want to make their own choices. ## Test Plan Please reference the screenshot above for the steps. From the indicator, right-click and select `Configure`. Select a device from the left side (or pair one if needed). In "available plugins", make sure "Clipboard" is checked, and verify that a "Configure" icon button is now shown on the right. Clicking that icon should bring up the new config dialog, where the two check boxes can be toggled as desired. Click on "OK" to save and apply the settings. Clicking on "Defaults" should bring both back to checked (the default behavior). Copy normal plain text from your favorite text editor and it should be sent to another device if the "anything else" checkbox is checked. I've tested this on an Android phone but I see no reason it won't work elsewhere given the code for sending has not been changed. (Feel free to test on other devices.) Open KeepassXC and select an entry, right click and select "Copy password". This sets the MIME hint so it should be treated as a password, controlled by the "passwords" checkbox. I've toggled the settings multiple times on and off. Once "OK" is clicked, the next clipboard change should pick up the latest settings. I've only tested on Linux desktops (Arch Linux) since I do not own a Mac. I don't believe any OS X application sets `x-kde-passwordManagerHint` at all, so they may be controlled by "anything else".
2022-10-17 22:04:20 +01:00
public:
enum ClipboardContentType { ClipboardContentTypeUnknown = 0, ClipboardContentTypePassword = 1 };
protected:
ClipboardListener();
Add config for clipboard plugin on content types to share. ## Summary This MR adds a config dialog for the Clipboard plugin, where the user can toggle whether to share password and/or anything else with other devices. Implements !39 BUG: 458063 According to previous discussion at !39 (and the bug linked), some users want to skip sending passwords to other devices while others rely on the existing behavior. This MR addresses that by allowing users to control those two types separately and will replace !39 if merged. ![Screenshot with new config dialog](/uploads/3dfc6c6d69b86e6512e6a8948320a839/Screenshot_1661407807.png) Borrowing the idea from !39, the `x-kde-passwordManagerHint` MIME data hint is used to determine whether the content is considered secret. I've tested this method with KeepassXC which [sets this correctly](https://github.com/keepassxreboot/keepassxc/blob/a6d3f973fa8449f0f7dac864b3bd3928c29c649f/src/gui/Clipboard.cpp#L62). See test plan below. In theory, MIME also can be used to test for images and another checkbox can be easily added should we decided to support images later. For now though, the enum and the config supports only passwords or "anything else". Both defaults to true, thus keeping full backwards compatibility. I've been keeping both unchecked since I only share in one direction (Android to Linux), which wasn't possible until this MR. Others may want to make their own choices. ## Test Plan Please reference the screenshot above for the steps. From the indicator, right-click and select `Configure`. Select a device from the left side (or pair one if needed). In "available plugins", make sure "Clipboard" is checked, and verify that a "Configure" icon button is now shown on the right. Clicking that icon should bring up the new config dialog, where the two check boxes can be toggled as desired. Click on "OK" to save and apply the settings. Clicking on "Defaults" should bring both back to checked (the default behavior). Copy normal plain text from your favorite text editor and it should be sent to another device if the "anything else" checkbox is checked. I've tested this on an Android phone but I see no reason it won't work elsewhere given the code for sending has not been changed. (Feel free to test on other devices.) Open KeepassXC and select an entry, right click and select "Copy password". This sets the MIME hint so it should be treated as a password, controlled by the "passwords" checkbox. I've toggled the settings multiple times on and off. Once "OK" is clicked, the next clipboard change should pick up the latest settings. I've only tested on Linux desktops (Arch Linux) since I do not own a Mac. I don't believe any OS X application sets `x-kde-passwordManagerHint` at all, so they may be controlled by "anything else".
2022-10-17 22:04:20 +01:00
void refreshContent(const QString &content, ClipboardContentType contentType);
QString m_currentContent;
Add config for clipboard plugin on content types to share. ## Summary This MR adds a config dialog for the Clipboard plugin, where the user can toggle whether to share password and/or anything else with other devices. Implements !39 BUG: 458063 According to previous discussion at !39 (and the bug linked), some users want to skip sending passwords to other devices while others rely on the existing behavior. This MR addresses that by allowing users to control those two types separately and will replace !39 if merged. ![Screenshot with new config dialog](/uploads/3dfc6c6d69b86e6512e6a8948320a839/Screenshot_1661407807.png) Borrowing the idea from !39, the `x-kde-passwordManagerHint` MIME data hint is used to determine whether the content is considered secret. I've tested this method with KeepassXC which [sets this correctly](https://github.com/keepassxreboot/keepassxc/blob/a6d3f973fa8449f0f7dac864b3bd3928c29c649f/src/gui/Clipboard.cpp#L62). See test plan below. In theory, MIME also can be used to test for images and another checkbox can be easily added should we decided to support images later. For now though, the enum and the config supports only passwords or "anything else". Both defaults to true, thus keeping full backwards compatibility. I've been keeping both unchecked since I only share in one direction (Android to Linux), which wasn't possible until this MR. Others may want to make their own choices. ## Test Plan Please reference the screenshot above for the steps. From the indicator, right-click and select `Configure`. Select a device from the left side (or pair one if needed). In "available plugins", make sure "Clipboard" is checked, and verify that a "Configure" icon button is now shown on the right. Clicking that icon should bring up the new config dialog, where the two check boxes can be toggled as desired. Click on "OK" to save and apply the settings. Clicking on "Defaults" should bring both back to checked (the default behavior). Copy normal plain text from your favorite text editor and it should be sent to another device if the "anything else" checkbox is checked. I've tested this on an Android phone but I see no reason it won't work elsewhere given the code for sending has not been changed. (Feel free to test on other devices.) Open KeepassXC and select an entry, right click and select "Copy password". This sets the MIME hint so it should be treated as a password, controlled by the "passwords" checkbox. I've toggled the settings multiple times on and off. Once "OK" is clicked, the next clipboard change should pick up the latest settings. I've only tested on Linux desktops (Arch Linux) since I do not own a Mac. I don't believe any OS X application sets `x-kde-passwordManagerHint` at all, so they may be controlled by "anything else".
2022-10-17 22:04:20 +01:00
ClipboardContentType m_currentContentType;
private:
qint64 m_updateTimestamp = 0;
public:
static ClipboardListener *instance();
void setText(const QString &content);
QString currentContent();
Add config for clipboard plugin on content types to share. ## Summary This MR adds a config dialog for the Clipboard plugin, where the user can toggle whether to share password and/or anything else with other devices. Implements !39 BUG: 458063 According to previous discussion at !39 (and the bug linked), some users want to skip sending passwords to other devices while others rely on the existing behavior. This MR addresses that by allowing users to control those two types separately and will replace !39 if merged. ![Screenshot with new config dialog](/uploads/3dfc6c6d69b86e6512e6a8948320a839/Screenshot_1661407807.png) Borrowing the idea from !39, the `x-kde-passwordManagerHint` MIME data hint is used to determine whether the content is considered secret. I've tested this method with KeepassXC which [sets this correctly](https://github.com/keepassxreboot/keepassxc/blob/a6d3f973fa8449f0f7dac864b3bd3928c29c649f/src/gui/Clipboard.cpp#L62). See test plan below. In theory, MIME also can be used to test for images and another checkbox can be easily added should we decided to support images later. For now though, the enum and the config supports only passwords or "anything else". Both defaults to true, thus keeping full backwards compatibility. I've been keeping both unchecked since I only share in one direction (Android to Linux), which wasn't possible until this MR. Others may want to make their own choices. ## Test Plan Please reference the screenshot above for the steps. From the indicator, right-click and select `Configure`. Select a device from the left side (or pair one if needed). In "available plugins", make sure "Clipboard" is checked, and verify that a "Configure" icon button is now shown on the right. Clicking that icon should bring up the new config dialog, where the two check boxes can be toggled as desired. Click on "OK" to save and apply the settings. Clicking on "Defaults" should bring both back to checked (the default behavior). Copy normal plain text from your favorite text editor and it should be sent to another device if the "anything else" checkbox is checked. I've tested this on an Android phone but I see no reason it won't work elsewhere given the code for sending has not been changed. (Feel free to test on other devices.) Open KeepassXC and select an entry, right click and select "Copy password". This sets the MIME hint so it should be treated as a password, controlled by the "passwords" checkbox. I've toggled the settings multiple times on and off. Once "OK" is clicked, the next clipboard change should pick up the latest settings. I've only tested on Linux desktops (Arch Linux) since I do not own a Mac. I don't believe any OS X application sets `x-kde-passwordManagerHint` at all, so they may be controlled by "anything else".
2022-10-17 22:04:20 +01:00
ClipboardContentType currentContentType();
qint64 updateTimestamp();
Q_SIGNALS:
Add config for clipboard plugin on content types to share. ## Summary This MR adds a config dialog for the Clipboard plugin, where the user can toggle whether to share password and/or anything else with other devices. Implements !39 BUG: 458063 According to previous discussion at !39 (and the bug linked), some users want to skip sending passwords to other devices while others rely on the existing behavior. This MR addresses that by allowing users to control those two types separately and will replace !39 if merged. ![Screenshot with new config dialog](/uploads/3dfc6c6d69b86e6512e6a8948320a839/Screenshot_1661407807.png) Borrowing the idea from !39, the `x-kde-passwordManagerHint` MIME data hint is used to determine whether the content is considered secret. I've tested this method with KeepassXC which [sets this correctly](https://github.com/keepassxreboot/keepassxc/blob/a6d3f973fa8449f0f7dac864b3bd3928c29c649f/src/gui/Clipboard.cpp#L62). See test plan below. In theory, MIME also can be used to test for images and another checkbox can be easily added should we decided to support images later. For now though, the enum and the config supports only passwords or "anything else". Both defaults to true, thus keeping full backwards compatibility. I've been keeping both unchecked since I only share in one direction (Android to Linux), which wasn't possible until this MR. Others may want to make their own choices. ## Test Plan Please reference the screenshot above for the steps. From the indicator, right-click and select `Configure`. Select a device from the left side (or pair one if needed). In "available plugins", make sure "Clipboard" is checked, and verify that a "Configure" icon button is now shown on the right. Clicking that icon should bring up the new config dialog, where the two check boxes can be toggled as desired. Click on "OK" to save and apply the settings. Clicking on "Defaults" should bring both back to checked (the default behavior). Copy normal plain text from your favorite text editor and it should be sent to another device if the "anything else" checkbox is checked. I've tested this on an Android phone but I see no reason it won't work elsewhere given the code for sending has not been changed. (Feel free to test on other devices.) Open KeepassXC and select an entry, right click and select "Copy password". This sets the MIME hint so it should be treated as a password, controlled by the "passwords" checkbox. I've toggled the settings multiple times on and off. Once "OK" is clicked, the next clipboard change should pick up the latest settings. I've only tested on Linux desktops (Arch Linux) since I do not own a Mac. I don't believe any OS X application sets `x-kde-passwordManagerHint` at all, so they may be controlled by "anything else".
2022-10-17 22:04:20 +01:00
void clipboardChanged(const QString &content, ClipboardContentType contentType);
private:
void updateClipboard(QClipboard::Mode mode);
#ifdef Q_OS_MAC
QTimer m_clipboardMonitorTimer;
#endif
KSystemClipboard *clipboard;
};