Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue about default focus #5

Closed
haokuixi opened this issue Jul 8, 2019 · 21 comments
Closed

Issue about default focus #5

haokuixi opened this issue Jul 8, 2019 · 21 comments
Labels

Comments

@haokuixi
Copy link
Contributor

haokuixi commented Jul 8, 2019

I found that, by default, focus moves to the first tab after selecting any tab via QuicKey.

image

This is inconvenient for users who use the Vimium extension.

@fwextensions
Copy link
Owner

Thanks for the bug report!

I’ve never seen that behavior, even when testing on macOS. Which version are you on? I think my test box is on 10.12 or .13, both of which are old. But I wouldn’t think that would affect Chrome’s behavior much. Which version of Chrome are you on?

It’s possible this is caused by a bad interaction with Vimium. If you turn it off (you can go into the Extensions page and click the toggle next to it, without uninstalling it), does this focus bug still happen? I’ll do some testing with it, too, though I’m out of town so it’ll be a bit delayed.

@haokuixi
Copy link
Contributor Author

haokuixi commented Jul 9, 2019

macOS version: 10.14
Chrome version: 75.0.3770.100
QuicKey version: 1.1.0

I turned off all extensions, except QuicKey, but the focus bug still exist. Also I tested under Incognito mode with only QuicKey enabled and the issue remains the same.

@fwextensions
Copy link
Owner

fwextensions commented Jul 10, 2019

Thanks for the testing, I appreciate it!

Just so I understand, if you select, say, the third tab in a window using QuicKey, what happens?

  1. Tab 3 is visible, but the keyboard focus is on the tab control for tab 1 (the blue outline).
  2. Tab 1 is visible, and the keyboard focus is on the tab control for tab 1.

I’d been assuming result #1, but the screenshot looks maybe like #2.

Do you see a difference between navigating to a previous tab using the CTRL-A shortcut vs pressing CTRL-Q, typing a tab name and then pressing enter to switch to it via the popup menu? They should be the same, but the two flows have slightly different code paths.

@fwextensions
Copy link
Owner

I still can't reproduce it (it'll be several days before I can test on a Mac), but I have at least a theory of what might be causing it (though I've never seen it behave that way on Mac or Windows).

I realized that my code for checking whether the tab you're focusing is in the current window or not has always been buggy, but it's never caused any issues for me. Basically, whenever you choose a tab to focus, it always also focuses the tab's window. It's supposed to do that only if the tab isn't in the current window. Conceptually, it's not crazy that focusing an already focused window could have some additional effect, though again I've never seen it.

Do you have any accessibility features turned on in macOS, or any OS utilities that affect keyboard focus? It feels like something outside of Chrome is moving the focus, so I'm wondering if there's some utility that automatically focuses the first element in a window when the window is moved to the front. In the case of Chrome, I think that would be the first tab.

I don't know how familiar you are with programming Chrome extensions, but if you wanted to try modifying a local copy of QuicKey, then commenting out these two lines may fix the issue:

https://github.com/fwextensions/QuicKey/blob/master/src/js/background/recent-tabs.js#L425

https://github.com/fwextensions/QuicKey/blob/master/src/js/popup/app.js#L243

If you have more than one window open, commenting out these lines means switching to a tab in a background window won't focus that window, but if you just have one window, you'll avoid the unnecessary focus call.

@fwextensions
Copy link
Owner

Also, I tried installing Vimium, but I can't reproduce the focus issues on Windows. After switching to a tab with QuicKey, the Vimium keys still work.

@haokuixi
Copy link
Contributor Author

Thanks for the testing, I appreciate it!

Just so I understand, if you select, say, the third tab in a window using QuicKey, what happens?

  1. Tab 3 is visible, but the keyboard focus is on the tab control for tab 1 (the blue outline).
  2. Tab 1 is visible, and the keyboard focus is on the tab control for tab 1.

I’d been assuming result #1, but the screenshot looks maybe like #2.

Do you see a difference between navigating to a previous tab using the CTRL-A shortcut vs pressing CTRL-Q, typing a tab name and then pressing enter to switch to it via the popup menu? They should be the same, but the two flows have slightly different code paths.

The issue I described is the first case.
Using Ctrl+A to navigate to a previous tab has no such issue.


I tested QuicKey on another two Mac notebook. One of them has the same problem of mine, the other one also has problem -- focus goes to the address bar.

I did some more tests and found that switching between tabs in one window will cause the bug and switching to a tab in another window is ok.

I'm not familiar with programming Chrome extensions, but I'd like to have a try :)

@fwextensions
Copy link
Owner

Thanks for the further testing. Which versions of macOS are on those laptops? My bet is that something changed in a more recent version of macOS that causes the focus to change when you focus an already focused window. That sounds like either a bug in macOS or Chrome (most likely, Chrome hasn't caught up to this new behavior).

Using Ctrl+A to navigate to a previous tab has no such issue.

Interesting. Possibly this is due to focusing an already focused window while the popup menu is open, since that's not open when using the CTRL-A shortcut.

Anyway, I think I have a workaround for this, so I'll create a new build and let you know how to test it. Might take a few days.

@haokuixi
Copy link
Contributor Author

Hi @fwextensions I simply changed the order of window focusing and tab activating and it worked as expected. I created a pull request and you can take a review.

@haokuixi
Copy link
Contributor Author

haokuixi commented Jul 15, 2019

I just found that it works in that way, but I don't know why. After changed the updating order, I tried activating the tab, but not focusing the window and the bug appeared again. After some more testing I found that in order to avoid the bug, focusing window is essential and must be done before activating the tab.
It is inferred that the if statement around updating window is always true. I tried to log some debug info, but failed -- console.log did not work in app.js.

setInterval(function() { console.log(chrome.windows.WINDOW_ID_CURRENT); }, 1000);

No matter which window I am in, running above code in the background.html will always produce -2. I don't know if this is the right way, but the results are in line with expectations.
The conclusion is that, we can always focus the window and then activate the selected tab, without extra logic judgement.

@fwextensions
Copy link
Owner

Thanks for the PR! I added a comment.

Yeah, WINDOW_ID_CURRENT is an enum that's always -2, while I'd assumed it was actually the ID of the current window. So that if branch was always true (the tab's window ID is never -2) and the window was always getting focused after the tab was activated. Sounds like you found that just changing the order fixes it.

To see the console output from the popup, you have to right-click in the popup and open devtools from there. Then you'll see the log calls from the popup code. That devtools window will get closed when the menu closes. It's a bit of a pain, so I also set up a log() global function that outputs to the background page's console.

@haokuixi
Copy link
Contributor Author

I agree with your comment. Changing the order did solve the issue. It feels much better to use QuicKey now😄

@garyking
Copy link

garyking commented Aug 23, 2019

Is this issue still waiting on #7 to be closed? I'm still experiencing the initial described issue.

@garyking
Copy link

Also, a minor note, but the first tab does not get focused if the current tab is a "new tab" before I choose a tab to switch to.

Steps:

  1. Open a new tab in Chrome.
  2. Use this ext to switch to another tab.
  3. First tab does not get selected.

Not sure how important this detail is though.

fwextensions added a commit that referenced this issue Aug 25, 2019
When focusing a tab, focus the window before focusing the tab, which seems to avoid focus issues on macOS.
In popups, call promisified update() methods in a chain instead of the non-callback versions.
Remove code for opening options page after upgrade to 1.1.0.
Check for error.lineno when tracking an exception, so we don't send undefineds.
@fwextensions
Copy link
Owner

I've pushed a new version that I think fixes this issue here: https://github.com/fwextensions/QuicKey/releases/download/v1.1.1/QuicKey.zip

You can download that zip and load the extension locally if you'd like to test it. Let me know if you'd like instructions on running local extensions.

@garyking
Copy link

Will the update be pushed to the Chrome store? I'd prefer just getting it that way.

@fwextensions
Copy link
Owner

Yes, I'll push it to the store, but wanted to test it for a bit first. The Chrome store version will update automatically.

@fwextensions
Copy link
Owner

I did some more tests and found that switching between tabs in one window will cause the bug and switching to a tab in another window is ok.

Interestingly, I recreated something like this on Windows when updating the code. In the background page, which handles the tab navigation via the hotkeys, the tab and window were focused using the promisified API, while the popup was calling the chrome APIs directly. I changed the popup to focus the window first with the promise API and then in that call's .then(), I accidentally left the direct call to the chrome.tabs.update() API. With that flow, switching tabs within the same window didn't work at all (or at least, didn't visibly change the active tab), but switching tabs that were in different windows did work. When I changed the call for activating the tab to use the promisified API, everything worked again.

So there does seem to be some subtle timing issues with focusing tabs and windows that I'd never run into before, and which I think became more apparent with new versions of macOS.

@fwextensions
Copy link
Owner

fwextensions commented Aug 27, 2019

@haokuixi, have you been able to try out this branch?
https://github.com/fwextensions/QuicKey/tree/bug/mac-focus-issue

The window is focused first, like in your PR, but the tab isn't focused until the window focus promise returns, which is how it works in the background page. So it should fix the issue, as you weren't seeing it when using the previous tab keyboard shortcut.

@fwextensions
Copy link
Owner

I've published v1.1.1 to the webstore, which should fix this issue. Please let me know if you still see it after the extension updates.

@garyking
Copy link

garyking commented Sep 1, 2019

It works great. 👍

fwextensions added a commit that referenced this issue Sep 1, 2019
Squashed commit of the following:

commit ee2c69a
Author: John Dunning <fw@johndunning.com>
Date:   Sat Aug 31 17:03:51 2019 -0700

    Update version to 1.1.1

    Update releases, privacy policy and main home page.
    Don't focus current window when opening closed tab.
    Clean up .ignore file.
    Remove closed.svg, which is no longer used.

commit 7879a9b
Merge: 399ead1 07610f7
Author: John Dunning <fw@johndunning.com>
Date:   Sat Aug 31 14:12:56 2019 -0700

    Merge branch 'bug/mac-focus-issue' into dev

commit 07610f7
Author: John Dunning <fw@johndunning.com>
Date:   Sat Aug 31 14:07:59 2019 -0700

    Change built test extension name

commit adbc45a
Author: John Dunning <fw@johndunning.com>
Date:   Sat Aug 24 17:18:26 2019 -0700

    Fix issue #5

    When focusing a tab, focus the window before focusing the tab, which seems to avoid focus issues on macOS.
    In popups, call promisified update() methods in a chain instead of the non-callback versions.
    Remove code for opening options page after upgrade to 1.1.0.
    Check for error.lineno when tracking an exception, so we don't send undefineds.

commit 399ead1
Author: John Dunning <fw@johndunning.com>
Date:   Fri Aug 23 18:44:15 2019 -0700

    Merge pull request #7 from haokuixi/master

    Fix focus issue

commit ded0df9
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jul 21 19:24:11 2019 -0700

    Fix broken image paths

commit 105d657
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jun 9 23:20:50 2019 -0700

    Update image paths on site

    Add history.svg to site.

commit cab94e0
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jun 9 20:11:13 2019 -0700

    Update version to 1.1.0

    Update releases/index.md.

commit 1a07e8b
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jun 9 19:23:09 2019 -0700

    Pass event.error to Tracker.exception() instead of event from the global error handler

    Check for tab.windowId before calling chrome.windows.update().

commit 2a68176
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jun 9 13:40:15 2019 -0700

    Check for error.stack before trying to use it.

    Wrap Tracker.exception() in a try/catch.
    Change decodeUriComponent failure to a log instead of an error.

commit 52e71c2
Author: John Dunning <fw@johndunning.com>
Date:   Fri Jun 7 19:37:08 2019 -0700

    Load error-handler.js before other scripts

    Retry if global require() is not available yet so we can load before RequireJS.
    Use a single string for logging errors, since the extensions page only lists the first argument to console.error().
    Check runtime.lastError in init.js to avoid errors on extension page.
    Make global DEBUG a var instead of const, so it can be changed via the console.

commit 605c02b
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jun 2 17:50:14 2019 -0700

    Add timestamps to unhandled error messages

commit 9e6b712
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jun 2 16:05:23 2019 -0700

    Fix build-popup.js script

    Update the props passed to <App /> to be the latest in build-popup.js.
    Add a noop chrome.extension.getBackgroundPage() to mock/cp.js, along with methods for getting commands.
    Update mock/popup.html to match the latest HTML.

commit 12c0ab0
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jun 2 15:13:02 2019 -0700

    Remove object spread operator in tracker.js

    The esprima parser can't handle it.
    Throw an exception in the Tracker constructor if no id is supplied.
    Use shorthand properties in settings.js.

commit 839db72
Author: John Dunning <fw@johndunning.com>
Date:   Sat Jun 1 20:06:47 2019 -0700

    Fix Tracker to work if analytics.js loads after it's created

    Once the local ga was set, it was never updated, so if the GA file loaded slowly, events would never fire.
    Add timeout so that if the GA code never loads, the tracker will clear the queue and disable itself, so the queue doesn't grow forever.
    Refactor calling the ga object in Tracker.
    Change Tracker constructor to take an object instead of params.
    Change default tracker name to t0.

commit b7c76b5
Author: John Dunning <fw@johndunning.com>
Date:   Mon May 27 20:13:51 2019 -0700

    Track whether a recent tab is navigated to while the icon is inverted

    Add ability to send a label in Tracker.event().

commit 32a9ff4
Author: John Dunning <fw@johndunning.com>
Date:   Mon May 27 19:16:53 2019 -0700

    Update releases/index.md

    Add subheads to release sections.
    Remove unneeded error handler from background.js.
    Change how state is handled in AppContainer.
    Update closed tab screenshot.

commit a0ddbe8
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 25 18:36:35 2019 -0700

    Add error-handler to built HTML files

    Use babel to copy error-handler.js to common/.
    Add it to src/popup.html.

commit d1b0e1a
Merge: 0967263 7cd9b2b
Author: John Dunning <fw@johndunning.com>
Date:   Tue May 21 19:10:08 2019 -0700

    Merge branch 'feature/error-handler' into dev

commit 7cd9b2b
Author: John Dunning <fw@johndunning.com>
Date:   Tue May 21 15:34:06 2019 -0700

    Fire events for exceptions cached before the handler inits

    Wrap tracker.exception() in try/catch.

commit b5493f5
Author: John Dunning <fw@johndunning.com>
Date:   Sun May 19 17:10:58 2019 -0700

    Add error-handler.js to background.html and options.html

    Clean up tracker.js.
    Support strings in tracker.exception().

commit 0967263
Merge: d4d0fa5 f52ca82
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 18 19:40:15 2019 -0700

    Merge branch 'feature/validate-storage' into dev

commit f52ca82
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 18 19:26:19 2019 -0700

    Add version number to confirmation message

commit 92da145
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 18 19:09:36 2019 -0700

    Handle onInstalled in the promise chain after setting lastUsedVersion

    The handler was always seeing an empty lastUsedVersion because it happened before the storage.set() task ran.
    Fix error when moving tabs, which was caused by not switching a remaining self to this.
    Update QK Test to 0.0.16.

commit e2d9dc4
Author: John Dunning <fw@johndunning.com>
Date:   Fri May 17 15:38:41 2019 -0700

    Validate required keys are on stored data after loading it

    Reverse order of params returned from storage updaters.
    Clean up update storage flow.
    Fire event when validation fails.
    Handle non-strings better in areShortcutsIdentical().
    Add objects-have-same-keys.js module.
    Remove text-orig.js, which shouldn't have been committed.

commit d4d0fa5
Author: John Dunning <fw@johndunning.com>
Date:   Mon May 13 11:53:45 2019 -0700

    Fix font size of search field

commit cd62291
Author: John Dunning <fw@johndunning.com>
Date:   Sun May 12 18:56:57 2019 -0700

    Add support page

    Add link to support page from options and to website and Chrome store description.
    Tweak h2 spacing on options page.

commit fffda19
Author: John Dunning <fw@johndunning.com>
Date:   Sun May 12 16:40:07 2019 -0700

    Fix bugs in tab move command

commit c53c89c
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 11 20:36:35 2019 -0700

    Open the Options page when the extension updates to 1.1.10

    Squashed commit of the following:

    commit 66d06f9
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat May 11 20:35:24 2019 -0700

        Send an event when an upgrade causes options to open

        Update qktest version to 0.0.11.

    commit 99d4cb2
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat May 11 20:16:16 2019 -0700

        Add grunt pack:test command

        Tweak background and position of upgrade message.
        Get rid of pack-test command.
        Update qktest to 0.0.9.

    commit 9017d2b
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat May 11 19:24:58 2019 -0700

        Open options page when extension is upgraded to 1.1.0

        Show a message at the top of the options page explaining what's new when there's an update param.
        Don't set lastUsedVersion in the storage updater to the current version, so the background page can detect it.
        Clean up how the onInstalled handler resolves the promise.
        Fix the QuicKey icon positioning next to the h1.

    commit 72edbcf
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat May 11 13:58:37 2019 -0700

        Convert event handlers to arrow functions

        Convert vars to lets.

commit bc0c582
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 11 12:35:26 2019 -0700

    Add grunt tasks for publishing to the web store

    Squashed commit of the following:

    commit 6beffe8
    Author: John Dunning <fw@johndunning.com>
    Date:   Fri May 10 19:56:30 2019 -0700

        Require retyping the name of the package to upload it

        Update qktest version to 0.0.7.

    commit f8702a3
    Author: John Dunning <fw@johndunning.com>
    Date:   Fri May 10 18:27:54 2019 -0700

        Refactor tasks to use targets

        Avoid duplicating tasks for quickey vs. qktest.
        Add confirmation step before uploading built package.
        Clean the full out directory before building.
        Separate the grunt config into a const so it's accessible.
        Add grunt-confirm and load-grunt-tasks modules.
        Update qktest version to 0.0.6.
        Add keys/ do .gitignore.

    commit d7496d6
    Author: John Dunning <fw@johndunning.com>
    Date:   Wed May 8 09:57:21 2019 -0700

        Add task to publish QK Test

        Add chrome-webstore-upload package.

    commit 3348d7c
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat May 4 18:49:54 2019 -0700

        Add grunt commands for building QK Test

        Refactor Gruntfile.js.
        Add chrome-webstore-upload and deepmerge.

commit 80730df
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 4 16:53:17 2019 -0700

    Update docs

commit 1ac123b
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 4 13:15:41 2019 -0700

    Move production files to build/prod

    Clean up .gitignore to just ignore all of build/out.
    Copy files from prod/ to out/.

commit 308a3f5
Merge: 7f6624c 0ef327e
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 4 12:40:54 2019 -0700

    Merge branch 'master' into dev

commit 7f6624c
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 4 12:26:19 2019 -0700

    Clean up navigate shortcut picker creation

    Add an error message for pressing a modifier key with the navigate key.

commit aeed623
Author: John Dunning <fw@johndunning.com>
Date:   Sat May 4 11:49:23 2019 -0700

    Update packages to remove vulnerabilities

    Squashed commit of the following:

    commit a374bb095ebea7de6bfd0aa3306d311a23c19416
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat May 4 11:47:19 2019 -0700

        Update modules to remove vulnerabilities

    commit 1ad614a
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Apr 27 22:56:58 2019 -0700

        Update packages to remove vulnerabilities

        Fix Gruntfile.js to not copy options.html from src, since we already have a checked in build version.

commit caedfe1
Author: John Dunning <fw@johndunning.com>
Date:   Sat Apr 27 19:50:15 2019 -0700

    Add Options page

    Offer options for space and esc behavior in search box, whether to include closed tabs, and customizable keyboard shortcuts.

    Squashed commit of the following:

    commit e13cfa6
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Apr 27 19:46:38 2019 -0700

        Fix missing history.svg icon

        Don't use arguments in the URL scoring function in score-items.js, which should be a bit faster.
        Use ...arguments in tracker.js.

    commit b2cd729
    Merge: adae9c5 24564ab
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Apr 27 18:22:34 2019 -0700

        Merge branch 'feature/custom-keyboard-shortcuts' of github.com:fwextensions/QuicKey into feature/custom-keyboard-shortcuts

    commit adae9c5
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Apr 27 18:22:03 2019 -0700

        Merge feature/babel

        Squashed commit of the following:

        commit 24564ab
        Author: John Dunning <fw@johndunning.com>
        Date:   Wed Apr 24 10:56:30 2019 -0700

            Fix size of URL text

        commit 6d7c0dc
        Author: John Dunning <fw@johndunning.com>
        Date:   Wed Apr 24 10:46:00 2019 -0700

            Get rid of dangerouslySetInnerHTML in MatchedString

        commit f64d672
        Author: John Dunning <fw@johndunning.com>
        Date:   Tue Apr 23 19:35:35 2019 -0700

            Start using ES6 where needed

            Make 51 the minimum version, to avoid transpiling array destructuring (whicb should be available in Chrome 49).
            Use computed properties in getDefaultSettings() and the popup keyboard handler.
            Add note about incognito icon to options screen.
            Remove fromPairs() from lodash build, which is no longer needed.
            Remove old options.js file.

        commit 79c0b37
        Author: John Dunning <fw@johndunning.com>
        Date:   Mon Apr 22 19:41:15 2019 -0700

            Use babel to minify almond and init

            Be more stringent in filtering out comments.
            Clean up Gruntfile.js.
            Remove grunt-uglify.
            Update grunt-sync.

        commit 2f414a4
        Author: John Dunning <fw@johndunning.com>
        Date:   Mon Apr 22 18:27:34 2019 -0700

            Minify code with babel-minify

            Fix long-standing bug where matchingItems was getting set as  global.
            Add minify preset.
            Add core-js 3.0.
            Preserve license comments with custom function.
            Change minimum Chrome version to 49, which has destructuring.

        commit 1f5693e
        Author: John Dunning <fw@johndunning.com>
        Date:   Sun Apr 21 23:07:30 2019 -0700

            Add babel for transpilation

    commit 24564ab
    Author: John Dunning <fw@johndunning.com>
    Date:   Wed Apr 24 10:56:30 2019 -0700

        Fix size of URL text

    commit 6d7c0dc
    Author: John Dunning <fw@johndunning.com>
    Date:   Wed Apr 24 10:46:00 2019 -0700

        Get rid of dangerouslySetInnerHTML in MatchedString

    commit f64d672
    Author: John Dunning <fw@johndunning.com>
    Date:   Tue Apr 23 19:35:35 2019 -0700

        Start using ES6 where needed

        Make 51 the minimum version, to avoid transpiling array destructuring (whicb should be available in Chrome 49).
        Use computed properties in getDefaultSettings() and the popup keyboard handler.
        Add note about incognito icon to options screen.
        Remove fromPairs() from lodash build, which is no longer needed.
        Remove old options.js file.

    commit 79c0b37
    Author: John Dunning <fw@johndunning.com>
    Date:   Mon Apr 22 19:41:15 2019 -0700

        Use babel to minify almond and init

        Be more stringent in filtering out comments.
        Clean up Gruntfile.js.
        Remove grunt-uglify.
        Update grunt-sync.

    commit 2f414a4
    Author: John Dunning <fw@johndunning.com>
    Date:   Mon Apr 22 18:27:34 2019 -0700

        Minify code with babel-minify

        Fix long-standing bug where matchingItems was getting set as  global.
        Add minify preset.
        Add core-js 3.0.
        Preserve license comments with custom function.
        Change minimum Chrome version to 49, which has destructuring.

    commit 1f5693e
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Apr 21 23:07:30 2019 -0700

        Add babel for transpilation

    commit 7f715fb
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Apr 21 17:01:18 2019 -0700

        Update docs

        Add info about the Options page.
        Re-enable the install button and have it just open a tab to the Chrome Store.

    commit 07fc330
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Apr 21 15:44:06 2019 -0700

        Add option to not include closed tabs in the search results

        Update storage version to 6.
        Add lastUsedVersion and includeClosedTabs keys to storage.
        Use the settings key constants in getDefaultSettings().
        Add default onChange prop to Controls.
        Add tooltip to the shift enter keyboard shortcut.
        Force the value to be a string when tracking the setting changed event, to avoid errors.
        Pass in the version to the storage updaters so they can just increment that when passing the new version back.

    commit f9291f2
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Apr 21 14:14:12 2019 -0700

        Use shared() with recent-tabs.js to avoid passing it in as a prop

        Change shared() to allow the init value to not be a function.
        Make the init functions anonymous.

    commit 867ba9b
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Apr 20 12:22:11 2019 -0700

        Add checkboxes for including closed tabs

        Add ControlGroup component.
        Tweak checkbox styling.

    commit 8468bfa
    Author: John Dunning <fw@johndunning.com>
    Date:   Fri Apr 19 15:59:08 2019 -0700

        Tweak shortcut picker error on Mac

    commit 7be4e7c
    Author: John Dunning <fw@johndunning.com>
    Date:   Fri Apr 19 10:30:35 2019 -0700

        Add common/base module for shared code

        Saves 370K of duplicated code.
        Rename lib/react-common to common/react.
        Add common/base module to contain most of the shared modules.
        Copy rjs/build.txt to build/.
        Remove old module config code.

    commit 46df233
    Author: John Dunning <fw@johndunning.com>
    Date:   Thu Apr 18 15:01:40 2019 -0700

        Move React-related files to react-common module

        Don't include almond in every module.  Instead, create one minified copy and load it explicitly in the HTML.
        Add lib/react-common.js to require the React modules.
        Add build/out/options.html.
        Copy the built lib/react-common module from rjs/ to out/.
        Remove options.html from .gitignore.

    commit 7ca3c7b
    Author: John Dunning <fw@johndunning.com>
    Date:   Wed Apr 17 20:01:44 2019 -0700

        Build the three modules using one requirejs config

        Add rjs to .gitignore.

    commit 46a15e5
    Author: John Dunning <fw@johndunning.com>
    Date:   Tue Apr 16 19:13:56 2019 -0700

        Add config for creating background, popup and options modules

    commit 529ab18
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Apr 14 17:43:23 2019 -0700

        Listen for the correct MRU modifier key

        Add the popupModifierEventName to settings, so the popup can listen for it.
        Show Mac modifier chars in the minimum modifier error message on Mac.

    commit 52b29a8
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Apr 13 19:08:43 2019 -0700

        Fix using an existing shortcut not clearing it from another picker

        Refactor key-related constants into key-constants.js.
        Fix changing the shortcut picker props not causing it to show the new shortcut.
        Add are-shortcuts-identical.js to compare shortcut strings.

    commit aa21673
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Apr 13 18:19:15 2019 -0700

        Fix flicker to old shortcut when new one is pressed

        Add some kludgy state to the shortcut picker to use the pressedKeys array to render if it's a valid shortcut.

    commit d2a8d33
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Apr 13 16:44:53 2019 -0700

        Tweak size of radio buttons

        Fix spacing in options.css.

    commit 0540343
    Author: John Dunning <fw@johndunning.com>
    Date:   Fri Apr 12 19:31:07 2019 -0700

        Use a history icon for closed tabs

        Make closed tabs lighter than suspended ones.

    commit 7282862
    Author: John Dunning <fw@johndunning.com>
    Date:   Fri Apr 12 15:35:13 2019 -0700

        Use strikethrough on closed tab items

        Make closed tabs lighter.
        Don't put the suspended class on closed items.
        Tweak radio button size to make the pixels more even.
        Use percentages to center the radio button indicator.

    commit 9b70dac
    Author: John Dunning <fw@johndunning.com>
    Date:   Thu Apr 11 11:18:41 2019 -0700

        Fix clearing identical keyboard shortcuts

        Use the actual MRU key when handling keys that were captured during init.
        Extract the popup key and modifiers in settings module, so other modules don't have to replicate that.

    commit 4f1ba88
    Author: John Dunning <fw@johndunning.com>
    Date:   Wed Apr 10 20:16:51 2019 -0700

        Add options/main.js to build

        Add alert icon and red color to error message.
        Add error about including at least ctrl or alt.
        Uppercase DOCTYPE.

    commit af86761
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Apr 7 17:27:13 2019 -0700

        Move key validation into a validate() function prop

        Get rid of allowedModifiers, illegalCharacters, etc. regexes.
        Add optional error message to picker.
        Leave function keys uppercase.
        Don't repeatedly process the keydown while it repeats.
        Add screenshot of the Chrome shortcuts section of options.

    commit 87f6fd4
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Mar 24 11:55:06 2019 -0700

        Fix resetting keyboard shortcuts

        Rename handle-keys to popup-shortcuts.js.

    commit 2db0f45
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Mar 23 20:23:24 2019 -0700

        Use customized keyboard shortcuts in popup

        Handle space behavior setting.
        Add update() method to handle-keys.js.
        Add getDefaults() to settings module.
        Add fromPairs() to lodash.
        Rename navigateDown shortcut.

    commit dfb0540
    Author: John Dunning <fw@johndunning.com>
    Date:   Fri Mar 22 17:17:05 2019 -0700

        Add Chrome shortcuts to output of settings.get()

        Add keyboard shortcut IDs to constants.js and use in getDefaultSettings.
        Use shortcut IDs in keyboard-shortcuts.js.
        Move get-chrome-shortcuts.js to /background.

    commit d78961f
    Author: John Dunning <fw@johndunning.com>
    Date:   Fri Mar 22 12:02:29 2019 -0700

        Add esc behavior setting handling into popup/app.js

        Get current esc behavior setting from settings module.
        Separate settings constants into constants.js.
        Use constants to set up the radio buttons.

    commit 6aa2b2b
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Mar 16 15:58:33 2019 -0700

        Blur a focused shortcut picker when clearing another

        Tweak ctrl-tab page text.

    commit ff4af1c
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Mar 16 13:51:04 2019 -0700

        Refactor settings handling into settings.js

        OptionsAppContainer doesn't access storage now.
        Enable calling storage.get() to get the data in a then handler instead of passing in a callback.
        Clean up storage.
        Add settings.js.

    commit fa1c4ce
    Author: John Dunning <fw@johndunning.com>
    Date:   Fri Mar 15 19:01:06 2019 -0700

        Ignore Windows key presses in shortcut picker

    commit bb60669
    Author: John Dunning <fw@johndunning.com>
    Date:   Mon Mar 11 19:19:44 2019 -0700

        Fix regex for Mac Chrome shortcuts

    commit 74b3566
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Mar 10 20:02:45 2019 -0700

        Refactor getting Chrome shortcuts and local storage into app-container.js

        Save the settings changes in the local storage.
        Add support for passing a this arg to storage.get/set.
        Remove shortcut-defaults.js.

    commit 0b4c907
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Mar 9 19:29:56 2019 -0800

        Create a single instance of quickey-storage in the background tab using shared.js

        Require the popup and options trackers instead of getting them from the background page.
        Use shared with page-trackers.js and cp.js.
        Add shared.js.
        Remove background globals of the popup and options trackers.

    commit f4a1078
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Mar 9 17:01:21 2019 -0800

        Refactor Chrome shortcut handling into get-shortcuts.js

        Refactor default settings into get-default-settings.js so it can be called from the OptionsApp as well.
        Remove defaults and convertChromeShorts() from keyboard-shortcuts.js.

    commit 750c3aa
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Mar 9 14:56:57 2019 -0800

        Store shortcuts under data.settings in storage

        Support more Mac keyboard shortcuts, where the arrow keys are just single character symbols.
        Fix the closeTab and copyTitleURL shortcuts on Mac.
        Add some bold text to the shortcut labels.
        Refactor default keyboard shortcuts into shortcut-defaults.js.
        Remove special options/require-config.js.
        Pass the platform and settings into OptionsApp.

    commit 879d8dc
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Mar 3 15:17:41 2019 -0800

        Update storage to version 5 with keyboard shortcuts

        Use mod instead of checking IsMac when showing ctrl vs. cmd.
        Remove "shortcut" from the shortcut setting names.

    commit 6b43f5d
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Mar 2 14:34:28 2019 -0800

        Support how Chrome returns Mac keyboard shortcuts

        Use single character modifiers on Mac.
        Support custom placeholder text in ShortcutPicker.

    commit ebf02e1
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Feb 24 17:10:25 2019 -0800

        Refactor Key component

        Support more keys in <Key>, like page up/down, arrow keys, insert, etc.
        Convert the strings used for saving Chrome keyboard shortcuts to the same strings used in key codes.
        Change .char, .modifier, etc. into generic width classes.
        Rearrange Segoe fonts in font stack so left/right arrow emojis aren't used.
        Add key.js.
        Remove keys.js.

    commit ca9f0b2
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Feb 16 18:55:29 2019 -0800

        Add support for filtering illegal chars to ShortcutPicker

        Get Chrome browser action shortcut and use that to control which chars are allowed in the navigateDown shortcut.
        Turn navigateDown shortcut label into a function so it can change based on the Chrome shortcut.
        Rename shortcut IDs to start with "shortcut".
        Rename shortcuts.js to keyboard-shortcuts.js.

    commit 962cddf
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Feb 16 17:05:24 2019 -0800

        Send GA events from options page

        Add buttons to reset the shortcuts to the defaults and open ctrl-tab page.
        Support showing tab key in Chrome shortcuts.
        Tweak ctrl-tab page.
        Make logo higher res.

    commit 839f3da
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Feb 10 17:44:23 2019 -0800

        Clear other keyboard shortcuts if the new one is identical

        Add default keys to shortcuts.js and use them in getInitialState().
        Use OS-specific modifier strings in the returned shortcuts.
        Make shortcut picker wide enough for 4 keys.

    commit 754f850
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Feb 9 17:03:47 2019 -0800

        Enable ShortcutPicker to allow or require certain modifiers

        Enable clicking anywhere on Chrome shortcuts area to open the shortcuts page.
        Add info about incognito windows and a button to open extension details tab.
        Add createEmptyKeysArray() and getDefaultProps() methods.
        Convert Chrome shortcuts in main.js and pass them in as props to OptionsApp.
        Remove shortcut-setting.js and create the markup in options/app.js.
        Set a fixed width on the app so paragraphs wrap.
        Move the large key font-size to .shortcut-display instead of the picker, so the picker can be specified in normal-sized ems.

    commit cf757d4
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Feb 9 12:43:47 2019 -0800

        Wrap shortcut controls in list items

        Wrap labels in spans.
        Re-render options app when page is focused, so the Chrome keyboard shortcuts are updated to the latest.

    commit c18ff77
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Feb 3 19:23:18 2019 -0800

        Show Chrome keyboard shortcuts in options

        Add button to open Chrome keyboard shortcuts page, passed in from main.js.
        Refactor shortcut config into shortcuts.js.

    commit d058d6f
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Feb 2 17:26:29 2019 -0800

        Use radio buttons for the space key behavior

        Change manifest to use a separate tab for options.
        Add label to RadioGroup.
        Indent radio button elements.
        Add Esc key component.

    commit 9e9285e
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Feb 2 14:54:46 2019 -0800

        Add checkbox and radio button components

        Show uncustomizable, disabled keyboard shortcuts.
        Add enter key.
        Clean up header formatting.

    commit 21d8562
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Jan 27 19:14:34 2019 -0800

        Prevent certain modifiers in different shortcut pickers

    commit db9dbd1
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Jan 27 18:48:26 2019 -0800

        Add other shortcuts

        Change keys to <kbd> element.
        Center contents on page.
        Change root to a section.
        Tweak chrome-store-description.txt.

    commit 38748c4
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Jan 26 19:21:17 2019 -0800

        Fix clearing the shortcut on clicking the X

    commit a586f4c
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Jan 26 19:00:37 2019 -0800

        Create ShortcutSetting component with label

        Add onChange handler to ShortcutPicker.
        Store current shortcuts in OptionsApp state.
        Clean up shortcut picker rendering in the app.
        Rename event handlers.

    commit 996793d
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Jan 26 16:22:54 2019 -0800

        Save shortcut when single char is pressed

        Separate saved shortcut from pressed keys.
        Limit keys to single chars and function keys.
        Cancel shortcut on esc key.
        Add clear button and placeholder.
        Add hover state.
        Clean up CSS.

    commit 6e045be
    Author: John Dunning <fw@johndunning.com>
    Date:   Mon Jan 21 18:48:00 2019 -0800

        Handle pressed keys in ShortcutPicker

        Refactor key rendering to Shortcut component.
        Add options/require-config.js and text-orig.js, which should be temporary.

    commit 15a5dd5
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Jan 20 18:05:10 2019 -0800

        Create ShortcutPicker component

        Switch to div instead of button for keys.

    commit 5d09b74
    Author: John Dunning <fw@johndunning.com>
    Date:   Sun Jan 20 15:57:38 2019 -0800

        Add React to Options page

        Add app.js, keys.js, main.js for showing options UI.

    commit d842873
    Author: John Dunning <fw@johndunning.com>
    Date:   Sat Jan 12 18:33:04 2019 -0800

        Add styling for keycaps

        Add options.css.
        Fix domtype in popup.html.

commit f333fd1
Author: John Dunning <fw@johndunning.com>
Date:   Sat Jan 12 17:21:09 2019 -0800

    Tweak description text

commit 4d4bf32
Merge: 95d8e93 a1b47f1
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jan 6 16:21:39 2019 -0800

    Merge branch 'feature/intl-keyboards' into dev

commit a1b47f1
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jan 6 15:53:33 2019 -0800

    Switch to var in for loop instead of let

    Old Uglify can't handle it.

commit 097a7ef
Author: John Dunning <fw@johndunning.com>
Date:   Sun Jan 6 15:37:24 2019 -0800

    Add a comment

commit 4e6df92
Author: John Dunning <fw@johndunning.com>
Date:   Sat Jan 5 18:19:37 2019 -0800

    Fix other keyboard shortcuts

    Only use keyCode with A-Z and 0-9, so we don't do it with other keys like [, whose keyCode doesn't match its charCode.

commit b9ea0b5
Author: John Dunning <fw@johndunning.com>
Date:   Sat Jan 5 16:06:12 2019 -0800

    Fix key handling on non-QWERTY keyboards

    Use keyCode rather than key for normal keys.
    Clean up code.
    Switch to const/let.
fwextensions added a commit that referenced this issue Sep 1, 2019
Squashed commit of the following:

commit ee2c69a
Author: John Dunning <fw@johndunning.com>
Date:   Sat Aug 31 17:03:51 2019 -0700

    Update version to 1.1.1

    Update releases, privacy policy and main home page.
    Don't focus current window when opening closed tab.
    Clean up .ignore file.
    Remove closed.svg, which is no longer used.

commit 7879a9b
Merge: 399ead1 07610f7
Author: John Dunning <fw@johndunning.com>
Date:   Sat Aug 31 14:12:56 2019 -0700

    Merge branch 'bug/mac-focus-issue' into dev

commit 07610f7
Author: John Dunning <fw@johndunning.com>
Date:   Sat Aug 31 14:07:59 2019 -0700

    Change built test extension name

commit adbc45a
Author: John Dunning <fw@johndunning.com>
Date:   Sat Aug 24 17:18:26 2019 -0700

    Fix issue #5

    When focusing a tab, focus the window before focusing the tab, which seems to avoid focus issues on macOS.
    In popups, call promisified update() methods in a chain instead of the non-callback versions.
    Remove code for opening options page after upgrade to 1.1.0.
    Check for error.lineno when tracking an exception, so we don't send undefineds.

commit 399ead1
Author: John Dunning <fw@johndunning.com>
Date:   Fri Aug 23 18:44:15 2019 -0700

    Merge pull request #7 from haokuixi/master

    Fix focus issue
@fwextensions
Copy link
Owner

Thanks for confirming.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants