nikitabobko / AeroSpace

AeroSpace is an i3-like tiling window manager for macOS
https://nikitabobko.github.io/AeroSpace/guide
MIT License
3.6k stars 55 forks source link

AeroSpace moves CleanShot X's supplementary UI elements to primary monitor #221

Open coldenate opened 2 months ago

coldenate commented 2 months ago

Hi @nikitabobko! This app is amazing! I'd like to ask for insight on this bug

CleanShot 2024-05-08 at 21 34 08@2x (click me)

I experience an issue on CleanShot X where their UI for selecting a monitor is captured and grabbed by AeroSpace and moved to the current focused monitor. Here's what I think is happening: The supplementary "Drag to select capture area." button is placed on my secondary display. CleanShot X can notify me that I can optionally use my secondary display. Aerospace recognizes this and moves the button to my primary display, as I just saw it open.

I initially thought this config ↓ would help me, but it does not seem to work for that floating window from the CleanShot UI.

[[on-window-detected]]
if.app-id = 'pl.maketheweb.cleanshotx'
check-further-callbacks = true
run = 'layout floating'

Do you know how to better select this?

nikitabobko commented 2 months ago

I experience an issue on CleanShot X where their UI for selecting a monitor is captured and grabbed by AeroSpace and moved to the current focused monitor.

Please try 0.11.0-Beta. 0.11.0-Beta has an improved "popup" detection (suspicious windows without close, minimize, and maximize buttons). Maybe CleanShot is detected as a popup in 0.11.0-Beta

If it's not, please capture CleanShot window accessibility debug info with aerospace debug-windows command (actually, I'd be interested in the debug-windows output regardless of whether the bug is fixed)

ahmed2m commented 2 months ago

I have another bug with cleanshot X (I haven't tried using it with 2 monitors) my issue is when it's recording with CleanShot, there's a floating thing and a dropshadow over areas not recorded and a keyboard shortcut OSD on keyboard strokes.

I guess you can the bug in the video I recorded to document another bug in this comment: https://github.com/nikitabobko/AeroSpace/issues/121#issuecomment-2121407433 if you look closely, I had to press option+j twice to focus the other window, Aerospace is focusing one of CleanShot's "windows" I guess.

I tried to reproduce today, it's still there but the menubar doesn't get empty as in the video, instead, it persists the most recent window items in these two or three ghost window switching attempts.

The following the debug dump for me trying to move focus between Kitty Terminal and Arc browser with CleanShotX, and I experienced like 2 ghost attempts.

debug-windows ```net.kovidgoyal.kitty.window.5900 windowId: 5900 net.kovidgoyal.kitty.window.5900 workspace: 1 net.kovidgoyal.kitty.window.5900 treeNodeParent: AppBundle.TilingContainer net.kovidgoyal.kitty.window.5900 recognizedAsDialog: false net.kovidgoyal.kitty.window.5900 AXTitle: Optional(aerospace debug-windows) net.kovidgoyal.kitty.window.5900 AXRole: Optional(AXWindow) net.kovidgoyal.kitty.window.5900 AXSubrole: Optional(AXStandardWindow) net.kovidgoyal.kitty.window.5900 AXFocused: Optional(0) net.kovidgoyal.kitty.window.5900 AXFullScreen: Optional(0) net.kovidgoyal.kitty.window.5900 AXFrame: Optional( {value = x:735.000000 y:37.000000 w:735.000000 h:841.000000 type = kAXValueCGRectType}) net.kovidgoyal.kitty.window.5900 AXPosition: Optional( {value = x:735.000000 y:37.000000 type = kAXValueCGPointType}) net.kovidgoyal.kitty.window.5900 AXGrowArea: nil net.kovidgoyal.kitty.window.5900 AXMinimizeButton: AXUIElement { net.kovidgoyal.kitty.window.5900 AXRole: Optional(AXButton) net.kovidgoyal.kitty.window.5900 AXTitle: nil net.kovidgoyal.kitty.window.5900 AXSubrole: Optional(AXMinimizeButton) net.kovidgoyal.kitty.window.5900 AXEnabled: Optional(1) net.kovidgoyal.kitty.window.5900 AXParent: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 AXTopLevelUIElement: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 AXWindow: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 Ignored: AXFrame, AXSize, AXFocused, AXHelp, AXPosition, AXRoleDescription net.kovidgoyal.kitty.window.5900 } net.kovidgoyal.kitty.window.5900 AXDocument: nil net.kovidgoyal.kitty.window.5900 AXSections: [ net.kovidgoyal.kitty.window.5900 Optional({ net.kovidgoyal.kitty.window.5900 SectionDescription = Content; net.kovidgoyal.kitty.window.5900 SectionObject = " {pid=87936}"; net.kovidgoyal.kitty.window.5900 SectionUniqueID = AXContent; net.kovidgoyal.kitty.window.5900 }) net.kovidgoyal.kitty.window.5900 ] net.kovidgoyal.kitty.window.5900 AXCloseButton: AXUIElement { net.kovidgoyal.kitty.window.5900 AXRole: Optional(AXButton) net.kovidgoyal.kitty.window.5900 AXTitle: nil net.kovidgoyal.kitty.window.5900 AXSubrole: Optional(AXCloseButton) net.kovidgoyal.kitty.window.5900 AXEnabled: Optional(1) net.kovidgoyal.kitty.window.5900 AXParent: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 AXTopLevelUIElement: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 AXWindow: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 Ignored: AXFrame, AXSize, AXFocused, AXHelp, AXPosition, AXRoleDescription, AXEdited net.kovidgoyal.kitty.window.5900 } net.kovidgoyal.kitty.window.5900 AXMain: Optional(1) net.kovidgoyal.kitty.window.5900 AXActivationPoint: Optional( {value = x:805.000000 y:51.000000 type = kAXValueCGPointType}) net.kovidgoyal.kitty.window.5900 AXFullScreenButton: AXUIElement { net.kovidgoyal.kitty.window.5900 AXRole: Optional(AXButton) net.kovidgoyal.kitty.window.5900 AXTitle: nil net.kovidgoyal.kitty.window.5900 AXSubrole: Optional(AXFullScreenButton) net.kovidgoyal.kitty.window.5900 AXEnabled: Optional(1) net.kovidgoyal.kitty.window.5900 AXParent: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 AXTopLevelUIElement: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 AXWindow: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 Ignored: AXFrame, AXSize, AXFocused, AXChildren, AXHelp, AXPosition, AXRoleDescription net.kovidgoyal.kitty.window.5900 } net.kovidgoyal.kitty.window.5900 AXProxy: nil net.kovidgoyal.kitty.window.5900 AXDefaultButton: nil net.kovidgoyal.kitty.window.5900 AXMinimized: Optional(0) net.kovidgoyal.kitty.window.5900 AXParent: Optional( {pid=87936}) net.kovidgoyal.kitty.window.5900 AXTitleUIElement: AXUIElement(windowId=5900, title=nil, role="AXStaticText", subrole=nil) net.kovidgoyal.kitty.window.5900 AXCancelButton: nil net.kovidgoyal.kitty.window.5900 AXModal: Optional(0) net.kovidgoyal.kitty.window.5900 AXZoomButton: AXUIElement { net.kovidgoyal.kitty.window.5900 AXRole: Optional(AXButton) net.kovidgoyal.kitty.window.5900 AXTitle: nil net.kovidgoyal.kitty.window.5900 AXSubrole: Optional(AXFullScreenButton) net.kovidgoyal.kitty.window.5900 AXEnabled: Optional(1) net.kovidgoyal.kitty.window.5900 AXParent: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 AXTopLevelUIElement: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 AXWindow: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty.window.5900 Ignored: AXFrame, AXSize, AXFocused, AXChildren, AXHelp, AXPosition, AXRoleDescription net.kovidgoyal.kitty.window.5900 } net.kovidgoyal.kitty.window.5900 AXSize: Optional( {value = w:735.000000 h:841.000000 type = kAXValueCGSizeType}) net.kovidgoyal.kitty.window.5900 AXToolbarButton: nil net.kovidgoyal.kitty.window.5900 Ignored: AXChildrenInNavigationOrder, AXChildren, AXRoleDescription net.kovidgoyal.kitty AXRole: Optional(AXApplication) net.kovidgoyal.kitty AXTitle: Optional(kitty) net.kovidgoyal.kitty AXFunctionRowTopLevelElements: [ net.kovidgoyal.kitty ] net.kovidgoyal.kitty AXFrame: nil net.kovidgoyal.kitty AXFocusedUIElement: AXUIElement(windowId=5900, title=nil, role="AXTextArea", subrole=nil) net.kovidgoyal.kitty AXFrontmost: Optional(1) net.kovidgoyal.kitty AXExtrasMenuBar: nil net.kovidgoyal.kitty AXMainWindow: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty AXFocusedWindow: AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty AXMenuBar: Optional( {pid=87936}) net.kovidgoyal.kitty AXWindows: [ net.kovidgoyal.kitty AXUIElement(windowId=5900, title="aerospace debug-windows", role="AXWindow", subrole="AXStandardWindow") net.kovidgoyal.kitty ] net.kovidgoyal.kitty AXSize: nil net.kovidgoyal.kitty AXPosition: nil net.kovidgoyal.kitty Ignored: AXChildren, AXChildrenInNavigationOrder, AXEnhancedUserInterface, AXPreferredLanguage, AXRoleDescription, AXHidden pl.maketheweb.cleanshotx.window.5906 windowId: 5906 pl.maketheweb.cleanshotx.window.5906 workspace: 1 pl.maketheweb.cleanshotx.window.5906 treeNodeParent: Workspace(name: '1', isVisible: 'true', isEffectivelyEmpty: 'false') pl.maketheweb.cleanshotx.window.5906 recognizedAsDialog: true pl.maketheweb.cleanshotx.window.5906 AXTitle: Optional() pl.maketheweb.cleanshotx.window.5906 AXRole: Optional(AXWindow) pl.maketheweb.cleanshotx.window.5906 AXSubrole: Optional(AXStandardWindow) pl.maketheweb.cleanshotx.window.5906 AXFocused: Optional(1) pl.maketheweb.cleanshotx.window.5906 AXFullScreen: Optional(0) pl.maketheweb.cleanshotx.window.5906 AXFrame: Optional( {value = x:0.000000 y:0.000000 w:1470.000000 h:956.000000 type = kAXValueCGRectType}) pl.maketheweb.cleanshotx.window.5906 AXPosition: Optional( {value = x:0.000000 y:0.000000 type = kAXValueCGPointType}) pl.maketheweb.cleanshotx.window.5906 AXGrowArea: nil pl.maketheweb.cleanshotx.window.5906 AXMinimizeButton: nil pl.maketheweb.cleanshotx.window.5906 AXDocument: nil pl.maketheweb.cleanshotx.window.5906 AXSections: [ pl.maketheweb.cleanshotx.window.5906 ] pl.maketheweb.cleanshotx.window.5906 AXCloseButton: nil pl.maketheweb.cleanshotx.window.5906 AXMain: Optional(1) pl.maketheweb.cleanshotx.window.5906 AXActivationPoint: Optional( {value = x:-1.000000 y:957.000000 type = kAXValueCGPointType}) pl.maketheweb.cleanshotx.window.5906 AXFullScreenButton: nil pl.maketheweb.cleanshotx.window.5906 AXProxy: nil pl.maketheweb.cleanshotx.window.5906 AXDefaultButton: nil pl.maketheweb.cleanshotx.window.5906 AXMinimized: Optional(0) pl.maketheweb.cleanshotx.window.5906 AXParent: Optional( {pid=2055}) pl.maketheweb.cleanshotx.window.5906 AXTitleUIElement: nil pl.maketheweb.cleanshotx.window.5906 AXCancelButton: nil pl.maketheweb.cleanshotx.window.5906 AXModal: Optional(0) pl.maketheweb.cleanshotx.window.5906 AXZoomButton: nil pl.maketheweb.cleanshotx.window.5906 AXSize: Optional( {value = w:1470.000000 h:956.000000 type = kAXValueCGSizeType}) pl.maketheweb.cleanshotx.window.5906 AXToolbarButton: nil pl.maketheweb.cleanshotx.window.5906 Ignored: AXChildrenInNavigationOrder, AXChildren, AXRoleDescription pl.maketheweb.cleanshotx AXRole: Optional(AXApplication) pl.maketheweb.cleanshotx AXTitle: Optional(CleanShot X) pl.maketheweb.cleanshotx AXFunctionRowTopLevelElements: [ pl.maketheweb.cleanshotx ] pl.maketheweb.cleanshotx AXFrame: nil pl.maketheweb.cleanshotx AXFocusedUIElement: AXUIElement(windowId=5906, title="", role="AXWindow", subrole="AXStandardWindow") pl.maketheweb.cleanshotx AXFrontmost: Optional(1) pl.maketheweb.cleanshotx AXExtrasMenuBar: Optional( {pid=2055}) pl.maketheweb.cleanshotx AXMainWindow: AXUIElement(windowId=5906, title="", role="AXWindow", subrole="AXStandardWindow") pl.maketheweb.cleanshotx AXFocusedWindow: AXUIElement(windowId=5906, title="", role="AXWindow", subrole="AXStandardWindow") pl.maketheweb.cleanshotx AXMenuBar: Optional( {pid=2055}) pl.maketheweb.cleanshotx AXWindows: [ pl.maketheweb.cleanshotx AXUIElement(windowId=5911, title="", role="AXWindow", subrole="AXDialog"), pl.maketheweb.cleanshotx AXUIElement(windowId=5909, title="", role="AXWindow", subrole="AXStandardWindow"), pl.maketheweb.cleanshotx AXUIElement(windowId=5906, title="", role="AXWindow", subrole="AXStandardWindow") pl.maketheweb.cleanshotx ] pl.maketheweb.cleanshotx AXSize: nil pl.maketheweb.cleanshotx AXPosition: nil pl.maketheweb.cleanshotx Ignored: AXChildren, AXChildrenInNavigationOrder, AXEnhancedUserInterface, AXPreferredLanguage, AXRoleDescription, AXHidden pl.maketheweb.cleanshotx.window.5909 windowId: 5909 pl.maketheweb.cleanshotx.window.5909 workspace: 1 pl.maketheweb.cleanshotx.window.5909 treeNodeParent: Workspace(name: '1', isVisible: 'true', isEffectivelyEmpty: 'false') pl.maketheweb.cleanshotx.window.5909 recognizedAsDialog: true pl.maketheweb.cleanshotx.window.5909 AXTitle: Optional() pl.maketheweb.cleanshotx.window.5909 AXRole: Optional(AXWindow) pl.maketheweb.cleanshotx.window.5909 AXSubrole: Optional(AXStandardWindow) pl.maketheweb.cleanshotx.window.5909 AXFocused: Optional(1) pl.maketheweb.cleanshotx.window.5909 AXFullScreen: Optional(0) pl.maketheweb.cleanshotx.window.5909 AXFrame: Optional( {value = x:535.000000 y:675.000000 w:267.000000 h:59.000000 type = kAXValueCGRectType}) pl.maketheweb.cleanshotx.window.5909 AXPosition: Optional( {value = x:535.000000 y:675.000000 type = kAXValueCGPointType}) pl.maketheweb.cleanshotx.window.5909 AXGrowArea: nil pl.maketheweb.cleanshotx.window.5909 AXMinimizeButton: nil pl.maketheweb.cleanshotx.window.5909 AXDocument: nil pl.maketheweb.cleanshotx.window.5909 AXSections: [ pl.maketheweb.cleanshotx.window.5909 Optional({ pl.maketheweb.cleanshotx.window.5909 SectionDescription = Content; pl.maketheweb.cleanshotx.window.5909 SectionObject = " {pid=2055}"; pl.maketheweb.cleanshotx.window.5909 SectionUniqueID = AXContent; pl.maketheweb.cleanshotx.window.5909 }) pl.maketheweb.cleanshotx.window.5909 ] pl.maketheweb.cleanshotx.window.5909 AXCloseButton: nil pl.maketheweb.cleanshotx.window.5909 AXMain: Optional(1) pl.maketheweb.cleanshotx.window.5909 AXActivationPoint: Optional( {value = x:546.000000 y:723.000000 type = kAXValueCGPointType}) pl.maketheweb.cleanshotx.window.5909 AXFullScreenButton: nil pl.maketheweb.cleanshotx.window.5909 AXProxy: nil pl.maketheweb.cleanshotx.window.5909 AXDefaultButton: nil pl.maketheweb.cleanshotx.window.5909 AXMinimized: Optional(0) pl.maketheweb.cleanshotx.window.5909 AXParent: Optional( {pid=2055}) pl.maketheweb.cleanshotx.window.5909 AXTitleUIElement: nil pl.maketheweb.cleanshotx.window.5909 AXCancelButton: nil pl.maketheweb.cleanshotx.window.5909 AXModal: Optional(0) pl.maketheweb.cleanshotx.window.5909 AXZoomButton: nil pl.maketheweb.cleanshotx.window.5909 AXSize: Optional( {value = w:267.000000 h:59.000000 type = kAXValueCGSizeType}) pl.maketheweb.cleanshotx.window.5909 AXToolbarButton: nil pl.maketheweb.cleanshotx.window.5909 Ignored: AXChildrenInNavigationOrder, AXChildren, AXRoleDescription pl.maketheweb.cleanshotx AXRole: Optional(AXApplication) pl.maketheweb.cleanshotx AXTitle: Optional(CleanShot X) pl.maketheweb.cleanshotx AXFunctionRowTopLevelElements: [ pl.maketheweb.cleanshotx ] pl.maketheweb.cleanshotx AXFrame: nil pl.maketheweb.cleanshotx AXFocusedUIElement: AXUIElement(windowId=5909, title="", role="AXWindow", subrole="AXStandardWindow") pl.maketheweb.cleanshotx AXFrontmost: Optional(1) pl.maketheweb.cleanshotx AXExtrasMenuBar: Optional( {pid=2055}) pl.maketheweb.cleanshotx AXMainWindow: AXUIElement(windowId=5909, title="", role="AXWindow", subrole="AXStandardWindow") pl.maketheweb.cleanshotx AXFocusedWindow: AXUIElement(windowId=5909, title="", role="AXWindow", subrole="AXStandardWindow") pl.maketheweb.cleanshotx AXMenuBar: Optional( {pid=2055}) pl.maketheweb.cleanshotx AXWindows: [ pl.maketheweb.cleanshotx AXUIElement(windowId=5911, title="", role="AXWindow", subrole="AXDialog"), pl.maketheweb.cleanshotx AXUIElement(windowId=5909, title="", role="AXWindow", subrole="AXStandardWindow"), pl.maketheweb.cleanshotx AXUIElement(windowId=5906, title="", role="AXWindow", subrole="AXStandardWindow") pl.maketheweb.cleanshotx ] pl.maketheweb.cleanshotx AXSize: nil pl.maketheweb.cleanshotx AXPosition: nil pl.maketheweb.cleanshotx Ignored: AXChildren, AXChildrenInNavigationOrder, AXEnhancedUserInterface, AXPreferredLanguage, AXRoleDescription, AXHidden company.thebrowser.Browser.window.3202 windowId: 3202 company.thebrowser.Browser.window.3202 workspace: 1 company.thebrowser.Browser.window.3202 treeNodeParent: AppBundle.TilingContainer company.thebrowser.Browser.window.3202 recognizedAsDialog: false company.thebrowser.Browser.window.3202 AXTitle: Optional(AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace) company.thebrowser.Browser.window.3202 AXRole: Optional(AXWindow) company.thebrowser.Browser.window.3202 AXSubrole: Optional(AXStandardWindow) company.thebrowser.Browser.window.3202 AXIdentifier: Optional(bigBrowserWindow-E4358D42-4E2C-4FB0-B651-747D27521B8D) company.thebrowser.Browser.window.3202 AXFocused: Optional(0) company.thebrowser.Browser.window.3202 AXFullScreen: Optional(0) company.thebrowser.Browser.window.3202 AXFrame: Optional( {value = x:-0.000000 y:37.000000 w:735.000000 h:841.000000 type = kAXValueCGRectType}) company.thebrowser.Browser.window.3202 AXPosition: Optional( {value = x:-0.000000 y:37.000000 type = kAXValueCGPointType}) company.thebrowser.Browser.window.3202 AXGrowArea: nil company.thebrowser.Browser.window.3202 AXMinimizeButton: AXUIElement { company.thebrowser.Browser.window.3202 AXRole: Optional(AXButton) company.thebrowser.Browser.window.3202 AXTitle: nil company.thebrowser.Browser.window.3202 AXSubrole: Optional(AXMinimizeButton) company.thebrowser.Browser.window.3202 AXEnabled: Optional(1) company.thebrowser.Browser.window.3202 AXParent: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 AXTopLevelUIElement: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 AXWindow: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 Ignored: AXFrame, AXSize, AXFocused, AXHelp, AXPosition, AXRoleDescription company.thebrowser.Browser.window.3202 } company.thebrowser.Browser.window.3202 AXDocument: nil company.thebrowser.Browser.window.3202 AXSections: [ company.thebrowser.Browser.window.3202 Optional({ company.thebrowser.Browser.window.3202 SectionDescription = Content; company.thebrowser.Browser.window.3202 SectionObject = " {pid=1068}"; company.thebrowser.Browser.window.3202 SectionUniqueID = AXContent; company.thebrowser.Browser.window.3202 }), company.thebrowser.Browser.window.3202 Optional({ company.thebrowser.Browser.window.3202 SectionDescription = "Top Level Navigator"; company.thebrowser.Browser.window.3202 SectionObject = " {pid=1068}"; company.thebrowser.Browser.window.3202 SectionUniqueID = AXTopLevelNavigator; company.thebrowser.Browser.window.3202 }), company.thebrowser.Browser.window.3202 Optional({ company.thebrowser.Browser.window.3202 SectionObject = " {pid=1068}"; company.thebrowser.Browser.window.3202 SectionUniqueID = AXContainer; company.thebrowser.Browser.window.3202 }), company.thebrowser.Browser.window.3202 Optional({ company.thebrowser.Browser.window.3202 SectionObject = " {pid=1068}"; company.thebrowser.Browser.window.3202 SectionUniqueID = AXContainer; company.thebrowser.Browser.window.3202 }), company.thebrowser.Browser.window.3202 Optional({ company.thebrowser.Browser.window.3202 SectionDescription = "Content Navigator"; company.thebrowser.Browser.window.3202 SectionObject = " {pid=1068}"; company.thebrowser.Browser.window.3202 SectionUniqueID = AXContentNavigator; company.thebrowser.Browser.window.3202 }) company.thebrowser.Browser.window.3202 ] company.thebrowser.Browser.window.3202 AXCloseButton: AXUIElement { company.thebrowser.Browser.window.3202 AXRole: Optional(AXButton) company.thebrowser.Browser.window.3202 AXTitle: nil company.thebrowser.Browser.window.3202 AXSubrole: Optional(AXCloseButton) company.thebrowser.Browser.window.3202 AXEnabled: Optional(1) company.thebrowser.Browser.window.3202 AXParent: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 AXTopLevelUIElement: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 AXWindow: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 Ignored: AXFrame, AXSize, AXFocused, AXHelp, AXPosition, AXRoleDescription, AXEdited company.thebrowser.Browser.window.3202 } company.thebrowser.Browser.window.3202 AXMain: Optional(1) company.thebrowser.Browser.window.3202 AXActivationPoint: Optional( {value = x:10.000000 y:51.000000 type = kAXValueCGPointType}) company.thebrowser.Browser.window.3202 AXFullScreenButton: AXUIElement { company.thebrowser.Browser.window.3202 AXRole: Optional(AXButton) company.thebrowser.Browser.window.3202 AXTitle: nil company.thebrowser.Browser.window.3202 AXSubrole: Optional(AXFullScreenButton) company.thebrowser.Browser.window.3202 AXEnabled: Optional(1) company.thebrowser.Browser.window.3202 AXParent: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 AXTopLevelUIElement: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 AXWindow: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 Ignored: AXFrame, AXSize, AXFocused, AXChildren, AXHelp, AXPosition, AXRoleDescription company.thebrowser.Browser.window.3202 } company.thebrowser.Browser.window.3202 AXProxy: nil company.thebrowser.Browser.window.3202 AXDefaultButton: nil company.thebrowser.Browser.window.3202 AXMinimized: Optional(0) company.thebrowser.Browser.window.3202 AXParent: Optional( {pid=1068}) company.thebrowser.Browser.window.3202 AXTitleUIElement: nil company.thebrowser.Browser.window.3202 AXCancelButton: nil company.thebrowser.Browser.window.3202 AXModal: Optional(0) company.thebrowser.Browser.window.3202 AXZoomButton: AXUIElement { company.thebrowser.Browser.window.3202 AXRole: Optional(AXButton) company.thebrowser.Browser.window.3202 AXTitle: nil company.thebrowser.Browser.window.3202 AXSubrole: Optional(AXFullScreenButton) company.thebrowser.Browser.window.3202 AXEnabled: Optional(1) company.thebrowser.Browser.window.3202 AXParent: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 AXTopLevelUIElement: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 AXWindow: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser.window.3202 Ignored: AXFrame, AXSize, AXFocused, AXChildren, AXHelp, AXPosition, AXRoleDescription company.thebrowser.Browser.window.3202 } company.thebrowser.Browser.window.3202 AXSize: Optional( {value = w:735.000000 h:841.000000 type = kAXValueCGSizeType}) company.thebrowser.Browser.window.3202 AXToolbarButton: nil company.thebrowser.Browser.window.3202 Ignored: AXChildrenInNavigationOrder, AXChildren, AXRoleDescription company.thebrowser.Browser AXRole: Optional(AXApplication) company.thebrowser.Browser AXTitle: Optional(Arc) company.thebrowser.Browser AXFunctionRowTopLevelElements: [ company.thebrowser.Browser ] company.thebrowser.Browser AXFrame: nil company.thebrowser.Browser AXFocusedUIElement: nil company.thebrowser.Browser AXFrontmost: Optional(1) company.thebrowser.Browser AXExtrasMenuBar: nil company.thebrowser.Browser AXMainWindow: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser AXFocusedWindow: AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser AXMenuBar: Optional( {pid=1068}) company.thebrowser.Browser AXWindows: [ company.thebrowser.Browser AXUIElement(windowId=3202, title="AeroSpace moves CleanShot X's supplementary UI elements to primary monitor · Issue #221 · nikitabobko/AeroSpace", role="AXWindow", subrole="AXStandardWindow") company.thebrowser.Browser ] company.thebrowser.Browser AXSize: nil company.thebrowser.Browser AXPosition: nil company.thebrowser.Browser Ignored: AXChildren, AXChildrenInNavigationOrder, AXEnhancedUserInterface, AXPreferredLanguage, AXRoleDescription, AXHidden !!! DISCLAIMER !!! !!! 'debug-windows' command is not stable API. Please don't rely on the command existence and output format !!! !!! The only intended use case is to report bugs about incorrect windows handling !!! ```
coldenate commented 1 month ago

My issue does not appear to be resolved after the update. However, I must say that your improvements feel significantly better across the application.

Here are the logs: @nikitabobko

Other noise from iterm ``` com.googlecode.iterm2.window.751 windowId: 751 com.googlecode.iterm2.window.751 workspace: 1 com.googlecode.iterm2.window.751 treeNodeParent: AppBundle.TilingContainer com.googlecode.iterm2.window.751 recognizedAsDialog: false com.googlecode.iterm2.window.751 AXTitle: Optional(happy hacking! :)) com.googlecode.iterm2.window.751 AXRole: Optional(AXWindow) com.googlecode.iterm2.window.751 AXSubrole: Optional(AXStandardWindow) com.googlecode.iterm2.window.751 AXFocused: Optional(0) com.googlecode.iterm2.window.751 AXFullScreen: Optional(0) com.googlecode.iterm2.window.751 AXFrame: Optional( {value = x:15.000000 y:40.000000 w:2306.000000 h:2572.000000 type = kAXValueCGRectType}) com.googlecode.iterm2.window.751 AXPosition: Optional( {value = x:15.000000 y:40.000000 type = kAXValueCGPointType}) com.googlecode.iterm2.window.751 AXGrowArea: nil com.googlecode.iterm2.window.751 AXMinimizeButton: AXUIElement { com.googlecode.iterm2.window.751 AXRole: Optional(AXButton) com.googlecode.iterm2.window.751 AXTitle: nil com.googlecode.iterm2.window.751 AXSubrole: Optional(AXMinimizeButton) com.googlecode.iterm2.window.751 AXEnabled: Optional(1) com.googlecode.iterm2.window.751 AXParent: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 AXTopLevelUIElement: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 AXWindow: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 Ignored: AXFrame, AXSize, AXFocused, AXHelp, AXPosition, AXRoleDescription com.googlecode.iterm2.window.751 } com.googlecode.iterm2.window.751 AXDocument: nil com.googlecode.iterm2.window.751 AXSections: [ com.googlecode.iterm2.window.751 Optional({ com.googlecode.iterm2.window.751 SectionDescription = Content; com.googlecode.iterm2.window.751 SectionObject = " {pid=24325}"; com.googlecode.iterm2.window.751 SectionUniqueID = AXContent; com.googlecode.iterm2.window.751 }) com.googlecode.iterm2.window.751 ] com.googlecode.iterm2.window.751 AXCloseButton: AXUIElement { com.googlecode.iterm2.window.751 AXRole: Optional(AXButton) com.googlecode.iterm2.window.751 AXTitle: nil com.googlecode.iterm2.window.751 AXSubrole: Optional(AXCloseButton) com.googlecode.iterm2.window.751 AXEnabled: Optional(1) com.googlecode.iterm2.window.751 AXParent: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 AXTopLevelUIElement: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 AXWindow: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 Ignored: AXFrame, AXSize, AXFocused, AXHelp, AXPosition, AXRoleDescription, AXEdited com.googlecode.iterm2.window.751 } com.googlecode.iterm2.window.751 AXMain: Optional(1) com.googlecode.iterm2.window.751 AXActivationPoint: Optional( {value = x:-1.000000 y:2629.000000 type = kAXValueCGPointType}) com.googlecode.iterm2.window.751 AXFullScreenButton: AXUIElement { com.googlecode.iterm2.window.751 AXRole: Optional(AXButton) com.googlecode.iterm2.window.751 AXTitle: nil com.googlecode.iterm2.window.751 AXSubrole: Optional(AXFullScreenButton) com.googlecode.iterm2.window.751 AXEnabled: Optional(1) com.googlecode.iterm2.window.751 AXParent: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 AXTopLevelUIElement: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 AXWindow: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 Ignored: AXFrame, AXSize, AXFocused, AXChildren, AXHelp, AXPosition, AXRoleDescription com.googlecode.iterm2.window.751 } com.googlecode.iterm2.window.751 AXProxy: nil com.googlecode.iterm2.window.751 AXDefaultButton: nil com.googlecode.iterm2.window.751 AXMinimized: Optional(0) com.googlecode.iterm2.window.751 AXParent: Optional( {pid=24325}) com.googlecode.iterm2.window.751 AXTitleUIElement: AXUIElement(windowId=751, title=nil, role="AXStaticText", subrole=nil) com.googlecode.iterm2.window.751 AXCancelButton: nil com.googlecode.iterm2.window.751 AXModal: Optional(0) com.googlecode.iterm2.window.751 AXZoomButton: AXUIElement { com.googlecode.iterm2.window.751 AXRole: Optional(AXButton) com.googlecode.iterm2.window.751 AXTitle: nil com.googlecode.iterm2.window.751 AXSubrole: Optional(AXFullScreenButton) com.googlecode.iterm2.window.751 AXEnabled: Optional(1) com.googlecode.iterm2.window.751 AXParent: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 AXTopLevelUIElement: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 AXWindow: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2.window.751 Ignored: AXFrame, AXSize, AXFocused, AXChildren, AXHelp, AXPosition, AXRoleDescription com.googlecode.iterm2.window.751 } com.googlecode.iterm2.window.751 AXSize: Optional( {value = w:2306.000000 h:2572.000000 type = kAXValueCGSizeType}) com.googlecode.iterm2.window.751 AXToolbarButton: nil com.googlecode.iterm2.window.751 Ignored: AXChildrenInNavigationOrder, AXChildren, AXRoleDescription com.googlecode.iterm2 AXRole: Optional(AXApplication) com.googlecode.iterm2 AXTitle: Optional(iTerm2) com.googlecode.iterm2 AXFunctionRowTopLevelElements: [ com.googlecode.iterm2 ] com.googlecode.iterm2 AXFrame: nil com.googlecode.iterm2 AXFocusedUIElement: AXUIElement(windowId=751, title=nil, role="AXTextArea", subrole=nil) com.googlecode.iterm2 AXFrontmost: Optional(1) com.googlecode.iterm2 AXExtrasMenuBar: nil com.googlecode.iterm2 AXMainWindow: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2 AXFocusedWindow: AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2 AXMenuBar: Optional( {pid=24325}) com.googlecode.iterm2 AXWindows: [ com.googlecode.iterm2 AXUIElement(windowId=751, title="happy hacking! :)", role="AXWindow", subrole="AXStandardWindow") com.googlecode.iterm2 ] com.googlecode.iterm2 AXSize: nil com.googlecode.iterm2 AXPosition: nil com.googlecode.iterm2 Ignored: AXChildren, AXChildrenInNavigationOrder, AXEnhancedUserInterface, AXPreferredLanguage, AXRoleDescription, AXHidden ```
pl.maketheweb.cleanshotx.window.809 windowId: 809
pl.maketheweb.cleanshotx.window.809 workspace: 1
pl.maketheweb.cleanshotx.window.809 treeNodeParent: Workspace(name: '1', isVisible: 'true', isEffectivelyEmpty: 'false')
pl.maketheweb.cleanshotx.window.809 recognizedAsDialog: true
pl.maketheweb.cleanshotx.window.809 AXTitle: Optional()
pl.maketheweb.cleanshotx.window.809 AXRole: Optional(AXWindow)
pl.maketheweb.cleanshotx.window.809 AXSubrole: Optional(AXStandardWindow)
pl.maketheweb.cleanshotx.window.809 AXFocused: Optional(1)
pl.maketheweb.cleanshotx.window.809 AXFullScreen: Optional(0)
pl.maketheweb.cleanshotx.window.809 AXFrame: Optional(<AXValue 0x6000028f79c0> {value = x:0.000000 y:-76.000000 w:1800.000000 h:1169.000000 type = kAXValueCGRectType})
pl.maketheweb.cleanshotx.window.809 AXPosition: Optional(<AXValue 0x6000033c2a30> {value = x:0.000000 y:-76.000000 type = kAXValueCGPointType})
pl.maketheweb.cleanshotx.window.809 AXGrowArea: nil
pl.maketheweb.cleanshotx.window.809 AXMinimizeButton: nil
pl.maketheweb.cleanshotx.window.809 AXDocument: nil
pl.maketheweb.cleanshotx.window.809 AXSections: [
pl.maketheweb.cleanshotx.window.809 ]
pl.maketheweb.cleanshotx.window.809 AXCloseButton: nil
pl.maketheweb.cleanshotx.window.809 AXMain: Optional(1)
pl.maketheweb.cleanshotx.window.809 AXActivationPoint: Optional(<AXValue 0x6000033c2a30> {value = x:-1.000000 y:2629.000000 type = kAXValueCGPointType})
pl.maketheweb.cleanshotx.window.809 AXFullScreenButton: nil
pl.maketheweb.cleanshotx.window.809 AXProxy: nil
pl.maketheweb.cleanshotx.window.809 AXDefaultButton: nil
pl.maketheweb.cleanshotx.window.809 AXMinimized: Optional(0)
pl.maketheweb.cleanshotx.window.809 AXParent: Optional(<AXUIElement Application 0x6000033c2a30> {pid=889})
pl.maketheweb.cleanshotx.window.809 AXTitleUIElement: nil
pl.maketheweb.cleanshotx.window.809 AXCancelButton: nil
pl.maketheweb.cleanshotx.window.809 AXModal: Optional(0)
pl.maketheweb.cleanshotx.window.809 AXZoomButton: nil
pl.maketheweb.cleanshotx.window.809 AXSize: Optional(<AXValue 0x6000033c2a30> {value = w:1800.000000 h:1169.000000 type = kAXValueCGSizeType})
pl.maketheweb.cleanshotx.window.809 AXToolbarButton: nil
pl.maketheweb.cleanshotx.window.809 Ignored: AXChildrenInNavigationOrder, AXChildren, AXRoleDescription
pl.maketheweb.cleanshotx            AXRole: Optional(AXApplication)
pl.maketheweb.cleanshotx            AXTitle: Optional(CleanShot X)
pl.maketheweb.cleanshotx            AXFunctionRowTopLevelElements: [
pl.maketheweb.cleanshotx            ]
pl.maketheweb.cleanshotx            AXFrame: nil
pl.maketheweb.cleanshotx            AXFocusedUIElement: AXUIElement(windowId=809, title="", role="AXWindow", subrole="AXStandardWindow")
pl.maketheweb.cleanshotx            AXFrontmost: Optional(1)
pl.maketheweb.cleanshotx            AXExtrasMenuBar: Optional(<AXUIElement 0x60000336e850> {pid=889})
pl.maketheweb.cleanshotx            AXMainWindow: AXUIElement(windowId=809, title="", role="AXWindow", subrole="AXStandardWindow")
pl.maketheweb.cleanshotx            AXFocusedWindow: AXUIElement(windowId=809, title="", role="AXWindow", subrole="AXStandardWindow")
pl.maketheweb.cleanshotx            AXMenuBar: Optional(<AXUIElement 0x6000033c2a30> {pid=889})
pl.maketheweb.cleanshotx            AXWindows: [
pl.maketheweb.cleanshotx                AXUIElement(windowId=810, title="", role="AXWindow", subrole="AXStandardWindow"),
pl.maketheweb.cleanshotx                AXUIElement(windowId=809, title="", role="AXWindow", subrole="AXStandardWindow"),
pl.maketheweb.cleanshotx                AXUIElement(windowId=808, title="", role="AXWindow", subrole="AXStandardWindow"),
pl.maketheweb.cleanshotx                AXUIElement(windowId=807, title="", role="AXWindow", subrole="AXStandardWindow")
pl.maketheweb.cleanshotx            ]
pl.maketheweb.cleanshotx            AXSize: nil
pl.maketheweb.cleanshotx            AXPosition: nil
pl.maketheweb.cleanshotx            Ignored: AXChildren, AXChildrenInNavigationOrder, AXEnhancedUserInterface, AXPreferredLanguage, AXRoleDescription, AXHidden

!!! DISCLAIMER !!!
!!! 'debug-windows' command is not stable API. Please don't rely on the command existence and output format !!!
!!! The only intended use case is to report bugs about incorrect windows handling !!!

Debug session finished