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;
 };
 
 //////////////////////////////////////////////////////////////////////////////