# HG changeset patch # User Torsten # Date 1423472185 -3600 # Node ID bd1369a2a6519264809c928826606dd8e7b9b93f # Parent 894b5c5e0b926cc90b05860196e0d758c424f0d8 add extra action for interrupting with Ctrl-C (bug #44204) * QTerminal.cc (notice_settings): check if copy-shortcut is Ctrl-C and set flag for slots and enable/disable new interrupt-action accordingly * QTerminal.h: new function setting flag (purely virtual); (constructor): new interrupt-action with shortcut Ctrl-C * QUnixTerminalImpl.cpp (copyClipboard): call internal function with flag; (has_extra_interrupt): new function for setting flag for copy-/interrupt- slots * QUnixTerminalImpl.h new flag for slots and function setting flag * TerminalView.cpp (copyClipboard): gets flag as parameter, only interrupts if Ctrl-C is shortcut for copy * TerminalView.h: copyClipboard with boolean parameter * QWinTerminalImpl.cpp (copyClipboard): only interrupts if Ctrl-C is shortcut for copy; (has_extra_interrupt): function for setting flag for copy-/interrupts-slots * QWinTerminalImpl.h: new flag and function setting the flag diff -r 894b5c5e0b92 -r bd1369a2a651 libgui/qterminal/libqterminal/QTerminal.cc --- a/libgui/qterminal/libqterminal/QTerminal.cc Tue Feb 10 09:21:54 2015 -0800 +++ b/libgui/qterminal/libqterminal/QTerminal.cc Mon Feb 09 09:56:25 2015 +0100 @@ -119,4 +119,21 @@ settings->value ("terminal/color_c", QVariant (colors.at (3))).value ()); setScrollBufferSize (settings->value ("terminal/history_buffer",1000).toInt () ); + + // check whether Copy shoretcut is Ctrl-C + int set = settings->value ("shortcuts/set",0).toInt (); + QKeySequence copy; + QString key = QString ("shortcuts/main_edit:copy"); + if (set) + key.append ("_1"); // if second set is active + copy = QKeySequence (settings->value (key).toString ()); // the copy shortcut + + // dis- or enable extra interrupt action + QKeySequence ctrl; + ctrl = Qt::ControlModifier; + + bool extra_ir_action = (copy != QKeySequence (ctrl + Qt::Key_C)); + + _interrupt_action->setEnabled (extra_ir_action); + has_extra_interrupt (extra_ir_action); } diff -r 894b5c5e0b92 -r bd1369a2a651 libgui/qterminal/libqterminal/QTerminal.h --- a/libgui/qterminal/libqterminal/QTerminal.h Tue Feb 10 09:21:54 2015 -0800 +++ b/libgui/qterminal/libqterminal/QTerminal.h Mon Feb 09 09:56:25 2015 +0100 @@ -33,6 +33,7 @@ #include #include #include +#include class QTerminal : public QWidget { @@ -56,6 +57,8 @@ virtual QString selectedText () = 0; + virtual void has_extra_interrupt (bool extra) = 0; + enum CursorType { UnderlineCursor, @@ -118,6 +121,7 @@ QTerminal (QWidget *xparent = 0) : QWidget (xparent) { + // context menu setContextMenuPolicy (Qt::CustomContextMenu); _contextMenu = new QMenu (this); @@ -161,6 +165,16 @@ connect (xparent, SIGNAL (selectAll_signal ()), this, SLOT (selectAll ())); + + // extra interrupt action + _interrupt_action = new QAction (this); + addAction (_interrupt_action); + + _interrupt_action->setShortcut ( + QKeySequence (Qt::ControlModifier + Qt::Key_C)); + + connect (_interrupt_action, SIGNAL (triggered (bool)), + this, SLOT (terminal_interrupt ())); } private: @@ -169,6 +183,8 @@ QAction * _copy_action; QAction * _paste_action; QAction * _selectall_action; + + QAction *_interrupt_action; }; #endif // QTERMINAL_H diff -r 894b5c5e0b92 -r bd1369a2a651 libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp --- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp Tue Feb 10 09:21:54 2015 -0800 +++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp Mon Feb 09 09:56:25 2015 +0100 @@ -207,7 +207,7 @@ void QUnixTerminalImpl::copyClipboard() { - m_terminalView->copyClipboard(); + m_terminalView->copyClipboard (_extra_interrupt); } void QUnixTerminalImpl::pasteClipboard() @@ -225,3 +225,9 @@ { return m_terminalView->selectedText (); } + +void +QUnixTerminalImpl::has_extra_interrupt (bool extra) +{ + _extra_interrupt = extra; +} diff -r 894b5c5e0b92 -r bd1369a2a651 libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h --- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h Tue Feb 10 09:21:54 2015 -0800 +++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h Mon Feb 09 09:56:25 2015 +0100 @@ -49,6 +49,7 @@ void setCursorColor (bool useForegroundColor, const QColor& color); void setScrollBufferSize(int value); QString selectedText(); + void has_extra_interrupt (bool extra_interrupt); public slots: void copyClipboard(); @@ -66,6 +67,7 @@ TerminalView *m_terminalView; TerminalModel *m_terminalModel; KPty *m_kpty; + bool _extra_interrupt; }; #endif // Q_UNIXTERMINALIMPL diff -r 894b5c5e0b92 -r bd1369a2a651 libgui/qterminal/libqterminal/unix/TerminalView.cpp --- a/libgui/qterminal/libqterminal/unix/TerminalView.cpp Tue Feb 10 09:21:54 2015 -0800 +++ b/libgui/qterminal/libqterminal/unix/TerminalView.cpp Mon Feb 09 09:56:25 2015 +0100 @@ -2272,14 +2272,14 @@ QApplication::clipboard()->setText(t, QClipboard::Selection); } -void TerminalView::copyClipboard() +void TerminalView::copyClipboard(bool extra_interrupt) { if ( !_screenWindow || !hasFocus()) return; QString text = _screenWindow->selectedText(_preserveLineBreaks); - if (text.isEmpty ()) + if (text.isEmpty () && ! extra_interrupt) emit interrupt_signal (); else QApplication::clipboard()->setText(text); @@ -2312,6 +2312,7 @@ emitSelection(true,false); } + /* ------------------------------------------------------------------------- */ /* */ /* Keyboard */ diff -r 894b5c5e0b92 -r bd1369a2a651 libgui/qterminal/libqterminal/unix/TerminalView.h --- a/libgui/qterminal/libqterminal/unix/TerminalView.h Tue Feb 10 09:21:54 2015 -0800 +++ b/libgui/qterminal/libqterminal/unix/TerminalView.h Mon Feb 09 09:56:25 2015 +0100 @@ -404,7 +404,7 @@ void updateLineProperties(); /** Copies the selected text to the clipboard. */ - void copyClipboard(); + void copyClipboard (bool extra_interrupt); /** * Pastes the content of the clipboard into the * display. diff -r 894b5c5e0b92 -r bd1369a2a651 libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp --- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp Tue Feb 10 09:21:54 2015 -0800 +++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp Mon Feb 09 09:56:25 2015 +0100 @@ -1759,7 +1759,7 @@ ////////////////////////////////////////////////////////////////////////////// -void QWinTerminalImpl::copyClipboard (void) +void QWinTerminalImpl::copyClipboard () { if(!hasFocus()) return; @@ -1767,7 +1767,7 @@ QString selection = d->getSelection (); - if (selection.isEmpty ()) + if (selection.isEmpty () && ! _extra_interrupt) terminal_interrupt (); else { @@ -1835,3 +1835,10 @@ sendText (dropText); } } + +////////////////////////////////////////////////////////////////////////////// + +void QWinTerminalImpl::has_extra_interrupt (bool extra) +{ + _extra_interrupt = extra; +} \ No newline at end of file diff -r 894b5c5e0b92 -r bd1369a2a651 libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h --- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h Tue Feb 10 09:21:54 2015 -0800 +++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h Mon Feb 09 09:56:25 2015 +0100 @@ -66,6 +66,8 @@ QString selectedText (); + void has_extra_interrupt (bool); + public slots: void copyClipboard (void); void pasteClipboard (void); @@ -110,6 +112,7 @@ private: QConsolePrivate* d; bool allowTripleClick; + bool _extra_interrupt; }; //////////////////////////////////////////////////////////////////////////////