|
Lines 585-590
void VclGtkClipboard::setContents(
Link Here
|
| 585 |
{ |
585 |
{ |
| 586 |
osl::ClearableMutexGuard aGuard( m_aMutex ); |
586 |
osl::ClearableMutexGuard aGuard( m_aMutex ); |
| 587 |
Reference< datatransfer::clipboard::XClipboardOwner > xOldOwner( m_aOwner ); |
587 |
Reference< datatransfer::clipboard::XClipboardOwner > xOldOwner( m_aOwner ); |
|
|
588 |
bool bOwnerChange = (xOldOwner.is() && xOldOwner != xClipboardOwner); |
| 588 |
Reference< datatransfer::XTransferable > xOldContents( m_aContents ); |
589 |
Reference< datatransfer::XTransferable > xOldContents( m_aContents ); |
| 589 |
m_aContents = xTrans; |
590 |
m_aContents = xTrans; |
| 590 |
m_aOwner = xClipboardOwner; |
591 |
m_aOwner = xClipboardOwner; |
|
Lines 592-597
void VclGtkClipboard::setContents(
Link Here
|
| 592 |
std::list< Reference< datatransfer::clipboard::XClipboardListener > > xListeners( m_aListeners ); |
593 |
std::list< Reference< datatransfer::clipboard::XClipboardListener > > xListeners( m_aListeners ); |
| 593 |
datatransfer::clipboard::ClipboardEvent aEv; |
594 |
datatransfer::clipboard::ClipboardEvent aEv; |
| 594 |
|
595 |
|
|
|
596 |
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection); |
| 597 |
if (bOwnerChange) |
| 598 |
gtk_clipboard_clear(clipboard); |
| 599 |
assert(m_aGtkTargets.empty()); |
| 595 |
if (m_aContents.is()) |
600 |
if (m_aContents.is()) |
| 596 |
{ |
601 |
{ |
| 597 |
css::uno::Sequence<css::datatransfer::DataFlavor> aFormats = xTrans->getTransferDataFlavors(); |
602 |
css::uno::Sequence<css::datatransfer::DataFlavor> aFormats = xTrans->getTransferDataFlavors(); |
|
Lines 605-619
void VclGtkClipboard::setContents(
Link Here
|
| 605 |
aEntry.info = 0; |
610 |
aEntry.info = 0; |
| 606 |
aGtkTargets.push_back(aEntry); |
611 |
aGtkTargets.push_back(aEntry); |
| 607 |
|
612 |
|
| 608 |
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection); |
|
|
| 609 |
gtk_clipboard_set_with_data(clipboard, aGtkTargets.data(), aGtkTargets.size(), |
613 |
gtk_clipboard_set_with_data(clipboard, aGtkTargets.data(), aGtkTargets.size(), |
| 610 |
ClipboardGetFunc, ClipboardClearFunc, this); |
614 |
ClipboardGetFunc, ClipboardClearFunc, this); |
| 611 |
gtk_clipboard_set_can_store(clipboard, aGtkTargets.data(), aGtkTargets.size()); |
615 |
gtk_clipboard_set_can_store(clipboard, aGtkTargets.data(), aGtkTargets.size()); |
| 612 |
} |
616 |
} |
| 613 |
|
617 |
|
| 614 |
for (auto &a : m_aGtkTargets) |
|
|
| 615 |
g_free(a.target); |
| 616 |
|
| 617 |
m_aGtkTargets = aGtkTargets; |
618 |
m_aGtkTargets = aGtkTargets; |
| 618 |
} |
619 |
} |
| 619 |
|
620 |
|
|
Lines 621-627
void VclGtkClipboard::setContents(
Link Here
|
| 621 |
|
622 |
|
| 622 |
aGuard.clear(); |
623 |
aGuard.clear(); |
| 623 |
|
624 |
|
| 624 |
if( xOldOwner.is() && xOldOwner != xClipboardOwner ) |
625 |
if (bOwnerChange) |
| 625 |
xOldOwner->lostOwnership( this, xOldContents ); |
626 |
xOldOwner->lostOwnership( this, xOldContents ); |
| 626 |
for( std::list< Reference< datatransfer::clipboard::XClipboardListener > >::iterator it = |
627 |
for( std::list< Reference< datatransfer::clipboard::XClipboardListener > >::iterator it = |
| 627 |
xListeners.begin(); it != xListeners.end() ; ++it ) |
628 |
xListeners.begin(); it != xListeners.end() ; ++it ) |
| 628 |
- |
|
|