diff --git a/src/MainWindow.vala b/src/MainWindow.vala index 3938c0efa..78b9b1d1e 100644 --- a/src/MainWindow.vala +++ b/src/MainWindow.vala @@ -107,6 +107,8 @@ namespace Scratch { public const string ACTION_TOGGLE_COMMENT = "action-toggle-comment"; public const string ACTION_TOGGLE_SHOW_FIND = "action-toggle_show-find"; public const string ACTION_TOGGLE_SIDEBAR = "action-toggle-sidebar"; + public const string ACTION_FOCUS_SIDEBAR = "action-focus-sidebar"; + public const string ACTION_FOCUS_DOCUMENT = "action-focus-document"; public const string ACTION_TOGGLE_OUTLINE = "action-toggle-outline"; public const string ACTION_TOGGLE_TERMINAL = "action-toggle-terminal"; public const string ACTION_OPEN_IN_TERMINAL = "action-open-in-terminal"; @@ -168,6 +170,8 @@ namespace Scratch { { ACTION_ZOOM_OUT, action_zoom_out}, { ACTION_TOGGLE_COMMENT, action_toggle_comment }, { ACTION_TOGGLE_SIDEBAR, action_toggle_sidebar, null, "true" }, + { ACTION_FOCUS_SIDEBAR, action_focus_sidebar }, + { ACTION_FOCUS_DOCUMENT, action_focus_document }, { ACTION_TOGGLE_TERMINAL, action_toggle_terminal, null, "false"}, { ACTION_OPEN_IN_TERMINAL, action_open_in_terminal, "s"}, { ACTION_SET_ACTIVE_PROJECT, action_set_active_project, "s"}, @@ -239,6 +243,8 @@ namespace Scratch { action_accelerators.set (ACTION_TOGGLE_COMMENT, "slash"); action_accelerators.set (ACTION_TOGGLE_SIDEBAR, "F9"); // GNOME action_accelerators.set (ACTION_TOGGLE_SIDEBAR, "backslash"); // Atom + action_accelerators.set (ACTION_FOCUS_SIDEBAR, "Left"); + action_accelerators.set (ACTION_FOCUS_DOCUMENT, "Right"); action_accelerators.set (ACTION_TOGGLE_TERMINAL, "t"); action_accelerators.set (ACTION_OPEN_IN_TERMINAL + "::", "t"); action_accelerators.set (ACTION_TOGGLE_OUTLINE, "backslash"); @@ -1429,6 +1435,26 @@ namespace Scratch { sidebar.visible = action.get_state ().get_boolean (); } + private void action_focus_sidebar () { + if (sidebar == null) { + return; + } + + if (!sidebar.visible) { + var toggle_sidebar_action = Utils.action_from_group (ACTION_TOGGLE_SIDEBAR, actions); + toggle_sidebar_action.activate (null); + } + + sidebar.focus_sidebar (); + } + + private void action_focus_document () { + var doc = get_current_document (); + if (doc != null) { + doc.focus (); + } + } + private void action_toggle_terminal () { var toggle_terminal_action = Utils.action_from_group (ACTION_TOGGLE_TERMINAL, actions); toggle_terminal_action.set_state (!toggle_terminal_action.get_state ().get_boolean ()); diff --git a/src/Widgets/Sidebar.vala b/src/Widgets/Sidebar.vala index 0b6a7ef47..619ec0b55 100644 --- a/src/Widgets/Sidebar.vala +++ b/src/Widgets/Sidebar.vala @@ -195,4 +195,10 @@ public class Code.Sidebar : Gtk.Grid { public void notify_cloning_success () { cloning_success_toast.send_notification (); } + + public void focus_sidebar () { + if (stack.visible_child is Code.Widgets.SourceList) { + ((Code.Widgets.SourceList) stack.visible_child).grab_focus (); + } + } } diff --git a/src/Widgets/SourceList/SourceList.vala b/src/Widgets/SourceList/SourceList.vala index 85b7ecd02..99444ad82 100644 --- a/src/Widgets/SourceList/SourceList.vala +++ b/src/Widgets/SourceList/SourceList.vala @@ -2937,5 +2937,9 @@ public class SourceList : Gtk.ScrolledWindow { return null; } + + public new void grab_focus () { + tree.grab_focus (); + } } }