diff --git a/libgui/qterminal/libqterminal/QTerminalInterface.h b/libgui/qterminal/libqterminal/QTerminalInterface.h --- a/libgui/qterminal/libqterminal/QTerminalInterface.h +++ b/libgui/qterminal/libqterminal/QTerminalInterface.h @@ -40,6 +40,8 @@ QAction *copyAction = _contextMenu->addAction ("Copy"); QAction *pasteAction = _contextMenu->addAction ("Paste"); + pasteAction->setShortcut (Qt::ControlModifier + Qt::Key_V); + connect (copyAction, SIGNAL (triggered()), this, SLOT (copyClipboard())); connect (pasteAction, SIGNAL (triggered()), this, SLOT (pasteClipboard())); } diff --git a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp --- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp +++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -103,6 +104,7 @@ void monitorConsole (void); void startCommand (void); void sendConsoleText (const QString& s); + QString getConsoleTextSelection (void); void log (const char* fmt, ...); @@ -702,6 +704,39 @@ ////////////////////////////////////////////////////////////////////////////// +QString QConsolePrivate::getConsoleTextSelection (void) +{ + QString retval; + + HANDLE hStdOut = GetStdHandle (STD_OUTPUT_HANDLE); + DWORD nLength = 10; + LPTSTR lpCharacter = new TCHAR[nLength]; + COORD dwReadCoord; + DWORD NumberOfCharsRead; + + // FIXME -- get coordinates from window selection. + dwReadCoord.X = 2; + dwReadCoord.Y = 2; + + if (ReadConsoleOutputCharacter (hStdOut, lpCharacter, nLength, + dwReadCoord, &NumberOfCharsRead)) + { + if (NumberOfCharsRead == nLength) + { + retval.resize (nLength); + + for (int i = 0; i < nLength; i++) + retval[i] = lpCharacter[i]; + } + } + + delete [] lpCharacter; + + return retval; +} + +////////////////////////////////////////////////////////////////////////////// + QWinTerminalImpl::QWinTerminalImpl (QWidget* parent) : QTerminalInterface (parent), d (new QConsolePrivate (this)) { @@ -890,6 +925,13 @@ ////////////////////////////////////////////////////////////////////////////// +QString QWinTerminalImpl::getTextSelection (void) +{ + return d->getConsoleTextSelection (); +} + +////////////////////////////////////////////////////////////////////////////// + void QWinTerminalImpl::setTerminalFont (const QFont& f) { d->m_font = f; @@ -909,10 +951,18 @@ void QWinTerminalImpl::copyClipboard (void) { + QString text = getTextSelection (); + + QApplication::clipboard()->setText (text, QClipboard::Clipboard); } ////////////////////////////////////////////////////////////////////////////// void QWinTerminalImpl::pasteClipboard (void) { + // Paste Clipboard by simulating keypress events + QString text = QApplication::clipboard()->text (QClipboard::Clipboard); + + if (! text.isEmpty ()) + sendText (text); } diff --git a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h --- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h +++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h @@ -51,6 +51,7 @@ void setTerminalFont (const QFont& font); void setSize (int columns, int lines); void sendText (const QString& s); + QString getTextSelection (void); public slots: void copyClipboard (void);