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

Thumbnails are ordered by z-axis, not recently-used-first #24

Closed
lwouis opened this issue Oct 15, 2019 · 7 comments
Closed

Thumbnails are ordered by z-axis, not recently-used-first #24

lwouis opened this issue Oct 15, 2019 · 7 comments
Labels
bug Something isn't working

Comments

@lwouis
Copy link
Owner

lwouis commented Oct 15, 2019

If you switch to an app via the dock icon, all windows of that app become ‘recently used’ in the alt-tab menu.

The documentation for the kCGWindowListOptionOnScreenOnly constant says:

List all windows that are currently onscreen. Windows are returned in order from front to back. When retrieving a list with this option, the relativeToWindow parameter should be set to kCGNullWindowID.

Original author on this HackerNews thread

@lwouis lwouis added the L size label Oct 17, 2019
@lwouis lwouis changed the title Potential issue with windows order after minimizing Recently-used thumbnail order is wrong after clicking dock icon Oct 26, 2019
@lwouis lwouis added the bug Something isn't working label Oct 26, 2019
@lwouis
Copy link
Owner Author

lwouis commented Oct 26, 2019

The order is entirely handled by macOS. I mean the API used to retrieve the windows is already ordered by recent use. That means that the only solution to workaround this issue would be to handle the order on our side. This has 2 issues:

  1. When launching alt-tab, the app has no way to know what preceded its launch, so previous order is still up to the system so still the issue will exist at that point in time.

  2. We would rely on other OS APIs to know when another window is focused. Maybe these APIs don't exist. Maybe these APIs are expensive and we would be taxing the machine performance/battery spying on every event from other apps.

@lwouis lwouis changed the title Recently-used thumbnail order is wrong after clicking dock icon Thumbnails are ordered by z-axis, not recently-used-first Oct 26, 2019
@lwouis
Copy link
Owner Author

lwouis commented Oct 28, 2019

I tested and both HyperSwitch and WindowSwitcher have the same issue.

@lwouis
Copy link
Owner Author

lwouis commented Jan 5, 2020

I'm investigating doing a big rewrite for v3. That would involve stopping the use of the CG (CoreGraphics) family of APIs in favor of AX (Accessibility) APIs.

How I imagine it: the app boots, then looks in the current Space for all running apps. It then use AXObserver to observe all those apps for changes such as quitting the app, closing/opening a window, and changing focus to another window. Using these deltas, we can build a chronology of windows the user interacted with. Moving to another space would also be listened to, and would trigger the app to check if the space has been visited before, and if no, observe everything there.

This approach would close this ticket, as well as provide a more robust foundation going forward, as we are currently sitting on top of a pile of hacks.

The downside would be that on startup, we don't have a complete view of the system (i.e. other spaces contents). However I would argue that it's ok. We can add "launch on startup" to the app, and the problem fixes itself as the user uses the OS and the app catches up with what the system state in other spaces.

lwouis pushed a commit that referenced this issue Jan 8, 2020
closes #93 closes #24

BREAKING CHANGE: Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.

More context: #45 (comment)
@lwouis lwouis mentioned this issue Jan 8, 2020
lwouis pushed a commit that referenced this issue Jan 9, 2020
closes #93 closes #24

BREAKING CHANGE: Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.

More context: #45 (comment)
lwouis pushed a commit that referenced this issue Jan 9, 2020
closes #93 closes #24

BREAKING CHANGE: Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.

More context: #45 (comment)
lwouis pushed a commit that referenced this issue Jan 23, 2020
closes #93 closes #24 closes #117

BREAKING CHANGE: Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.

More context: #45 (comment)
@lwouis lwouis removed the L size label Jan 24, 2020
@mckennajones
Copy link

Hey @lwouis, really been loving this tool, so thanks for all the work you've put into it. I was hoping to outline a use case that might be covered by the rewrite you mentioned above.

I often find myself alt-tabbing between spaces using your tool. Let's say I'm in space A, then I alt-tab to an application in space B. Ideally, if I alt-tab again the first application in the list would be the one I came from in space A. But, if space B has other applications open, then those will be shown before my app in space A.

It seems like the same issue here is that the apps are not ordered by the order in which they were recently used.

@lwouis
Copy link
Owner Author

lwouis commented Feb 7, 2020

@mckennajones hi and thanks for the feedback!

In v3, i implemented the behavior you describe. Basically time-based instead of z-index based. Once v3 is released (as soon as we have an icon ready in #99), you will be able to switch spaces and go back to a previous space without the space switch messing the time-based ordering :)

@mckennajones
Copy link

@lwouis wonderful! I'll anxiously be awaiting that release :)

@lwouis lwouis closed this as completed in 547311e Mar 10, 2020
lwouis pushed a commit that referenced this issue Mar 10, 2020
# [2.4.0](v2.3.4...v2.4.0) (2020-03-10)

### Bug Fixes

* a title change often means the content has change ([b8d6bc9](b8d6bc9))
* add rough downscaling when there are many windows (closes [#69](#69)) ([ced5ee6](ced5ee6))
* added releases link and aligned layout left on tab 3 ([6bb73dc](6bb73dc))
* also codesign debug builds ([a5f9911](a5f9911))
* app launched while in fullscreen shows first window ([c5cbcdb](c5cbcdb)), closes [/github.com//pull/114#issuecomment-576384795](https://github.com//github.com/lwouis/alt-tab-macos/pull/114/issues/issuecomment-576384795)
* auto-update preferences sync with os from launch ([b3fb222](b3fb222))
* avoid rendering if app is not used ([fdddb0f](fdddb0f))
* better float rounding = sharper cell contents ([9a96e49](9a96e49))
* better focus/order for preferences (closes [#80](#80)) ([4a8bdeb](4a8bdeb))
* better textareas ([efc9bd3](efc9bd3))
* bring back the window delay that regressed with v2 ([bb95e55](bb95e55))
* compare correctly since pid can go away when an app dies ([4ded030](4ded030))
* compiler warnings ([1faa74c](1faa74c))
* cpu and memory leaks (see discussion in [#117](#117)) ([52626aa](52626aa))
* dock being shown was blocking alt-tab ([2826a1b](2826a1b))
* don't show floating windows + efficiencies ([3f8e3ea](3f8e3ea))
* don't show ui on fast trigger ([f8e1b00](f8e1b00))
* don't trigger ui refreshes if the app is not active ([b9a0152](b9a0152))
* don't upscale thumbnails of small windows ([0bc7472](0bc7472))
* feedback token injected during ci ([effdc5f](effdc5f))
* getting sparkle ready for release ([9f1f522](9f1f522))
* handle on-all-spaces windows better ([4abe9f3](4abe9f3))
* ignore build folder ([a2bb19f](a2bb19f))
* ignore trigger shortcuts if mission control is active ([b03b0aa](b03b0aa))
* initial discovery when single space was glitching the os ([3cd4b6d](3cd4b6d))
* keyboard shortcuts didn't work without a menu ([cf92dc1](cf92dc1))
* layout is now correct; also removed layout preferences for now ([a1b5266](a1b5266))
* layout regression introduced by eed0353 ([bdc41be](bdc41be))
* layout was incorrect resulting in thumbnails clipping ([fd906f4](fd906f4))
* letsmove was not active on release builds ([6ac0658](6ac0658))
* list temporary AXDialog windows like activity monitor ([51a8838](51a8838))
* more robust screen-recording permission check ([ce574a2](ce574a2))
* notarization issues ([d125dd3](d125dd3))
* observer leak would throw and crash the app sometimes ([9ca28eb](9ca28eb))
* only test permissions on the correct os versions ([4612e37](4612e37))
* open alt-tab during space transitions (closes [#92](#92)) ([141562d](141562d))
* prevent visual flickering (closes [#115](#115)) ([9a8c83e](9a8c83e))
* quitting apps was not properly removing apps from the list ([10b2c71](10b2c71))
* quitting multiple apps would refresh the ui multiple times ([bfc2700](bfc2700))
* regression on collectionviewitem titles (not showing) ([8cb6d86](8cb6d86))
* remove debug colors ([e588d55](e588d55))
* remove unnecessary/wrong layout code ([9e719e6](9e719e6))
* sharper images on non-retina displays ([1bb4d2a](1bb4d2a))
* smaller payload for the icons ([bddb6fa](bddb6fa))
* some apps have messy launch behavior ([7eb216d](7eb216d)), closes [/github.com//issues/117#issuecomment-583868046](https://github.com//github.com/lwouis/alt-tab-macos/issues/117/issues/issuecomment-583868046)
* some apps should retry observing until it works ([0c731f4](0c731f4))
* using floor() everywhere to avoid blurry rendering ([2a36196](2a36196))

### Code Refactoring

* complete rework of the internals ([547311e](547311e)), closes [#93](#93) [#24](#24) [#117](#117) [/github.com//issues/45#issuecomment-571898826](https://github.com//github.com/lwouis/alt-tab-macos/issues/45/issues/issuecomment-571898826)

### Features

* add an app icon and menubar icon (closes [#38](#38)) ([a345dae](a345dae))
* add back the preferences for the new layout algo ([d52eb6d](d52eb6d))
* add debug profile to feedback message ([a14f965](a14f965))
* add feedback button on about window ([4046136](4046136))
* add in-app feedback form (closes [#145](#145)) ([725a030](725a030))
* add licence to about page ([cb66b79](cb66b79))
* add preference to start at login (closes [#159](#159)) ([982fe6c](982fe6c))
* adding cocoapods and letsmove/sparkle ([606bae7](606bae7))
* better packing; tall thumbnails are 1/2 the width of wide ones ([e34e3b1](e34e3b1))
* cleaner layout and explanation text ([fd3e768](fd3e768))
* debug build has code-signing to preserve permissions ([34a32f3](34a32f3))
* divide preferences by topic (closes [#130](#130)) ([291f872](291f872))
* drag-and-drop files on the ui (closes [#74](#74)) ([e1e3633](e1e3633))
* german and spanish localization ([6c440a7](6c440a7))
* improved translations ([debd3ae](debd3ae))
* integrate sparkle for auto-updates (closes [#131](#131)) ([069382c](069382c))
* localization (closes [#134](#134)) ([36e4bb0](36e4bb0))
* make system calls more parallel (closes [#160](#160)) ([a29b39f](a29b39f))
* migrate to standard os-backed preferences (closes [#161](#161)) ([e28c43f](e28c43f))
* more appealing presentation + minor refac ([67f291d](67f291d))
* nicer layout for about preferences ([03a5f77](03a5f77))
* quit button is clearer with explicit mention of the name ([6b6d748](6b6d748))
* replace default copyright with correct licence ([60b49ea](60b49ea))
* separating the quit button as it is a special case ([9fa0c06](9fa0c06))
* slightly increase contrast (mitigates [#82](#82)) ([291770e](291770e))
* support macos "sudden termination" ([671fdab](671fdab)), closes [/developer.apple.com/documentation/foundation/processinfo#1651129](https://github.com//developer.apple.com/documentation/foundation/processinfo/issues/1651129)

### BREAKING CHANGES

* Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.
lwouis pushed a commit that referenced this issue Mar 10, 2020
# [3.0.0](v2.3.4...v3.0.0) (2020-03-10)

### Bug Fixes

* a title change often means the content has change ([b8d6bc9](b8d6bc9))
* add rough downscaling when there are many windows (closes [#69](#69)) ([ced5ee6](ced5ee6))
* added releases link and aligned layout left on tab 3 ([6bb73dc](6bb73dc))
* also codesign debug builds ([a5f9911](a5f9911))
* app launched while in fullscreen shows first window ([c5cbcdb](c5cbcdb)), closes [/github.com//pull/114#issuecomment-576384795](https://github.com//github.com/lwouis/alt-tab-macos/pull/114/issues/issuecomment-576384795)
* auto-update preferences sync with os from launch ([b3fb222](b3fb222))
* avoid rendering if app is not used ([fdddb0f](fdddb0f))
* better float rounding = sharper cell contents ([9a96e49](9a96e49))
* better focus/order for preferences (closes [#80](#80)) ([4a8bdeb](4a8bdeb))
* better textareas ([efc9bd3](efc9bd3))
* bring back the window delay that regressed with v2 ([bb95e55](bb95e55))
* compare correctly since pid can go away when an app dies ([4ded030](4ded030))
* compiler warnings ([1faa74c](1faa74c))
* cpu and memory leaks (see discussion in [#117](#117)) ([52626aa](52626aa))
* dock being shown was blocking alt-tab ([2826a1b](2826a1b))
* don't show floating windows + efficiencies ([3f8e3ea](3f8e3ea))
* don't show ui on fast trigger ([f8e1b00](f8e1b00))
* don't trigger ui refreshes if the app is not active ([b9a0152](b9a0152))
* don't upscale thumbnails of small windows ([0bc7472](0bc7472))
* feedback token injected during ci ([effdc5f](effdc5f))
* getting sparkle ready for release ([9f1f522](9f1f522))
* handle on-all-spaces windows better ([4abe9f3](4abe9f3))
* ignore build folder ([a2bb19f](a2bb19f))
* ignore trigger shortcuts if mission control is active ([b03b0aa](b03b0aa))
* initial discovery when single space was glitching the os ([3cd4b6d](3cd4b6d))
* keyboard shortcuts didn't work without a menu ([cf92dc1](cf92dc1))
* layout is now correct; also removed layout preferences for now ([a1b5266](a1b5266))
* layout regression introduced by eed0353 ([bdc41be](bdc41be))
* layout was incorrect resulting in thumbnails clipping ([fd906f4](fd906f4))
* letsmove was not active on release builds ([6ac0658](6ac0658))
* list temporary AXDialog windows like activity monitor ([51a8838](51a8838))
* more robust screen-recording permission check ([ce574a2](ce574a2))
* notarization issues ([d125dd3](d125dd3))
* observer leak would throw and crash the app sometimes ([9ca28eb](9ca28eb))
* only test permissions on the correct os versions ([4612e37](4612e37))
* open alt-tab during space transitions (closes [#92](#92)) ([141562d](141562d))
* prevent visual flickering (closes [#115](#115)) ([9a8c83e](9a8c83e))
* quitting apps was not properly removing apps from the list ([10b2c71](10b2c71))
* quitting multiple apps would refresh the ui multiple times ([bfc2700](bfc2700))
* regression on collectionviewitem titles (not showing) ([8cb6d86](8cb6d86))
* remove debug colors ([e588d55](e588d55))
* remove unnecessary/wrong layout code ([9e719e6](9e719e6))
* sharper images on non-retina displays ([1bb4d2a](1bb4d2a))
* smaller payload for the icons ([bddb6fa](bddb6fa))
* some apps have messy launch behavior ([7eb216d](7eb216d)), closes [/github.com//issues/117#issuecomment-583868046](https://github.com//github.com/lwouis/alt-tab-macos/issues/117/issues/issuecomment-583868046)
* some apps should retry observing until it works ([0c731f4](0c731f4))
* using floor() everywhere to avoid blurry rendering ([2a36196](2a36196))

### Code Refactoring

* complete rework of the internals ([547311e](547311e)), closes [#93](#93) [#24](#24) [#117](#117) [/github.com//issues/45#issuecomment-571898826](https://github.com//github.com/lwouis/alt-tab-macos/issues/45/issues/issuecomment-571898826)

### Features

* add an app icon and menubar icon (closes [#38](#38)) ([a345dae](a345dae))
* add back the preferences for the new layout algo ([d52eb6d](d52eb6d))
* add debug profile to feedback message ([a14f965](a14f965))
* add feedback button on about window ([4046136](4046136))
* add in-app feedback form (closes [#145](#145)) ([725a030](725a030))
* add licence to about page ([cb66b79](cb66b79))
* add preference to start at login (closes [#159](#159)) ([982fe6c](982fe6c))
* adding cocoapods and letsmove/sparkle ([606bae7](606bae7))
* better packing; tall thumbnails are 1/2 the width of wide ones ([e34e3b1](e34e3b1))
* bump major version ([3c3b18c](3c3b18c))
* cleaner layout and explanation text ([fd3e768](fd3e768))
* debug build has code-signing to preserve permissions ([34a32f3](34a32f3))
* divide preferences by topic (closes [#130](#130)) ([291f872](291f872))
* drag-and-drop files on the ui (closes [#74](#74)) ([e1e3633](e1e3633))
* german and spanish localization ([6c440a7](6c440a7))
* improved translations ([debd3ae](debd3ae))
* integrate sparkle for auto-updates (closes [#131](#131)) ([069382c](069382c))
* localization (closes [#134](#134)) ([36e4bb0](36e4bb0))
* make system calls more parallel (closes [#160](#160)) ([a29b39f](a29b39f))
* migrate to standard os-backed preferences (closes [#161](#161)) ([e28c43f](e28c43f))
* more appealing presentation + minor refac ([67f291d](67f291d))
* nicer layout for about preferences ([03a5f77](03a5f77))
* quit button is clearer with explicit mention of the name ([6b6d748](6b6d748))
* replace default copyright with correct licence ([60b49ea](60b49ea))
* separating the quit button as it is a special case ([9fa0c06](9fa0c06))
* slightly increase contrast (mitigates [#82](#82)) ([291770e](291770e))
* support macos "sudden termination" ([671fdab](671fdab)), closes [/developer.apple.com/documentation/foundation/processinfo#1651129](https://github.com//developer.apple.com/documentation/foundation/processinfo/issues/1651129)

### BREAKING CHANGES

* bump major version
* Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.
lwouis pushed a commit that referenced this issue Mar 10, 2020
# [3.0.0](v2.3.4...v3.0.0) (2020-03-10)

### Bug Fixes

* a title change often means the content has change ([b8d6bc9](b8d6bc9))
* add rough downscaling when there are many windows (closes [#69](#69)) ([ced5ee6](ced5ee6))
* added releases link and aligned layout left on tab 3 ([6bb73dc](6bb73dc))
* also codesign debug builds ([a5f9911](a5f9911))
* app launched while in fullscreen shows first window ([c5cbcdb](c5cbcdb)), closes [/github.com//pull/114#issuecomment-576384795](https://github.com//github.com/lwouis/alt-tab-macos/pull/114/issues/issuecomment-576384795)
* auto-update preferences sync with os from launch ([b3fb222](b3fb222))
* avoid rendering if app is not used ([fdddb0f](fdddb0f))
* better float rounding = sharper cell contents ([9a96e49](9a96e49))
* better focus/order for preferences (closes [#80](#80)) ([4a8bdeb](4a8bdeb))
* better textareas ([efc9bd3](efc9bd3))
* bring back the window delay that regressed with v2 ([bb95e55](bb95e55))
* compare correctly since pid can go away when an app dies ([4ded030](4ded030))
* compiler warnings ([1faa74c](1faa74c))
* cpu and memory leaks (see discussion in [#117](#117)) ([52626aa](52626aa))
* dock being shown was blocking alt-tab ([2826a1b](2826a1b))
* don't show floating windows + efficiencies ([3f8e3ea](3f8e3ea))
* don't show ui on fast trigger ([f8e1b00](f8e1b00))
* don't trigger ui refreshes if the app is not active ([b9a0152](b9a0152))
* don't upscale thumbnails of small windows ([0bc7472](0bc7472))
* feedback token injected during ci ([effdc5f](effdc5f))
* getting sparkle ready for release ([9f1f522](9f1f522))
* handle on-all-spaces windows better ([4abe9f3](4abe9f3))
* ignore build folder ([a2bb19f](a2bb19f))
* ignore trigger shortcuts if mission control is active ([b03b0aa](b03b0aa))
* initial discovery when single space was glitching the os ([3cd4b6d](3cd4b6d))
* keyboard shortcuts didn't work without a menu ([cf92dc1](cf92dc1))
* layout is now correct; also removed layout preferences for now ([a1b5266](a1b5266))
* layout regression introduced by eed0353 ([bdc41be](bdc41be))
* layout was incorrect resulting in thumbnails clipping ([fd906f4](fd906f4))
* letsmove was not active on release builds ([6ac0658](6ac0658))
* list temporary AXDialog windows like activity monitor ([51a8838](51a8838))
* more robust screen-recording permission check ([ce574a2](ce574a2))
* notarization issues ([d125dd3](d125dd3))
* observer leak would throw and crash the app sometimes ([9ca28eb](9ca28eb))
* only test permissions on the correct os versions ([4612e37](4612e37))
* open alt-tab during space transitions (closes [#92](#92)) ([141562d](141562d))
* prevent visual flickering (closes [#115](#115)) ([9a8c83e](9a8c83e))
* quitting apps was not properly removing apps from the list ([10b2c71](10b2c71))
* quitting multiple apps would refresh the ui multiple times ([bfc2700](bfc2700))
* regression on collectionviewitem titles (not showing) ([8cb6d86](8cb6d86))
* remove debug colors ([e588d55](e588d55))
* remove unnecessary/wrong layout code ([9e719e6](9e719e6))
* sharper images on non-retina displays ([1bb4d2a](1bb4d2a))
* smaller payload for the icons ([bddb6fa](bddb6fa))
* some apps have messy launch behavior ([7eb216d](7eb216d)), closes [/github.com//issues/117#issuecomment-583868046](https://github.com//github.com/lwouis/alt-tab-macos/issues/117/issues/issuecomment-583868046)
* some apps should retry observing until it works ([0c731f4](0c731f4))
* using floor() everywhere to avoid blurry rendering ([2a36196](2a36196))

### Code Refactoring

* complete rework of the internals ([547311e](547311e)), closes [#93](#93) [#24](#24) [#117](#117) [/github.com//issues/45#issuecomment-571898826](https://github.com//github.com/lwouis/alt-tab-macos/issues/45/issues/issuecomment-571898826)

### Features

* add an app icon and menubar icon (closes [#38](#38)) ([a345dae](a345dae))
* add back the preferences for the new layout algo ([d52eb6d](d52eb6d))
* add debug profile to feedback message ([a14f965](a14f965))
* add feedback button on about window ([4046136](4046136))
* add in-app feedback form (closes [#145](#145)) ([725a030](725a030))
* add licence to about page ([cb66b79](cb66b79))
* add preference to start at login (closes [#159](#159)) ([982fe6c](982fe6c))
* adding cocoapods and letsmove/sparkle ([606bae7](606bae7))
* better packing; tall thumbnails are 1/2 the width of wide ones ([e34e3b1](e34e3b1))
* bump major version ([3c3b18c](3c3b18c))
* cleaner layout and explanation text ([fd3e768](fd3e768))
* debug build has code-signing to preserve permissions ([34a32f3](34a32f3))
* divide preferences by topic (closes [#130](#130)) ([291f872](291f872))
* drag-and-drop files on the ui (closes [#74](#74)) ([e1e3633](e1e3633))
* german and spanish localization ([6c440a7](6c440a7))
* improved translations ([debd3ae](debd3ae))
* integrate sparkle for auto-updates (closes [#131](#131)) ([069382c](069382c))
* localization (closes [#134](#134)) ([36e4bb0](36e4bb0))
* make system calls more parallel (closes [#160](#160)) ([a29b39f](a29b39f))
* migrate to standard os-backed preferences (closes [#161](#161)) ([e28c43f](e28c43f))
* more appealing presentation + minor refac ([67f291d](67f291d))
* nicer layout for about preferences ([03a5f77](03a5f77))
* quit button is clearer with explicit mention of the name ([6b6d748](6b6d748))
* replace default copyright with correct licence ([60b49ea](60b49ea))
* separating the quit button as it is a special case ([9fa0c06](9fa0c06))
* slightly increase contrast (mitigates [#82](#82)) ([291770e](291770e))
* support macos "sudden termination" ([671fdab](671fdab)), closes [/developer.apple.com/documentation/foundation/processinfo#1651129](https://github.com//developer.apple.com/documentation/foundation/processinfo/issues/1651129)

### BREAKING CHANGES

* bump major version
* Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.
lwouis pushed a commit that referenced this issue Mar 10, 2020
# [3.0.0](v2.3.4...v3.0.0) (2020-03-10)

### Bug Fixes

* a title change often means the content has change ([b8d6bc9](b8d6bc9))
* add rough downscaling when there are many windows (closes [#69](#69)) ([ced5ee6](ced5ee6))
* added releases link and aligned layout left on tab 3 ([6bb73dc](6bb73dc))
* also codesign debug builds ([a5f9911](a5f9911))
* app launched while in fullscreen shows first window ([c5cbcdb](c5cbcdb)), closes [/github.com//pull/114#issuecomment-576384795](https://github.com//github.com/lwouis/alt-tab-macos/pull/114/issues/issuecomment-576384795)
* auto-update preferences sync with os from launch ([b3fb222](b3fb222))
* avoid rendering if app is not used ([fdddb0f](fdddb0f))
* better float rounding = sharper cell contents ([9a96e49](9a96e49))
* better focus/order for preferences (closes [#80](#80)) ([4a8bdeb](4a8bdeb))
* better textareas ([efc9bd3](efc9bd3))
* bring back the window delay that regressed with v2 ([bb95e55](bb95e55))
* compare correctly since pid can go away when an app dies ([4ded030](4ded030))
* compiler warnings ([1faa74c](1faa74c))
* cpu and memory leaks (see discussion in [#117](#117)) ([52626aa](52626aa))
* dock being shown was blocking alt-tab ([2826a1b](2826a1b))
* don't show floating windows + efficiencies ([3f8e3ea](3f8e3ea))
* don't show ui on fast trigger ([f8e1b00](f8e1b00))
* don't trigger ui refreshes if the app is not active ([b9a0152](b9a0152))
* don't upscale thumbnails of small windows ([0bc7472](0bc7472))
* feedback token injected during ci ([effdc5f](effdc5f))
* getting sparkle ready for release ([9f1f522](9f1f522))
* handle on-all-spaces windows better ([4abe9f3](4abe9f3))
* ignore build folder ([a2bb19f](a2bb19f))
* ignore trigger shortcuts if mission control is active ([b03b0aa](b03b0aa))
* initial discovery when single space was glitching the os ([3cd4b6d](3cd4b6d))
* keyboard shortcuts didn't work without a menu ([cf92dc1](cf92dc1))
* layout is now correct; also removed layout preferences for now ([a1b5266](a1b5266))
* layout regression introduced by eed0353 ([bdc41be](bdc41be))
* layout was incorrect resulting in thumbnails clipping ([fd906f4](fd906f4))
* letsmove was not active on release builds ([6ac0658](6ac0658))
* list temporary AXDialog windows like activity monitor ([51a8838](51a8838))
* more robust screen-recording permission check ([ce574a2](ce574a2))
* notarization issues ([d125dd3](d125dd3))
* observer leak would throw and crash the app sometimes ([9ca28eb](9ca28eb))
* only test permissions on the correct os versions ([4612e37](4612e37))
* open alt-tab during space transitions (closes [#92](#92)) ([141562d](141562d))
* prevent visual flickering (closes [#115](#115)) ([9a8c83e](9a8c83e))
* quitting apps was not properly removing apps from the list ([10b2c71](10b2c71))
* quitting multiple apps would refresh the ui multiple times ([bfc2700](bfc2700))
* regression on collectionviewitem titles (not showing) ([8cb6d86](8cb6d86))
* remove debug colors ([e588d55](e588d55))
* remove unnecessary/wrong layout code ([9e719e6](9e719e6))
* sharper images on non-retina displays ([1bb4d2a](1bb4d2a))
* smaller payload for the icons ([bddb6fa](bddb6fa))
* some apps have messy launch behavior ([7eb216d](7eb216d)), closes [/github.com//issues/117#issuecomment-583868046](https://github.com//github.com/lwouis/alt-tab-macos/issues/117/issues/issuecomment-583868046)
* some apps should retry observing until it works ([0c731f4](0c731f4))
* using floor() everywhere to avoid blurry rendering ([2a36196](2a36196))

### Code Refactoring

* complete rework of the internals ([547311e](547311e)), closes [#93](#93) [#24](#24) [#117](#117) [/github.com//issues/45#issuecomment-571898826](https://github.com//github.com/lwouis/alt-tab-macos/issues/45/issues/issuecomment-571898826)

### Features

* add an app icon and menubar icon (closes [#38](#38)) ([a345dae](a345dae))
* add back the preferences for the new layout algo ([d52eb6d](d52eb6d))
* add debug profile to feedback message ([a14f965](a14f965))
* add feedback button on about window ([4046136](4046136))
* add in-app feedback form (closes [#145](#145)) ([725a030](725a030))
* add licence to about page ([cb66b79](cb66b79))
* add preference to start at login (closes [#159](#159)) ([982fe6c](982fe6c))
* adding cocoapods and letsmove/sparkle ([606bae7](606bae7))
* better packing; tall thumbnails are 1/2 the width of wide ones ([e34e3b1](e34e3b1))
* bump major version ([3c3b18c](3c3b18c))
* cleaner layout and explanation text ([fd3e768](fd3e768))
* debug build has code-signing to preserve permissions ([34a32f3](34a32f3))
* divide preferences by topic (closes [#130](#130)) ([291f872](291f872))
* drag-and-drop files on the ui (closes [#74](#74)) ([e1e3633](e1e3633))
* german and spanish localization ([6c440a7](6c440a7))
* improved translations ([debd3ae](debd3ae))
* integrate sparkle for auto-updates (closes [#131](#131)) ([069382c](069382c))
* localization (closes [#134](#134)) ([36e4bb0](36e4bb0))
* make system calls more parallel (closes [#160](#160)) ([a29b39f](a29b39f))
* migrate to standard os-backed preferences (closes [#161](#161)) ([e28c43f](e28c43f))
* more appealing presentation + minor refac ([67f291d](67f291d))
* nicer layout for about preferences ([03a5f77](03a5f77))
* quit button is clearer with explicit mention of the name ([6b6d748](6b6d748))
* replace default copyright with correct licence ([60b49ea](60b49ea))
* separating the quit button as it is a special case ([9fa0c06](9fa0c06))
* slightly increase contrast (mitigates [#82](#82)) ([291770e](291770e))
* support macos "sudden termination" ([671fdab](671fdab)), closes [/developer.apple.com/documentation/foundation/processinfo#1651129](https://github.com//developer.apple.com/documentation/foundation/processinfo/issues/1651129)

### BREAKING CHANGES

* bump major version
* Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.
lwouis pushed a commit that referenced this issue Mar 10, 2020
# [3.0.0](v2.3.4...v3.0.0) (2020-03-10)

### Bug Fixes

* a title change often means the content has change ([b8d6bc9](b8d6bc9))
* add rough downscaling when there are many windows (closes [#69](#69)) ([ced5ee6](ced5ee6))
* added releases link and aligned layout left on tab 3 ([6bb73dc](6bb73dc))
* also codesign debug builds ([a5f9911](a5f9911))
* app launched while in fullscreen shows first window ([c5cbcdb](c5cbcdb)), closes [/github.com//pull/114#issuecomment-576384795](https://github.com//github.com/lwouis/alt-tab-macos/pull/114/issues/issuecomment-576384795)
* auto-update preferences sync with os from launch ([b3fb222](b3fb222))
* avoid rendering if app is not used ([fdddb0f](fdddb0f))
* better float rounding = sharper cell contents ([9a96e49](9a96e49))
* better focus/order for preferences (closes [#80](#80)) ([4a8bdeb](4a8bdeb))
* better textareas ([efc9bd3](efc9bd3))
* bring back the window delay that regressed with v2 ([bb95e55](bb95e55))
* compare correctly since pid can go away when an app dies ([4ded030](4ded030))
* compiler warnings ([1faa74c](1faa74c))
* cpu and memory leaks (see discussion in [#117](#117)) ([52626aa](52626aa))
* dock being shown was blocking alt-tab ([2826a1b](2826a1b))
* don't show floating windows + efficiencies ([3f8e3ea](3f8e3ea))
* don't show ui on fast trigger ([f8e1b00](f8e1b00))
* don't trigger ui refreshes if the app is not active ([b9a0152](b9a0152))
* don't upscale thumbnails of small windows ([0bc7472](0bc7472))
* feedback token injected during ci ([effdc5f](effdc5f))
* getting sparkle ready for release ([9f1f522](9f1f522))
* handle on-all-spaces windows better ([4abe9f3](4abe9f3))
* ignore build folder ([a2bb19f](a2bb19f))
* ignore trigger shortcuts if mission control is active ([b03b0aa](b03b0aa))
* initial discovery when single space was glitching the os ([3cd4b6d](3cd4b6d))
* keyboard shortcuts didn't work without a menu ([cf92dc1](cf92dc1))
* layout is now correct; also removed layout preferences for now ([a1b5266](a1b5266))
* layout regression introduced by eed0353 ([bdc41be](bdc41be))
* layout was incorrect resulting in thumbnails clipping ([fd906f4](fd906f4))
* letsmove was not active on release builds ([6ac0658](6ac0658))
* list temporary AXDialog windows like activity monitor ([51a8838](51a8838))
* more robust screen-recording permission check ([ce574a2](ce574a2))
* notarization issues ([d125dd3](d125dd3))
* observer leak would throw and crash the app sometimes ([9ca28eb](9ca28eb))
* only test permissions on the correct os versions ([4612e37](4612e37))
* open alt-tab during space transitions (closes [#92](#92)) ([141562d](141562d))
* prevent visual flickering (closes [#115](#115)) ([9a8c83e](9a8c83e))
* quitting apps was not properly removing apps from the list ([10b2c71](10b2c71))
* quitting multiple apps would refresh the ui multiple times ([bfc2700](bfc2700))
* regression on collectionviewitem titles (not showing) ([8cb6d86](8cb6d86))
* remove debug colors ([e588d55](e588d55))
* remove unnecessary/wrong layout code ([9e719e6](9e719e6))
* sharper images on non-retina displays ([1bb4d2a](1bb4d2a))
* smaller payload for the icons ([bddb6fa](bddb6fa))
* some apps have messy launch behavior ([7eb216d](7eb216d)), closes [/github.com//issues/117#issuecomment-583868046](https://github.com//github.com/lwouis/alt-tab-macos/issues/117/issues/issuecomment-583868046)
* some apps should retry observing until it works ([0c731f4](0c731f4))
* using floor() everywhere to avoid blurry rendering ([2a36196](2a36196))

### Code Refactoring

* complete rework of the internals ([547311e](547311e)), closes [#93](#93) [#24](#24) [#117](#117) [/github.com//issues/45#issuecomment-571898826](https://github.com//github.com/lwouis/alt-tab-macos/issues/45/issues/issuecomment-571898826)

### Features

* add an app icon and menubar icon (closes [#38](#38)) ([a345dae](a345dae))
* add back the preferences for the new layout algo ([d52eb6d](d52eb6d))
* add debug profile to feedback message ([a14f965](a14f965))
* add feedback button on about window ([4046136](4046136))
* add in-app feedback form (closes [#145](#145)) ([725a030](725a030))
* add licence to about page ([cb66b79](cb66b79))
* add preference to start at login (closes [#159](#159)) ([982fe6c](982fe6c))
* adding cocoapods and letsmove/sparkle ([606bae7](606bae7))
* better packing; tall thumbnails are 1/2 the width of wide ones ([e34e3b1](e34e3b1))
* bump major version ([3c3b18c](3c3b18c))
* cleaner layout and explanation text ([fd3e768](fd3e768))
* debug build has code-signing to preserve permissions ([34a32f3](34a32f3))
* divide preferences by topic (closes [#130](#130)) ([291f872](291f872))
* drag-and-drop files on the ui (closes [#74](#74)) ([e1e3633](e1e3633))
* german and spanish localization ([6c440a7](6c440a7))
* improved translations ([debd3ae](debd3ae))
* integrate sparkle for auto-updates (closes [#131](#131)) ([069382c](069382c))
* localization (closes [#134](#134)) ([36e4bb0](36e4bb0))
* make system calls more parallel (closes [#160](#160)) ([a29b39f](a29b39f))
* migrate to standard os-backed preferences (closes [#161](#161)) ([e28c43f](e28c43f))
* more appealing presentation + minor refac ([67f291d](67f291d))
* nicer layout for about preferences ([03a5f77](03a5f77))
* quit button is clearer with explicit mention of the name ([6b6d748](6b6d748))
* replace default copyright with correct licence ([60b49ea](60b49ea))
* separating the quit button as it is a special case ([9fa0c06](9fa0c06))
* slightly increase contrast (mitigates [#82](#82)) ([291770e](291770e))
* support macos "sudden termination" ([671fdab](671fdab)), closes [/developer.apple.com/documentation/foundation/processinfo#1651129](https://github.com//developer.apple.com/documentation/foundation/processinfo/issues/1651129)

### BREAKING CHANGES

* bump major version
* Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.
lwouis pushed a commit that referenced this issue Mar 10, 2020
# [3.0.0](v2.3.4...v3.0.0) (2020-03-10)

### Bug Fixes

* a title change often means the content has change ([b8d6bc9](b8d6bc9))
* add rough downscaling when there are many windows (closes [#69](#69)) ([ced5ee6](ced5ee6))
* added releases link and aligned layout left on tab 3 ([6bb73dc](6bb73dc))
* also codesign debug builds ([a5f9911](a5f9911))
* app launched while in fullscreen shows first window ([c5cbcdb](c5cbcdb)), closes [/github.com//pull/114#issuecomment-576384795](https://github.com//github.com/lwouis/alt-tab-macos/pull/114/issues/issuecomment-576384795)
* auto-update preferences sync with os from launch ([b3fb222](b3fb222))
* avoid rendering if app is not used ([fdddb0f](fdddb0f))
* better float rounding = sharper cell contents ([9a96e49](9a96e49))
* better focus/order for preferences (closes [#80](#80)) ([4a8bdeb](4a8bdeb))
* better textareas ([efc9bd3](efc9bd3))
* bring back the window delay that regressed with v2 ([bb95e55](bb95e55))
* compare correctly since pid can go away when an app dies ([4ded030](4ded030))
* compiler warnings ([1faa74c](1faa74c))
* cpu and memory leaks (see discussion in [#117](#117)) ([52626aa](52626aa))
* dock being shown was blocking alt-tab ([2826a1b](2826a1b))
* don't show floating windows + efficiencies ([3f8e3ea](3f8e3ea))
* don't show ui on fast trigger ([f8e1b00](f8e1b00))
* don't trigger ui refreshes if the app is not active ([b9a0152](b9a0152))
* don't upscale thumbnails of small windows ([0bc7472](0bc7472))
* feedback token injected during ci ([effdc5f](effdc5f))
* getting sparkle ready for release ([9f1f522](9f1f522))
* handle on-all-spaces windows better ([4abe9f3](4abe9f3))
* ignore build folder ([a2bb19f](a2bb19f))
* ignore trigger shortcuts if mission control is active ([b03b0aa](b03b0aa))
* initial discovery when single space was glitching the os ([3cd4b6d](3cd4b6d))
* keyboard shortcuts didn't work without a menu ([cf92dc1](cf92dc1))
* layout is now correct; also removed layout preferences for now ([a1b5266](a1b5266))
* layout regression introduced by eed0353 ([bdc41be](bdc41be))
* layout was incorrect resulting in thumbnails clipping ([fd906f4](fd906f4))
* letsmove was not active on release builds ([6ac0658](6ac0658))
* list temporary AXDialog windows like activity monitor ([51a8838](51a8838))
* more robust screen-recording permission check ([ce574a2](ce574a2))
* notarization issues ([d125dd3](d125dd3))
* observer leak would throw and crash the app sometimes ([9ca28eb](9ca28eb))
* only test permissions on the correct os versions ([4612e37](4612e37))
* open alt-tab during space transitions (closes [#92](#92)) ([141562d](141562d))
* prevent visual flickering (closes [#115](#115)) ([9a8c83e](9a8c83e))
* quitting apps was not properly removing apps from the list ([10b2c71](10b2c71))
* quitting multiple apps would refresh the ui multiple times ([bfc2700](bfc2700))
* regression on collectionviewitem titles (not showing) ([8cb6d86](8cb6d86))
* remove debug colors ([e588d55](e588d55))
* remove unnecessary/wrong layout code ([9e719e6](9e719e6))
* sharper images on non-retina displays ([1bb4d2a](1bb4d2a))
* smaller payload for the icons ([bddb6fa](bddb6fa))
* some apps have messy launch behavior ([7eb216d](7eb216d)), closes [/github.com//issues/117#issuecomment-583868046](https://github.com//github.com/lwouis/alt-tab-macos/issues/117/issues/issuecomment-583868046)
* some apps should retry observing until it works ([0c731f4](0c731f4))
* using floor() everywhere to avoid blurry rendering ([2a36196](2a36196))

### Code Refactoring

* complete rework of the internals ([547311e](547311e)), closes [#93](#93) [#24](#24) [#117](#117) [/github.com//issues/45#issuecomment-571898826](https://github.com//github.com/lwouis/alt-tab-macos/issues/45/issues/issuecomment-571898826)

### Features

* add an app icon and menubar icon (closes [#38](#38)) ([a345dae](a345dae))
* add back the preferences for the new layout algo ([d52eb6d](d52eb6d))
* add debug profile to feedback message ([a14f965](a14f965))
* add feedback button on about window ([4046136](4046136))
* add in-app feedback form (closes [#145](#145)) ([725a030](725a030))
* add licence to about page ([cb66b79](cb66b79))
* add preference to start at login (closes [#159](#159)) ([982fe6c](982fe6c))
* adding cocoapods and letsmove/sparkle ([606bae7](606bae7))
* better packing; tall thumbnails are 1/2 the width of wide ones ([e34e3b1](e34e3b1))
* bump major version ([3c3b18c](3c3b18c))
* cleaner layout and explanation text ([fd3e768](fd3e768))
* debug build has code-signing to preserve permissions ([34a32f3](34a32f3))
* divide preferences by topic (closes [#130](#130)) ([291f872](291f872))
* drag-and-drop files on the ui (closes [#74](#74)) ([e1e3633](e1e3633))
* german and spanish localization ([6c440a7](6c440a7))
* improved translations ([debd3ae](debd3ae))
* integrate sparkle for auto-updates (closes [#131](#131)) ([069382c](069382c))
* localization (closes [#134](#134)) ([36e4bb0](36e4bb0))
* make system calls more parallel (closes [#160](#160)) ([a29b39f](a29b39f))
* migrate to standard os-backed preferences (closes [#161](#161)) ([e28c43f](e28c43f))
* more appealing presentation + minor refac ([67f291d](67f291d))
* nicer layout for about preferences ([03a5f77](03a5f77))
* quit button is clearer with explicit mention of the name ([6b6d748](6b6d748))
* replace default copyright with correct licence ([60b49ea](60b49ea))
* separating the quit button as it is a special case ([9fa0c06](9fa0c06))
* slightly increase contrast (mitigates [#82](#82)) ([291770e](291770e))
* support macos "sudden termination" ([671fdab](671fdab)), closes [/developer.apple.com/documentation/foundation/processinfo#1651129](https://github.com//developer.apple.com/documentation/foundation/processinfo/issues/1651129)

### BREAKING CHANGES

* bump major version
* Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.
lwouis pushed a commit that referenced this issue Mar 10, 2020
# [3.0.0](v2.3.4...v3.0.0) (2020-03-10)

### Bug Fixes

* a title change often means the content has change ([b8d6bc9](b8d6bc9))
* add rough downscaling when there are many windows (closes [#69](#69)) ([ced5ee6](ced5ee6))
* added releases link and aligned layout left on tab 3 ([6bb73dc](6bb73dc))
* also codesign debug builds ([a5f9911](a5f9911))
* app launched while in fullscreen shows first window ([c5cbcdb](c5cbcdb)), closes [/github.com//pull/114#issuecomment-576384795](https://github.com//github.com/lwouis/alt-tab-macos/pull/114/issues/issuecomment-576384795)
* auto-update preferences sync with os from launch ([b3fb222](b3fb222))
* avoid rendering if app is not used ([fdddb0f](fdddb0f))
* better float rounding = sharper cell contents ([9a96e49](9a96e49))
* better focus/order for preferences (closes [#80](#80)) ([4a8bdeb](4a8bdeb))
* better textareas ([efc9bd3](efc9bd3))
* bring back the window delay that regressed with v2 ([bb95e55](bb95e55))
* compare correctly since pid can go away when an app dies ([4ded030](4ded030))
* compiler warnings ([1faa74c](1faa74c))
* cpu and memory leaks (see discussion in [#117](#117)) ([52626aa](52626aa))
* dock being shown was blocking alt-tab ([2826a1b](2826a1b))
* don't show floating windows + efficiencies ([3f8e3ea](3f8e3ea))
* don't show ui on fast trigger ([f8e1b00](f8e1b00))
* don't trigger ui refreshes if the app is not active ([b9a0152](b9a0152))
* don't upscale thumbnails of small windows ([0bc7472](0bc7472))
* feedback token injected during ci ([effdc5f](effdc5f))
* getting sparkle ready for release ([9f1f522](9f1f522))
* handle on-all-spaces windows better ([4abe9f3](4abe9f3))
* ignore build folder ([a2bb19f](a2bb19f))
* ignore trigger shortcuts if mission control is active ([b03b0aa](b03b0aa))
* initial discovery when single space was glitching the os ([3cd4b6d](3cd4b6d))
* keyboard shortcuts didn't work without a menu ([cf92dc1](cf92dc1))
* layout is now correct; also removed layout preferences for now ([a1b5266](a1b5266))
* layout regression introduced by eed0353 ([bdc41be](bdc41be))
* layout was incorrect resulting in thumbnails clipping ([fd906f4](fd906f4))
* letsmove was not active on release builds ([6ac0658](6ac0658))
* list temporary AXDialog windows like activity monitor ([51a8838](51a8838))
* more robust screen-recording permission check ([ce574a2](ce574a2))
* notarization issues ([d125dd3](d125dd3))
* observer leak would throw and crash the app sometimes ([9ca28eb](9ca28eb))
* only test permissions on the correct os versions ([4612e37](4612e37))
* open alt-tab during space transitions (closes [#92](#92)) ([141562d](141562d))
* prevent visual flickering (closes [#115](#115)) ([9a8c83e](9a8c83e))
* quitting apps was not properly removing apps from the list ([10b2c71](10b2c71))
* quitting multiple apps would refresh the ui multiple times ([bfc2700](bfc2700))
* regression on collectionviewitem titles (not showing) ([8cb6d86](8cb6d86))
* remove debug colors ([e588d55](e588d55))
* remove unnecessary/wrong layout code ([9e719e6](9e719e6))
* sharper images on non-retina displays ([1bb4d2a](1bb4d2a))
* smaller payload for the icons ([bddb6fa](bddb6fa))
* some apps have messy launch behavior ([7eb216d](7eb216d)), closes [/github.com//issues/117#issuecomment-583868046](https://github.com//github.com/lwouis/alt-tab-macos/issues/117/issues/issuecomment-583868046)
* some apps should retry observing until it works ([0c731f4](0c731f4))
* using floor() everywhere to avoid blurry rendering ([2a36196](2a36196))

### Code Refactoring

* complete rework of the internals ([547311e](547311e)), closes [#93](#93) [#24](#24) [#117](#117) [/github.com//issues/45#issuecomment-571898826](https://github.com//github.com/lwouis/alt-tab-macos/issues/45/issues/issuecomment-571898826)

### Features

* add an app icon and menubar icon (closes [#38](#38)) ([a345dae](a345dae))
* add back the preferences for the new layout algo ([d52eb6d](d52eb6d))
* add debug profile to feedback message ([a14f965](a14f965))
* add feedback button on about window ([4046136](4046136))
* add in-app feedback form (closes [#145](#145)) ([725a030](725a030))
* add licence to about page ([cb66b79](cb66b79))
* add preference to start at login (closes [#159](#159)) ([982fe6c](982fe6c))
* adding cocoapods and letsmove/sparkle ([606bae7](606bae7))
* better packing; tall thumbnails are 1/2 the width of wide ones ([e34e3b1](e34e3b1))
* bump major version ([3c3b18c](3c3b18c))
* cleaner layout and explanation text ([fd3e768](fd3e768))
* debug build has code-signing to preserve permissions ([34a32f3](34a32f3))
* divide preferences by topic (closes [#130](#130)) ([291f872](291f872))
* drag-and-drop files on the ui (closes [#74](#74)) ([e1e3633](e1e3633))
* german and spanish localization ([6c440a7](6c440a7))
* improved translations ([debd3ae](debd3ae))
* integrate sparkle for auto-updates (closes [#131](#131)) ([069382c](069382c))
* localization (closes [#134](#134)) ([36e4bb0](36e4bb0))
* make system calls more parallel (closes [#160](#160)) ([a29b39f](a29b39f))
* migrate to standard os-backed preferences (closes [#161](#161)) ([e28c43f](e28c43f))
* more appealing presentation + minor refac ([67f291d](67f291d))
* nicer layout for about preferences ([03a5f77](03a5f77))
* quit button is clearer with explicit mention of the name ([6b6d748](6b6d748))
* replace default copyright with correct licence ([60b49ea](60b49ea))
* separating the quit button as it is a special case ([9fa0c06](9fa0c06))
* slightly increase contrast (mitigates [#82](#82)) ([291770e](291770e))
* support macos "sudden termination" ([671fdab](671fdab)), closes [/developer.apple.com/documentation/foundation/processinfo#1651129](https://github.com//developer.apple.com/documentation/foundation/processinfo/issues/1651129)

### BREAKING CHANGES

* bump major version
* Instead of asking the OS about the state of the whole system on trigger (what we do today; hard to do fast), or asking the state of the whole system on a timer (what HyperSwitch does today; inaccurate) - instead of one of 2 approaches, v3 observes the Accessibility events such as "an app was launched", "a window was closed". This means we build a cache as we receive these events in the background, and when the user trigger the app, we can show accurate state of the windows instantly.

Of course there is no free lunch, so this approach has its own issues. However from my work on it from the past week, I'm very optimistic! The thing I'm the most excited about actually is not the perf (because on my machine even v2 is instant; I have a recent macbook and no 4k displays), but the fact that we will finally have the thumbnails in order of recently-used to least-recently-used, instead of the order of their stack (z-index) on the desktop. It's a big difference! There are many more limitations that are no longer applying also with this approach.
@mckennajones
Copy link

@lwouis Just wanted to give you and whoever else contributed kudos on the newer releases, this issue is definitely resolved and it feels much snappier. Cheers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants