Hypercritical


SwitchGlass

SwitchGlass

SwitchGlass adds a dedicated application switcher to your Mac. You can customize its appearance, size, and position on each attached display, including hiding it on selected displays. It pairs perfectly with Front and Center, supporting configurable click and Shift-click actions on app icons in the floating app switcher. SwitchGlass is available on the Mac App Store. To learn more, please read the FAQ.

Download SwitchGlass on the Mac App Store

SwitchGlass screenshot

Releases

2.4.1 - April 13, 2024
  • Fixed a bug that caused incorrect icons to be shown for iPad apps running on macOS.
2.4 - November 16, 2023
  • Improved icon image rendering and caching.
  • Improved special-case handling of app icons that use different proportions at smaller sizes.
  • Added Quit as a possible Shift-click action when QuitchGlass is running.

Show More Releases

2.3.2 - October 3, 2023
  • Further improved app arrival and departure animations.
2.3.1 - September 15, 2023
  • Fixed a bug that could cause the app switcher to be covered by a floating window from another app.
  • Improved the efficiency of tracking which apps have windows on which displays.
2.3 - September 14, 2023
  • Added an option to not round the corners of the app switcher that touch a screen edge (or the menu bar).
  • Show apps by display can now (optionally) include hidden windows and windows on other desktops.
  • Improved app arrival and departure animations.
  • Improved behavior when using Spaces.
  • Improved display detection when display parameters change.
  • Updated to support the latest version of macOS.
  • Fixed a bug that could cause very long app switchers to be truncated on Macs with screen notches.
  • Fixed a bug that could cause incorrect tracking of which apps have windows on which displays.
  • Added debugging tooltips.
2.2 - June 15, 2023
  • Fixed a bug that could cause apps that support automatic termination to show up multiple times in the app switcher.
  • Updated tooltip display on macOS 13 and later to match the Dock’s behavior when dragging and dropping onto an app.
  • Improved the handling of the launch-on-login setting.
  • Updated to support future operating systems.
  • Overhauled concurrency primitives.
  • Improved diagnostic logging.
2.1.3 - April 14, 2023
2.1.2 - March 15, 2023
  • Fixed a crash triggered by opening the Settings window after certain display configuration changes.
2.1.1 - February 17, 2023
  • Hide tooltips when displaying a context menu.
  • Improved the responsiveness of context menus.
  • Change “Quit” to “Force Quit” when the Option key is held down during context menu activation.
2.1 - February 13, 2023
  • Fixed yet another bug that could cause a tooltip to remain visible when the pointer is no longer hovering over the app icon.
  • Added support for QuitchGlass.
2.0.9 - February 8, 2023
  • Fixed a bug that could cause apps that exit immediately after launching to get stuck in the app switcher.
  • Fixed another bug that could cause a tooltip to remain visible when the pointer is no longer hovering over the app icon.
  • Fixed a bug that prevented margin clicks from registering if an app switcher had its margin set to zero when it first appeared on the screen.
2.0.8 - January 31, 2022
  • Fixed a bug that could cause a tooltip to remain visible when the pointer is no longer hovering over the app icon.
  • Fixed a bug that could cause visual artifacts to remain on the screen after an app switcher was removed in response to a display configuration change.
  • Fixed a rare crash when refreshing apps.
2.0.7 - December 26, 2022
  • Fixed a bug that could cause multiple attempts to open a dragged-and-dropped item.
  • Improved the accuracy of the visual indication that a dragged-and-dropped item can be opened by the target app.
  • Added a new setting to collapse gaps around custom-ordered apps. This will pull custom-ordered apps towards the ends of the app switcher, closing any gaps left by custom-ordered apps that are not currently running.
2.0.6 - December 10, 2022
  • Fixed a bug that caused custom ordering to be improperly shared by multiple displays.
  • Fixed a bug that required an extra click on app icons when tooltips are enabled and the app switcher is on the left or top edge of the display.
  • Fix an edge-case crashing bug.
2.0.4 - November 22, 2022
  • Fixed a bug that prevented multi-item drag and drop from behaving correctly.
  • Added a workaround for a behavior change in macOS Ventura that prevented auto-hide activation from working correctly during a drag and drop operation.
  • Improved the animation of position badge numbers during order customization.
2.0.3 - November 15, 2022
  • Fixed several bugs related to dragging and dropping items onto apps in the app switcher.
  • Improved the layout algorithm when customizing the order of apps in the app switcher.
  • Improved click tracking and click-through in and around app switchers.
  • Improved the reliability of window layering for the Appearance window.
  • Improved activation regions for auto-hide functionality.
  • Stability and performance improvements.
2.0.2 - November 2, 2022
  • Fixed a bug that prevented clicks from passing through the invisible activation region of auto-hidden app switchers.
2.0.1 - October 29, 2022
  • Added accent color appearance setting.
  • Fixed a bug that prevented “Filtered By Display” from working correctly.
  • Fixed a bug that prevented order customization from working correctly when “Filtered By Display” was enabled.
  • Ensured that an auto-hidden app switcher re-hides when order customization is complete.
  • Sort by launch order now works better with apps launched before SwitchGlass itself.
  • Changes to material and sort order are now demonstrated when auto-hide is enabled.
  • Correctly disable appropriate appearance controls when setting the visibility to “Hide”.
  • Fixed incorrect name truncation in the Exclude window.
  • Added a workaround for a bug that caused multiple Karabiner MultitouchExtension icons to appear in the app switcher.
2.0 - October 24, 2022
  • App order can now be customized by setting fixed positions starting from either end.
  • Separated global settings from per-app-switcher settings.
  • Made the app sort order a per-app-switcher setting.
  • Added optional animation for app transitions.
  • Added optional tooltips for apps in the app switcher.
  • Added a Hide option for the click and Shift-click actions.
  • Added drag and drop support to the Exclude window.
  • Added an option to hide an app switcher when it conflicts with the Dock.
  • Improved support for setups with multiple identical displays.
  • Improved the click regions for app switchers with margins.
  • Updated menu bar icons.
1.5.4 - April 2, 2022
  • Improved the handling of multiple displays.
1.5.3 - December 16, 2021
  • Improved app icon drawing, including special-case handling of Microsoft apps.
1.5.2 - December 15, 2021
  • Fixed a bug that could cause incorrect behavior when launching the app.
1.5.1 - November 30, 2021
  • Fixed a bug that could cause the app switcher to fail to auto-hide when in a horizontal orientation.
1.5 - November 18, 2021
  • Fixed a cosmetic bug that could cause an app-switcher button to get temporarily stuck in its pressed state.
1.4.9 - June 18, 2021
  • Selected text may now be dragged and dropped onto the icons of BBEdit and TextEdit in the app switcher.
1.4.8 - February 6, 2021
  • Improved auto-hide activation.
1.4.7 - February 4, 2021
  • Fixed a cosmetic bug in the About window.
1.4.6 - November 11, 2020
  • Improved hardware support.
1.4.5 - September 21, 2020
  • Briefly show auto-hidden app switchers when changing appearance preferences.
1.4.4 - September 4, 2020
  • Fixed a bug that could cause unintended app activation after hovering over an app switcher with auto-hide enabled.
1.4.3 - September 3, 2020
  • Fixed a bug that prevented app switcher edges from being visible to macOS’s built-in window snapping feature.
  • Updated the default app switcher material for future operating systems.
1.4.2 - July 24, 2020
  • Minor layout adjustments to the Preferences and Exclude windows.
  • Updates to improve support for future operating systems.
1.4.1 - June 4, 2020
  • Added a minimum size for the auto-hide activation region to improve the usability of very small app switchers when in auto-hide mode.
1.4 - June 1, 2020
  • Added an option to show only apps that have windows on the same display as the app switcher.
1.3.2 - April 24, 2020
  • When auto-hide is enabled, holding down the Option key will prevent the app switcher from appearing when the pointer enters its activation area.
  • Fixed a bug that could cause an extra app switcher to appear after a display is disconnected.
1.3.1 - March 20, 2020
  • Fixed a bug that could cause settings to be lost when disconnecting an external display.
1.3 - March 15, 2020
  • Fixed a bug that could cause an external display to be identified as a built-in display.
1.2.9 - March 9, 2020
  • Added input validation to the text fields in the preferences window.
  • Removed brief hide/show animation when display settings change but a display has not been added or removed.
1.2.8 - March 6, 2020
  • Improved state restoration when connecting and disconnecting external displays.
  • The preferences window is now forced to the front more reliably when activated.
  • Fixed a bug that could cause a partially loaded desktop background image to appear in preferences.
1.2.7 - March 1, 2020
  • Fixed a bug that could cause an error dialog to appear when an app could not be reopened due to a permission error. In these cases, the app is now activated instead of reopened.
1.2.6 - February 29, 2020
  • App switchers set to auto-hide are now accessible on displays containing full-screen windows.
  • Improved the forgiveness of click handling for app switchers with margins.
  • Concurrency-related bug fixes.
1.2.5 - February 27, 2020
  • Added the ability to exclude apps from appearing in the app switcher.
  • Improved auto-hide behavior when the mouse cursor enters the menu bar.
1.2.4 - February 26, 2020
  • Fixed a bug that could cause app switchers to be missing on one or more displays when using multiple displays with the same make and model.
1.2.3 - February 26, 2020
  • Improved the forgiveness of auto-hide activation and deactivation.
1.2.2 - February 24, 2020
  • Moved the auto-hide setting into the preferences window.
  • Fixed a cosmetic bug that caused label backgrounds to draw incorrectly in preferences.
  • Fixed a bug that caused the padding percentage text field to refuse keyboard focus when using the tab key to navigate in the preferences window.
1.2.1 - February 23, 2020
  • Disable auto-hide by default.
1.2 - February 22, 2020
  • Added auto-hide feature.
  • App switcher edges are now visible to macOS’s built-in window snapping feature.
  • Removed “jiggle” animation, previously used to eliminate drawing artifacts during app switcher appearance changes, and replaced it with a more efficient solution.
1.1.4 - February 22, 2020
  • Option-click and Option-Shift-click on the currently active app icon will now just hide that app and won’t perform the configured click or Shift-click action afterwards.
  • Further improved the selection and display of the desktop background image in the preferences window.
1.1.3 - February 21, 2020
  • Added an option to reverse the app sorting order.
  • Added the “Reopen” and “Reopen and Show All” actions to the app icon context menu.
  • Fixed a cosmetic problem triggered by some changes to corner style and radius.
  • Fixed a bug that caused SwitchGlass’s process name to appear blank in Activity Monitor.
  • The SwitchGlass icon should no longer appear briefly in the Dock during launch.
  • Added a default fallback for the desktop picture that appears in preferences.
1.1.2 - February 20, 2020
  • Added “Reopen” and “Reopen and Show All” actions that will activate or show all windows from an app and also open a new window (or un-minimize a window from the Dock) if the app currently has no open windows.
  • Further improved the selection and display of the desktop background image in the preferences window.
1.1.1 - February 18, 2020
  • Added an option to sort apps by launch order.
  • Added support for dragging links onto web browser icons in the app switcher.
  • The preferences window will attempt to show the correct desktop thumbnail image when using a “dynamic” desktop background that changes with the time of day.
  • Fixed a bug that could cause one or more preferences windows to fail to come to the front when requested.
  • Fixed a bug that could cause unexpected app switcher animation on launch or when changing the display configuration.
  • Fixed a bug that could cause empty settings values to be stored in the preferences file.
1.1 - February 15, 2020
  • Option-clicking an app icon now hides the current app before performing the configured click action.
  • Option-Shift-clicking an app icon now hides the current app before performing the configured Shift-click action.
  • Fixed a bug that could cause app switcher settings to change when switching from an integrated GPU to a discrete GPU.
  • Improved app activation speed.
1.0.2 - February 14, 2020
  • Fixed a bug that could allow invalid orientation and position combinations to be selected in the preferences window.
1.0.1 - February 14, 2020
  • Improved the quality of app icon resizing.
  • Fixed several bugs related to connecting and disconnecting additional displays.
  • Fixed a bug that could cause some app icons to reject valid drag-and-drop operations.
  • App icons now dim on right-click to make it clearer which app is associated with the context menu.
  • Prevent the preferences window’s title bar from being covered by the app switcher.
  • Fixed a cosmetic problem triggered by some changes to corner style and radius.
  • Fixed a cosmetic problem in the About box.
1.0 - February 12, 2020
  • Initial release.

Frequently Asked Questions

Q: What does it do?

A: SwitchGlass adds a dedicated application switcher to your Mac in the form of a floating window that shows an icon for each running app. Here’s how it works in its default configuration:

  • Click an app icon to bring all windows from that app to the front.
  • Hold down the Shift key while clicking an app icon to bring just one window from that app to the front.
  • Hold down the Option key while clicking an app icon to hide the current app before bringing the clicked app to the front. (Option-clicking the currently active app will hide it.)
  • Hold down the Option and Shift keys while clicking an app icon to hide the current app before bringing just one window from the clicked app to the front. (Option-Shift-clicking the currently active app will hide it.)
  • Right-click (or Control-click) an app icon to activate a context menu from which you can perform any of the supported actions (described below).
  • Drag one or more files or folders onto an app icon to open those items with the app.
  • Hold down the Command key while clicking on an app icon to reveal the app in the Finder.

Some of these behaviors are configurable; see below. Given that the click and Shift-click actions can be customized, the functionality can be described in the abstract as follows:

  • Click an app icon to perform the configured click action.
  • Hold down the Shift key while clicking an app icon to perform the configured Shift-click action.
  • Hold down the Option key while clicking an app icon to hide the current app before performing the configured click action. (Option-clicking the currently active app will just hide it.)
  • Hold down the Option and Shift keys while clicking an app icon to perform the configured Shift-click action. (Option-Shift-clicking the currently active app will just hide it.)
  • Right-click (or Control-click) an app icon to activate a context menu from which you can show or hide an app.
  • Drag one or more files onto an app icon to open those files with the app.
  • Hold down the Command key while clicking on an app icon to reveal the app in the Finder.

Q: I launched SwitchGlass but I don’t see it in my Dock. Is it running?

A: SwitchGlass does not appear in the Dock. Its interface is exposed through an icon on the right side of the menu bar at the top of the screen. (See screenshot above.)

Q: How do I customize SwitchGlass?

A: Choose “Appearance…” from the SwitchGlass menu bar icon to open an Appearance configuration window on each attached display. The settings in each window apply only to the app switcher on that display.

Note: when one Appearance window is closed, all the Appearance windows will close.

Choose “Settings…” (or “Preferences…” in versions of macOS earlier than Ventura) from the SwitchGlass menu bar icon to change settings that apply to SwitchGlass as a whole.

Q: What do all the click-action menu options mean?

A: The “App Click” and “Shift-Click” pop-up menus in the settings window are used to choose what will happen when you click or Shift-click an app icon in the app switcher. Every choice will activate the clicked app, but the actions all do something slightly different to the app’s windows. Here’s what each action does:

  • Show All Windows - Activate an app and bring all its window to the front.
  • Activate - Activate an app and bring only the “main and key windows” to the front. In practice, the “main” window is usually also the “key” window, so only one window will come to the front.
  • Reopen - Activate an app in a way that triggers its “reopen” handler. Apps can choose to do whatever they want in response to a “reopen” action, but most bring a single window to the front, opening a new window (or un-minimizing a window from the Dock) if none are open. Note that some apps (e.g., Steam) cannot be reopened due to sandboxing restrictions. In these cases, the app is activated instead.
  • Reopen and Show All - This is the same as “Reopen” except that SwitchGlass will also bring all the app’s windows to the front after sending the “reopen” action. Note that since apps can do whatever they want in response to a “reopen” action, some apps (e.g., Chrome) already bring all their windows to the front when reopened. For apps like that, the “Reopen” and “Reopen and Show All” actions are equivalent.
  • Hide - Hide all windows belonging to an app.
  • Quit - Quit an app. This action will only appear if QuitchGlass is installed, and it can only be assigned to the Shift-click action.

Q: What does the “Show Apps” setting do?

A: The “Show Apps” pop-up menu in the settings window controls which apps appear in which app switchers. The options are:

  • All - Show all eligible apps in all app switchers. This is the default.
  • By Display (Visible) - Show only apps that have visible windows on the same display as the app switcher.
  • By Display (All) - Show only apps that have windows on the same display as the app switcher, regardless of their visibility.

Q: When the “Show Apps” setting is set to “By Display (All)”, why do I sometimes see an app icon in an app switcher even when that app has no windows, visible or otherwise, on that display?

A: As explained above, the “By Display (All)” setting is meant to populate each app switcher with apps that have windows on the same display as the app switcher, regardless of their visibility. What makes this tricky is that some apps maintain one or more invisible windows that the user will never see. (In fact, SwitchGlass itself does this when Auto-Hide is enabled, using an invisible window on the screen edge to detect when the pointer enters it to trigger the app switcher to appear.)

Unfortunately, the window-related APIs SwitchGlass has access to do not provide a way to distinguish between a “normal” window that is currently hidden, and an invisible window that that app uses for its own internal purposes and that will never be visible. These invisible windows can therefore fool SwitchGlass into thinking an app has a hidden window on a display, making the app icon appear in the app switcher on that display.

SwitchGlass has a hard-coded list of apps that are currently known to do this. For these specific apps, SwitchGlass uses a new detection policy: a window must be visible at least once before it “counts” towards an app’s presence on a display. If you encounter an app that appears in an app switcher on a display where it has no windows (hidden or otherwise), please email me and let me know so I can add the app to the special-case list.

There’s also an “Advanced Setting” to enable this policy for all apps.

Q: How do the visibility options work?

A: The “Visibility” pop-up menu in the Appearance window controls the app switcher visibility on a specific display. The options are:

  • Show - The app switcher is visible.
  • Hide - The app switcher is not visible.
  • Auto-Hide - The app switcher is not visible until the mouse cursor touches the region of the screen edge where is is positioned.

Hold down the Option key while clicking the SwitchGlass menu bar icon to temporarily toggle the visibility of any app switchers that have their visibility set to “Show” in the Appearance window. This is meant as a shortcut to quickly hide and show visible app switchers. These changes are not persistent and are not reflected in the Appearance windows. Only the visibility changes made directly in the Appearance windows are persistent across launches.

Q: What does the “Round screen-edge corners” Appearance setting do?

A: The “Round screen-edge corners” checkbox in the Appearance window controls whether or not to round the corners of the app switcher that are touching the edge of the screen (or the menu bar). This setting is only available in macOS 13 or later, and it has no effect if the “Corner Style” is set to “Square” or if the margin is greater than 2.

Q: How can apps be sorted in the app switcher?

A: The “Sort Apps” pop-up menu in the Appearance window controls the default sort order of apps in an app switcher on a specific display. The options are:

  • By Name - Sort apps alphabetically by their name.
  • By Launch Order - Sort apps by the order they were launched. Note that this option will only work as expected if SwitchGlass was running when each app was launched. Configure SwitchGlass to launch on login to help ensure this is the case.

Q: How can I manually reorder apps in the app switcher?

A: Choose “Appearance…” from the SwitchGlass menu bar icon and then click the “Customize Order…” button. Doing so will cause the app switcher on the same screen as the Appearance window to enter “reorder mode.” The icons in the app switcher will begin to wiggle, indicating that they can be rearranged by dragging and dropping them into new positions.

(To exit reorder mode, click the “Done Customizing Order” button in the Appearance window, or click on any icon in the app switcher, or bring any app other than SwitchGlass to the front.)

When an icon is dragged and dropped into a new position in reorder mode, a number badge will appear in the upper-left corner of the icon. This number shows the position reserved for the app in the app switcher. Positions are numbered starting from 1.

If the number appears in a black circle, then the position is counted from the top (for vertical app switchers) or left side (for horizontal app switchers). If the number appears in a white circle, then the position is counted from the bottom (for vertical app switchers) or right side (for horizontal app switchers).

To change this, hold down the Control key and click (or right-click) an app icon, then select the “from Top” or “from Bottom” (for vertical app switchers) or “from Left” or “from Right” (for horizontal app switchers) options from the “Position” sub-menu.

To remove a customized position for an app and allow it to be sorted according to the default sort order, hold down the Control key and click (or right-click) an app icon, then select “Automatic” from the “Position” sub-menu.

Position sub-menu

Note that each numbered position can be claimed by only one app. When entering reorder mode, if an app has a customized position but is not currently running, its icon will appear dimmed in the app switcher, and will disappear once reorder mode ends.

In the screenshot below, Finder, Safari, and BBEdit claim the first, second, and third positions from the left, and System Settings and Messages claim the first and second positions from the right. Safari is not currently running, so its icon appears dimmed.

custom app positions

An app must be running in order to set a custom position for it.

Like all apps in SwitchGlass app switchers, apps with custom positions will not appear in the app switcher if they are not running. A custom position just reserves a spot for the app icon when the app is running. It does not force the app to appear when it is not running.

Q: What does the “Collapse gaps around custom-ordered apps” setting do?

A: When enabled, the “Collapse gaps around custom-ordered apps” setting will pull custom-ordered apps towards the ends of the app switcher, closing any gaps left by custom-ordered apps that are not currently running.

custom app positions

For example, in the screenshot above, Safari is set to occupy position 2, numbered starting from the left. As indicated by the dimming of its icon, Safari is not currently running. Its icon is shown when in “Customize Order” mode so its position can be viewed and changed. But after exiting this mode, its icon will no longer appear in the app switcher. The question is, which app should occupy position 2 when that happens?

If the “Collapse gaps around custom-ordered apps” setting is enabled, then BBEdit will slide over from position 3 into position 2. Otherwise, Chrome will occupy position 2 and BBEdit will stay in position 3.

Q: How can I exclude an app from appearing in SwitchGlass?

A: Choose “Exclude…” from the SwitchGlass menu bar icon to configure a list of apps that will never appear in any SwitchGlass app switchers.

Q: How can I control whether or not SwitchGlass will launch on login?

A: Choose “Settings…” (or “Preferences…” in versions of macOS earlier than Ventura) from the SwitchGlass menu bar icon, and then toggle the “Open SwitchGlass at login” checkbox to choose whether or not SwitchGlass should run immediately each time you log in.

Q: Why is SwitchGlass listed under the “Allow in the Background” section of the “Login Items” screen in System Settings in macOS 13 Ventura?

A: Apple added a new API in macOS 13 Ventura that enables apps to configure themselves to launch when a user logs in. For versions of macOS earlier than Ventura, an older API must be used. SwitchGlass runs on macOS 12 Monterey, so it must use the old launch-on-login API when running on that OS. SwitchGlass uses the newer API when running on Ventura or later.

Unfortunately, it appears that if an app has ever used the pre-Ventura launch-on-login functionality, System Settings in Ventura will show that app in the “Allow in the Background” section of the “Login Items” screen. This will be the case if SwitchGlass was installed and configured to launch on login before upgrading to macOS 13 Ventura.

Despite appearing in this list, SwitchGlass does not perform tasks when the application isn’t open. Other apps that appear in the “Allow in the Background” list may do so, however. There is no way to tell at a glance which apps in this list do or don’t run in the background. This is an unfortunate situation.

This bug has been filed with Apple as FB11714482.

To remove SwitchGlass from the “Allow in the Background” section of the “Login Items” screen in System Settings, quit SwitchGlass, if it is running: click the SwitchGlass menu bar icon and choose “Quit”. Then uninstall SwitchGlass: open the “Applications” folder, drag the SwitchGlass application icon to the trash, and empty the trash. Finally, re-install SwitchGlass by re-downloading it from the Mac App Store. After doing this, SwitchGlass should no longer appear in the “Allow in the Background” list, even when it is configured to launch on login. (It may reappear in that list some time later, however. I have no idea why or how. Sigh.)

Q: What does the “Hide on Dock conflict” setting do?

A: When enabled, the “Hide on Dock conflict” setting will hide the app switcher if it is configured to appear on the same screen edge as the macOS Dock.

Unfortunately, this setting does not work when the macOS Dock is set to automatically hide and show because SwitchGlass has no way to detect the Dock’s location in this situation. Private APIs exist for detecting the Dock’s location when it is set to automatically hide and show, but Apple does not allow these APIs to be used in an app that is sold in the Mac App Store. I have filed feature requests with Apple for public APIs that provide this functionality (FB11304286 and FB11304297).

Q: How do the icon padding settings work?

A: The icon padding slider in the SwitchGlass Appearance window controls the padding between icons in the app switcher as a percentage of the icon size, from 0% to 100%. For example, if the icon size is set to 32 points and the padding slider is at 50%, then then each icon will have 16 points of padding around it.

The text field to the right of the icon padding slider shows the slider’s exact value. It exists to allow fine-tuning without having to carefully move the slider a tiny amount.

Changing the icon size does not change the position of the icon padding slider (or the text field that reflects its value). If set to 50%, it will remain at 50% no matter how the icon size changes.

The icon padding “Size” text field below the icon padding slider exists to allow the padding to be set directly, rather than as a percentage of the icon size. As the icon size changes, the computed padding size will also change. For example, with the icon padding slider set to 50%, if the icon size changes from 32 points to 48 points, the padding size text field will change from 16 points to 24 points.

Q: Does SwitchGlass work with Front and Center?

A: You bet it does! Front and Center’s default “Classic” mode matches up perfectly with SwitchGlass’s default settings: click to bring all app windows to the front, shift-click to bring a single window to the front. You can also configure SwitchGlass to match Front and Center’s “Modern” mode by changing the click and Shift-click actions in the SwitchGlass settings. And if you want to configure SwitchGlass and Front and Center differently, no problem, the two apps will communicate to ensure that they don’t interfere with each other’s actions.

Q: Why does this app exist? Why not just use the Dock?

A: The macOS Dock does show an icon for each running application and allows apps to be brought to the front and hidden. But the Dock also may contain other things: files, folders, recent (but not currently running) apps, plus the trash can. The Dock is also centered on the edge of the screen and has limited appearance options. It cannot appear in different positions and sizes on different displays, and it always brings all windows from an app to the front when an app icon is clicked.

SwitchGlass is for people who want an interface element dedicated entirely to application switching, with a customizable appearance and location for each attached display. When used alongside the Dock, SwitchGlass provides a second target for mouse-based app switching. With the Dock hidden, it provides an app-switching interface without any clutter from the other functions of the Dock.

Q: Can’t you just use the command-tab app switcher?

A: You certainly could, but sometimes some people like to use the mouse (or trackpad) to switch apps.

Q: Why does SwitchGlass require macOS 12.0 Monterey or later?

A: SwitchGlass uses SwiftUI, Apple’s new user interface framework. SwiftUI runs only on macOS 10.15 Catalina or later, but a few of the specific SwiftUI features SwitchGlass uses to implement drag-and-drop only run on macOS 12.0 Monterey or later.

(SwitchGlass version 1 ran on macOS 10.15 Catalina or later because it did not support drag-and-drop reordering of apps in the app switcher. The Mac App Store does not allow multiple versions of an app to be sold at the same time, so I cannot continue to update and support SwitchGlass version 1 for older versions of macOS, even though I would like to do so.)

Q: I clicked on an app icon and that app didn’t come to the front! What’s going on?

A: Apple provides APIs to activate applications, optionally also bringing all of their windows to the front. Sometimes, when a call is made to one of these APIs, nothing happens. Or sometimes the app activates but none of its windows come to the front, even though the API call asked for all windows to come to the front. These bugs have existed in macOS for many years, and I’ve not yet found a workaround for them in SwitchGlass.

When this happens, quitting and relaunching the application that refused to come to the front will sometimes fix the problem. Other times, logging out and back in will do it. In extreme cases, a full restart may be required. For some applications, even these solutions don’t work. (Microsoft Outlook, in particular, seems completely immune to all window layering API calls available to third-party apps.)

This bug has been filed with Apple as FB7603765.

Q: Why does SwitchGlass disappear when a window is in full-screen mode?

A: SwitchGlass is intentionally hidden on any display that contains a window in full-screen mode. The rationale is that full-screen mode is a way to assert ownership of the entire display. Drawing another app on top of a full-screen app violates this expectation.

If you would like to access an app switcher on a display that contains a window in full-screen mode, set the app switcher’s visibility to Auto-Hide.

Q: Why doesn’t SwitchGlass disappear when a window is in full-screen mode?

A: SwitchGlass is intentionally hidden on any display that contains a window in full-screen mode. The rationale is that full-screen mode is a way to assert ownership of the entire display. Drawing another app on top of a full-screen app violates this expectation.

Unfortunately, SwitchGlass only knows when a display contains a window in full-screen mode if the app that owns the window uses Apple’s own full-screen feature. Some apps (including many games) use their own, custom APIs for making their windows full-screen. SwitchGlass has no way to detect this, and is therefore unable to hide itself automatically.

As a workaround, hold down the Option key while clicking the SwitchGlass menu bar icon to temporarily hide and show the app switchers. (These changes are not persistent and are not reflected in the “Appearance” windows. Only the visibility changes made directly in the “Appearance” windows are persistent across launches.)

Q: Why doesn’t SwitchGlass bounce app icons in response to notifications or show notification badges like the Dock does?

A: As far as I am aware, there are no public APIs in macOS that allow third-party apps to implement these features in the same way that the Dock does.

Q: Why doesn’t SwitchGlass show the same dynamic app icons as the Dock?

A: Some applications change their Dock icons while running. For example, Apple’s Calendar app changes its Dock icon to show the current date. As far as I am aware, there are no public APIs in macOS that allow third-party apps to show these icons. The dynamic icon updates are communicated to and accessible by the Dock only.

Q: Why does the SwitchGlass Appearance window open when I log in?

A: As mentioned earlier, it’s not always immediately obvious that SwitchGlass is actually running. Launching SwitchGlass when it’s already running will open the Appearance window as a way of helping people find the SwitchGlass user interface. If the Appearance window opens on login, that’s usually a sign that SwitchGlass is being launched more than once on login.

Apple’s new (as of macOS 13.0) system for launching apps on login can sometimes get confused and cause this issue. To fix it, open the System Settings app, then go to “General” and then “Login Items” to check if SwitchGlass is listed more than once in the top list. Even if it’s not, try removing SwitchGlass from that list entirely. Then open the SwitchGlass Settings window (found under the SwitchGlass menu bar icon) and uncheck and re-check the “Open SwitchGlass at login” setting found there.

Q: Why can’t I use SwitchGlass to quit apps?

A: All apps sold through the Mac App Store must be sandboxed, and sandboxed Mac apps cannot tell arbitrary other applications to quit.

A workaround for this limitation is available in SwitchGlass version 2.1 or later. The solution is to run a second “helper” app that isn’t sandboxed, and then have SwitchGlass ask this helper app to do the work of quitting another app. The helper app is called QuitchGlass, and it’s free. Here’s how to use it:

  1. Download QuitchGlass by clicking this link or the icon below.

    QuitchGlass

  2. Double-click the QuitchGlass.zip file in your Downloads folder if it didn’t automatically decompress itself into the QuitchGlass application with the icon shown above.

  3. Drag the QuitchGlass application into your Applications folder at the top level of your boot drive.

  4. Launch the QuitchGlass application inside your Applications folder. On first launch, you might see a dialog like the one shown below. Click the “Open” button to continue.

    Dialog that appears when opening QuitchGlass for the first time
  5. On launch, you might also see a dialog like the one shown below. Either option is fine, but if you don’t click the “Check Automatically” option, then you will have to come back to this web page to download updated versions of QuitchGlass.

    The QuitchGlass Check for Updates dialog

Finally, QuitchGlass should be up and running. By default, QuitchGlass has no visible user interface. It has no menu bar icon, and it does not appear in the Dock. (To change this, hold down the Shift key when launching QuitchGlass.)

QuitchGlass will be launched and terminated automatically by SwitchGlass. You do not have to launch it manually after you’ve successfully launched it at least once. If you do launch QuitchGlass manually, it will launch SwitchGlass if it is not already running.

If you ever want to uninstall QuitchGlass, quit SwitchGlass and then drag the QuitchGlass icon to the Trash.

Q: Why can’t I drag and drop some kinds of files onto some app icons?

A: Not all apps can understand all file formats. SwitchGlass only allows drag-and-drop when it has determined that an app can handle the files being dropped onto it. If you have a situation where you think an app should accept a dropped file but SwitchGlass is disallowing it, please send me an email.

Q: What do the “Advanced Settings” do?

A: To access the Advanced Settings, choose “Settings…” (or “Preferences…” in versions of macOS earlier than Ventura) from the SwitchGlass menu bar icon and then click the “Advanced Settings…” button.

Each advanced setting that uses a text field can be reset to its default value by deleting the contents of the text field. The “Reset to Defaults” button will reset all advanced settings to their default, recommended values.

Most people should never need to change any of these settings, but for the few that do, here’s an explanation of each one.

  • Activation Mechanism - When SwitchGlass activates an app (e.g., after an icon in the app switcher is clicked), it can do so using a couple of different macOS APIs. The default activation mechanism is the one with the best performance, but it’s also the oldest. Selecting a different activation mechanism should have no effect on the functionality of SwitchGlass, and any change in performance is likely imperceptible.

    This setting exists because of some persistent activation bugs in macOS. I had hoped that using a different activation mechanism might alleviate these bugs, but so far this has not been the case.

  • Show Dock icon - Normally, SwitchGlass does not appear in the macOS Dock when it’s running. Enabling this setting will show a SwitchGlass app icon in the Dock and will provide SwitchGlass with its own menu bar when it’s the frontmost app.

  • Use polling instead of KVO - KVO stands for Key-Value Observing, which is a way for an app to be notified when some property of some object within the app changes. SwitchGlass uses KVO to keep track of the “activation policy” of running apps. (SwitchGlass and the macOS Dock only show icons for running apps that have a “regular” activation policy.)

    KVO is efficient, but using it can sometimes lead to bugs or crashes. Enabling the “Use Polling Instead of KVO” setting tells SwitchGlass not to use KVO but to instead periodically check for activation policy changes.

    This repeated checking is called “polling,” and it’s both less responsive and less efficient than a notification system like KVO. It’s less responsive because the polling happens periodically (e.g., every ten seconds), which means changes will not be visible immediately. Polling is less efficient because it requires repeatedly running code to check the status of the monitored items, rather than just waiting for a notification.

    This setting exists for the handful of SwitchGlass users who may be experiencing bugs that I have been unable to reproduce locally but that I suspect might be related to KVO. If you are not experiencing crashes in SwitchGlass, then I don't recommend enabling this setting.

  • Polling Interval - The amount of time in seconds to wait between each activation policy check when not using KVO.

  • Click Margin - The maximum number of points in the margin between the app switcher and the edge of the screen that will still trigger an app icon click. For example, a click margin value of 5 means that you can click up to five points outside the app switcher on the side closest to the screen edge and it will still count as a valid click on the nearest app icon. (This setting has no effect on app switchers that have their margins set to zero.)

  • Auto-Hide Runway - When an app switcher is set to auto-hide, it will appear when the pointer approaches the screen edge, and it will disappear when the pointer moves away from the app switcher. The auto-hide runway is the distance in points that the pointer is allowed to move away from the app switcher before it will hide itself. For example, a value of 10 would allow the cursor to move 10 points away from the app switcher before it would hide, and a value of 0 would mean that the app switcher would hide as soon as the pointer was no longer over the app switcher.

  • Auto-Hide Delay - When an app switcher is set to auto-hide and it’s currently visible, the auto-hide delay determines how long (in seconds) after the pointer moves away from the app switcher before the app switcher will hide. Fractional seconds are allowed. For example, an auto-hide delay of 2.5 means the app switcher will wait two and a half seconds after the pointer moves away from it before it hides.

  • Auto-Show Delay - When an app switcher is set to auto-hide and it’s not currently visible, the auto-show delay determines how long (in seconds) after the pointer moves to the screen edge where the app switcher is located before the app switcher will become visible. Fractional seconds are allowed. For example, an auto-show delay of 1.25 means the app switcher will wait one and a quarter seconds after the pointer moves to the screen edge before the app switcher becomes visible.

  • App Transition Animation Duration - The duration in seconds of each app transition animation. Fractional seconds are allowed.

  • Auto-Hide Anti-Thrash Threshold - When an app switcher is set to auto-hide, this is the minimum time in seconds that must elapse between hide and show events. Fractional seconds are allowed.

    This setting exists to prevent the app switcher from appearing and disappearing rapidly if, for example, the pointer enters and exits the activation region in quick succession. In other words, it’s meant to avoid “visual thrashing.”

  • Screen Window Refresh Interval - When the “Show Apps” setting is set to “Filtered By Display,” SwitchGlass needs to keep track of which windows are on which displays. Unfortunately, there’s no good way to be notified when a window moves from one display to another, so SwitchGlass must periodically examine each window to keep an updated mapping of which windows are on which displays. The Screen Window Refresh Interval is the time in seconds between each of these periodic window surveys.

  • Auto-Hide Activation Minimum Screen Edge Proportion - When an app switcher is set to auto-hide and it’s not currently visible, this setting determines the minimum proportion of the screen edge that will act as an activation region to show the app switcher.

    Consider an app switcher with just two app icons in it. If the activation region matched the length of the app switcher, it would be very small. This setting is used to ensure a minimum size for the activation region, regardless of the length of the app switcher itself.

    The value of this setting is the denominator of the fraction of the screen edge. For example, a value of 3 means the activation region will never be smaller than 1/3 the length of the screen edge. Fractional values are allowed.

  • Require observed window visibility when showing apps “By Display (All)” - When the “Show Apps” setting is set to “By Display (All)”, require each window to be observed as visible at least once before it “counts” towards an app’s presence on a display. See this earlier question for more details.

Q: What’s the deal with the name?

A: The “switch” part is easy: SwitchGlass is used to switch apps. I had considered “Switchblade,” but rejected it as too violent. For whatever reason, my mind jumped from there to switchgrass, the plant. Then it was just a short hop to SwitchGlass based on the app switcher’s translucent, glass-like appearance. The name is InterCapped in the tradition of classic Mac applications like MacPaint, MacWrite, FileMaker, SuperPaint, etc.

Q: Who created the icon?

A: The SwitchGlass icon was created by Brad Ellis.

Q: Are there any expert features or easter eggs?

A: Here are a few:

  • Hold down the Option key while clicking the menu bar icon to quickly hide and show all visible app switchers. (Read more above.)
  • Hold down the Option key while clicking the “Reset” button in the Appearance window to reset more settings to their default values.
  • Hold down the Option key while right-clicking or Control-clicking an app icon to see some new items in the context menu, including “Refresh Icon”, which will attempt to reload the icon image for an app, and “Force Quit”, which will replace the “Quit” menu item, if present.
  • When auto-hide is enabled, holding down the Option key will prevent the app switcher from appearing when the pointer enters its activation area.
  • Hold down Command, Option, and Control while hovering the pointer over app icons in the app switcher to see some debugging information about each app.
  • Command-Shift-click an app switcher to enter reorder mode.
  • Command-Option-click the menu bar icon to cycle through the different menu bar icons.
  • Command-Option-Shift-click the menu bar icon to switch the API set used to activate apps. (Sadly, both available API sets sometimes exhibit the same bugs described above.)

Q: Is there a privacy policy?

A: Yes.