@@ -22,7 +22,7 @@ ClipboardSpy::ClipboardSpy(ClipboardMode mode, const QByteArray &owner)
22
22
mode == ClipboardMode::Clipboard ? ClipboardMode::Selection : ClipboardMode::Clipboard,
23
23
false );
24
24
25
- connect (m_clipboard.get (), &PlatformClipboard::changed, this , &ClipboardSpy::check );
25
+ connect (m_clipboard.get (), &PlatformClipboard::changed, this , &ClipboardSpy::emitChangeIfChanged );
26
26
m_clipboard->startMonitoring ( QStringList (mimeOwner) );
27
27
}
28
28
@@ -44,18 +44,20 @@ void ClipboardSpy::wait(int ms, int checkIntervalMs)
44
44
45
45
QTimer timerCheck;
46
46
timerCheck.setInterval (checkIntervalMs);
47
- connect ( &timerCheck, &QTimer::timeout, this , &ClipboardSpy::check );
47
+ connect ( &timerCheck, &QTimer::timeout, this , &ClipboardSpy::emitChangeIfChanged );
48
48
timerCheck.start ();
49
49
50
50
loop.exec ();
51
51
}
52
52
53
53
bool ClipboardSpy::setClipboardData (const QVariantMap &data)
54
54
{
55
+ m_settingClipboard = true ;
55
56
m_oldOwnerData = currentOwnerData ();
56
57
m_clipboard->setData (m_mode, data);
57
58
wait ();
58
59
m_oldOwnerData = data.value (mimeOwner).toByteArray ();
60
+ m_settingClipboard = false ;
59
61
return m_oldOwnerData == currentOwnerData ();
60
62
}
61
63
@@ -69,11 +71,12 @@ void ClipboardSpy::stop()
69
71
emit stopped ();
70
72
}
71
73
72
- bool ClipboardSpy::check ()
74
+ void ClipboardSpy::emitChangeIfChanged ()
73
75
{
74
- if (!m_oldOwnerData.isEmpty () && m_oldOwnerData == currentOwnerData ())
75
- return false ;
76
-
77
- emit changed ();
78
- return true ;
76
+ const auto newOwner = currentOwnerData ();
77
+ if (m_oldOwnerData != newOwner) {
78
+ emit changed ();
79
+ } else if (!m_settingClipboard && m_oldOwnerData.isEmpty () && newOwner.isEmpty ()) {
80
+ emit changed ();
81
+ }
79
82
}
0 commit comments