[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scratch/ns/refactor 8d0fb51 04/12: Fix macOS live resize drawing
From: |
Alan Third |
Subject: |
scratch/ns/refactor 8d0fb51 04/12: Fix macOS live resize drawing |
Date: |
Sat, 24 Jul 2021 11:40:03 -0400 (EDT) |
branch: scratch/ns/refactor
commit 8d0fb516f58fd5ddff5cbc03d00c5ec55be390c7
Author: Alan Third <alan@idiocy.org>
Commit: Alan Third <alan@idiocy.org>
Fix macOS live resize drawing
* src/nsterm.m ([EmacsView layout]):
([EmacsView layoutSublayersOfLayer:]): Rename layout to
layoutSublayersOfLayer.
---
src/nsterm.m | 41 +++++++++++++++++++++++++----------------
1 file changed, 25 insertions(+), 16 deletions(-)
diff --git a/src/nsterm.m b/src/nsterm.m
index 2e351cd..cc1ddd5 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -8060,24 +8060,33 @@ not_in_argv (NSString *arg)
redisplay before drawing.
This used to be done in viewWillDraw, but with the custom layer
- that method is not called. */
-- (void)layout
-{
- [super layout];
-
- /* If there is IO going on when redisplay is run here Emacs
- crashes. I think it's because this code will always be run
- within the run loop and for whatever reason processing input
- is dangerous. This technique was stolen wholesale from
- nsmenu.m and seems to work. */
- bool owfi = waiting_for_input;
- waiting_for_input = 0;
- block_input ();
+ that method is not called. We cannot call redisplay directly from
+ [NSView layout], because it may trigger another round of layout by
+ changing the frame size and recursive layout calls are banned. It
+ appears to be safe to call redisplay here. */
+- (void)layoutSublayersOfLayer:(CALayer *)layer
+{
+ if (!redisplaying_p && FRAME_GARBAGED_P (emacsframe))
+ {
+ /* If there is IO going on when redisplay is run here Emacs
+ crashes. I think it's because this code will always be run
+ within the run loop and for whatever reason processing input
+ is dangerous. This technique was stolen wholesale from
+ nsmenu.m and seems to work.
- redisplay ();
+ FIXME: I can't provoke a crash using layoutSublayersOfLayer,
+ however I can't understand why it would be different from
+ viewWillDraw. I'll leave this commented out for now, but if
+ nobody reports a crash it can be removed. */
+ // bool owfi = waiting_for_input;
+ // waiting_for_input = 0;
+ // block_input ();
- unblock_input ();
- waiting_for_input = owfi;
+ redisplay ();
+
+ // unblock_input ();
+ // waiting_for_input = owfi;
+ }
}
#endif
- branch scratch/ns/refactor created (now 0132e0a), Alan Third, 2021/07/24
- scratch/ns/refactor db055f9 01/12: Simplify macOS drawing code, Alan Third, 2021/07/24
- scratch/ns/refactor 361d043 11/12: Convert fringe bitmaps to vectors on NS port, Alan Third, 2021/07/24
- scratch/ns/refactor 7b255dc 07/12: Fix some macOS problems, Alan Third, 2021/07/24
- scratch/ns/refactor dee3be7 08/12: * src/nsterm.m (ns_set_frame_alpha): Enable alpha on GNUstep., Alan Third, 2021/07/24
- scratch/ns/refactor d9fd86c2 02/12: Tidy up NS port OS window handling, Alan Third, 2021/07/24
- scratch/ns/refactor 94b4470 06/12: Move parent frame setting code into EmacsWindow, Alan Third, 2021/07/24
- scratch/ns/refactor 8d0fb51 04/12: Fix macOS live resize drawing,
Alan Third <=
- scratch/ns/refactor df9a612 03/12: Change NS port resize detection, Alan Third, 2021/07/24
- scratch/ns/refactor 0132e0a 12/12: Fix image crash on macOS (bug#49688), Alan Third, 2021/07/24
- scratch/ns/refactor 93b18cc 09/12: Simplify NS sizing and positioning code, Alan Third, 2021/07/24
- scratch/ns/refactor 6f4f66d 05/12: Move NS port toolbar handling to the window, Alan Third, 2021/07/24
- scratch/ns/refactor 8d34954 10/12: Fix NS inset rectangle corners, Alan Third, 2021/07/24