Mercurial > octave
diff libgui/src/main-window.cc @ 15980:6c0fce0632a4
gui: set keyboard focus when switching between dock widgets (bug #36957)
* main-window.cc (handle_command_window_visible, handle_command_history_visible,
handle_current_directory_visible, handle_workspace_visible,
handle_editor_visible, handle_documentation_visible): slots for signal
visibilityChanged, emitted when widgets get visible
* main-window.cc (construct): connect signal visibilityChanged to slots
* main-window.cc (focus_editor): call editor's own function for setting focus
* main-window.h: declaration of new slots
* file-editor.cc (set_focus): new function: setting focus to actual editor tab
* file-editor.cc (add_file_editor_tab): connect signal fetab_set_focus to the
slot set_focus of file_editor_tab
* file-editor.h: new function set_focus and new signal fetab_set_focus
* file-editor-interface.h: new virtual function set_focus
* file-editor-tab.cc (set_focus): new slot for singal fetab_set_focus from
file_editor, setting the focus to edit area
* file-edtortab.h: new slot set_focus
author | Torsten <ttl@justmail.de> |
---|---|
date | Sat, 26 Jan 2013 20:33:46 +0100 |
parents | 85f9aca30c76 |
children | 200dab2eecd4 |
line wrap: on
line diff
--- a/libgui/src/main-window.cc Thu Jan 24 17:13:15 2013 -0500 +++ b/libgui/src/main-window.cc Sat Jan 26 20:33:46 2013 +0100 @@ -393,6 +393,7 @@ _workspace_view->raise (); } + void main_window::focus_editor () { @@ -401,10 +402,8 @@ { _file_editor->setVisible (true); } - - _file_editor->setFocus (); - _file_editor->activateWindow (); - _file_editor->raise (); + // call own function of editor in order to set focus to the current editor tab + _file_editor->set_focus (); #endif } @@ -422,6 +421,54 @@ } void +main_window::handle_command_window_visible (bool visible) +{ + // if widget is changed to visible and is not floating + if (visible && !_terminal_dock_widget->isFloating ()) + focus_command_window (); +} + +void +main_window::handle_command_history_visible (bool visible) +{ + // if changed to visible and widget is not floating + if (visible && !_history_dock_widget->isFloating ()) + focus_command_history (); +} + +void +main_window::handle_current_directory_visible (bool visible) +{ + // if changed to visible and widget is not floating + if (visible && !_files_dock_widget->isFloating ()) + focus_current_directory (); +} + +void +main_window::handle_workspace_visible (bool visible) +{ + // if changed to visible and widget is not floating + if (visible && !_workspace_view->isFloating ()) + focus_workspace (); +} + +void +main_window::handle_editor_visible (bool visible) +{ + // if changed to visible and widget is not floating + if (visible && !_file_editor->isFloating ()) + focus_editor (); +} + +void +main_window::handle_documentation_visible (bool visible) +{ + // if changed to visible and widget is not floating + if (visible && !_documentation_dock_widget->isFloating ()) + focus_documentation (); +} + +void main_window::handle_entered_debug_mode () { setWindowTitle ("Octave (Debugging)"); @@ -943,6 +990,18 @@ this, SLOT (focus_editor ())); connect (documentation_action, SIGNAL (triggered ()), this, SLOT (focus_documentation ())); + connect (_terminal_dock_widget, SIGNAL (visibilityChanged (bool)), + this, SLOT (handle_command_window_visible (bool))); + connect (_workspace_view, SIGNAL (visibilityChanged (bool)), + this, SLOT (handle_workspace_visible (bool))); + connect (_history_dock_widget, SIGNAL (visibilityChanged (bool)), + this, SLOT (handle_command_history_visible (bool))); + connect (_files_dock_widget, SIGNAL (visibilityChanged (bool)), + this, SLOT (handle_current_directory_visible (bool))); + connect (_file_editor, SIGNAL (visibilityChanged (bool)), + this, SLOT (handle_editor_visible (bool))); + connect (_documentation_dock_widget, SIGNAL (visibilityChanged (bool)), + this, SLOT (handle_documentation_visible (bool))); connect (reset_windows_action, SIGNAL (triggered ()), this, SLOT (reset_windows ()));