changeset 29393:ca1cc1bca9cb

fix interrupting the interpreter in the gui command window (bug #60079) * QTerminal.cc (set_global_shortcuts): removed obsolete slot; (notice_settings): use extra interrupt action also when global shortcuts are disabled when command window has focus, set shortcut context allowing to use the shortcuts without disabling them when command window loses focus * QTerminal.h: removed obsolete slot set_global_shortcuts * TerminalView.cpp (TerminalView): remove connection of removed signals/slots; (focusInEvent): no signal for enabling/disabling shortcutes emitted; (focusOutEvent): dito * TerminalView.h: removed signal set_global_shortcuts_signal * QWinTerminalImpl.cpp (QWinTerminalImpl): remove connection of removed signals/slots; (focusInEvent): no signal for enabling/disabling shortcutes emitted; (focusOutEvent): dito * QWinTerminalImpl.h: removed signal set_global_shortcuts_signal
author Torsten Lilge <ttl-octave@mailbox.org>
date Wed, 24 Feb 2021 21:44:02 +0100
parents 7797e2f3c69b
children f91ff3f7f5dc
files libgui/qterminal/libqterminal/QTerminal.cc libgui/qterminal/libqterminal/QTerminal.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 6 files changed, 8 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/qterminal/libqterminal/QTerminal.cc	Tue Feb 23 09:29:31 2021 -0800
+++ b/libgui/qterminal/libqterminal/QTerminal.cc	Wed Feb 24 21:44:02 2021 +0100
@@ -70,25 +70,6 @@
   return terminal;
 }
 
-// slot for disabling the interrupt action when terminal loses focus
-void
-QTerminal::set_global_shortcuts (bool focus_out)
-  {
-    if (focus_out)
-      {
-        _interrupt_action->setShortcut (QKeySequence ());
-        _nop_action->setShortcut (QKeySequence ());
-      }
-    else
-      {
-        _interrupt_action->setShortcut
-          (QKeySequence (Qt::ControlModifier | Qt::Key_C));
-
-        _nop_action->setShortcut
-          (QKeySequence (Qt::ControlModifier | Qt::Key_D));
-      }
-  }
-
 // slot for the terminal's context menu
 void
 QTerminal::handleCustomContextMenuRequested (const QPoint& at)
@@ -281,9 +262,12 @@
 
   QString sc = settings->sc_value (sc_main_edit_copy);
 
-  //  Dis- or enable extra interrupt action depending on the Copy shortcut
+  //  Dis- or enable extra interrupt action: We need an extra option when
+  //  copy shortcut is not Ctrl-C or when global shortcuts (like copy) are
+  //  disabled.
   bool extra_ir_action
-      = (sc != QKeySequence (Qt::ControlModifier | Qt::Key_C).toString ());
+      = (sc != QKeySequence (Qt::ControlModifier | Qt::Key_C).toString ())
+        || settings->value (sc_prevent_rl_conflicts).toBool ();
 
   _interrupt_action->setEnabled (extra_ir_action);
   has_extra_interrupt (extra_ir_action);
@@ -373,8 +357,9 @@
 
   _interrupt_action->setShortcut
     (QKeySequence (Qt::ControlModifier + Qt::Key_C));
+  _interrupt_action->setShortcutContext (Qt::WidgetWithChildrenShortcut);
 
-  connect (_interrupt_action, SIGNAL (triggered ()),
+  bool ok = connect (_interrupt_action, SIGNAL (triggered ()),
            this, SLOT (terminal_interrupt ()));
 
   // dummy (nop) action catching Ctrl-D in terminal, no connection
@@ -382,4 +367,5 @@
   addAction (_nop_action);
 
   _nop_action->setShortcut (QKeySequence (Qt::ControlModifier + Qt::Key_D));
+  _nop_action->setShortcutContext (Qt::WidgetWithChildrenShortcut);
 }
--- a/libgui/qterminal/libqterminal/QTerminal.h	Tue Feb 23 09:29:31 2021 -0800
+++ b/libgui/qterminal/libqterminal/QTerminal.h	Wed Feb 24 21:44:02 2021 +0100
@@ -123,8 +123,6 @@
 
   void terminal_interrupt (void) { emit interrupt_signal (); }
 
-  void set_global_shortcuts (bool focus_out);
-
   void run_selection (void);
 
   void edit_file (void);
--- a/libgui/qterminal/libqterminal/unix/TerminalView.cpp	Tue Feb 23 09:29:31 2021 -0800
+++ b/libgui/qterminal/libqterminal/unix/TerminalView.cpp	Wed Feb 24 21:44:02 2021 +0100
@@ -334,12 +334,6 @@
   _gridLayout->setMargin(0);
 
   setLayout( _gridLayout );
-
-  connect (this, SIGNAL (set_global_shortcuts_signal (bool)),
-           parent->parent (), SLOT (set_global_shortcuts (bool)));
-  connect (this, SIGNAL (set_global_shortcuts_signal (bool)),
-           parent, SLOT (set_global_shortcuts (bool)));
-
 }
 
 TerminalView::~TerminalView()
@@ -983,8 +977,6 @@
 
 void TerminalView::focusInEvent(QFocusEvent *focusEvent)
 {
-  emit set_global_shortcuts_signal (false);  // disable some shortcuts
-
   setBlinkingCursorState(true);
   updateImage();
   repaint();
@@ -995,8 +987,6 @@
 
 void TerminalView::focusOutEvent(QFocusEvent *focusEvent)
 {
-  emit set_global_shortcuts_signal (true);  // re-enable shortcuts
-
   // Force the cursor to be redrawn.
   _cursorBlinking = true;
   setBlinkingCursorState(false);
--- a/libgui/qterminal/libqterminal/unix/TerminalView.h	Tue Feb 23 09:29:31 2021 -0800
+++ b/libgui/qterminal/libqterminal/unix/TerminalView.h	Wed Feb 24 21:44:02 2021 +0100
@@ -497,12 +497,6 @@
 
    void tripleClicked( const QString& text );
 
-   /**
-    * Emitted when focus changes
-    */
-   void set_global_shortcuts_signal (bool);
-
-
 protected:
     virtual void paintEvent( QPaintEvent * );
 
--- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp	Tue Feb 23 09:29:31 2021 -0800
+++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp	Wed Feb 24 21:44:02 2021 +0100
@@ -1447,11 +1447,6 @@
 {
     installEventFilter (this);
 
-    connect (this, SIGNAL (set_global_shortcuts_signal (bool)),
-             main_win, SLOT (set_global_shortcuts (bool)));
-    connect (this, SIGNAL (set_global_shortcuts_signal (bool)),
-             this, SLOT (set_global_shortcuts (bool)));
-
     connect (this, SIGNAL (set_screen_size_signal (int, int)),
              main_win, SLOT (set_screen_size (int, int)));
 
@@ -1652,8 +1647,6 @@
 
 void QWinTerminalImpl::focusInEvent (QFocusEvent* event)
 {
-  emit set_global_shortcuts_signal (false);   // disable some shortcuts
-
   setBlinkingCursorState (true);
 
   QWidget::focusInEvent (event);
@@ -1661,8 +1654,6 @@
 
 void QWinTerminalImpl::focusOutEvent (QFocusEvent* event)
 {
-  emit set_global_shortcuts_signal (true);    // re-enable shortcuts
-
   // Force the cursor to be redrawn.
   d->m_cursorBlinking = true;
 
--- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h	Tue Feb 23 09:29:31 2021 -0800
+++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h	Wed Feb 24 21:44:02 2021 +0100
@@ -78,7 +78,6 @@
 signals:
   void terminated (void);
   void titleChanged (const QString&);
-  void set_global_shortcuts_signal (bool);
   void set_screen_size_signal (int, int);
 
 protected: