Skip to content

Commit 6f4fd14

Browse files
committed
Fix behavior for waiting on clipboard change
1 parent ab2c6bc commit 6f4fd14

File tree

3 files changed

+18
-15
lines changed

3 files changed

+18
-15
lines changed

src/gui/clipboardspy.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ ClipboardSpy::ClipboardSpy(ClipboardMode mode, const QByteArray &owner)
2222
mode == ClipboardMode::Clipboard ? ClipboardMode::Selection : ClipboardMode::Clipboard,
2323
false);
2424

25-
connect(m_clipboard.get(), &PlatformClipboard::changed, this, &ClipboardSpy::check);
25+
connect(m_clipboard.get(), &PlatformClipboard::changed, this, &ClipboardSpy::emitChangeIfChanged);
2626
m_clipboard->startMonitoring( QStringList(mimeOwner) );
2727
}
2828

@@ -44,18 +44,20 @@ void ClipboardSpy::wait(int ms, int checkIntervalMs)
4444

4545
QTimer timerCheck;
4646
timerCheck.setInterval(checkIntervalMs);
47-
connect( &timerCheck, &QTimer::timeout, this, &ClipboardSpy::check );
47+
connect( &timerCheck, &QTimer::timeout, this, &ClipboardSpy::emitChangeIfChanged );
4848
timerCheck.start();
4949

5050
loop.exec();
5151
}
5252

5353
bool ClipboardSpy::setClipboardData(const QVariantMap &data)
5454
{
55+
m_settingClipboard = true;
5556
m_oldOwnerData = currentOwnerData();
5657
m_clipboard->setData(m_mode, data);
5758
wait();
5859
m_oldOwnerData = data.value(mimeOwner).toByteArray();
60+
m_settingClipboard = false;
5961
return m_oldOwnerData == currentOwnerData();
6062
}
6163

@@ -69,11 +71,12 @@ void ClipboardSpy::stop()
6971
emit stopped();
7072
}
7173

72-
bool ClipboardSpy::check()
74+
void ClipboardSpy::emitChangeIfChanged()
7375
{
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+
}
7982
}

src/gui/clipboardspy.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class ClipboardSpy final : public QObject
1515
explicit ClipboardSpy(ClipboardMode mode, const QByteArray &owner);
1616

1717
/// Actively wait for clipboard/selection to change.
18-
void wait(int ms = 2000, int checkIntervalMs = 100);
18+
void wait(int ms = 2000, int checkIntervalMs = 8000);
1919

2020
bool setClipboardData(const QVariantMap &data);
2121

@@ -28,11 +28,12 @@ class ClipboardSpy final : public QObject
2828
void stopped();
2929

3030
private:
31-
bool check();
31+
void emitChangeIfChanged();
3232

3333
ClipboardMode m_mode;
3434
PlatformClipboardPtr m_clipboard;
3535
QByteArray m_oldOwnerData;
36+
bool m_settingClipboard = false;
3637
};
3738

3839
#endif // CLIPBOARDSPY_H

src/platform/x11/x11platformclipboard.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,10 @@ void X11PlatformClipboard::updateClipboardData(X11PlatformClipboard::ClipboardDa
316316

317317
void X11PlatformClipboard::useNewClipboardData(X11PlatformClipboard::ClipboardData *clipboardData)
318318
{
319+
COPYQ_LOG( QStringLiteral("%1 CHANGED, owner=%2")
320+
.arg(clipboardData->mode == ClipboardMode::Clipboard ? "Clipboard" : "Selection")
321+
.arg(clipboardData->newOwner) );
322+
319323
clipboardData->data = clipboardData->newData;
320324
clipboardData->owner = clipboardData->newOwner;
321325
clipboardData->timerEmitChange.stop();
@@ -331,9 +335,4 @@ void X11PlatformClipboard::checkAgainLater(bool clipboardChanged, int interval)
331335
m_timerCheckAgain.start(interval);
332336
else if (clipboardChanged)
333337
m_timerCheckAgain.start(maxCheckAgainIntervalMs);
334-
335-
if (m_clipboardData.timerEmitChange.isActive())
336-
COPYQ_LOG( QStringLiteral("Clipboard CHANGED, owner: '%1'").arg(m_clipboardData.newOwner) );
337-
if (m_selectionData.timerEmitChange.isActive())
338-
COPYQ_LOG( QStringLiteral("Selection CHANGED, owner: '%1'").arg(m_selectionData.newOwner) );
339338
}

0 commit comments

Comments
 (0)