|
|
|
@ -146,6 +146,7 @@ KlipperWidget::KlipperWidget( TQWidget *parent, TDEConfig* config )
|
|
|
|
|
connect( &m_overflowClearTimer, TQT_SIGNAL( timeout()), TQT_SLOT( slotClearOverflow()));
|
|
|
|
|
m_overflowClearTimer.start( 1000 );
|
|
|
|
|
connect( &m_pendingCheckTimer, TQT_SIGNAL( timeout()), TQT_SLOT( slotCheckPending()));
|
|
|
|
|
connect( &m_setClipboardTimer, TQT_SIGNAL( timeout()), TQT_SLOT( slotDelayedSetClipboard()));
|
|
|
|
|
|
|
|
|
|
m_history = new History( this, "main_history" );
|
|
|
|
|
|
|
|
|
@ -809,6 +810,41 @@ void KlipperWidget::slotCheckPending()
|
|
|
|
|
newClipData( true ); // always selection
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void KlipperWidget::slotDelayedSetClipboard()
|
|
|
|
|
{
|
|
|
|
|
const HistoryItem *top = history()->first();
|
|
|
|
|
if (top)
|
|
|
|
|
{
|
|
|
|
|
if (bCheckForEmpty)
|
|
|
|
|
{
|
|
|
|
|
TQMimeSource *data = clip->data( bSavedSelectionMode ? TQClipboard::Selection : TQClipboard::Clipboard );
|
|
|
|
|
if ( !data )
|
|
|
|
|
{
|
|
|
|
|
kdWarning("No data in clipboard. This is not supposed to happen." );
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool clipEmpty = ( data->format() == 0L );
|
|
|
|
|
if ( clipEmpty && bNoNullClipboard )
|
|
|
|
|
{
|
|
|
|
|
// keep old clipboard after someone set it to null
|
|
|
|
|
#ifdef NOISY_KLIPPER
|
|
|
|
|
kdDebug() << "Resetting clipboard (Prevent empty clipboard)" << endl;
|
|
|
|
|
#endif
|
|
|
|
|
setClipboard( *top, bSavedSelectionMode ? Selection : Clipboard );
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef NOISY_KLIPPER
|
|
|
|
|
kdDebug() << "Syncing selection and clipboard" << endl;
|
|
|
|
|
#endif
|
|
|
|
|
setClipboard( *top, bSavedSelectionMode ? Selection : Clipboard );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void KlipperWidget::checkClipData( bool selectionMode )
|
|
|
|
|
{
|
|
|
|
|
if ( ignoreClipboardChanges() ) // internal to klipper, ignoring TQSpinBox selections
|
|
|
|
@ -868,15 +904,14 @@ void KlipperWidget::checkClipData( bool selectionMode )
|
|
|
|
|
bool changed = data->serialNumber() != lastSerialNo;
|
|
|
|
|
bool clipEmpty = ( data->format() == 0L );
|
|
|
|
|
|
|
|
|
|
if ( changed && clipEmpty && bNoNullClipboard ) {
|
|
|
|
|
const HistoryItem* top = history()->first();
|
|
|
|
|
if ( top ) {
|
|
|
|
|
// keep old clipboard after someone set it to null
|
|
|
|
|
#ifdef NOISY_KLIPPER
|
|
|
|
|
kdDebug() << "Resetting clipboard (Prevent empty clipboard)" << endl;
|
|
|
|
|
#endif
|
|
|
|
|
setClipboard( *top, selectionMode ? Selection : Clipboard );
|
|
|
|
|
}
|
|
|
|
|
if ( changed && clipEmpty && bNoNullClipboard )
|
|
|
|
|
{
|
|
|
|
|
// Make sure to call setClipboard() through the event loop.
|
|
|
|
|
// Using a direct call may crash another application that was
|
|
|
|
|
// changing the clipboard at the same time.
|
|
|
|
|
bSavedSelectionMode = selectionMode;
|
|
|
|
|
bCheckForEmpty = true;
|
|
|
|
|
m_setClipboardTimer.start(100, TRUE);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -945,11 +980,14 @@ void KlipperWidget::checkClipData( bool selectionMode )
|
|
|
|
|
#ifdef NOISY_KLIPPER
|
|
|
|
|
kdDebug() << "Synchronize?" << ( bSynchronize ? "yes" : "no" ) << endl;
|
|
|
|
|
#endif
|
|
|
|
|
if ( bSynchronize ) {
|
|
|
|
|
const HistoryItem* topItem = history()->first();
|
|
|
|
|
if ( topItem ) {
|
|
|
|
|
setClipboard( *topItem, selectionMode ? Clipboard : Selection );
|
|
|
|
|
}
|
|
|
|
|
if ( bSynchronize )
|
|
|
|
|
{
|
|
|
|
|
// Make sure to call setClipboard() through the event loop.
|
|
|
|
|
// Using a direct call may crash another application that was
|
|
|
|
|
// changing the clipboard at the same time.
|
|
|
|
|
bSavedSelectionMode = !selectionMode; // inverted in order to sync
|
|
|
|
|
bCheckForEmpty = false;
|
|
|
|
|
m_setClipboardTimer.start(100, TRUE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|