24 #include <QtCore/QMimeData>
25 #include <QtDBus/QtDBus>
26 #include <QtGui/QApplication>
45 class KClipboardSynchronizer::Private
55 static void setClipboard(
const QMimeData* data, QClipboard::Mode mode );
57 void _k_slotSelectionChanged();
58 void _k_slotClipboardChanged();
59 void _k_slotNotifyChange(
int,
int);
63 static bool s_reverse_sync;
64 static bool s_blocked;
67 bool KClipboardSynchronizer::Private::s_sync =
false;
68 bool KClipboardSynchronizer::Private::s_reverse_sync =
false;
69 bool KClipboardSynchronizer::Private::s_blocked =
false;
77 KClipboardSynchronizer::KClipboardSynchronizer(
QObject *parent )
78 :
QObject( parent ), d(new Private(this))
81 Private::s_sync =
config.readEntry(
"SynchronizeClipboardAndSelection", Private::s_sync);
82 Private::s_reverse_sync =
config.readEntry(
"ClipboardSetSelection", Private::s_reverse_sync);
92 void KClipboardSynchronizer::Private::setupSignals()
94 QClipboard *clip = QApplication::clipboard();
95 disconnect( clip, NULL, q, NULL );
97 connect( clip, SIGNAL(selectionChanged()),
98 q, SLOT(_k_slotSelectionChanged()));
100 connect( clip, SIGNAL(dataChanged()),
101 q, SLOT(_k_slotClipboardChanged()));
103 QDBusConnection::sessionBus().connect(
QString(),
"/KGlobalSettings",
"org.kde.KGlobalSettings",
104 "notifyChange", q, SLOT(_k_slotNotifyChange(
int,
int)) );
107 void KClipboardSynchronizer::Private::_k_slotSelectionChanged()
109 QClipboard *clip = QApplication::clipboard();
112 if ( s_blocked || !clip->ownsSelection() )
115 setClipboard( clip->mimeData( QClipboard::Selection ),
116 QClipboard::Clipboard );
119 void KClipboardSynchronizer::Private::_k_slotClipboardChanged()
121 QClipboard *clip = QApplication::clipboard();
124 if ( s_blocked || !clip->ownsClipboard() )
127 setClipboard( clip->mimeData( QClipboard::Clipboard ),
128 QClipboard::Selection );
131 void KClipboardSynchronizer::Private::_k_slotNotifyChange(
int changeType,
int arg)
134 s_sync = (arg & Synchronize);
139 void KClipboardSynchronizer::Private::setClipboard(
const QMimeData *data, QClipboard::Mode mode )
143 QClipboard *clip = QApplication::clipboard();
147 QMimeData* clipData =
const_cast<QMimeData*
>( data );
148 if ( mode == QClipboard::Clipboard )
150 clip->setMimeData( clipData, QClipboard::Clipboard );
152 else if ( mode == QClipboard::Selection )
154 clip->setMimeData( clipData, QClipboard::Selection );
162 Private::s_sync = sync;
163 self()->d->setupSignals();
168 return Private::s_sync;
173 Private::s_reverse_sync = enable;
174 self()->d->setupSignals();
179 return Private::s_reverse_sync;
182 #include "kclipboard.moc"