Mercurial > octave-nkf
changeset 19724:bd1369a2a651
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
author | Torsten <ttl@justmail.de> |
---|---|
date | Mon, 09 Feb 2015 09:56:25 +0100 |
parents | 894b5c5e0b92 |
children | 480f0fc56bbf |
files | libgui/qterminal/libqterminal/QTerminal.cc libgui/qterminal/libqterminal/QTerminal.h libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h libgui/qterminal/libqterminal/unix/TerminalView.cpp libgui/qterminal/libqterminal/unix/TerminalView.h libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h |
diffstat | 8 files changed, 58 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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<QColor> ()); 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); }
--- 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 <QMenu> #include <QClipboard> #include <QApplication> +#include <QAction> 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
--- 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; +}
--- 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
--- 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 */
--- 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.
--- 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
--- 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; }; //////////////////////////////////////////////////////////////////////////////