changeset 18717:f017240310fb gui-release

disabling global shortcuts when terminal has focus as user preference * main-window.h: new flag _prevent_readline__conflicts, new function configure_shortcuts * main-window.cc (constructor): initialize new flag to true; (notice_settings): read value of flag from settings, configure shortcuts; (configure_shortcuts): new function setting all shortcuts from the settings; (construct): configure shortcuts via new function; (set_global_shortcuts): return if global shortcuts should not be disabled when terminal has focus, use new function configure_shortcuts; * settings-dialog.ui: new checkbox in the shortcut tab whether global shortcuts should be desabled when terminal has focus or not * settings-dialog.cc (constructor): read value for checkbox from settings; (write_changed_settings): write value of checkbox to the settings
author Torsten <ttl@justmail.de>
date Fri, 02 May 2014 17:44:44 +0200
parents 9ef65c422f53
children 95249367d6fa
files libgui/src/main-window.cc libgui/src/main-window.h libgui/src/settings-dialog.cc libgui/src/settings-dialog.ui
diffstat 4 files changed, 116 insertions(+), 67 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/main-window.cc	Thu May 01 13:24:27 2014 +0200
+++ b/libgui/src/main-window.cc	Fri May 02 17:44:44 2014 +0200
@@ -95,7 +95,8 @@
     _cmd_queue_mutex (),
     _dbg_queue (new QStringList ()),  // no debug pending
     _dbg_processing (1),
-    _dbg_queue_mutex ()
+    _dbg_queue_mutex (),
+    _prevent_readline_conflicts (true)
 {
   QSettings *settings = resource_manager::get_settings ();
 
@@ -681,7 +682,9 @@
   int icon_size = settings->value ("toolbar_icon_size",16).toInt ();
   _main_tool_bar->setIconSize (QSize (icon_size,icon_size));
 
-  set_global_shortcuts (true);
+  _prevent_readline_conflicts =
+    settings->value ("shortcuts/prevent_readline_conflicts", true).toBool ();
+  configure_shortcuts ();
   set_global_shortcuts (command_window_has_focus ());
 
   resource_manager::update_network_settings ();
@@ -1282,7 +1285,7 @@
 
   Fregister_graphics_toolkit (ovl ("qt"));
 
-  set_global_shortcuts (true);
+  configure_shortcuts ();
 }
 
 
@@ -2191,15 +2194,16 @@
 void
 main_window::set_global_edit_shortcuts (bool enable)
 {
+  // this slot is called when editor gets/loses focus
   if (enable)
-    {
+    { // editor loses focus, set the global shortcuts
       shortcut_manager::set_shortcut (_copy_action, "main_edit:copy");
       shortcut_manager::set_shortcut (_paste_action, "main_edit:paste");
       shortcut_manager::set_shortcut (_undo_action, "main_edit:undo");
       shortcut_manager::set_shortcut (_select_all_action, "main_edit:select_all");
     }
   else
-    {
+    { // disable shortcuts that are also provided by the editor itself
       QKeySequence no_key = QKeySequence ();
       _copy_action->setShortcut (no_key);
       _paste_action->setShortcut (no_key);
@@ -2209,71 +2213,81 @@
 }
 
 void
+main_window::configure_shortcuts ()
+{
+  // file menu
+  shortcut_manager::set_shortcut (_open_action, "main_file:open_file");
+  shortcut_manager::set_shortcut (_new_script_action, "main_file:new_file");
+  shortcut_manager::set_shortcut (_new_function_action, "main_file:new_function");
+  shortcut_manager::set_shortcut (_new_function_action, "main_file:new_figure");
+  shortcut_manager::set_shortcut (_load_workspace_action, "main_file:load_workspace");
+  shortcut_manager::set_shortcut (_save_workspace_action, "main_file:save_workspace");
+  shortcut_manager::set_shortcut (_preferences_action, "main_file:preferences");
+  shortcut_manager::set_shortcut (_exit_action,"main_file:exit");
+
+  // edit menu
+  shortcut_manager::set_shortcut (_copy_action, "main_edit:copy");
+  shortcut_manager::set_shortcut (_paste_action, "main_edit:paste");
+  shortcut_manager::set_shortcut (_undo_action, "main_edit:undo");
+  shortcut_manager::set_shortcut (_select_all_action, "main_edit:select_all");
+  shortcut_manager::set_shortcut (_clear_clipboard_action, "main_edit:clear_clipboard");
+  shortcut_manager::set_shortcut (_find_files_action, "main_edit:find_in_files");
+  shortcut_manager::set_shortcut (_clear_command_history_action, "main_edit:clear_history");
+  shortcut_manager::set_shortcut (_clear_command_window_action, "main_edit:clear_command_window");
+  shortcut_manager::set_shortcut (_clear_workspace_action, "main_edit:clear_workspace");
+
+  // debug menu
+  shortcut_manager::set_shortcut (_debug_step_over, "main_debug:step_over");
+  shortcut_manager::set_shortcut (_debug_step_into, "main_debug:step_into");
+  shortcut_manager::set_shortcut (_debug_step_out,  "main_debug:step_out");
+  shortcut_manager::set_shortcut (_debug_continue,  "main_debug:continue");
+  shortcut_manager::set_shortcut (_debug_quit,  "main_debug:quit");
+
+  // window menu
+  shortcut_manager::set_shortcut (_show_command_window_action, "main_window:show_command");
+  shortcut_manager::set_shortcut (_show_history_action, "main_window:show_history");
+  shortcut_manager::set_shortcut (_show_workspace_action,  "main_window:show_workspace");
+  shortcut_manager::set_shortcut (_show_file_browser_action,  "main_window:show_file_browser");
+  shortcut_manager::set_shortcut (_show_editor_action, "main_window:show_editor");
+  shortcut_manager::set_shortcut (_show_documentation_action, "main_window:show_doc");
+  shortcut_manager::set_shortcut (_command_window_action, "main_window:command");
+  shortcut_manager::set_shortcut (_history_action, "main_window:history");
+  shortcut_manager::set_shortcut (_workspace_action,  "main_window:workspace");
+  shortcut_manager::set_shortcut (_file_browser_action,  "main_window:file_browser");
+  shortcut_manager::set_shortcut (_editor_action, "main_window:editor");
+  shortcut_manager::set_shortcut (_documentation_action, "main_window:doc");
+  shortcut_manager::set_shortcut (_reset_windows_action, "main_window:reset");
+
+  // help menu
+  shortcut_manager::set_shortcut (_ondisk_doc_action, "main_help:ondisk_doc");
+  shortcut_manager::set_shortcut (_online_doc_action, "main_help:online_doc");
+  shortcut_manager::set_shortcut (_report_bug_action, "main_help:report_bug");
+  shortcut_manager::set_shortcut (_octave_packages_action, "main_help:packages");
+  shortcut_manager::set_shortcut (_agora_action, "main_help:agora");
+  shortcut_manager::set_shortcut (_contribute_action, "main_help:contribute");
+  shortcut_manager::set_shortcut (_developer_action, "main_help:developer");
+  shortcut_manager::set_shortcut (_about_octave_action, "main_help:about");
+
+  // news menu
+  shortcut_manager::set_shortcut (_release_notes_action, "main_news:release_notes");
+  shortcut_manager::set_shortcut (_current_news_action, "main_news:community_news");
+}
+
+void
 main_window::set_global_shortcuts (bool set_shortcuts)
 {
+  // this slot is called when the terminal gets/loses focus
+
+  // return if the user don't want to use readline shortcuts
+  if (! _prevent_readline_conflicts)
+    return;
+
   if (set_shortcuts)
-    {
-
-      // file menu
-      shortcut_manager::set_shortcut (_open_action, "main_file:open_file");
-      shortcut_manager::set_shortcut (_new_script_action, "main_file:new_file");
-      shortcut_manager::set_shortcut (_new_function_action, "main_file:new_function");
-      shortcut_manager::set_shortcut (_new_function_action, "main_file:new_figure");
-      shortcut_manager::set_shortcut (_load_workspace_action, "main_file:load_workspace");
-      shortcut_manager::set_shortcut (_save_workspace_action, "main_file:save_workspace");
-      shortcut_manager::set_shortcut (_preferences_action, "main_file:preferences");
-      shortcut_manager::set_shortcut (_exit_action,"main_file:exit");
-
-      // edit menu
-      shortcut_manager::set_shortcut (_copy_action, "main_edit:copy");
-      shortcut_manager::set_shortcut (_paste_action, "main_edit:paste");
-      shortcut_manager::set_shortcut (_undo_action, "main_edit:undo");
-      shortcut_manager::set_shortcut (_select_all_action, "main_edit:select_all");
-      shortcut_manager::set_shortcut (_clear_clipboard_action, "main_edit:clear_clipboard");
-      shortcut_manager::set_shortcut (_find_files_action, "main_edit:find_in_files");
-      shortcut_manager::set_shortcut (_clear_command_history_action, "main_edit:clear_history");
-      shortcut_manager::set_shortcut (_clear_command_window_action, "main_edit:clear_command_window");
-      shortcut_manager::set_shortcut (_clear_workspace_action, "main_edit:clear_workspace");
-
-      // debug menu
-      shortcut_manager::set_shortcut (_debug_step_over, "main_debug:step_over");
-      shortcut_manager::set_shortcut (_debug_step_into, "main_debug:step_into");
-      shortcut_manager::set_shortcut (_debug_step_out,  "main_debug:step_out");
-      shortcut_manager::set_shortcut (_debug_continue,  "main_debug:continue");
-      shortcut_manager::set_shortcut (_debug_quit,      "main_debug:quit");
-
-      // window menu
-      shortcut_manager::set_shortcut (_show_command_window_action, "main_window:show_command");
-      shortcut_manager::set_shortcut (_show_history_action, "main_window:show_history");
-      shortcut_manager::set_shortcut (_show_workspace_action,  "main_window:show_workspace");
-      shortcut_manager::set_shortcut (_show_file_browser_action,  "main_window:show_file_browser");
-      shortcut_manager::set_shortcut (_show_editor_action, "main_window:show_editor");
-      shortcut_manager::set_shortcut (_show_documentation_action, "main_window:show_doc");
-      shortcut_manager::set_shortcut (_command_window_action, "main_window:command");
-      shortcut_manager::set_shortcut (_history_action, "main_window:history");
-      shortcut_manager::set_shortcut (_workspace_action,  "main_window:workspace");
-      shortcut_manager::set_shortcut (_file_browser_action,  "main_window:file_browser");
-      shortcut_manager::set_shortcut (_editor_action, "main_window:editor");
-      shortcut_manager::set_shortcut (_documentation_action, "main_window:doc");
-      shortcut_manager::set_shortcut (_reset_windows_action, "main_window:reset");
-
-      // help menu
-      shortcut_manager::set_shortcut (_ondisk_doc_action, "main_help:ondisk_doc");
-      shortcut_manager::set_shortcut (_online_doc_action, "main_help:online_doc");
-      shortcut_manager::set_shortcut (_report_bug_action, "main_help:report_bug");
-      shortcut_manager::set_shortcut (_octave_packages_action, "main_help:packages");
-      shortcut_manager::set_shortcut (_agora_action, "main_help:agora");
-      shortcut_manager::set_shortcut (_contribute_action, "main_help:contribute");
-      shortcut_manager::set_shortcut (_developer_action, "main_help:developer");
-      shortcut_manager::set_shortcut (_about_octave_action, "main_help:about");
-
-      // news menu
-      shortcut_manager::set_shortcut (_release_notes_action, "main_news:release_notes");
-      shortcut_manager::set_shortcut (_current_news_action, "main_news:community_news");
+    { // terminal loses focus: set the global shortcuts
+      configure_shortcuts ();
     }
   else
-    {
-
+    { // terminal gets focus: disable some shortcuts
       QKeySequence no_key = QKeySequence ();
 
       // file menu
@@ -2311,7 +2325,6 @@
       _release_notes_action->setShortcut (no_key);
       _current_news_action->setShortcut (no_key);
     }
-
 }
 
 void
--- a/libgui/src/main-window.h	Thu May 01 13:24:27 2014 +0200
+++ b/libgui/src/main-window.h	Fri May 02 17:44:44 2014 +0200
@@ -270,6 +270,8 @@
 
   void execute_debug_callback ();
 
+  void configure_shortcuts ();
+
   bool confirm_exit_octave ();
 
   workspace_model *_workspace_model;
@@ -389,6 +391,8 @@
   QStringList *_dbg_queue;
   QSemaphore   _dbg_processing;
   QMutex       _dbg_queue_mutex;
+
+  bool _prevent_readline_conflicts;
 };
 
 class news_reader : public QObject
--- a/libgui/src/settings-dialog.cc	Thu May 01 13:24:27 2014 +0200
+++ b/libgui/src/settings-dialog.cc	Fri May 02 17:44:44 2014 +0200
@@ -271,6 +271,10 @@
   // terminal colors
   read_terminal_colors (settings);
 
+  // shortcuts
+  ui->cb_prevent_readline_conflicts->setChecked (
+    settings->value ("shortcuts/prevent_readline_conflicts", true).toBool ());
+
 #ifdef HAVE_QSCINTILLA
   // editor styles: create lexer, read settings, and create dialog elements
   QsciLexer *lexer;
@@ -650,7 +654,6 @@
     case 2: cursorType = "underline";  break;
     }
   settings->setValue ("terminal/cursorType", cursorType);
-  settings->sync ();
 
 #ifdef HAVE_QSCINTILLA
   // editor styles: create lexer, get dialog contents, and write settings
@@ -685,10 +688,15 @@
 
   write_terminal_colors (settings);
 
+  // shortcuts
+  settings->setValue ("shortcuts/prevent_readline_conflicts",
+                      ui->cb_prevent_readline_conflicts->isChecked ());
   shortcut_manager::write_shortcuts ();
 
+  // settings dialog's geometry
   settings->setValue ("settings/last_tab",ui->tabWidget->currentIndex ());
   settings->setValue ("settings/geometry",saveGeometry ());
+
   settings->sync ();
 }
 
--- a/libgui/src/settings-dialog.ui	Thu May 01 13:24:27 2014 +0200
+++ b/libgui/src/settings-dialog.ui	Fri May 02 17:44:44 2014 +0200
@@ -1684,6 +1684,30 @@
               <number>0</number>
              </property>
              <item>
+              <layout class="QHBoxLayout" name="horizontalLayout_15">
+               <item>
+                <widget class="QCheckBox" name="cb_prevent_readline_conflicts">
+                 <property name="toolTip">
+                  <string>Select this option to prevent conflicts with readline shortcuts</string>
+                 </property>
+                 <property name="text">
+                  <string>Disable global shortcuts when terminal window has focus</string>
+                 </property>
+                 <property name="checked">
+                  <bool>true</bool>
+                 </property>
+                </widget>
+               </item>
+              </layout>
+             </item>
+             <item>
+              <widget class="Line" name="line_9">
+               <property name="orientation">
+                <enum>Qt::Horizontal</enum>
+               </property>
+              </widget>
+             </item>
+             <item>
               <widget class="QLabel" name="label_21">
                <property name="text">
                 <string>Enter a new shortcut by double clicking on the related row.</string>