Skip to content

Commit 54a2f30

Browse files
author
Joseph Atkins-Turkish
committed
Panes remember their focus.
1 parent a987a78 commit 54a2f30

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

ide/static/ide/js/fuzzyprompt.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ CloudPebble.FuzzyPrompt = (function() {
88
var selected_id = null;
99
var default_item;
1010
var selection_was_made;
11+
var focus_pane;
1112
var opened = false;
1213
var prompt_kind = null;
13-
14+
var focus_pane_selector = '#main-pane'
1415
// While manual is false, always highlight the first item
1516
var manual = false;
1617

@@ -184,6 +185,8 @@ CloudPebble.FuzzyPrompt = (function() {
184185
selection_was_made = false;
185186
opened = true;
186187
prompt_kind = kind;
188+
focus_pane = $(focus_pane_selector).get()[0];
189+
187190
// Build up the list of files to search through
188191
var id = 0;
189192
_.each(sources, function(source) {
@@ -253,6 +256,11 @@ CloudPebble.FuzzyPrompt = (function() {
253256
if (opened) {
254257
opened = false;
255258
prompt.modal('hide');
259+
// If we switched page, never refocus
260+
if (focus_pane != $(focus_pane_selector).get()[0]) {
261+
refocus = false;
262+
}
263+
// Otherwise, if we want to refocus, do so
256264
if (refocus) {
257265
setTimeout(function () {
258266
$(previously_active).focus();

ide/static/ide/js/sidebar.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ CloudPebble.Sidebar = (function() {
1717
if (list_entry) {
1818
list_entry.removeClass('active');
1919
}
20+
2021
suspended_panes[pane_id] = pane;
2122
pane.detach();
2223
// Create a new empty one.
@@ -38,7 +39,10 @@ CloudPebble.Sidebar = (function() {
3839
};
3940

4041
var refocus_pane = function(pane) {
41-
pane.find('*[autofocus]').first().focus();
42+
setTimeout(function() {
43+
var previous_focus = pane.data('previous-focus');
44+
(previous_focus || pane.find('*[autofocus]').first().focus()).focus();
45+
}, 50);
4246
};
4347

4448
var restore_suspended_pane = function(id) {
@@ -57,7 +61,7 @@ CloudPebble.Sidebar = (function() {
5761
pane.data('pane-restore-function')();
5862
}
5963

60-
refocus_pane(pane);
64+
refocus_pane($('#main-pane'));
6165

6266
return true;
6367
}
@@ -66,7 +70,7 @@ CloudPebble.Sidebar = (function() {
6670

6771
var set_main_pane = function(pane, options) {
6872
$('#main-pane').append(pane).data('pane-id', options.id);
69-
refocus_pane(pane);
73+
refocus_pane($('#main-pane'));
7074
if (options.onRestore) {
7175
$('#main-pane').data('pane-restore-function', options.onRestore);
7276
}
@@ -176,6 +180,10 @@ CloudPebble.Sidebar = (function() {
176180
$('#sidebar-pane-github > a').click(CloudPebble.GitHub.Show);
177181
$('#sidebar-pane-timeline > a').click(CloudPebble.Timeline.show);
178182
create_initial_sections(CloudPebble.ProjectInfo.type);
183+
184+
$('#pane-parent').on('focusin', '#main-pane *', _.debounce(function(e) {
185+
$('#main-pane').data('previous-focus', $(e.target));
186+
}, 1));
179187
},
180188
SetPopover: function(pane_id, title, content) {
181189
$('#sidebar-pane-' + pane_id).find('a').popover('destroy').popover({

0 commit comments

Comments
 (0)