A user reported an issue against iTerm2 when using BetterSnapTool. Under certain circumstances, double-clicking the title bar causes the window to zoom and then unzoom immediately. The original report is here:
I have been able to reproduce this with BetterSnapTool. I suspect the issue occurs because when using the minimal theme, iTerm2 does not have a regular title bar. It uses the NSWindowStyleMaskFullSizeContentView
style mask, and then emulates standard title bar behavior, including double-click to zoom.
The way it happens is that iTerm2 handles a double-click calling -[NSWindow performZoom:] in -mouseUp:
for one of the views that is at the top of the window.
I have observed that the OS then invokes -zoom and resizes the window synchronously (i.e., -performZoom: does not return until the window is done resizing).
Immediately after that finishes, the window gets resized via accessibility. This is the doing of BetterSnapTool:
10 AppKit 0x00007fff451bc847 -[NSWindow setFrame:display:] + 51
11 iTerm2 0x00000001000d3ef9 -[iTermWindow setFrame:display:] + 329
12 AppKit 0x00007fff459cf6d1 -[NSWindow(NSWindowAccessibility) accessibilitySetSizeAttribute:] + 718
13 AppKit 0x00007fff45788f45 NSAccessibilityPerformEntryPoint.llvm.9564667887440073428 + 16
14 AppKit 0x00007fff45785ca0 NSAccessibilityEntryPointSetValueForAttribute + 177
15 AppKit 0x00007fff4557fb58 SetAttributeValue + 320
16 HIServices 0x00007fff462e10f1 _AXXMIGSetAttributeValue + 678
17 HIServices 0x00007fff462ea0c2 _XSetAttributeValue + 554
18 HIServices 0x00007fff462c0c9d mshMIGPerform + 203
19 CoreFoundation 0x00007fff47b00b97 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
20 CoreFoundation 0x00007fff47b00af5 __CFRunLoopDoSource1 + 527
21 CoreFoundation 0x00007fff47ae8aec __CFRunLoopRun + 2524
22 CoreFoundation 0x00007fff47ae7ebe CFRunLoopRunSpecific + 455
23 HIToolbox 0x00007fff46d471ab RunCurrentEventLoopInMode + 292
24 HIToolbox 0x00007fff46d46ded ReceiveNextEventCommon + 355
25 HIToolbox 0x00007fff46d46c76 _BlockUntilNextEventMatchingListInModeWithFilter + 64
26 AppKit 0x00007fff450df79d _DPSNextEvent + 1135
27 AppKit 0x00007fff450de48b -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1361
28 AppKit 0x00007fff450d85a8 -[NSApplication run] + 699
29 AppKit 0x00007fff450c7ae8 NSApplicationMain + 777
30 iTerm2 0x000000010000255b main + 315
31 libdyld.dylib 0x00007fff73a603d5 start + 1
In conclusion, it seems to me that BetterSnapTool is using some kind of heuristic to guess if there is a title bar at the top of the window. I need to find a way to prevent it from doing the accessibility resize in this case. It's not an issue in other themes of iTerm2, such as those that have regular NSWindow titlebars.
Videos of the issue can be seen at the link posted above.