Bug 2642 - Metadata Editor: Cut and paste does not work

This commit is contained in:
Leland Lucius 2021-01-23 17:27:31 -06:00
parent 4e6d11fe0c
commit 4b07fbaa8a
2 changed files with 51 additions and 1 deletions

View File

@ -1412,6 +1412,12 @@ void TagsEditorDialog::OnOk(wxCommandEvent & WXUNUSED(event))
if (mGrid->IsCellEditControlShown()) {
mGrid->SaveEditControlValue();
mGrid->HideCellEditControl();
#if defined(__WXMAC__)
// The cell editors do not capture the ENTER key, so it invokes
// the default button ("Ok") when it should just close the
// editor. So, cancel the "Ok" action.
return;
#endif
}
if (!Validate() || !TransferDataFromWindow()) {

View File

@ -20,6 +20,7 @@
#include <wx/defs.h>
#include <wx/choice.h>
#include <wx/clipbrd.h>
#include <wx/dc.h>
#include <wx/grid.h>
#include <wx/intl.h>
@ -532,7 +533,50 @@ void Grid::OnSelectCell(wxGridEvent &event)
void Grid::OnKeyDown(wxKeyEvent &event)
{
switch (event.GetKeyCode())
auto keyCode = event.GetKeyCode();
int crow = GetGridCursorRow();
int ccol = GetGridCursorCol();
if (event.CmdDown() && crow != wxGridNoCellCoords.GetRow() && ccol != wxGridNoCellCoords.GetCol())
{
wxClipboardLocker cb;
switch (keyCode)
{
case 'C': // Copy
{
wxTextDataObject *data = safenew wxTextDataObject(GetCellValue(crow, ccol));
wxClipboard::Get()->SetData(data);
return;
}
break;
case 'X': // Cut
{
wxTextDataObject *data = safenew wxTextDataObject(GetCellValue(crow, ccol));
wxClipboard::Get()->SetData(data);
SetCellValue(crow, ccol, {});
return;
}
break;
case 'V': // Paste
{
if (wxClipboard::Get()->IsSupported(wxDF_UNICODETEXT))
{
wxTextDataObject data;
if (wxClipboard::Get()->GetData(data))
{
SetCellValue(crow, ccol, data.GetText());
return;
}
}
}
break;
}
}
switch (keyCode)
{
case WXK_LEFT:
case WXK_RIGHT: