Skip to content

Commit 9634809

Browse files
author
Joseph Atkins-Turkish
committed
Panes remember their focus.
1 parent ac2b8c9 commit 9634809

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

ide/static/ide/js/fuzzyprompt.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ 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;
1314
var COMMANDS_ENABLED = true;
14-
15+
var focus_pane_selector = '#main-pane'
1516
// While manual is false, always highlight the first item
1617
var manual = false;
1718

@@ -171,6 +172,8 @@ CloudPebble.FuzzyPrompt = (function() {
171172
selection_was_made = false;
172173
opened = true;
173174
prompt_kind = kind;
175+
focus_pane = $(focus_pane_selector).get()[0];
176+
174177
// Build up the list of files to search through
175178
var id = 0;
176179
_.each(sources, function(source) {
@@ -237,6 +240,11 @@ CloudPebble.FuzzyPrompt = (function() {
237240
if (opened) {
238241
opened = false;
239242
prompt.modal('hide');
243+
// If we switched page, never refocus
244+
if (focus_pane != $(focus_pane_selector).get()[0]) {
245+
refocus = false;
246+
}
247+
// Otherwise, if we want to refocus, do so
240248
if (refocus) {
241249
setTimeout(function () {
242250
$(previously_active).focus();

ide/static/ide/js/sidebar.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ CloudPebble.Sidebar = (function() {
1313
var pane = $('#main-pane');
1414

1515
var suspend_function = pane.data('pane-suspend-function');
16+
1617
if(suspend_function) suspend_function();
1718

1819
var list_entry = $('#sidebar-pane-' + pane_id);
1920
if(list_entry) {
2021
list_entry.removeClass('active');
2122
}
23+
2224
suspended_panes[pane_id] = pane;
2325
pane.detach();
2426
// Create a new empty one.
@@ -40,7 +42,10 @@ CloudPebble.Sidebar = (function() {
4042
};
4143

4244
var refocus_pane = function(pane) {
43-
pane.find('*[autofocus]').first().focus();
45+
setTimeout(function() {
46+
var previous_focus = pane.data('previous-focus');
47+
(previous_focus || pane.find('*[autofocus]').first().focus()).focus();
48+
}, 50);
4449
};
4550

4651
var restore_suspended_pane = function(id) {
@@ -59,7 +64,7 @@ CloudPebble.Sidebar = (function() {
5964
pane.data('pane-restore-function')();
6065
}
6166

62-
refocus_pane(pane);
67+
refocus_pane($('#main-pane'));
6368

6469
return true;
6570
}
@@ -68,7 +73,7 @@ CloudPebble.Sidebar = (function() {
6873

6974
var set_main_pane = function(pane, id, restore_function, destroy_function) {
7075
$('#main-pane').append(pane).data('pane-id', id);
71-
refocus_pane(pane);
76+
refocus_pane($('#main-pane'));
7277
if(restore_function) {
7378
$('#main-pane').data('pane-restore-function', restore_function);
7479
}
@@ -162,6 +167,11 @@ CloudPebble.Sidebar = (function() {
162167
$('#sidebar-pane-github > a').click(CloudPebble.GitHub.Show);
163168
$('#sidebar-pane-timeline > a').click(CloudPebble.Timeline.show);
164169
$('#new-source-file').click(CloudPebble.Editor.Create);
170+
171+
$('#pane-parent').on('focusin', '#main-pane *', _.debounce(function(e) {
172+
$('#main-pane').data('previous-focus', $(e.target));
173+
}, 1));
174+
165175
init();
166176
},
167177
SetPopover: function(pane_id, title, content) {

0 commit comments

Comments
 (0)