rtf cut&paste works now, html export fixed
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4788 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -88,8 +88,6 @@ static const int Y_SCROLL_PAGE = 20;
|
||||
|
||||
|
||||
|
||||
#define wxUSE_PRIVATE_CLIPBOARD_FORMAT 0
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// event tables
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -564,7 +562,7 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
||||
{
|
||||
case 'c':
|
||||
// this should work even in read-only mode
|
||||
Copy();
|
||||
Copy(TRUE, TRUE);
|
||||
break;
|
||||
case 's': // search
|
||||
Find("");
|
||||
@@ -629,11 +627,10 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
||||
SetDirty();
|
||||
break;
|
||||
case 'c':
|
||||
Copy();
|
||||
Copy(TRUE, TRUE);
|
||||
break;
|
||||
case 'v':
|
||||
// if SHIFT is down, use primary selection
|
||||
Paste( event.ShiftDown() );
|
||||
Paste( TRUE );
|
||||
break;
|
||||
case 'x':
|
||||
Cut();
|
||||
@@ -717,8 +714,15 @@ wxLayoutWindow::OnChar(wxKeyEvent& event)
|
||||
)
|
||||
{
|
||||
if(m_WrapMargin > 0 && isspace(keyCode))
|
||||
m_llist->WrapLine(m_WrapMargin);
|
||||
m_llist->Insert((char)keyCode);
|
||||
{
|
||||
bool wrapped = m_llist->WrapLine(m_WrapMargin);
|
||||
// don<6F>t insert space as first thing in line
|
||||
// after wrapping:
|
||||
if(! wrapped || m_llist->GetCursorPos().x != 0)
|
||||
m_llist->Insert((char)keyCode);
|
||||
}
|
||||
else
|
||||
m_llist->Insert((char)keyCode);
|
||||
SetDirty();
|
||||
}
|
||||
else
|
||||
@@ -1071,26 +1075,47 @@ wxLayoutWindow::ResizeScrollbars(bool exact)
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void
|
||||
wxLayoutWindow::Paste(bool primary)
|
||||
wxLayoutWindow::Paste(bool usePrivate, bool primary)
|
||||
{
|
||||
// this only has an effect under X11:
|
||||
if(primary) wxTheClipboard->UsePrimarySelection();
|
||||
wxTheClipboard->UsePrimarySelection(primary);
|
||||
// Read some text
|
||||
if (wxTheClipboard->Open())
|
||||
{
|
||||
#if wxUSE_PRIVATE_CLIPBOARD_FORMAT
|
||||
wxLayoutDataObject wxldo;
|
||||
if (wxTheClipboard->IsSupported( wxldo.GetFormat() ))
|
||||
if(usePrivate)
|
||||
{
|
||||
if(wxTheClipboard->GetData(wxldo))
|
||||
wxLayoutDataObject wxldo;
|
||||
if (wxTheClipboard->IsSupported( wxldo.GetFormat() ))
|
||||
{
|
||||
wxString str = wxldo.GetLayoutData();
|
||||
m_llist->Read(str);
|
||||
RequestUpdate();
|
||||
if(wxTheClipboard->GetData(wxldo))
|
||||
{
|
||||
wxTheClipboard->Close();
|
||||
wxString str = wxldo.GetLayoutData();
|
||||
m_llist->Read(str);
|
||||
SetDirty();
|
||||
RequestUpdate();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
wxTextDataObject data;
|
||||
if (wxTheClipboard->IsSupported( data.GetFormat() )
|
||||
&& wxTheClipboard->GetData(data) )
|
||||
{
|
||||
wxTheClipboard->Close();
|
||||
wxString text = data.GetText();
|
||||
wxLayoutImportText( m_llist, text);
|
||||
SetDirty();
|
||||
RequestUpdate();
|
||||
return;
|
||||
}
|
||||
}
|
||||
// if everything failed we can still try the primary:
|
||||
wxTheClipboard->Close();
|
||||
if(! primary) // not tried before
|
||||
{
|
||||
wxTheClipboard->UsePrimarySelection();
|
||||
if (wxTheClipboard->Open())
|
||||
{
|
||||
wxTextDataObject data;
|
||||
if (wxTheClipboard->IsSupported( data.GetFormat() )
|
||||
@@ -1099,14 +1124,15 @@ wxLayoutWindow::Paste(bool primary)
|
||||
wxString text = data.GetText();
|
||||
wxLayoutImportText( m_llist, text);
|
||||
SetDirty();
|
||||
RequestUpdate();
|
||||
}
|
||||
wxTheClipboard->Close();
|
||||
}
|
||||
wxTheClipboard->Close();
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
wxLayoutWindow::Copy(bool invalidate)
|
||||
wxLayoutWindow::Copy(bool invalidate, bool privateFormat, bool primary)
|
||||
{
|
||||
// Calling GetSelection() will automatically do an EndSelection()
|
||||
// on the list, but we need to take a note of it, too:
|
||||
@@ -1142,15 +1168,28 @@ wxLayoutWindow::Copy(bool invalidate)
|
||||
text = text.Mid(0,len-1);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if(! primary) // always copy as text-only to primary selection
|
||||
{
|
||||
wxTheClipboard->UsePrimarySelection();
|
||||
if (wxTheClipboard->Open())
|
||||
{
|
||||
wxTextDataObject *data = new wxTextDataObject( text );
|
||||
wxTheClipboard->SetData( data );
|
||||
wxTheClipboard->Close();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
wxTheClipboard->UsePrimarySelection(primary);
|
||||
if (wxTheClipboard->Open())
|
||||
{
|
||||
wxTextDataObject *data = new wxTextDataObject( text );
|
||||
bool rc;
|
||||
|
||||
rc = wxTheClipboard->SetData( data );
|
||||
#if wxUSE_PRIVATE_CLIPBOARD_FORMAT
|
||||
rc |= wxTheClipboard->SetData( wldo );
|
||||
#endif
|
||||
rc = wxTheClipboard->SetData( data );
|
||||
if(privateFormat)
|
||||
rc |= wxTheClipboard->SetData( wldo );
|
||||
wxTheClipboard->Close();
|
||||
return rc;
|
||||
}
|
||||
@@ -1161,9 +1200,9 @@ wxLayoutWindow::Copy(bool invalidate)
|
||||
}
|
||||
|
||||
bool
|
||||
wxLayoutWindow::Cut(void)
|
||||
wxLayoutWindow::Cut(bool privateFormat, bool usePrimary)
|
||||
{
|
||||
if(Copy(false)) // do not invalidate selection after copy
|
||||
if(Copy(false, privateFormat, usePrimary)) // do not invalidate selection after copy
|
||||
{
|
||||
m_llist->DeleteSelection();
|
||||
SetDirty();
|
||||
|
Reference in New Issue
Block a user